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

package iot

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/restjson"
)

const opAcceptCertificateTransfer = "AcceptCertificateTransfer"

// AcceptCertificateTransferRequest generates a "aws/request.Request" representing the
// client's request for the AcceptCertificateTransfer 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 AcceptCertificateTransfer for more information on using the AcceptCertificateTransfer
// 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 AcceptCertificateTransferRequest method.
//	req, resp := client.AcceptCertificateTransferRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) AcceptCertificateTransferRequest(input *AcceptCertificateTransferInput) (req *request.Request, output *AcceptCertificateTransferOutput) {
	op := &request.Operation{
		Name:       opAcceptCertificateTransfer,
		HTTPMethod: "PATCH",
		HTTPPath:   "/accept-certificate-transfer/{certificateId}",
	}

	if input == nil {
		input = &AcceptCertificateTransferInput{}
	}

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

// AcceptCertificateTransfer API operation for AWS IoT.
//
// Accepts a pending certificate transfer. The default state of the certificate
// is INACTIVE.
//
// To check for pending certificate transfers, call ListCertificates to enumerate
// your certificates.
//
// Requires permission to access the AcceptCertificateTransfer (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation AcceptCertificateTransfer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - TransferAlreadyCompletedException
//     You can't revert the certificate transfer because the transfer is already
//     complete.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) AcceptCertificateTransfer(input *AcceptCertificateTransferInput) (*AcceptCertificateTransferOutput, error) {
	req, out := c.AcceptCertificateTransferRequest(input)
	return out, req.Send()
}

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

const opAddThingToBillingGroup = "AddThingToBillingGroup"

// AddThingToBillingGroupRequest generates a "aws/request.Request" representing the
// client's request for the AddThingToBillingGroup 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 AddThingToBillingGroup for more information on using the AddThingToBillingGroup
// 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 AddThingToBillingGroupRequest method.
//	req, resp := client.AddThingToBillingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) AddThingToBillingGroupRequest(input *AddThingToBillingGroupInput) (req *request.Request, output *AddThingToBillingGroupOutput) {
	op := &request.Operation{
		Name:       opAddThingToBillingGroup,
		HTTPMethod: "PUT",
		HTTPPath:   "/billing-groups/addThingToBillingGroup",
	}

	if input == nil {
		input = &AddThingToBillingGroupInput{}
	}

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

// AddThingToBillingGroup API operation for AWS IoT.
//
// Adds a thing to a billing group.
//
// Requires permission to access the AddThingToBillingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation AddThingToBillingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) AddThingToBillingGroup(input *AddThingToBillingGroupInput) (*AddThingToBillingGroupOutput, error) {
	req, out := c.AddThingToBillingGroupRequest(input)
	return out, req.Send()
}

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

const opAddThingToThingGroup = "AddThingToThingGroup"

// AddThingToThingGroupRequest generates a "aws/request.Request" representing the
// client's request for the AddThingToThingGroup 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 AddThingToThingGroup for more information on using the AddThingToThingGroup
// 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 AddThingToThingGroupRequest method.
//	req, resp := client.AddThingToThingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) AddThingToThingGroupRequest(input *AddThingToThingGroupInput) (req *request.Request, output *AddThingToThingGroupOutput) {
	op := &request.Operation{
		Name:       opAddThingToThingGroup,
		HTTPMethod: "PUT",
		HTTPPath:   "/thing-groups/addThingToThingGroup",
	}

	if input == nil {
		input = &AddThingToThingGroupInput{}
	}

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

// AddThingToThingGroup API operation for AWS IoT.
//
// Adds a thing to a thing group.
//
// Requires permission to access the AddThingToThingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation AddThingToThingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) AddThingToThingGroup(input *AddThingToThingGroupInput) (*AddThingToThingGroupOutput, error) {
	req, out := c.AddThingToThingGroupRequest(input)
	return out, req.Send()
}

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

const opAssociateTargetsWithJob = "AssociateTargetsWithJob"

// AssociateTargetsWithJobRequest generates a "aws/request.Request" representing the
// client's request for the AssociateTargetsWithJob 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 AssociateTargetsWithJob for more information on using the AssociateTargetsWithJob
// 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 AssociateTargetsWithJobRequest method.
//	req, resp := client.AssociateTargetsWithJobRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) AssociateTargetsWithJobRequest(input *AssociateTargetsWithJobInput) (req *request.Request, output *AssociateTargetsWithJobOutput) {
	op := &request.Operation{
		Name:       opAssociateTargetsWithJob,
		HTTPMethod: "POST",
		HTTPPath:   "/jobs/{jobId}/targets",
	}

	if input == nil {
		input = &AssociateTargetsWithJobInput{}
	}

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

// AssociateTargetsWithJob API operation for AWS IoT.
//
// Associates a group with a continuous job. The following criteria must be
// met:
//
//   - The job must have been created with the targetSelection field set to
//     "CONTINUOUS".
//
//   - The job status must currently be "IN_PROGRESS".
//
//   - The total number of targets associated with a job must not exceed 100.
//
// Requires permission to access the AssociateTargetsWithJob (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation AssociateTargetsWithJob for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) AssociateTargetsWithJob(input *AssociateTargetsWithJobInput) (*AssociateTargetsWithJobOutput, error) {
	req, out := c.AssociateTargetsWithJobRequest(input)
	return out, req.Send()
}

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

const opAttachPolicy = "AttachPolicy"

// AttachPolicyRequest generates a "aws/request.Request" representing the
// client's request for the AttachPolicy 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 AttachPolicy for more information on using the AttachPolicy
// 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 AttachPolicyRequest method.
//	req, resp := client.AttachPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) AttachPolicyRequest(input *AttachPolicyInput) (req *request.Request, output *AttachPolicyOutput) {
	op := &request.Operation{
		Name:       opAttachPolicy,
		HTTPMethod: "PUT",
		HTTPPath:   "/target-policies/{policyName}",
	}

	if input == nil {
		input = &AttachPolicyInput{}
	}

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

// AttachPolicy API operation for AWS IoT.
//
// Attaches the specified policy to the specified principal (certificate or
// other credential).
//
// Requires permission to access the AttachPolicy (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation AttachPolicy for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - LimitExceededException
//     A limit has been exceeded.
func (c *IoT) AttachPolicy(input *AttachPolicyInput) (*AttachPolicyOutput, error) {
	req, out := c.AttachPolicyRequest(input)
	return out, req.Send()
}

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

const opAttachPrincipalPolicy = "AttachPrincipalPolicy"

// AttachPrincipalPolicyRequest generates a "aws/request.Request" representing the
// client's request for the AttachPrincipalPolicy 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 AttachPrincipalPolicy for more information on using the AttachPrincipalPolicy
// 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 AttachPrincipalPolicyRequest method.
//	req, resp := client.AttachPrincipalPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// Deprecated: AttachPrincipalPolicy has been deprecated
func (c *IoT) AttachPrincipalPolicyRequest(input *AttachPrincipalPolicyInput) (req *request.Request, output *AttachPrincipalPolicyOutput) {
	if c.Client.Config.Logger != nil {
		c.Client.Config.Logger.Log("This operation, AttachPrincipalPolicy, has been deprecated")
	}
	op := &request.Operation{
		Name:       opAttachPrincipalPolicy,
		HTTPMethod: "PUT",
		HTTPPath:   "/principal-policies/{policyName}",
	}

	if input == nil {
		input = &AttachPrincipalPolicyInput{}
	}

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

// AttachPrincipalPolicy API operation for AWS IoT.
//
// Attaches the specified policy to the specified principal (certificate or
// other credential).
//
// Note: This action is deprecated and works as expected for backward compatibility,
// but we won't add enhancements. Use AttachPolicy instead.
//
// Requires permission to access the AttachPrincipalPolicy (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation AttachPrincipalPolicy for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
// Deprecated: AttachPrincipalPolicy has been deprecated
func (c *IoT) AttachPrincipalPolicy(input *AttachPrincipalPolicyInput) (*AttachPrincipalPolicyOutput, error) {
	req, out := c.AttachPrincipalPolicyRequest(input)
	return out, req.Send()
}

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

const opAttachSecurityProfile = "AttachSecurityProfile"

// AttachSecurityProfileRequest generates a "aws/request.Request" representing the
// client's request for the AttachSecurityProfile 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 AttachSecurityProfile for more information on using the AttachSecurityProfile
// 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 AttachSecurityProfileRequest method.
//	req, resp := client.AttachSecurityProfileRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) AttachSecurityProfileRequest(input *AttachSecurityProfileInput) (req *request.Request, output *AttachSecurityProfileOutput) {
	op := &request.Operation{
		Name:       opAttachSecurityProfile,
		HTTPMethod: "PUT",
		HTTPPath:   "/security-profiles/{securityProfileName}/targets",
	}

	if input == nil {
		input = &AttachSecurityProfileInput{}
	}

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

// AttachSecurityProfile API operation for AWS IoT.
//
// Associates a Device Defender security profile with a thing group or this
// account. Each thing group or account can have up to five security profiles
// associated with it.
//
// Requires permission to access the AttachSecurityProfile (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation AttachSecurityProfile for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) AttachSecurityProfile(input *AttachSecurityProfileInput) (*AttachSecurityProfileOutput, error) {
	req, out := c.AttachSecurityProfileRequest(input)
	return out, req.Send()
}

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

const opAttachThingPrincipal = "AttachThingPrincipal"

// AttachThingPrincipalRequest generates a "aws/request.Request" representing the
// client's request for the AttachThingPrincipal 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 AttachThingPrincipal for more information on using the AttachThingPrincipal
// 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 AttachThingPrincipalRequest method.
//	req, resp := client.AttachThingPrincipalRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) AttachThingPrincipalRequest(input *AttachThingPrincipalInput) (req *request.Request, output *AttachThingPrincipalOutput) {
	op := &request.Operation{
		Name:       opAttachThingPrincipal,
		HTTPMethod: "PUT",
		HTTPPath:   "/things/{thingName}/principals",
	}

	if input == nil {
		input = &AttachThingPrincipalInput{}
	}

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

// AttachThingPrincipal API operation for AWS IoT.
//
// Attaches the specified principal to the specified thing. A principal can
// be X.509 certificates, Amazon Cognito identities or federated identities.
//
// Requires permission to access the AttachThingPrincipal (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation AttachThingPrincipal for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) AttachThingPrincipal(input *AttachThingPrincipalInput) (*AttachThingPrincipalOutput, error) {
	req, out := c.AttachThingPrincipalRequest(input)
	return out, req.Send()
}

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

const opCancelAuditMitigationActionsTask = "CancelAuditMitigationActionsTask"

// CancelAuditMitigationActionsTaskRequest generates a "aws/request.Request" representing the
// client's request for the CancelAuditMitigationActionsTask 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 CancelAuditMitigationActionsTask for more information on using the CancelAuditMitigationActionsTask
// 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 CancelAuditMitigationActionsTaskRequest method.
//	req, resp := client.CancelAuditMitigationActionsTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CancelAuditMitigationActionsTaskRequest(input *CancelAuditMitigationActionsTaskInput) (req *request.Request, output *CancelAuditMitigationActionsTaskOutput) {
	op := &request.Operation{
		Name:       opCancelAuditMitigationActionsTask,
		HTTPMethod: "PUT",
		HTTPPath:   "/audit/mitigationactions/tasks/{taskId}/cancel",
	}

	if input == nil {
		input = &CancelAuditMitigationActionsTaskInput{}
	}

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

// CancelAuditMitigationActionsTask API operation for AWS IoT.
//
// Cancels a mitigation action task that is in progress. If the task is not
// in progress, an InvalidRequestException occurs.
//
// Requires permission to access the CancelAuditMitigationActionsTask (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CancelAuditMitigationActionsTask for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CancelAuditMitigationActionsTask(input *CancelAuditMitigationActionsTaskInput) (*CancelAuditMitigationActionsTaskOutput, error) {
	req, out := c.CancelAuditMitigationActionsTaskRequest(input)
	return out, req.Send()
}

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

const opCancelAuditTask = "CancelAuditTask"

// CancelAuditTaskRequest generates a "aws/request.Request" representing the
// client's request for the CancelAuditTask 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 CancelAuditTask for more information on using the CancelAuditTask
// 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 CancelAuditTaskRequest method.
//	req, resp := client.CancelAuditTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CancelAuditTaskRequest(input *CancelAuditTaskInput) (req *request.Request, output *CancelAuditTaskOutput) {
	op := &request.Operation{
		Name:       opCancelAuditTask,
		HTTPMethod: "PUT",
		HTTPPath:   "/audit/tasks/{taskId}/cancel",
	}

	if input == nil {
		input = &CancelAuditTaskInput{}
	}

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

// CancelAuditTask API operation for AWS IoT.
//
// Cancels an audit that is in progress. The audit can be either scheduled or
// on demand. If the audit isn't in progress, an "InvalidRequestException" occurs.
//
// Requires permission to access the CancelAuditTask (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CancelAuditTask for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CancelAuditTask(input *CancelAuditTaskInput) (*CancelAuditTaskOutput, error) {
	req, out := c.CancelAuditTaskRequest(input)
	return out, req.Send()
}

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

const opCancelCertificateTransfer = "CancelCertificateTransfer"

// CancelCertificateTransferRequest generates a "aws/request.Request" representing the
// client's request for the CancelCertificateTransfer 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 CancelCertificateTransfer for more information on using the CancelCertificateTransfer
// 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 CancelCertificateTransferRequest method.
//	req, resp := client.CancelCertificateTransferRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CancelCertificateTransferRequest(input *CancelCertificateTransferInput) (req *request.Request, output *CancelCertificateTransferOutput) {
	op := &request.Operation{
		Name:       opCancelCertificateTransfer,
		HTTPMethod: "PATCH",
		HTTPPath:   "/cancel-certificate-transfer/{certificateId}",
	}

	if input == nil {
		input = &CancelCertificateTransferInput{}
	}

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

// CancelCertificateTransfer API operation for AWS IoT.
//
// Cancels a pending transfer for the specified certificate.
//
// Note Only the transfer source account can use this operation to cancel a
// transfer. (Transfer destinations can use RejectCertificateTransfer instead.)
// After transfer, IoT returns the certificate to the source account in the
// INACTIVE state. After the destination account has accepted the transfer,
// the transfer cannot be cancelled.
//
// After a certificate transfer is cancelled, the status of the certificate
// changes from PENDING_TRANSFER to INACTIVE.
//
// Requires permission to access the CancelCertificateTransfer (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CancelCertificateTransfer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - TransferAlreadyCompletedException
//     You can't revert the certificate transfer because the transfer is already
//     complete.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CancelCertificateTransfer(input *CancelCertificateTransferInput) (*CancelCertificateTransferOutput, error) {
	req, out := c.CancelCertificateTransferRequest(input)
	return out, req.Send()
}

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

const opCancelDetectMitigationActionsTask = "CancelDetectMitigationActionsTask"

// CancelDetectMitigationActionsTaskRequest generates a "aws/request.Request" representing the
// client's request for the CancelDetectMitigationActionsTask 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 CancelDetectMitigationActionsTask for more information on using the CancelDetectMitigationActionsTask
// 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 CancelDetectMitigationActionsTaskRequest method.
//	req, resp := client.CancelDetectMitigationActionsTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CancelDetectMitigationActionsTaskRequest(input *CancelDetectMitigationActionsTaskInput) (req *request.Request, output *CancelDetectMitigationActionsTaskOutput) {
	op := &request.Operation{
		Name:       opCancelDetectMitigationActionsTask,
		HTTPMethod: "PUT",
		HTTPPath:   "/detect/mitigationactions/tasks/{taskId}/cancel",
	}

	if input == nil {
		input = &CancelDetectMitigationActionsTaskInput{}
	}

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

// CancelDetectMitigationActionsTask API operation for AWS IoT.
//
// Cancels a Device Defender ML Detect mitigation action.
//
// Requires permission to access the CancelDetectMitigationActionsTask (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CancelDetectMitigationActionsTask for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CancelDetectMitigationActionsTask(input *CancelDetectMitigationActionsTaskInput) (*CancelDetectMitigationActionsTaskOutput, error) {
	req, out := c.CancelDetectMitigationActionsTaskRequest(input)
	return out, req.Send()
}

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

const opCancelJob = "CancelJob"

// CancelJobRequest generates a "aws/request.Request" representing the
// client's request for the CancelJob 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 CancelJob for more information on using the CancelJob
// 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 CancelJobRequest method.
//	req, resp := client.CancelJobRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CancelJobRequest(input *CancelJobInput) (req *request.Request, output *CancelJobOutput) {
	op := &request.Operation{
		Name:       opCancelJob,
		HTTPMethod: "PUT",
		HTTPPath:   "/jobs/{jobId}/cancel",
	}

	if input == nil {
		input = &CancelJobInput{}
	}

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

// CancelJob API operation for AWS IoT.
//
// Cancels a job.
//
// Requires permission to access the CancelJob (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CancelJob for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - LimitExceededException
//     A limit has been exceeded.
func (c *IoT) CancelJob(input *CancelJobInput) (*CancelJobOutput, error) {
	req, out := c.CancelJobRequest(input)
	return out, req.Send()
}

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

const opCancelJobExecution = "CancelJobExecution"

// CancelJobExecutionRequest generates a "aws/request.Request" representing the
// client's request for the CancelJobExecution 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 CancelJobExecution for more information on using the CancelJobExecution
// 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 CancelJobExecutionRequest method.
//	req, resp := client.CancelJobExecutionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CancelJobExecutionRequest(input *CancelJobExecutionInput) (req *request.Request, output *CancelJobExecutionOutput) {
	op := &request.Operation{
		Name:       opCancelJobExecution,
		HTTPMethod: "PUT",
		HTTPPath:   "/things/{thingName}/jobs/{jobId}/cancel",
	}

	if input == nil {
		input = &CancelJobExecutionInput{}
	}

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

// CancelJobExecution API operation for AWS IoT.
//
// Cancels the execution of a job for a given thing.
//
// Requires permission to access the CancelJobExecution (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CancelJobExecution for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - InvalidStateTransitionException
//     An attempt was made to change to an invalid state, for example by deleting
//     a job or a job execution which is "IN_PROGRESS" without setting the force
//     parameter.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
func (c *IoT) CancelJobExecution(input *CancelJobExecutionInput) (*CancelJobExecutionOutput, error) {
	req, out := c.CancelJobExecutionRequest(input)
	return out, req.Send()
}

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

const opClearDefaultAuthorizer = "ClearDefaultAuthorizer"

// ClearDefaultAuthorizerRequest generates a "aws/request.Request" representing the
// client's request for the ClearDefaultAuthorizer 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 ClearDefaultAuthorizer for more information on using the ClearDefaultAuthorizer
// 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 ClearDefaultAuthorizerRequest method.
//	req, resp := client.ClearDefaultAuthorizerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ClearDefaultAuthorizerRequest(input *ClearDefaultAuthorizerInput) (req *request.Request, output *ClearDefaultAuthorizerOutput) {
	op := &request.Operation{
		Name:       opClearDefaultAuthorizer,
		HTTPMethod: "DELETE",
		HTTPPath:   "/default-authorizer",
	}

	if input == nil {
		input = &ClearDefaultAuthorizerInput{}
	}

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

// ClearDefaultAuthorizer API operation for AWS IoT.
//
// Clears the default authorizer.
//
// Requires permission to access the ClearDefaultAuthorizer (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ClearDefaultAuthorizer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ClearDefaultAuthorizer(input *ClearDefaultAuthorizerInput) (*ClearDefaultAuthorizerOutput, error) {
	req, out := c.ClearDefaultAuthorizerRequest(input)
	return out, req.Send()
}

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

const opConfirmTopicRuleDestination = "ConfirmTopicRuleDestination"

// ConfirmTopicRuleDestinationRequest generates a "aws/request.Request" representing the
// client's request for the ConfirmTopicRuleDestination 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 ConfirmTopicRuleDestination for more information on using the ConfirmTopicRuleDestination
// 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 ConfirmTopicRuleDestinationRequest method.
//	req, resp := client.ConfirmTopicRuleDestinationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ConfirmTopicRuleDestinationRequest(input *ConfirmTopicRuleDestinationInput) (req *request.Request, output *ConfirmTopicRuleDestinationOutput) {
	op := &request.Operation{
		Name:       opConfirmTopicRuleDestination,
		HTTPMethod: "GET",
		HTTPPath:   "/confirmdestination/{confirmationToken+}",
	}

	if input == nil {
		input = &ConfirmTopicRuleDestinationInput{}
	}

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

// ConfirmTopicRuleDestination API operation for AWS IoT.
//
// Confirms a topic rule destination. When you create a rule requiring a destination,
// IoT sends a confirmation message to the endpoint or base address you specify.
// The message includes a token which you pass back when calling ConfirmTopicRuleDestination
// to confirm that you own or have access to the endpoint.
//
// Requires permission to access the ConfirmTopicRuleDestination (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ConfirmTopicRuleDestination for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
func (c *IoT) ConfirmTopicRuleDestination(input *ConfirmTopicRuleDestinationInput) (*ConfirmTopicRuleDestinationOutput, error) {
	req, out := c.ConfirmTopicRuleDestinationRequest(input)
	return out, req.Send()
}

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

const opCreateAuditSuppression = "CreateAuditSuppression"

// CreateAuditSuppressionRequest generates a "aws/request.Request" representing the
// client's request for the CreateAuditSuppression 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 CreateAuditSuppression for more information on using the CreateAuditSuppression
// 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 CreateAuditSuppressionRequest method.
//	req, resp := client.CreateAuditSuppressionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateAuditSuppressionRequest(input *CreateAuditSuppressionInput) (req *request.Request, output *CreateAuditSuppressionOutput) {
	op := &request.Operation{
		Name:       opCreateAuditSuppression,
		HTTPMethod: "POST",
		HTTPPath:   "/audit/suppressions/create",
	}

	if input == nil {
		input = &CreateAuditSuppressionInput{}
	}

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

// CreateAuditSuppression API operation for AWS IoT.
//
// Creates a Device Defender audit suppression.
//
// Requires permission to access the CreateAuditSuppression (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateAuditSuppression for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - LimitExceededException
//     A limit has been exceeded.
func (c *IoT) CreateAuditSuppression(input *CreateAuditSuppressionInput) (*CreateAuditSuppressionOutput, error) {
	req, out := c.CreateAuditSuppressionRequest(input)
	return out, req.Send()
}

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

const opCreateAuthorizer = "CreateAuthorizer"

// CreateAuthorizerRequest generates a "aws/request.Request" representing the
// client's request for the CreateAuthorizer 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 CreateAuthorizer for more information on using the CreateAuthorizer
// 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 CreateAuthorizerRequest method.
//	req, resp := client.CreateAuthorizerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateAuthorizerRequest(input *CreateAuthorizerInput) (req *request.Request, output *CreateAuthorizerOutput) {
	op := &request.Operation{
		Name:       opCreateAuthorizer,
		HTTPMethod: "POST",
		HTTPPath:   "/authorizer/{authorizerName}",
	}

	if input == nil {
		input = &CreateAuthorizerInput{}
	}

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

// CreateAuthorizer API operation for AWS IoT.
//
// Creates an authorizer.
//
// Requires permission to access the CreateAuthorizer (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateAuthorizer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreateAuthorizer(input *CreateAuthorizerInput) (*CreateAuthorizerOutput, error) {
	req, out := c.CreateAuthorizerRequest(input)
	return out, req.Send()
}

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

const opCreateBillingGroup = "CreateBillingGroup"

// CreateBillingGroupRequest generates a "aws/request.Request" representing the
// client's request for the CreateBillingGroup 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 CreateBillingGroup for more information on using the CreateBillingGroup
// 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 CreateBillingGroupRequest method.
//	req, resp := client.CreateBillingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateBillingGroupRequest(input *CreateBillingGroupInput) (req *request.Request, output *CreateBillingGroupOutput) {
	op := &request.Operation{
		Name:       opCreateBillingGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/billing-groups/{billingGroupName}",
	}

	if input == nil {
		input = &CreateBillingGroupInput{}
	}

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

// CreateBillingGroup API operation for AWS IoT.
//
// Creates a billing group.
//
// Requires permission to access the CreateBillingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateBillingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreateBillingGroup(input *CreateBillingGroupInput) (*CreateBillingGroupOutput, error) {
	req, out := c.CreateBillingGroupRequest(input)
	return out, req.Send()
}

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

const opCreateCertificateFromCsr = "CreateCertificateFromCsr"

// CreateCertificateFromCsrRequest generates a "aws/request.Request" representing the
// client's request for the CreateCertificateFromCsr 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 CreateCertificateFromCsr for more information on using the CreateCertificateFromCsr
// 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 CreateCertificateFromCsrRequest method.
//	req, resp := client.CreateCertificateFromCsrRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateCertificateFromCsrRequest(input *CreateCertificateFromCsrInput) (req *request.Request, output *CreateCertificateFromCsrOutput) {
	op := &request.Operation{
		Name:       opCreateCertificateFromCsr,
		HTTPMethod: "POST",
		HTTPPath:   "/certificates",
	}

	if input == nil {
		input = &CreateCertificateFromCsrInput{}
	}

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

// CreateCertificateFromCsr API operation for AWS IoT.
//
// Creates an X.509 certificate using the specified certificate signing request.
//
// Requires permission to access the CreateCertificateFromCsr (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// The CSR must include a public key that is either an RSA key with a length
// of at least 2048 bits or an ECC key from NIST P-256, NIST P-384, or NIST
// P-521 curves. For supported certificates, consult Certificate signing algorithms
// supported by IoT (https://docs.aws.amazon.com/iot/latest/developerguide/x509-client-certs.html#x509-cert-algorithms).
//
// Reusing the same certificate signing request (CSR) results in a distinct
// certificate.
//
// You can create multiple certificates in a batch by creating a directory,
// copying multiple .csr files into that directory, and then specifying that
// directory on the command line. The following commands show how to create
// a batch of certificates given a batch of CSRs. In the following commands,
// we assume that a set of CSRs are located inside of the directory my-csr-directory:
//
// On Linux and OS X, the command is:
//
// $ ls my-csr-directory/ | xargs -I {} aws iot create-certificate-from-csr
// --certificate-signing-request file://my-csr-directory/{}
//
// This command lists all of the CSRs in my-csr-directory and pipes each CSR
// file name to the aws iot create-certificate-from-csr Amazon Web Services
// CLI command to create a certificate for the corresponding CSR.
//
// You can also run the aws iot create-certificate-from-csr part of the command
// in parallel to speed up the certificate creation process:
//
// $ ls my-csr-directory/ | xargs -P 10 -I {} aws iot create-certificate-from-csr
// --certificate-signing-request file://my-csr-directory/{}
//
// On Windows PowerShell, the command to create certificates for all CSRs in
// my-csr-directory is:
//
// > ls -Name my-csr-directory | %{aws iot create-certificate-from-csr --certificate-signing-request
// file://my-csr-directory/$_}
//
// On a Windows command prompt, the command to create certificates for all CSRs
// in my-csr-directory is:
//
// > forfiles /p my-csr-directory /c "cmd /c aws iot create-certificate-from-csr
// --certificate-signing-request file://@path"
//
// 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 IoT's
// API operation CreateCertificateFromCsr for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreateCertificateFromCsr(input *CreateCertificateFromCsrInput) (*CreateCertificateFromCsrOutput, error) {
	req, out := c.CreateCertificateFromCsrRequest(input)
	return out, req.Send()
}

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

const opCreateCertificateProvider = "CreateCertificateProvider"

// CreateCertificateProviderRequest generates a "aws/request.Request" representing the
// client's request for the CreateCertificateProvider 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 CreateCertificateProvider for more information on using the CreateCertificateProvider
// 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 CreateCertificateProviderRequest method.
//	req, resp := client.CreateCertificateProviderRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateCertificateProviderRequest(input *CreateCertificateProviderInput) (req *request.Request, output *CreateCertificateProviderOutput) {
	op := &request.Operation{
		Name:       opCreateCertificateProvider,
		HTTPMethod: "POST",
		HTTPPath:   "/certificate-providers/{certificateProviderName}",
	}

	if input == nil {
		input = &CreateCertificateProviderInput{}
	}

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

// CreateCertificateProvider API operation for AWS IoT.
//
// Creates an Amazon Web Services IoT Core certificate provider. You can use
// Amazon Web Services IoT Core certificate provider to customize how to sign
// a certificate signing request (CSR) in IoT fleet provisioning. For more information,
// see Customizing certificate signing using Amazon Web Services IoT Core certificate
// provider (https://docs.aws.amazon.com/iot/latest/developerguide/provisioning-cert-provider.html)
// from Amazon Web Services IoT Core Developer Guide.
//
// Requires permission to access the CreateCertificateProvider (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// After you create a certificate provider, the behavior of CreateCertificateFromCsr
// API for fleet provisioning (https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr)
// will change and all API calls to CreateCertificateFromCsr will invoke the
// certificate provider to create the certificates. It can take up to a few
// minutes for this behavior to change after a certificate provider is created.
//
// 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 IoT's
// API operation CreateCertificateProvider for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreateCertificateProvider(input *CreateCertificateProviderInput) (*CreateCertificateProviderOutput, error) {
	req, out := c.CreateCertificateProviderRequest(input)
	return out, req.Send()
}

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

const opCreateCustomMetric = "CreateCustomMetric"

// CreateCustomMetricRequest generates a "aws/request.Request" representing the
// client's request for the CreateCustomMetric 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 CreateCustomMetric for more information on using the CreateCustomMetric
// 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 CreateCustomMetricRequest method.
//	req, resp := client.CreateCustomMetricRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateCustomMetricRequest(input *CreateCustomMetricInput) (req *request.Request, output *CreateCustomMetricOutput) {
	op := &request.Operation{
		Name:       opCreateCustomMetric,
		HTTPMethod: "POST",
		HTTPPath:   "/custom-metric/{metricName}",
	}

	if input == nil {
		input = &CreateCustomMetricInput{}
	}

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

// CreateCustomMetric API operation for AWS IoT.
//
// Use this API to define a Custom Metric published by your devices to Device
// Defender.
//
// Requires permission to access the CreateCustomMetric (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateCustomMetric for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreateCustomMetric(input *CreateCustomMetricInput) (*CreateCustomMetricOutput, error) {
	req, out := c.CreateCustomMetricRequest(input)
	return out, req.Send()
}

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

const opCreateDimension = "CreateDimension"

// CreateDimensionRequest generates a "aws/request.Request" representing the
// client's request for the CreateDimension 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 CreateDimension for more information on using the CreateDimension
// 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 CreateDimensionRequest method.
//	req, resp := client.CreateDimensionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateDimensionRequest(input *CreateDimensionInput) (req *request.Request, output *CreateDimensionOutput) {
	op := &request.Operation{
		Name:       opCreateDimension,
		HTTPMethod: "POST",
		HTTPPath:   "/dimensions/{name}",
	}

	if input == nil {
		input = &CreateDimensionInput{}
	}

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

// CreateDimension API operation for AWS IoT.
//
// Create a dimension that you can use to limit the scope of a metric used in
// a security profile for IoT Device Defender. For example, using a TOPIC_FILTER
// dimension, you can narrow down the scope of the metric only to MQTT topics
// whose name match the pattern specified in the dimension.
//
// Requires permission to access the CreateDimension (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateDimension for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) CreateDimension(input *CreateDimensionInput) (*CreateDimensionOutput, error) {
	req, out := c.CreateDimensionRequest(input)
	return out, req.Send()
}

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

const opCreateDomainConfiguration = "CreateDomainConfiguration"

// CreateDomainConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the CreateDomainConfiguration 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 CreateDomainConfiguration for more information on using the CreateDomainConfiguration
// 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 CreateDomainConfigurationRequest method.
//	req, resp := client.CreateDomainConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateDomainConfigurationRequest(input *CreateDomainConfigurationInput) (req *request.Request, output *CreateDomainConfigurationOutput) {
	op := &request.Operation{
		Name:       opCreateDomainConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/domainConfigurations/{domainConfigurationName}",
	}

	if input == nil {
		input = &CreateDomainConfigurationInput{}
	}

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

// CreateDomainConfiguration API operation for AWS IoT.
//
// Creates a domain configuration.
//
// Requires permission to access the CreateDomainConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateDomainConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - CertificateValidationException
//     The certificate is invalid.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) CreateDomainConfiguration(input *CreateDomainConfigurationInput) (*CreateDomainConfigurationOutput, error) {
	req, out := c.CreateDomainConfigurationRequest(input)
	return out, req.Send()
}

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

const opCreateDynamicThingGroup = "CreateDynamicThingGroup"

// CreateDynamicThingGroupRequest generates a "aws/request.Request" representing the
// client's request for the CreateDynamicThingGroup 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 CreateDynamicThingGroup for more information on using the CreateDynamicThingGroup
// 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 CreateDynamicThingGroupRequest method.
//	req, resp := client.CreateDynamicThingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateDynamicThingGroupRequest(input *CreateDynamicThingGroupInput) (req *request.Request, output *CreateDynamicThingGroupOutput) {
	op := &request.Operation{
		Name:       opCreateDynamicThingGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/dynamic-thing-groups/{thingGroupName}",
	}

	if input == nil {
		input = &CreateDynamicThingGroupInput{}
	}

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

// CreateDynamicThingGroup API operation for AWS IoT.
//
// Creates a dynamic thing group.
//
// Requires permission to access the CreateDynamicThingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateDynamicThingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidQueryException
//     The query is invalid.
//
//   - LimitExceededException
//     A limit has been exceeded.
func (c *IoT) CreateDynamicThingGroup(input *CreateDynamicThingGroupInput) (*CreateDynamicThingGroupOutput, error) {
	req, out := c.CreateDynamicThingGroupRequest(input)
	return out, req.Send()
}

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

const opCreateFleetMetric = "CreateFleetMetric"

// CreateFleetMetricRequest generates a "aws/request.Request" representing the
// client's request for the CreateFleetMetric 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 CreateFleetMetric for more information on using the CreateFleetMetric
// 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 CreateFleetMetricRequest method.
//	req, resp := client.CreateFleetMetricRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateFleetMetricRequest(input *CreateFleetMetricInput) (req *request.Request, output *CreateFleetMetricOutput) {
	op := &request.Operation{
		Name:       opCreateFleetMetric,
		HTTPMethod: "PUT",
		HTTPPath:   "/fleet-metric/{metricName}",
	}

	if input == nil {
		input = &CreateFleetMetricInput{}
	}

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

// CreateFleetMetric API operation for AWS IoT.
//
// Creates a fleet metric.
//
// Requires permission to access the CreateFleetMetric (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateFleetMetric for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidQueryException
//     The query is invalid.
//
//   - InvalidAggregationException
//     The aggregation is invalid.
//
//   - IndexNotReadyException
//     The index is not ready.
func (c *IoT) CreateFleetMetric(input *CreateFleetMetricInput) (*CreateFleetMetricOutput, error) {
	req, out := c.CreateFleetMetricRequest(input)
	return out, req.Send()
}

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

const opCreateJob = "CreateJob"

// CreateJobRequest generates a "aws/request.Request" representing the
// client's request for the CreateJob 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 CreateJob for more information on using the CreateJob
// 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 CreateJobRequest method.
//	req, resp := client.CreateJobRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateJobRequest(input *CreateJobInput) (req *request.Request, output *CreateJobOutput) {
	op := &request.Operation{
		Name:       opCreateJob,
		HTTPMethod: "PUT",
		HTTPPath:   "/jobs/{jobId}",
	}

	if input == nil {
		input = &CreateJobInput{}
	}

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

// CreateJob API operation for AWS IoT.
//
// Creates a job.
//
// Requires permission to access the CreateJob (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateJob for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) CreateJob(input *CreateJobInput) (*CreateJobOutput, error) {
	req, out := c.CreateJobRequest(input)
	return out, req.Send()
}

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

const opCreateJobTemplate = "CreateJobTemplate"

// CreateJobTemplateRequest generates a "aws/request.Request" representing the
// client's request for the CreateJobTemplate 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 CreateJobTemplate for more information on using the CreateJobTemplate
// 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 CreateJobTemplateRequest method.
//	req, resp := client.CreateJobTemplateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateJobTemplateRequest(input *CreateJobTemplateInput) (req *request.Request, output *CreateJobTemplateOutput) {
	op := &request.Operation{
		Name:       opCreateJobTemplate,
		HTTPMethod: "PUT",
		HTTPPath:   "/job-templates/{jobTemplateId}",
	}

	if input == nil {
		input = &CreateJobTemplateInput{}
	}

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

// CreateJobTemplate API operation for AWS IoT.
//
// Creates a job template.
//
// Requires permission to access the CreateJobTemplate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateJobTemplate for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ConflictException
//     A resource with the same name already exists.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreateJobTemplate(input *CreateJobTemplateInput) (*CreateJobTemplateOutput, error) {
	req, out := c.CreateJobTemplateRequest(input)
	return out, req.Send()
}

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

const opCreateKeysAndCertificate = "CreateKeysAndCertificate"

// CreateKeysAndCertificateRequest generates a "aws/request.Request" representing the
// client's request for the CreateKeysAndCertificate 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 CreateKeysAndCertificate for more information on using the CreateKeysAndCertificate
// 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 CreateKeysAndCertificateRequest method.
//	req, resp := client.CreateKeysAndCertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateKeysAndCertificateRequest(input *CreateKeysAndCertificateInput) (req *request.Request, output *CreateKeysAndCertificateOutput) {
	op := &request.Operation{
		Name:       opCreateKeysAndCertificate,
		HTTPMethod: "POST",
		HTTPPath:   "/keys-and-certificate",
	}

	if input == nil {
		input = &CreateKeysAndCertificateInput{}
	}

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

// CreateKeysAndCertificate API operation for AWS IoT.
//
// Creates a 2048-bit RSA key pair and issues an X.509 certificate using the
// issued public key. You can also call CreateKeysAndCertificate over MQTT from
// a device, for more information, see Provisioning MQTT API (https://docs.aws.amazon.com/iot/latest/developerguide/provision-wo-cert.html#provision-mqtt-api).
//
// Note This is the only time IoT issues the private key for this certificate,
// so it is important to keep it in a secure location.
//
// Requires permission to access the CreateKeysAndCertificate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateKeysAndCertificate for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreateKeysAndCertificate(input *CreateKeysAndCertificateInput) (*CreateKeysAndCertificateOutput, error) {
	req, out := c.CreateKeysAndCertificateRequest(input)
	return out, req.Send()
}

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

const opCreateMitigationAction = "CreateMitigationAction"

// CreateMitigationActionRequest generates a "aws/request.Request" representing the
// client's request for the CreateMitigationAction 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 CreateMitigationAction for more information on using the CreateMitigationAction
// 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 CreateMitigationActionRequest method.
//	req, resp := client.CreateMitigationActionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateMitigationActionRequest(input *CreateMitigationActionInput) (req *request.Request, output *CreateMitigationActionOutput) {
	op := &request.Operation{
		Name:       opCreateMitigationAction,
		HTTPMethod: "POST",
		HTTPPath:   "/mitigationactions/actions/{actionName}",
	}

	if input == nil {
		input = &CreateMitigationActionInput{}
	}

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

// CreateMitigationAction API operation for AWS IoT.
//
// Defines an action that can be applied to audit findings by using StartAuditMitigationActionsTask.
// Only certain types of mitigation actions can be applied to specific check
// names. For more information, see Mitigation actions (https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-mitigation-actions.html).
// Each mitigation action can apply only one type of change.
//
// Requires permission to access the CreateMitigationAction (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateMitigationAction for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreateMitigationAction(input *CreateMitigationActionInput) (*CreateMitigationActionOutput, error) {
	req, out := c.CreateMitigationActionRequest(input)
	return out, req.Send()
}

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

const opCreateOTAUpdate = "CreateOTAUpdate"

// CreateOTAUpdateRequest generates a "aws/request.Request" representing the
// client's request for the CreateOTAUpdate 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 CreateOTAUpdate for more information on using the CreateOTAUpdate
// 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 CreateOTAUpdateRequest method.
//	req, resp := client.CreateOTAUpdateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateOTAUpdateRequest(input *CreateOTAUpdateInput) (req *request.Request, output *CreateOTAUpdateOutput) {
	op := &request.Operation{
		Name:       opCreateOTAUpdate,
		HTTPMethod: "POST",
		HTTPPath:   "/otaUpdates/{otaUpdateId}",
	}

	if input == nil {
		input = &CreateOTAUpdateInput{}
	}

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

// CreateOTAUpdate API operation for AWS IoT.
//
// Creates an IoT OTA update on a target group of things or groups.
//
// Requires permission to access the CreateOTAUpdate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateOTAUpdate for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) CreateOTAUpdate(input *CreateOTAUpdateInput) (*CreateOTAUpdateOutput, error) {
	req, out := c.CreateOTAUpdateRequest(input)
	return out, req.Send()
}

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

const opCreatePackage = "CreatePackage"

// CreatePackageRequest generates a "aws/request.Request" representing the
// client's request for the CreatePackage 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 CreatePackage for more information on using the CreatePackage
// 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 CreatePackageRequest method.
//	req, resp := client.CreatePackageRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreatePackageRequest(input *CreatePackageInput) (req *request.Request, output *CreatePackageOutput) {
	op := &request.Operation{
		Name:       opCreatePackage,
		HTTPMethod: "PUT",
		HTTPPath:   "/packages/{packageName}",
	}

	if input == nil {
		input = &CreatePackageInput{}
	}

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

// CreatePackage API operation for AWS IoT.
//
// Creates an IoT software package that can be deployed to your fleet.
//
// Requires permission to access the CreatePackage (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// and GetIndexingConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// actions.
//
// 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 IoT's
// API operation CreatePackage for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ConflictException
//     A resource with the same name already exists.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
//
//   - ValidationException
//     The request is not valid.
//
//   - ServiceQuotaExceededException
//     A limit has been exceeded.
func (c *IoT) CreatePackage(input *CreatePackageInput) (*CreatePackageOutput, error) {
	req, out := c.CreatePackageRequest(input)
	return out, req.Send()
}

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

const opCreatePackageVersion = "CreatePackageVersion"

// CreatePackageVersionRequest generates a "aws/request.Request" representing the
// client's request for the CreatePackageVersion 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 CreatePackageVersion for more information on using the CreatePackageVersion
// 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 CreatePackageVersionRequest method.
//	req, resp := client.CreatePackageVersionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreatePackageVersionRequest(input *CreatePackageVersionInput) (req *request.Request, output *CreatePackageVersionOutput) {
	op := &request.Operation{
		Name:       opCreatePackageVersion,
		HTTPMethod: "PUT",
		HTTPPath:   "/packages/{packageName}/versions/{versionName}",
	}

	if input == nil {
		input = &CreatePackageVersionInput{}
	}

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

// CreatePackageVersion API operation for AWS IoT.
//
// Creates a new version for an existing IoT software package.
//
// Requires permission to access the CreatePackageVersion (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// and GetIndexingConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// actions.
//
// 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 IoT's
// API operation CreatePackageVersion for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ConflictException
//     A resource with the same name already exists.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
//
//   - ValidationException
//     The request is not valid.
//
//   - ServiceQuotaExceededException
//     A limit has been exceeded.
func (c *IoT) CreatePackageVersion(input *CreatePackageVersionInput) (*CreatePackageVersionOutput, error) {
	req, out := c.CreatePackageVersionRequest(input)
	return out, req.Send()
}

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

const opCreatePolicy = "CreatePolicy"

// CreatePolicyRequest generates a "aws/request.Request" representing the
// client's request for the CreatePolicy 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 CreatePolicy for more information on using the CreatePolicy
// 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 CreatePolicyRequest method.
//	req, resp := client.CreatePolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreatePolicyRequest(input *CreatePolicyInput) (req *request.Request, output *CreatePolicyOutput) {
	op := &request.Operation{
		Name:       opCreatePolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/policies/{policyName}",
	}

	if input == nil {
		input = &CreatePolicyInput{}
	}

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

// CreatePolicy API operation for AWS IoT.
//
// Creates an IoT policy.
//
// The created policy is the default version for the policy. This operation
// creates a policy version with a version identifier of 1 and sets 1 as the
// policy's default version.
//
// Requires permission to access the CreatePolicy (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreatePolicy for usage and error information.
//
// Returned Error Types:
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - MalformedPolicyException
//     The policy documentation is not valid.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreatePolicy(input *CreatePolicyInput) (*CreatePolicyOutput, error) {
	req, out := c.CreatePolicyRequest(input)
	return out, req.Send()
}

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

const opCreatePolicyVersion = "CreatePolicyVersion"

// CreatePolicyVersionRequest generates a "aws/request.Request" representing the
// client's request for the CreatePolicyVersion 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 CreatePolicyVersion for more information on using the CreatePolicyVersion
// 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 CreatePolicyVersionRequest method.
//	req, resp := client.CreatePolicyVersionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreatePolicyVersionRequest(input *CreatePolicyVersionInput) (req *request.Request, output *CreatePolicyVersionOutput) {
	op := &request.Operation{
		Name:       opCreatePolicyVersion,
		HTTPMethod: "POST",
		HTTPPath:   "/policies/{policyName}/version",
	}

	if input == nil {
		input = &CreatePolicyVersionInput{}
	}

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

// CreatePolicyVersion API operation for AWS IoT.
//
// Creates a new version of the specified IoT policy. To update a policy, create
// a new policy version. A managed policy can have up to five versions. If the
// policy has five versions, you must use DeletePolicyVersion to delete an existing
// version before you create a new one.
//
// Optionally, you can set the new version as the policy's default version.
// The default version is the operative version (that is, the version that is
// in effect for the certificates to which the policy is attached).
//
// Requires permission to access the CreatePolicyVersion (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreatePolicyVersion for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - MalformedPolicyException
//     The policy documentation is not valid.
//
//   - VersionsLimitExceededException
//     The number of policy versions exceeds the limit.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreatePolicyVersion(input *CreatePolicyVersionInput) (*CreatePolicyVersionOutput, error) {
	req, out := c.CreatePolicyVersionRequest(input)
	return out, req.Send()
}

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

const opCreateProvisioningClaim = "CreateProvisioningClaim"

// CreateProvisioningClaimRequest generates a "aws/request.Request" representing the
// client's request for the CreateProvisioningClaim 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 CreateProvisioningClaim for more information on using the CreateProvisioningClaim
// 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 CreateProvisioningClaimRequest method.
//	req, resp := client.CreateProvisioningClaimRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateProvisioningClaimRequest(input *CreateProvisioningClaimInput) (req *request.Request, output *CreateProvisioningClaimOutput) {
	op := &request.Operation{
		Name:       opCreateProvisioningClaim,
		HTTPMethod: "POST",
		HTTPPath:   "/provisioning-templates/{templateName}/provisioning-claim",
	}

	if input == nil {
		input = &CreateProvisioningClaimInput{}
	}

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

// CreateProvisioningClaim API operation for AWS IoT.
//
// Creates a provisioning claim.
//
// Requires permission to access the CreateProvisioningClaim (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateProvisioningClaim for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreateProvisioningClaim(input *CreateProvisioningClaimInput) (*CreateProvisioningClaimOutput, error) {
	req, out := c.CreateProvisioningClaimRequest(input)
	return out, req.Send()
}

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

const opCreateProvisioningTemplate = "CreateProvisioningTemplate"

// CreateProvisioningTemplateRequest generates a "aws/request.Request" representing the
// client's request for the CreateProvisioningTemplate 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 CreateProvisioningTemplate for more information on using the CreateProvisioningTemplate
// 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 CreateProvisioningTemplateRequest method.
//	req, resp := client.CreateProvisioningTemplateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateProvisioningTemplateRequest(input *CreateProvisioningTemplateInput) (req *request.Request, output *CreateProvisioningTemplateOutput) {
	op := &request.Operation{
		Name:       opCreateProvisioningTemplate,
		HTTPMethod: "POST",
		HTTPPath:   "/provisioning-templates",
	}

	if input == nil {
		input = &CreateProvisioningTemplateInput{}
	}

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

// CreateProvisioningTemplate API operation for AWS IoT.
//
// Creates a provisioning template.
//
// Requires permission to access the CreateProvisioningTemplate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateProvisioningTemplate for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
func (c *IoT) CreateProvisioningTemplate(input *CreateProvisioningTemplateInput) (*CreateProvisioningTemplateOutput, error) {
	req, out := c.CreateProvisioningTemplateRequest(input)
	return out, req.Send()
}

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

const opCreateProvisioningTemplateVersion = "CreateProvisioningTemplateVersion"

// CreateProvisioningTemplateVersionRequest generates a "aws/request.Request" representing the
// client's request for the CreateProvisioningTemplateVersion 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 CreateProvisioningTemplateVersion for more information on using the CreateProvisioningTemplateVersion
// 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 CreateProvisioningTemplateVersionRequest method.
//	req, resp := client.CreateProvisioningTemplateVersionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateProvisioningTemplateVersionRequest(input *CreateProvisioningTemplateVersionInput) (req *request.Request, output *CreateProvisioningTemplateVersionOutput) {
	op := &request.Operation{
		Name:       opCreateProvisioningTemplateVersion,
		HTTPMethod: "POST",
		HTTPPath:   "/provisioning-templates/{templateName}/versions",
	}

	if input == nil {
		input = &CreateProvisioningTemplateVersionInput{}
	}

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

// CreateProvisioningTemplateVersion API operation for AWS IoT.
//
// Creates a new version of a provisioning template.
//
// Requires permission to access the CreateProvisioningTemplateVersion (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateProvisioningTemplateVersion for usage and error information.
//
// Returned Error Types:
//
//   - VersionsLimitExceededException
//     The number of policy versions exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
func (c *IoT) CreateProvisioningTemplateVersion(input *CreateProvisioningTemplateVersionInput) (*CreateProvisioningTemplateVersionOutput, error) {
	req, out := c.CreateProvisioningTemplateVersionRequest(input)
	return out, req.Send()
}

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

const opCreateRoleAlias = "CreateRoleAlias"

// CreateRoleAliasRequest generates a "aws/request.Request" representing the
// client's request for the CreateRoleAlias 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 CreateRoleAlias for more information on using the CreateRoleAlias
// 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 CreateRoleAliasRequest method.
//	req, resp := client.CreateRoleAliasRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateRoleAliasRequest(input *CreateRoleAliasInput) (req *request.Request, output *CreateRoleAliasOutput) {
	op := &request.Operation{
		Name:       opCreateRoleAlias,
		HTTPMethod: "POST",
		HTTPPath:   "/role-aliases/{roleAlias}",
	}

	if input == nil {
		input = &CreateRoleAliasInput{}
	}

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

// CreateRoleAlias API operation for AWS IoT.
//
// Creates a role alias.
//
// Requires permission to access the CreateRoleAlias (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateRoleAlias for usage and error information.
//
// Returned Error Types:
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreateRoleAlias(input *CreateRoleAliasInput) (*CreateRoleAliasOutput, error) {
	req, out := c.CreateRoleAliasRequest(input)
	return out, req.Send()
}

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

const opCreateScheduledAudit = "CreateScheduledAudit"

// CreateScheduledAuditRequest generates a "aws/request.Request" representing the
// client's request for the CreateScheduledAudit 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 CreateScheduledAudit for more information on using the CreateScheduledAudit
// 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 CreateScheduledAuditRequest method.
//	req, resp := client.CreateScheduledAuditRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateScheduledAuditRequest(input *CreateScheduledAuditInput) (req *request.Request, output *CreateScheduledAuditOutput) {
	op := &request.Operation{
		Name:       opCreateScheduledAudit,
		HTTPMethod: "POST",
		HTTPPath:   "/audit/scheduledaudits/{scheduledAuditName}",
	}

	if input == nil {
		input = &CreateScheduledAuditInput{}
	}

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

// CreateScheduledAudit API operation for AWS IoT.
//
// Creates a scheduled audit that is run at a specified time interval.
//
// Requires permission to access the CreateScheduledAudit (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateScheduledAudit for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - LimitExceededException
//     A limit has been exceeded.
func (c *IoT) CreateScheduledAudit(input *CreateScheduledAuditInput) (*CreateScheduledAuditOutput, error) {
	req, out := c.CreateScheduledAuditRequest(input)
	return out, req.Send()
}

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

const opCreateSecurityProfile = "CreateSecurityProfile"

// CreateSecurityProfileRequest generates a "aws/request.Request" representing the
// client's request for the CreateSecurityProfile 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 CreateSecurityProfile for more information on using the CreateSecurityProfile
// 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 CreateSecurityProfileRequest method.
//	req, resp := client.CreateSecurityProfileRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateSecurityProfileRequest(input *CreateSecurityProfileInput) (req *request.Request, output *CreateSecurityProfileOutput) {
	op := &request.Operation{
		Name:       opCreateSecurityProfile,
		HTTPMethod: "POST",
		HTTPPath:   "/security-profiles/{securityProfileName}",
	}

	if input == nil {
		input = &CreateSecurityProfileInput{}
	}

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

// CreateSecurityProfile API operation for AWS IoT.
//
// Creates a Device Defender security profile.
//
// Requires permission to access the CreateSecurityProfile (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateSecurityProfile for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreateSecurityProfile(input *CreateSecurityProfileInput) (*CreateSecurityProfileOutput, error) {
	req, out := c.CreateSecurityProfileRequest(input)
	return out, req.Send()
}

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

const opCreateStream = "CreateStream"

// CreateStreamRequest generates a "aws/request.Request" representing the
// client's request for the CreateStream 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 CreateStream for more information on using the CreateStream
// 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 CreateStreamRequest method.
//	req, resp := client.CreateStreamRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateStreamRequest(input *CreateStreamInput) (req *request.Request, output *CreateStreamOutput) {
	op := &request.Operation{
		Name:       opCreateStream,
		HTTPMethod: "POST",
		HTTPPath:   "/streams/{streamId}",
	}

	if input == nil {
		input = &CreateStreamInput{}
	}

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

// CreateStream API operation for AWS IoT.
//
// Creates a stream for delivering one or more large files in chunks over MQTT.
// A stream transports data bytes in chunks or blocks packaged as MQTT messages
// from a source like S3. You can have one or more files associated with a stream.
//
// Requires permission to access the CreateStream (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateStream for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreateStream(input *CreateStreamInput) (*CreateStreamOutput, error) {
	req, out := c.CreateStreamRequest(input)
	return out, req.Send()
}

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

const opCreateThing = "CreateThing"

// CreateThingRequest generates a "aws/request.Request" representing the
// client's request for the CreateThing 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 CreateThing for more information on using the CreateThing
// 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 CreateThingRequest method.
//	req, resp := client.CreateThingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateThingRequest(input *CreateThingInput) (req *request.Request, output *CreateThingOutput) {
	op := &request.Operation{
		Name:       opCreateThing,
		HTTPMethod: "POST",
		HTTPPath:   "/things/{thingName}",
	}

	if input == nil {
		input = &CreateThingInput{}
	}

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

// CreateThing API operation for AWS IoT.
//
// Creates a thing record in the registry. If this call is made multiple times
// using the same thing name and configuration, the call will succeed. If this
// call is made with the same thing name but different configuration a ResourceAlreadyExistsException
// is thrown.
//
// This is a control plane operation. See Authorization (https://docs.aws.amazon.com/iot/latest/developerguide/iot-authorization.html)
// for information about authorizing control plane actions.
//
// Requires permission to access the CreateThing (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateThing for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) CreateThing(input *CreateThingInput) (*CreateThingOutput, error) {
	req, out := c.CreateThingRequest(input)
	return out, req.Send()
}

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

const opCreateThingGroup = "CreateThingGroup"

// CreateThingGroupRequest generates a "aws/request.Request" representing the
// client's request for the CreateThingGroup 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 CreateThingGroup for more information on using the CreateThingGroup
// 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 CreateThingGroupRequest method.
//	req, resp := client.CreateThingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateThingGroupRequest(input *CreateThingGroupInput) (req *request.Request, output *CreateThingGroupOutput) {
	op := &request.Operation{
		Name:       opCreateThingGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/thing-groups/{thingGroupName}",
	}

	if input == nil {
		input = &CreateThingGroupInput{}
	}

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

// CreateThingGroup API operation for AWS IoT.
//
// Create a thing group.
//
// This is a control plane operation. See Authorization (https://docs.aws.amazon.com/iot/latest/developerguide/iot-authorization.html)
// for information about authorizing control plane actions.
//
// If the ThingGroup that you create has the exact same attributes as an existing
// ThingGroup, you will get a 200 success response.
//
// Requires permission to access the CreateThingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateThingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) CreateThingGroup(input *CreateThingGroupInput) (*CreateThingGroupOutput, error) {
	req, out := c.CreateThingGroupRequest(input)
	return out, req.Send()
}

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

const opCreateThingType = "CreateThingType"

// CreateThingTypeRequest generates a "aws/request.Request" representing the
// client's request for the CreateThingType 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 CreateThingType for more information on using the CreateThingType
// 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 CreateThingTypeRequest method.
//	req, resp := client.CreateThingTypeRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateThingTypeRequest(input *CreateThingTypeInput) (req *request.Request, output *CreateThingTypeOutput) {
	op := &request.Operation{
		Name:       opCreateThingType,
		HTTPMethod: "POST",
		HTTPPath:   "/thing-types/{thingTypeName}",
	}

	if input == nil {
		input = &CreateThingTypeInput{}
	}

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

// CreateThingType API operation for AWS IoT.
//
// Creates a new thing type.
//
// Requires permission to access the CreateThingType (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateThingType for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
func (c *IoT) CreateThingType(input *CreateThingTypeInput) (*CreateThingTypeOutput, error) {
	req, out := c.CreateThingTypeRequest(input)
	return out, req.Send()
}

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

const opCreateTopicRule = "CreateTopicRule"

// CreateTopicRuleRequest generates a "aws/request.Request" representing the
// client's request for the CreateTopicRule 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 CreateTopicRule for more information on using the CreateTopicRule
// 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 CreateTopicRuleRequest method.
//	req, resp := client.CreateTopicRuleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateTopicRuleRequest(input *CreateTopicRuleInput) (req *request.Request, output *CreateTopicRuleOutput) {
	op := &request.Operation{
		Name:       opCreateTopicRule,
		HTTPMethod: "POST",
		HTTPPath:   "/rules/{ruleName}",
	}

	if input == nil {
		input = &CreateTopicRuleInput{}
	}

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

// CreateTopicRule API operation for AWS IoT.
//
// Creates a rule. Creating rules is an administrator-level action. Any user
// who has permission to create rules will be able to access data processed
// by the rule.
//
// Requires permission to access the CreateTopicRule (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateTopicRule for usage and error information.
//
// Returned Error Types:
//
//   - SqlParseException
//     The Rule-SQL expression can't be parsed correctly.
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
func (c *IoT) CreateTopicRule(input *CreateTopicRuleInput) (*CreateTopicRuleOutput, error) {
	req, out := c.CreateTopicRuleRequest(input)
	return out, req.Send()
}

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

const opCreateTopicRuleDestination = "CreateTopicRuleDestination"

// CreateTopicRuleDestinationRequest generates a "aws/request.Request" representing the
// client's request for the CreateTopicRuleDestination 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 CreateTopicRuleDestination for more information on using the CreateTopicRuleDestination
// 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 CreateTopicRuleDestinationRequest method.
//	req, resp := client.CreateTopicRuleDestinationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) CreateTopicRuleDestinationRequest(input *CreateTopicRuleDestinationInput) (req *request.Request, output *CreateTopicRuleDestinationOutput) {
	op := &request.Operation{
		Name:       opCreateTopicRuleDestination,
		HTTPMethod: "POST",
		HTTPPath:   "/destinations",
	}

	if input == nil {
		input = &CreateTopicRuleDestinationInput{}
	}

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

// CreateTopicRuleDestination API operation for AWS IoT.
//
// Creates a topic rule destination. The destination must be confirmed prior
// to use.
//
// Requires permission to access the CreateTopicRuleDestination (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation CreateTopicRuleDestination for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
func (c *IoT) CreateTopicRuleDestination(input *CreateTopicRuleDestinationInput) (*CreateTopicRuleDestinationOutput, error) {
	req, out := c.CreateTopicRuleDestinationRequest(input)
	return out, req.Send()
}

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

const opDeleteAccountAuditConfiguration = "DeleteAccountAuditConfiguration"

// DeleteAccountAuditConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the DeleteAccountAuditConfiguration 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 DeleteAccountAuditConfiguration for more information on using the DeleteAccountAuditConfiguration
// 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 DeleteAccountAuditConfigurationRequest method.
//	req, resp := client.DeleteAccountAuditConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteAccountAuditConfigurationRequest(input *DeleteAccountAuditConfigurationInput) (req *request.Request, output *DeleteAccountAuditConfigurationOutput) {
	op := &request.Operation{
		Name:       opDeleteAccountAuditConfiguration,
		HTTPMethod: "DELETE",
		HTTPPath:   "/audit/configuration",
	}

	if input == nil {
		input = &DeleteAccountAuditConfigurationInput{}
	}

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

// DeleteAccountAuditConfiguration API operation for AWS IoT.
//
// Restores the default settings for Device Defender audits for this account.
// Any configuration data you entered is deleted and all audit checks are reset
// to disabled.
//
// Requires permission to access the DeleteAccountAuditConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteAccountAuditConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteAccountAuditConfiguration(input *DeleteAccountAuditConfigurationInput) (*DeleteAccountAuditConfigurationOutput, error) {
	req, out := c.DeleteAccountAuditConfigurationRequest(input)
	return out, req.Send()
}

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

const opDeleteAuditSuppression = "DeleteAuditSuppression"

// DeleteAuditSuppressionRequest generates a "aws/request.Request" representing the
// client's request for the DeleteAuditSuppression 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 DeleteAuditSuppression for more information on using the DeleteAuditSuppression
// 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 DeleteAuditSuppressionRequest method.
//	req, resp := client.DeleteAuditSuppressionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteAuditSuppressionRequest(input *DeleteAuditSuppressionInput) (req *request.Request, output *DeleteAuditSuppressionOutput) {
	op := &request.Operation{
		Name:       opDeleteAuditSuppression,
		HTTPMethod: "POST",
		HTTPPath:   "/audit/suppressions/delete",
	}

	if input == nil {
		input = &DeleteAuditSuppressionInput{}
	}

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

// DeleteAuditSuppression API operation for AWS IoT.
//
// Deletes a Device Defender audit suppression.
//
// Requires permission to access the DeleteAuditSuppression (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteAuditSuppression for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteAuditSuppression(input *DeleteAuditSuppressionInput) (*DeleteAuditSuppressionOutput, error) {
	req, out := c.DeleteAuditSuppressionRequest(input)
	return out, req.Send()
}

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

const opDeleteAuthorizer = "DeleteAuthorizer"

// DeleteAuthorizerRequest generates a "aws/request.Request" representing the
// client's request for the DeleteAuthorizer 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 DeleteAuthorizer for more information on using the DeleteAuthorizer
// 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 DeleteAuthorizerRequest method.
//	req, resp := client.DeleteAuthorizerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteAuthorizerRequest(input *DeleteAuthorizerInput) (req *request.Request, output *DeleteAuthorizerOutput) {
	op := &request.Operation{
		Name:       opDeleteAuthorizer,
		HTTPMethod: "DELETE",
		HTTPPath:   "/authorizer/{authorizerName}",
	}

	if input == nil {
		input = &DeleteAuthorizerInput{}
	}

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

// DeleteAuthorizer API operation for AWS IoT.
//
// Deletes an authorizer.
//
// Requires permission to access the DeleteAuthorizer (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteAuthorizer for usage and error information.
//
// Returned Error Types:
//
//   - DeleteConflictException
//     You can't delete the resource because it is attached to one or more resources.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteAuthorizer(input *DeleteAuthorizerInput) (*DeleteAuthorizerOutput, error) {
	req, out := c.DeleteAuthorizerRequest(input)
	return out, req.Send()
}

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

const opDeleteBillingGroup = "DeleteBillingGroup"

// DeleteBillingGroupRequest generates a "aws/request.Request" representing the
// client's request for the DeleteBillingGroup 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 DeleteBillingGroup for more information on using the DeleteBillingGroup
// 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 DeleteBillingGroupRequest method.
//	req, resp := client.DeleteBillingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteBillingGroupRequest(input *DeleteBillingGroupInput) (req *request.Request, output *DeleteBillingGroupOutput) {
	op := &request.Operation{
		Name:       opDeleteBillingGroup,
		HTTPMethod: "DELETE",
		HTTPPath:   "/billing-groups/{billingGroupName}",
	}

	if input == nil {
		input = &DeleteBillingGroupInput{}
	}

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

// DeleteBillingGroup API operation for AWS IoT.
//
// Deletes the billing group.
//
// Requires permission to access the DeleteBillingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteBillingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteBillingGroup(input *DeleteBillingGroupInput) (*DeleteBillingGroupOutput, error) {
	req, out := c.DeleteBillingGroupRequest(input)
	return out, req.Send()
}

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

const opDeleteCACertificate = "DeleteCACertificate"

// DeleteCACertificateRequest generates a "aws/request.Request" representing the
// client's request for the DeleteCACertificate 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 DeleteCACertificate for more information on using the DeleteCACertificate
// 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 DeleteCACertificateRequest method.
//	req, resp := client.DeleteCACertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteCACertificateRequest(input *DeleteCACertificateInput) (req *request.Request, output *DeleteCACertificateOutput) {
	op := &request.Operation{
		Name:       opDeleteCACertificate,
		HTTPMethod: "DELETE",
		HTTPPath:   "/cacertificate/{caCertificateId}",
	}

	if input == nil {
		input = &DeleteCACertificateInput{}
	}

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

// DeleteCACertificate API operation for AWS IoT.
//
// Deletes a registered CA certificate.
//
// Requires permission to access the DeleteCACertificate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteCACertificate for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - CertificateStateException
//     The certificate operation is not allowed.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) DeleteCACertificate(input *DeleteCACertificateInput) (*DeleteCACertificateOutput, error) {
	req, out := c.DeleteCACertificateRequest(input)
	return out, req.Send()
}

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

const opDeleteCertificate = "DeleteCertificate"

// DeleteCertificateRequest generates a "aws/request.Request" representing the
// client's request for the DeleteCertificate 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 DeleteCertificate for more information on using the DeleteCertificate
// 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 DeleteCertificateRequest method.
//	req, resp := client.DeleteCertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteCertificateRequest(input *DeleteCertificateInput) (req *request.Request, output *DeleteCertificateOutput) {
	op := &request.Operation{
		Name:       opDeleteCertificate,
		HTTPMethod: "DELETE",
		HTTPPath:   "/certificates/{certificateId}",
	}

	if input == nil {
		input = &DeleteCertificateInput{}
	}

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

// DeleteCertificate API operation for AWS IoT.
//
// Deletes the specified certificate.
//
// A certificate cannot be deleted if it has a policy or IoT thing attached
// to it or if its status is set to ACTIVE. To delete a certificate, first use
// the DetachPolicy action to detach all policies. Next, use the UpdateCertificate
// action to set the certificate to the INACTIVE status.
//
// Requires permission to access the DeleteCertificate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteCertificate for usage and error information.
//
// Returned Error Types:
//
//   - CertificateStateException
//     The certificate operation is not allowed.
//
//   - DeleteConflictException
//     You can't delete the resource because it is attached to one or more resources.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) DeleteCertificate(input *DeleteCertificateInput) (*DeleteCertificateOutput, error) {
	req, out := c.DeleteCertificateRequest(input)
	return out, req.Send()
}

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

const opDeleteCertificateProvider = "DeleteCertificateProvider"

// DeleteCertificateProviderRequest generates a "aws/request.Request" representing the
// client's request for the DeleteCertificateProvider 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 DeleteCertificateProvider for more information on using the DeleteCertificateProvider
// 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 DeleteCertificateProviderRequest method.
//	req, resp := client.DeleteCertificateProviderRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteCertificateProviderRequest(input *DeleteCertificateProviderInput) (req *request.Request, output *DeleteCertificateProviderOutput) {
	op := &request.Operation{
		Name:       opDeleteCertificateProvider,
		HTTPMethod: "DELETE",
		HTTPPath:   "/certificate-providers/{certificateProviderName}",
	}

	if input == nil {
		input = &DeleteCertificateProviderInput{}
	}

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

// DeleteCertificateProvider API operation for AWS IoT.
//
// Deletes a certificate provider.
//
// Requires permission to access the DeleteCertificateProvider (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// If you delete the certificate provider resource, the behavior of CreateCertificateFromCsr
// will resume, and IoT will create certificates signed by IoT from a certificate
// signing request (CSR).
//
// 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 IoT's
// API operation DeleteCertificateProvider for usage and error information.
//
// Returned Error Types:
//
//   - DeleteConflictException
//     You can't delete the resource because it is attached to one or more resources.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteCertificateProvider(input *DeleteCertificateProviderInput) (*DeleteCertificateProviderOutput, error) {
	req, out := c.DeleteCertificateProviderRequest(input)
	return out, req.Send()
}

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

const opDeleteCustomMetric = "DeleteCustomMetric"

// DeleteCustomMetricRequest generates a "aws/request.Request" representing the
// client's request for the DeleteCustomMetric 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 DeleteCustomMetric for more information on using the DeleteCustomMetric
// 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 DeleteCustomMetricRequest method.
//	req, resp := client.DeleteCustomMetricRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteCustomMetricRequest(input *DeleteCustomMetricInput) (req *request.Request, output *DeleteCustomMetricOutput) {
	op := &request.Operation{
		Name:       opDeleteCustomMetric,
		HTTPMethod: "DELETE",
		HTTPPath:   "/custom-metric/{metricName}",
	}

	if input == nil {
		input = &DeleteCustomMetricInput{}
	}

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

// DeleteCustomMetric API operation for AWS IoT.
//
// Deletes a Device Defender detect custom metric.
//
// Requires permission to access the DeleteCustomMetric (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// Before you can delete a custom metric, you must first remove the custom metric
// from all security profiles it's a part of. The security profile associated
// with the custom metric can be found using the ListSecurityProfiles (https://docs.aws.amazon.com/iot/latest/apireference/API_ListSecurityProfiles.html)
// API with metricName set to your custom metric name.
//
// 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 IoT's
// API operation DeleteCustomMetric for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteCustomMetric(input *DeleteCustomMetricInput) (*DeleteCustomMetricOutput, error) {
	req, out := c.DeleteCustomMetricRequest(input)
	return out, req.Send()
}

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

const opDeleteDimension = "DeleteDimension"

// DeleteDimensionRequest generates a "aws/request.Request" representing the
// client's request for the DeleteDimension 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 DeleteDimension for more information on using the DeleteDimension
// 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 DeleteDimensionRequest method.
//	req, resp := client.DeleteDimensionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteDimensionRequest(input *DeleteDimensionInput) (req *request.Request, output *DeleteDimensionOutput) {
	op := &request.Operation{
		Name:       opDeleteDimension,
		HTTPMethod: "DELETE",
		HTTPPath:   "/dimensions/{name}",
	}

	if input == nil {
		input = &DeleteDimensionInput{}
	}

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

// DeleteDimension API operation for AWS IoT.
//
// Removes the specified dimension from your Amazon Web Services accounts.
//
// Requires permission to access the DeleteDimension (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteDimension for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) DeleteDimension(input *DeleteDimensionInput) (*DeleteDimensionOutput, error) {
	req, out := c.DeleteDimensionRequest(input)
	return out, req.Send()
}

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

const opDeleteDomainConfiguration = "DeleteDomainConfiguration"

// DeleteDomainConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the DeleteDomainConfiguration 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 DeleteDomainConfiguration for more information on using the DeleteDomainConfiguration
// 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 DeleteDomainConfigurationRequest method.
//	req, resp := client.DeleteDomainConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteDomainConfigurationRequest(input *DeleteDomainConfigurationInput) (req *request.Request, output *DeleteDomainConfigurationOutput) {
	op := &request.Operation{
		Name:       opDeleteDomainConfiguration,
		HTTPMethod: "DELETE",
		HTTPPath:   "/domainConfigurations/{domainConfigurationName}",
	}

	if input == nil {
		input = &DeleteDomainConfigurationInput{}
	}

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

// DeleteDomainConfiguration API operation for AWS IoT.
//
// Deletes the specified domain configuration.
//
// Requires permission to access the DeleteDomainConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteDomainConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
func (c *IoT) DeleteDomainConfiguration(input *DeleteDomainConfigurationInput) (*DeleteDomainConfigurationOutput, error) {
	req, out := c.DeleteDomainConfigurationRequest(input)
	return out, req.Send()
}

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

const opDeleteDynamicThingGroup = "DeleteDynamicThingGroup"

// DeleteDynamicThingGroupRequest generates a "aws/request.Request" representing the
// client's request for the DeleteDynamicThingGroup 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 DeleteDynamicThingGroup for more information on using the DeleteDynamicThingGroup
// 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 DeleteDynamicThingGroupRequest method.
//	req, resp := client.DeleteDynamicThingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteDynamicThingGroupRequest(input *DeleteDynamicThingGroupInput) (req *request.Request, output *DeleteDynamicThingGroupOutput) {
	op := &request.Operation{
		Name:       opDeleteDynamicThingGroup,
		HTTPMethod: "DELETE",
		HTTPPath:   "/dynamic-thing-groups/{thingGroupName}",
	}

	if input == nil {
		input = &DeleteDynamicThingGroupInput{}
	}

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

// DeleteDynamicThingGroup API operation for AWS IoT.
//
// Deletes a dynamic thing group.
//
// Requires permission to access the DeleteDynamicThingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteDynamicThingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteDynamicThingGroup(input *DeleteDynamicThingGroupInput) (*DeleteDynamicThingGroupOutput, error) {
	req, out := c.DeleteDynamicThingGroupRequest(input)
	return out, req.Send()
}

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

const opDeleteFleetMetric = "DeleteFleetMetric"

// DeleteFleetMetricRequest generates a "aws/request.Request" representing the
// client's request for the DeleteFleetMetric 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 DeleteFleetMetric for more information on using the DeleteFleetMetric
// 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 DeleteFleetMetricRequest method.
//	req, resp := client.DeleteFleetMetricRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteFleetMetricRequest(input *DeleteFleetMetricInput) (req *request.Request, output *DeleteFleetMetricOutput) {
	op := &request.Operation{
		Name:       opDeleteFleetMetric,
		HTTPMethod: "DELETE",
		HTTPPath:   "/fleet-metric/{metricName}",
	}

	if input == nil {
		input = &DeleteFleetMetricInput{}
	}

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

// DeleteFleetMetric API operation for AWS IoT.
//
// Deletes the specified fleet metric. Returns successfully with no error if
// the deletion is successful or you specify a fleet metric that doesn't exist.
//
// Requires permission to access the DeleteFleetMetric (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteFleetMetric for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
func (c *IoT) DeleteFleetMetric(input *DeleteFleetMetricInput) (*DeleteFleetMetricOutput, error) {
	req, out := c.DeleteFleetMetricRequest(input)
	return out, req.Send()
}

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

const opDeleteJob = "DeleteJob"

// DeleteJobRequest generates a "aws/request.Request" representing the
// client's request for the DeleteJob 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 DeleteJob for more information on using the DeleteJob
// 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 DeleteJobRequest method.
//	req, resp := client.DeleteJobRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteJobRequest(input *DeleteJobInput) (req *request.Request, output *DeleteJobOutput) {
	op := &request.Operation{
		Name:       opDeleteJob,
		HTTPMethod: "DELETE",
		HTTPPath:   "/jobs/{jobId}",
	}

	if input == nil {
		input = &DeleteJobInput{}
	}

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

// DeleteJob API operation for AWS IoT.
//
// Deletes a job and its related job executions.
//
// Deleting a job may take time, depending on the number of job executions created
// for the job and various other factors. While the job is being deleted, the
// status of the job will be shown as "DELETION_IN_PROGRESS". Attempting to
// delete or cancel a job whose status is already "DELETION_IN_PROGRESS" will
// result in an error.
//
// Only 10 jobs may have status "DELETION_IN_PROGRESS" at the same time, or
// a LimitExceededException will occur.
//
// Requires permission to access the DeleteJob (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteJob for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - InvalidStateTransitionException
//     An attempt was made to change to an invalid state, for example by deleting
//     a job or a job execution which is "IN_PROGRESS" without setting the force
//     parameter.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) DeleteJob(input *DeleteJobInput) (*DeleteJobOutput, error) {
	req, out := c.DeleteJobRequest(input)
	return out, req.Send()
}

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

const opDeleteJobExecution = "DeleteJobExecution"

// DeleteJobExecutionRequest generates a "aws/request.Request" representing the
// client's request for the DeleteJobExecution 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 DeleteJobExecution for more information on using the DeleteJobExecution
// 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 DeleteJobExecutionRequest method.
//	req, resp := client.DeleteJobExecutionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteJobExecutionRequest(input *DeleteJobExecutionInput) (req *request.Request, output *DeleteJobExecutionOutput) {
	op := &request.Operation{
		Name:       opDeleteJobExecution,
		HTTPMethod: "DELETE",
		HTTPPath:   "/things/{thingName}/jobs/{jobId}/executionNumber/{executionNumber}",
	}

	if input == nil {
		input = &DeleteJobExecutionInput{}
	}

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

// DeleteJobExecution API operation for AWS IoT.
//
// Deletes a job execution.
//
// Requires permission to access the DeleteJobExecution (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteJobExecution for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - InvalidStateTransitionException
//     An attempt was made to change to an invalid state, for example by deleting
//     a job or a job execution which is "IN_PROGRESS" without setting the force
//     parameter.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) DeleteJobExecution(input *DeleteJobExecutionInput) (*DeleteJobExecutionOutput, error) {
	req, out := c.DeleteJobExecutionRequest(input)
	return out, req.Send()
}

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

const opDeleteJobTemplate = "DeleteJobTemplate"

// DeleteJobTemplateRequest generates a "aws/request.Request" representing the
// client's request for the DeleteJobTemplate 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 DeleteJobTemplate for more information on using the DeleteJobTemplate
// 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 DeleteJobTemplateRequest method.
//	req, resp := client.DeleteJobTemplateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteJobTemplateRequest(input *DeleteJobTemplateInput) (req *request.Request, output *DeleteJobTemplateOutput) {
	op := &request.Operation{
		Name:       opDeleteJobTemplate,
		HTTPMethod: "DELETE",
		HTTPPath:   "/job-templates/{jobTemplateId}",
	}

	if input == nil {
		input = &DeleteJobTemplateInput{}
	}

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

// DeleteJobTemplate API operation for AWS IoT.
//
// Deletes the specified job template.
//
// 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 IoT's
// API operation DeleteJobTemplate for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteJobTemplate(input *DeleteJobTemplateInput) (*DeleteJobTemplateOutput, error) {
	req, out := c.DeleteJobTemplateRequest(input)
	return out, req.Send()
}

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

const opDeleteMitigationAction = "DeleteMitigationAction"

// DeleteMitigationActionRequest generates a "aws/request.Request" representing the
// client's request for the DeleteMitigationAction 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 DeleteMitigationAction for more information on using the DeleteMitigationAction
// 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 DeleteMitigationActionRequest method.
//	req, resp := client.DeleteMitigationActionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteMitigationActionRequest(input *DeleteMitigationActionInput) (req *request.Request, output *DeleteMitigationActionOutput) {
	op := &request.Operation{
		Name:       opDeleteMitigationAction,
		HTTPMethod: "DELETE",
		HTTPPath:   "/mitigationactions/actions/{actionName}",
	}

	if input == nil {
		input = &DeleteMitigationActionInput{}
	}

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

// DeleteMitigationAction API operation for AWS IoT.
//
// Deletes a defined mitigation action from your Amazon Web Services accounts.
//
// Requires permission to access the DeleteMitigationAction (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteMitigationAction for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteMitigationAction(input *DeleteMitigationActionInput) (*DeleteMitigationActionOutput, error) {
	req, out := c.DeleteMitigationActionRequest(input)
	return out, req.Send()
}

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

const opDeleteOTAUpdate = "DeleteOTAUpdate"

// DeleteOTAUpdateRequest generates a "aws/request.Request" representing the
// client's request for the DeleteOTAUpdate 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 DeleteOTAUpdate for more information on using the DeleteOTAUpdate
// 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 DeleteOTAUpdateRequest method.
//	req, resp := client.DeleteOTAUpdateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteOTAUpdateRequest(input *DeleteOTAUpdateInput) (req *request.Request, output *DeleteOTAUpdateOutput) {
	op := &request.Operation{
		Name:       opDeleteOTAUpdate,
		HTTPMethod: "DELETE",
		HTTPPath:   "/otaUpdates/{otaUpdateId}",
	}

	if input == nil {
		input = &DeleteOTAUpdateInput{}
	}

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

// DeleteOTAUpdate API operation for AWS IoT.
//
// Delete an OTA update.
//
// Requires permission to access the DeleteOTAUpdate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteOTAUpdate for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
func (c *IoT) DeleteOTAUpdate(input *DeleteOTAUpdateInput) (*DeleteOTAUpdateOutput, error) {
	req, out := c.DeleteOTAUpdateRequest(input)
	return out, req.Send()
}

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

const opDeletePackage = "DeletePackage"

// DeletePackageRequest generates a "aws/request.Request" representing the
// client's request for the DeletePackage 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 DeletePackage for more information on using the DeletePackage
// 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 DeletePackageRequest method.
//	req, resp := client.DeletePackageRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeletePackageRequest(input *DeletePackageInput) (req *request.Request, output *DeletePackageOutput) {
	op := &request.Operation{
		Name:       opDeletePackage,
		HTTPMethod: "DELETE",
		HTTPPath:   "/packages/{packageName}",
	}

	if input == nil {
		input = &DeletePackageInput{}
	}

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

// DeletePackage API operation for AWS IoT.
//
// Deletes a specific version from a software package.
//
// Note: All package versions must be deleted before deleting the software package.
//
// Requires permission to access the DeletePackageVersion (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeletePackage for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
//
//   - ValidationException
//     The request is not valid.
func (c *IoT) DeletePackage(input *DeletePackageInput) (*DeletePackageOutput, error) {
	req, out := c.DeletePackageRequest(input)
	return out, req.Send()
}

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

const opDeletePackageVersion = "DeletePackageVersion"

// DeletePackageVersionRequest generates a "aws/request.Request" representing the
// client's request for the DeletePackageVersion 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 DeletePackageVersion for more information on using the DeletePackageVersion
// 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 DeletePackageVersionRequest method.
//	req, resp := client.DeletePackageVersionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeletePackageVersionRequest(input *DeletePackageVersionInput) (req *request.Request, output *DeletePackageVersionOutput) {
	op := &request.Operation{
		Name:       opDeletePackageVersion,
		HTTPMethod: "DELETE",
		HTTPPath:   "/packages/{packageName}/versions/{versionName}",
	}

	if input == nil {
		input = &DeletePackageVersionInput{}
	}

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

// DeletePackageVersion API operation for AWS IoT.
//
// Deletes a specific version from a software package.
//
// Note: If a package version is designated as default, you must remove the
// designation from the software package using the UpdatePackage action.
//
// 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 IoT's
// API operation DeletePackageVersion for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
//
//   - ValidationException
//     The request is not valid.
func (c *IoT) DeletePackageVersion(input *DeletePackageVersionInput) (*DeletePackageVersionOutput, error) {
	req, out := c.DeletePackageVersionRequest(input)
	return out, req.Send()
}

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

const opDeletePolicy = "DeletePolicy"

// DeletePolicyRequest generates a "aws/request.Request" representing the
// client's request for the DeletePolicy 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 DeletePolicy for more information on using the DeletePolicy
// 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 DeletePolicyRequest method.
//	req, resp := client.DeletePolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeletePolicyRequest(input *DeletePolicyInput) (req *request.Request, output *DeletePolicyOutput) {
	op := &request.Operation{
		Name:       opDeletePolicy,
		HTTPMethod: "DELETE",
		HTTPPath:   "/policies/{policyName}",
	}

	if input == nil {
		input = &DeletePolicyInput{}
	}

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

// DeletePolicy API operation for AWS IoT.
//
// Deletes the specified policy.
//
// A policy cannot be deleted if it has non-default versions or it is attached
// to any certificate.
//
// To delete a policy, use the DeletePolicyVersion action to delete all non-default
// versions of the policy; use the DetachPolicy action to detach the policy
// from any certificate; and then use the DeletePolicy action to delete the
// policy.
//
// When a policy is deleted using DeletePolicy, its default version is deleted
// with it.
//
// Because of the distributed nature of Amazon Web Services, it can take up
// to five minutes after a policy is detached before it's ready to be deleted.
//
// Requires permission to access the DeletePolicy (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeletePolicy for usage and error information.
//
// Returned Error Types:
//
//   - DeleteConflictException
//     You can't delete the resource because it is attached to one or more resources.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeletePolicy(input *DeletePolicyInput) (*DeletePolicyOutput, error) {
	req, out := c.DeletePolicyRequest(input)
	return out, req.Send()
}

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

const opDeletePolicyVersion = "DeletePolicyVersion"

// DeletePolicyVersionRequest generates a "aws/request.Request" representing the
// client's request for the DeletePolicyVersion 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 DeletePolicyVersion for more information on using the DeletePolicyVersion
// 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 DeletePolicyVersionRequest method.
//	req, resp := client.DeletePolicyVersionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeletePolicyVersionRequest(input *DeletePolicyVersionInput) (req *request.Request, output *DeletePolicyVersionOutput) {
	op := &request.Operation{
		Name:       opDeletePolicyVersion,
		HTTPMethod: "DELETE",
		HTTPPath:   "/policies/{policyName}/version/{policyVersionId}",
	}

	if input == nil {
		input = &DeletePolicyVersionInput{}
	}

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

// DeletePolicyVersion API operation for AWS IoT.
//
// Deletes the specified version of the specified policy. You cannot delete
// the default version of a policy using this action. To delete the default
// version of a policy, use DeletePolicy. To find out which version of a policy
// is marked as the default version, use ListPolicyVersions.
//
// Requires permission to access the DeletePolicyVersion (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeletePolicyVersion for usage and error information.
//
// Returned Error Types:
//
//   - DeleteConflictException
//     You can't delete the resource because it is attached to one or more resources.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeletePolicyVersion(input *DeletePolicyVersionInput) (*DeletePolicyVersionOutput, error) {
	req, out := c.DeletePolicyVersionRequest(input)
	return out, req.Send()
}

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

const opDeleteProvisioningTemplate = "DeleteProvisioningTemplate"

// DeleteProvisioningTemplateRequest generates a "aws/request.Request" representing the
// client's request for the DeleteProvisioningTemplate 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 DeleteProvisioningTemplate for more information on using the DeleteProvisioningTemplate
// 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 DeleteProvisioningTemplateRequest method.
//	req, resp := client.DeleteProvisioningTemplateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteProvisioningTemplateRequest(input *DeleteProvisioningTemplateInput) (req *request.Request, output *DeleteProvisioningTemplateOutput) {
	op := &request.Operation{
		Name:       opDeleteProvisioningTemplate,
		HTTPMethod: "DELETE",
		HTTPPath:   "/provisioning-templates/{templateName}",
	}

	if input == nil {
		input = &DeleteProvisioningTemplateInput{}
	}

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

// DeleteProvisioningTemplate API operation for AWS IoT.
//
// Deletes a provisioning template.
//
// Requires permission to access the DeleteProvisioningTemplate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteProvisioningTemplate for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - DeleteConflictException
//     You can't delete the resource because it is attached to one or more resources.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
func (c *IoT) DeleteProvisioningTemplate(input *DeleteProvisioningTemplateInput) (*DeleteProvisioningTemplateOutput, error) {
	req, out := c.DeleteProvisioningTemplateRequest(input)
	return out, req.Send()
}

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

const opDeleteProvisioningTemplateVersion = "DeleteProvisioningTemplateVersion"

// DeleteProvisioningTemplateVersionRequest generates a "aws/request.Request" representing the
// client's request for the DeleteProvisioningTemplateVersion 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 DeleteProvisioningTemplateVersion for more information on using the DeleteProvisioningTemplateVersion
// 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 DeleteProvisioningTemplateVersionRequest method.
//	req, resp := client.DeleteProvisioningTemplateVersionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteProvisioningTemplateVersionRequest(input *DeleteProvisioningTemplateVersionInput) (req *request.Request, output *DeleteProvisioningTemplateVersionOutput) {
	op := &request.Operation{
		Name:       opDeleteProvisioningTemplateVersion,
		HTTPMethod: "DELETE",
		HTTPPath:   "/provisioning-templates/{templateName}/versions/{versionId}",
	}

	if input == nil {
		input = &DeleteProvisioningTemplateVersionInput{}
	}

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

// DeleteProvisioningTemplateVersion API operation for AWS IoT.
//
// Deletes a provisioning template version.
//
// Requires permission to access the DeleteProvisioningTemplateVersion (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteProvisioningTemplateVersion for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
//
//   - DeleteConflictException
//     You can't delete the resource because it is attached to one or more resources.
func (c *IoT) DeleteProvisioningTemplateVersion(input *DeleteProvisioningTemplateVersionInput) (*DeleteProvisioningTemplateVersionOutput, error) {
	req, out := c.DeleteProvisioningTemplateVersionRequest(input)
	return out, req.Send()
}

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

const opDeleteRegistrationCode = "DeleteRegistrationCode"

// DeleteRegistrationCodeRequest generates a "aws/request.Request" representing the
// client's request for the DeleteRegistrationCode 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 DeleteRegistrationCode for more information on using the DeleteRegistrationCode
// 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 DeleteRegistrationCodeRequest method.
//	req, resp := client.DeleteRegistrationCodeRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteRegistrationCodeRequest(input *DeleteRegistrationCodeInput) (req *request.Request, output *DeleteRegistrationCodeOutput) {
	op := &request.Operation{
		Name:       opDeleteRegistrationCode,
		HTTPMethod: "DELETE",
		HTTPPath:   "/registrationcode",
	}

	if input == nil {
		input = &DeleteRegistrationCodeInput{}
	}

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

// DeleteRegistrationCode API operation for AWS IoT.
//
// Deletes a CA certificate registration code.
//
// Requires permission to access the DeleteRegistrationCode (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteRegistrationCode for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteRegistrationCode(input *DeleteRegistrationCodeInput) (*DeleteRegistrationCodeOutput, error) {
	req, out := c.DeleteRegistrationCodeRequest(input)
	return out, req.Send()
}

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

const opDeleteRoleAlias = "DeleteRoleAlias"

// DeleteRoleAliasRequest generates a "aws/request.Request" representing the
// client's request for the DeleteRoleAlias 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 DeleteRoleAlias for more information on using the DeleteRoleAlias
// 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 DeleteRoleAliasRequest method.
//	req, resp := client.DeleteRoleAliasRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteRoleAliasRequest(input *DeleteRoleAliasInput) (req *request.Request, output *DeleteRoleAliasOutput) {
	op := &request.Operation{
		Name:       opDeleteRoleAlias,
		HTTPMethod: "DELETE",
		HTTPPath:   "/role-aliases/{roleAlias}",
	}

	if input == nil {
		input = &DeleteRoleAliasInput{}
	}

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

// DeleteRoleAlias API operation for AWS IoT.
//
// # Deletes a role alias
//
// Requires permission to access the DeleteRoleAlias (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteRoleAlias for usage and error information.
//
// Returned Error Types:
//
//   - DeleteConflictException
//     You can't delete the resource because it is attached to one or more resources.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) DeleteRoleAlias(input *DeleteRoleAliasInput) (*DeleteRoleAliasOutput, error) {
	req, out := c.DeleteRoleAliasRequest(input)
	return out, req.Send()
}

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

const opDeleteScheduledAudit = "DeleteScheduledAudit"

// DeleteScheduledAuditRequest generates a "aws/request.Request" representing the
// client's request for the DeleteScheduledAudit 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 DeleteScheduledAudit for more information on using the DeleteScheduledAudit
// 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 DeleteScheduledAuditRequest method.
//	req, resp := client.DeleteScheduledAuditRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteScheduledAuditRequest(input *DeleteScheduledAuditInput) (req *request.Request, output *DeleteScheduledAuditOutput) {
	op := &request.Operation{
		Name:       opDeleteScheduledAudit,
		HTTPMethod: "DELETE",
		HTTPPath:   "/audit/scheduledaudits/{scheduledAuditName}",
	}

	if input == nil {
		input = &DeleteScheduledAuditInput{}
	}

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

// DeleteScheduledAudit API operation for AWS IoT.
//
// Deletes a scheduled audit.
//
// Requires permission to access the DeleteScheduledAudit (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteScheduledAudit for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteScheduledAudit(input *DeleteScheduledAuditInput) (*DeleteScheduledAuditOutput, error) {
	req, out := c.DeleteScheduledAuditRequest(input)
	return out, req.Send()
}

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

const opDeleteSecurityProfile = "DeleteSecurityProfile"

// DeleteSecurityProfileRequest generates a "aws/request.Request" representing the
// client's request for the DeleteSecurityProfile 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 DeleteSecurityProfile for more information on using the DeleteSecurityProfile
// 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 DeleteSecurityProfileRequest method.
//	req, resp := client.DeleteSecurityProfileRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteSecurityProfileRequest(input *DeleteSecurityProfileInput) (req *request.Request, output *DeleteSecurityProfileOutput) {
	op := &request.Operation{
		Name:       opDeleteSecurityProfile,
		HTTPMethod: "DELETE",
		HTTPPath:   "/security-profiles/{securityProfileName}",
	}

	if input == nil {
		input = &DeleteSecurityProfileInput{}
	}

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

// DeleteSecurityProfile API operation for AWS IoT.
//
// Deletes a Device Defender security profile.
//
// Requires permission to access the DeleteSecurityProfile (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteSecurityProfile for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
func (c *IoT) DeleteSecurityProfile(input *DeleteSecurityProfileInput) (*DeleteSecurityProfileOutput, error) {
	req, out := c.DeleteSecurityProfileRequest(input)
	return out, req.Send()
}

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

const opDeleteStream = "DeleteStream"

// DeleteStreamRequest generates a "aws/request.Request" representing the
// client's request for the DeleteStream 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 DeleteStream for more information on using the DeleteStream
// 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 DeleteStreamRequest method.
//	req, resp := client.DeleteStreamRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteStreamRequest(input *DeleteStreamInput) (req *request.Request, output *DeleteStreamOutput) {
	op := &request.Operation{
		Name:       opDeleteStream,
		HTTPMethod: "DELETE",
		HTTPPath:   "/streams/{streamId}",
	}

	if input == nil {
		input = &DeleteStreamInput{}
	}

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

// DeleteStream API operation for AWS IoT.
//
// Deletes a stream.
//
// Requires permission to access the DeleteStream (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteStream for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - DeleteConflictException
//     You can't delete the resource because it is attached to one or more resources.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteStream(input *DeleteStreamInput) (*DeleteStreamOutput, error) {
	req, out := c.DeleteStreamRequest(input)
	return out, req.Send()
}

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

const opDeleteThing = "DeleteThing"

// DeleteThingRequest generates a "aws/request.Request" representing the
// client's request for the DeleteThing 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 DeleteThing for more information on using the DeleteThing
// 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 DeleteThingRequest method.
//	req, resp := client.DeleteThingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteThingRequest(input *DeleteThingInput) (req *request.Request, output *DeleteThingOutput) {
	op := &request.Operation{
		Name:       opDeleteThing,
		HTTPMethod: "DELETE",
		HTTPPath:   "/things/{thingName}",
	}

	if input == nil {
		input = &DeleteThingInput{}
	}

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

// DeleteThing API operation for AWS IoT.
//
// Deletes the specified thing. Returns successfully with no error if the deletion
// is successful or you specify a thing that doesn't exist.
//
// Requires permission to access the DeleteThing (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteThing for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteThing(input *DeleteThingInput) (*DeleteThingOutput, error) {
	req, out := c.DeleteThingRequest(input)
	return out, req.Send()
}

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

const opDeleteThingGroup = "DeleteThingGroup"

// DeleteThingGroupRequest generates a "aws/request.Request" representing the
// client's request for the DeleteThingGroup 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 DeleteThingGroup for more information on using the DeleteThingGroup
// 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 DeleteThingGroupRequest method.
//	req, resp := client.DeleteThingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteThingGroupRequest(input *DeleteThingGroupInput) (req *request.Request, output *DeleteThingGroupOutput) {
	op := &request.Operation{
		Name:       opDeleteThingGroup,
		HTTPMethod: "DELETE",
		HTTPPath:   "/thing-groups/{thingGroupName}",
	}

	if input == nil {
		input = &DeleteThingGroupInput{}
	}

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

// DeleteThingGroup API operation for AWS IoT.
//
// Deletes a thing group.
//
// Requires permission to access the DeleteThingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteThingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteThingGroup(input *DeleteThingGroupInput) (*DeleteThingGroupOutput, error) {
	req, out := c.DeleteThingGroupRequest(input)
	return out, req.Send()
}

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

const opDeleteThingType = "DeleteThingType"

// DeleteThingTypeRequest generates a "aws/request.Request" representing the
// client's request for the DeleteThingType 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 DeleteThingType for more information on using the DeleteThingType
// 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 DeleteThingTypeRequest method.
//	req, resp := client.DeleteThingTypeRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteThingTypeRequest(input *DeleteThingTypeInput) (req *request.Request, output *DeleteThingTypeOutput) {
	op := &request.Operation{
		Name:       opDeleteThingType,
		HTTPMethod: "DELETE",
		HTTPPath:   "/thing-types/{thingTypeName}",
	}

	if input == nil {
		input = &DeleteThingTypeInput{}
	}

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

// DeleteThingType API operation for AWS IoT.
//
// Deletes the specified thing type. You cannot delete a thing type if it has
// things associated with it. To delete a thing type, first mark it as deprecated
// by calling DeprecateThingType, then remove any associated things by calling
// UpdateThing to change the thing type on any associated thing, and finally
// use DeleteThingType to delete the thing type.
//
// Requires permission to access the DeleteThingType (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteThingType for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeleteThingType(input *DeleteThingTypeInput) (*DeleteThingTypeOutput, error) {
	req, out := c.DeleteThingTypeRequest(input)
	return out, req.Send()
}

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

const opDeleteTopicRule = "DeleteTopicRule"

// DeleteTopicRuleRequest generates a "aws/request.Request" representing the
// client's request for the DeleteTopicRule 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 DeleteTopicRule for more information on using the DeleteTopicRule
// 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 DeleteTopicRuleRequest method.
//	req, resp := client.DeleteTopicRuleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteTopicRuleRequest(input *DeleteTopicRuleInput) (req *request.Request, output *DeleteTopicRuleOutput) {
	op := &request.Operation{
		Name:       opDeleteTopicRule,
		HTTPMethod: "DELETE",
		HTTPPath:   "/rules/{ruleName}",
	}

	if input == nil {
		input = &DeleteTopicRuleInput{}
	}

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

// DeleteTopicRule API operation for AWS IoT.
//
// Deletes the rule.
//
// Requires permission to access the DeleteTopicRule (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteTopicRule for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
func (c *IoT) DeleteTopicRule(input *DeleteTopicRuleInput) (*DeleteTopicRuleOutput, error) {
	req, out := c.DeleteTopicRuleRequest(input)
	return out, req.Send()
}

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

const opDeleteTopicRuleDestination = "DeleteTopicRuleDestination"

// DeleteTopicRuleDestinationRequest generates a "aws/request.Request" representing the
// client's request for the DeleteTopicRuleDestination 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 DeleteTopicRuleDestination for more information on using the DeleteTopicRuleDestination
// 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 DeleteTopicRuleDestinationRequest method.
//	req, resp := client.DeleteTopicRuleDestinationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteTopicRuleDestinationRequest(input *DeleteTopicRuleDestinationInput) (req *request.Request, output *DeleteTopicRuleDestinationOutput) {
	op := &request.Operation{
		Name:       opDeleteTopicRuleDestination,
		HTTPMethod: "DELETE",
		HTTPPath:   "/destinations/{arn+}",
	}

	if input == nil {
		input = &DeleteTopicRuleDestinationInput{}
	}

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

// DeleteTopicRuleDestination API operation for AWS IoT.
//
// Deletes a topic rule destination.
//
// Requires permission to access the DeleteTopicRuleDestination (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteTopicRuleDestination for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
func (c *IoT) DeleteTopicRuleDestination(input *DeleteTopicRuleDestinationInput) (*DeleteTopicRuleDestinationOutput, error) {
	req, out := c.DeleteTopicRuleDestinationRequest(input)
	return out, req.Send()
}

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

const opDeleteV2LoggingLevel = "DeleteV2LoggingLevel"

// DeleteV2LoggingLevelRequest generates a "aws/request.Request" representing the
// client's request for the DeleteV2LoggingLevel 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 DeleteV2LoggingLevel for more information on using the DeleteV2LoggingLevel
// 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 DeleteV2LoggingLevelRequest method.
//	req, resp := client.DeleteV2LoggingLevelRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeleteV2LoggingLevelRequest(input *DeleteV2LoggingLevelInput) (req *request.Request, output *DeleteV2LoggingLevelOutput) {
	op := &request.Operation{
		Name:       opDeleteV2LoggingLevel,
		HTTPMethod: "DELETE",
		HTTPPath:   "/v2LoggingLevel",
	}

	if input == nil {
		input = &DeleteV2LoggingLevelInput{}
	}

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

// DeleteV2LoggingLevel API operation for AWS IoT.
//
// Deletes a logging level.
//
// Requires permission to access the DeleteV2LoggingLevel (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeleteV2LoggingLevel for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) DeleteV2LoggingLevel(input *DeleteV2LoggingLevelInput) (*DeleteV2LoggingLevelOutput, error) {
	req, out := c.DeleteV2LoggingLevelRequest(input)
	return out, req.Send()
}

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

const opDeprecateThingType = "DeprecateThingType"

// DeprecateThingTypeRequest generates a "aws/request.Request" representing the
// client's request for the DeprecateThingType 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 DeprecateThingType for more information on using the DeprecateThingType
// 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 DeprecateThingTypeRequest method.
//	req, resp := client.DeprecateThingTypeRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DeprecateThingTypeRequest(input *DeprecateThingTypeInput) (req *request.Request, output *DeprecateThingTypeOutput) {
	op := &request.Operation{
		Name:       opDeprecateThingType,
		HTTPMethod: "POST",
		HTTPPath:   "/thing-types/{thingTypeName}/deprecate",
	}

	if input == nil {
		input = &DeprecateThingTypeInput{}
	}

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

// DeprecateThingType API operation for AWS IoT.
//
// Deprecates a thing type. You can not associate new things with deprecated
// thing type.
//
// Requires permission to access the DeprecateThingType (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DeprecateThingType for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DeprecateThingType(input *DeprecateThingTypeInput) (*DeprecateThingTypeOutput, error) {
	req, out := c.DeprecateThingTypeRequest(input)
	return out, req.Send()
}

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

const opDescribeAccountAuditConfiguration = "DescribeAccountAuditConfiguration"

// DescribeAccountAuditConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAccountAuditConfiguration 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 DescribeAccountAuditConfiguration for more information on using the DescribeAccountAuditConfiguration
// 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 DescribeAccountAuditConfigurationRequest method.
//	req, resp := client.DescribeAccountAuditConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeAccountAuditConfigurationRequest(input *DescribeAccountAuditConfigurationInput) (req *request.Request, output *DescribeAccountAuditConfigurationOutput) {
	op := &request.Operation{
		Name:       opDescribeAccountAuditConfiguration,
		HTTPMethod: "GET",
		HTTPPath:   "/audit/configuration",
	}

	if input == nil {
		input = &DescribeAccountAuditConfigurationInput{}
	}

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

// DescribeAccountAuditConfiguration API operation for AWS IoT.
//
// Gets information about the Device Defender audit settings for this account.
// Settings include how audit notifications are sent and which audit checks
// are enabled or disabled.
//
// Requires permission to access the DescribeAccountAuditConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeAccountAuditConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeAccountAuditConfiguration(input *DescribeAccountAuditConfigurationInput) (*DescribeAccountAuditConfigurationOutput, error) {
	req, out := c.DescribeAccountAuditConfigurationRequest(input)
	return out, req.Send()
}

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

const opDescribeAuditFinding = "DescribeAuditFinding"

// DescribeAuditFindingRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAuditFinding 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 DescribeAuditFinding for more information on using the DescribeAuditFinding
// 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 DescribeAuditFindingRequest method.
//	req, resp := client.DescribeAuditFindingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeAuditFindingRequest(input *DescribeAuditFindingInput) (req *request.Request, output *DescribeAuditFindingOutput) {
	op := &request.Operation{
		Name:       opDescribeAuditFinding,
		HTTPMethod: "GET",
		HTTPPath:   "/audit/findings/{findingId}",
	}

	if input == nil {
		input = &DescribeAuditFindingInput{}
	}

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

// DescribeAuditFinding API operation for AWS IoT.
//
// Gets information about a single audit finding. Properties include the reason
// for noncompliance, the severity of the issue, and the start time when the
// audit that returned the finding.
//
// Requires permission to access the DescribeAuditFinding (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeAuditFinding for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeAuditFinding(input *DescribeAuditFindingInput) (*DescribeAuditFindingOutput, error) {
	req, out := c.DescribeAuditFindingRequest(input)
	return out, req.Send()
}

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

const opDescribeAuditMitigationActionsTask = "DescribeAuditMitigationActionsTask"

// DescribeAuditMitigationActionsTaskRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAuditMitigationActionsTask 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 DescribeAuditMitigationActionsTask for more information on using the DescribeAuditMitigationActionsTask
// 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 DescribeAuditMitigationActionsTaskRequest method.
//	req, resp := client.DescribeAuditMitigationActionsTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeAuditMitigationActionsTaskRequest(input *DescribeAuditMitigationActionsTaskInput) (req *request.Request, output *DescribeAuditMitigationActionsTaskOutput) {
	op := &request.Operation{
		Name:       opDescribeAuditMitigationActionsTask,
		HTTPMethod: "GET",
		HTTPPath:   "/audit/mitigationactions/tasks/{taskId}",
	}

	if input == nil {
		input = &DescribeAuditMitigationActionsTaskInput{}
	}

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

// DescribeAuditMitigationActionsTask API operation for AWS IoT.
//
// Gets information about an audit mitigation task that is used to apply mitigation
// actions to a set of audit findings. Properties include the actions being
// applied, the audit checks to which they're being applied, the task status,
// and aggregated task statistics.
//
// 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 IoT's
// API operation DescribeAuditMitigationActionsTask for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeAuditMitigationActionsTask(input *DescribeAuditMitigationActionsTaskInput) (*DescribeAuditMitigationActionsTaskOutput, error) {
	req, out := c.DescribeAuditMitigationActionsTaskRequest(input)
	return out, req.Send()
}

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

const opDescribeAuditSuppression = "DescribeAuditSuppression"

// DescribeAuditSuppressionRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAuditSuppression 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 DescribeAuditSuppression for more information on using the DescribeAuditSuppression
// 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 DescribeAuditSuppressionRequest method.
//	req, resp := client.DescribeAuditSuppressionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeAuditSuppressionRequest(input *DescribeAuditSuppressionInput) (req *request.Request, output *DescribeAuditSuppressionOutput) {
	op := &request.Operation{
		Name:       opDescribeAuditSuppression,
		HTTPMethod: "POST",
		HTTPPath:   "/audit/suppressions/describe",
	}

	if input == nil {
		input = &DescribeAuditSuppressionInput{}
	}

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

// DescribeAuditSuppression API operation for AWS IoT.
//
// Gets information about a Device Defender audit suppression.
//
// 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 IoT's
// API operation DescribeAuditSuppression for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeAuditSuppression(input *DescribeAuditSuppressionInput) (*DescribeAuditSuppressionOutput, error) {
	req, out := c.DescribeAuditSuppressionRequest(input)
	return out, req.Send()
}

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

const opDescribeAuditTask = "DescribeAuditTask"

// DescribeAuditTaskRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAuditTask 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 DescribeAuditTask for more information on using the DescribeAuditTask
// 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 DescribeAuditTaskRequest method.
//	req, resp := client.DescribeAuditTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeAuditTaskRequest(input *DescribeAuditTaskInput) (req *request.Request, output *DescribeAuditTaskOutput) {
	op := &request.Operation{
		Name:       opDescribeAuditTask,
		HTTPMethod: "GET",
		HTTPPath:   "/audit/tasks/{taskId}",
	}

	if input == nil {
		input = &DescribeAuditTaskInput{}
	}

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

// DescribeAuditTask API operation for AWS IoT.
//
// Gets information about a Device Defender audit.
//
// Requires permission to access the DescribeAuditTask (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeAuditTask for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeAuditTask(input *DescribeAuditTaskInput) (*DescribeAuditTaskOutput, error) {
	req, out := c.DescribeAuditTaskRequest(input)
	return out, req.Send()
}

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

const opDescribeAuthorizer = "DescribeAuthorizer"

// DescribeAuthorizerRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAuthorizer 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 DescribeAuthorizer for more information on using the DescribeAuthorizer
// 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 DescribeAuthorizerRequest method.
//	req, resp := client.DescribeAuthorizerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeAuthorizerRequest(input *DescribeAuthorizerInput) (req *request.Request, output *DescribeAuthorizerOutput) {
	op := &request.Operation{
		Name:       opDescribeAuthorizer,
		HTTPMethod: "GET",
		HTTPPath:   "/authorizer/{authorizerName}",
	}

	if input == nil {
		input = &DescribeAuthorizerInput{}
	}

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

// DescribeAuthorizer API operation for AWS IoT.
//
// Describes an authorizer.
//
// Requires permission to access the DescribeAuthorizer (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeAuthorizer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeAuthorizer(input *DescribeAuthorizerInput) (*DescribeAuthorizerOutput, error) {
	req, out := c.DescribeAuthorizerRequest(input)
	return out, req.Send()
}

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

const opDescribeBillingGroup = "DescribeBillingGroup"

// DescribeBillingGroupRequest generates a "aws/request.Request" representing the
// client's request for the DescribeBillingGroup 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 DescribeBillingGroup for more information on using the DescribeBillingGroup
// 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 DescribeBillingGroupRequest method.
//	req, resp := client.DescribeBillingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeBillingGroupRequest(input *DescribeBillingGroupInput) (req *request.Request, output *DescribeBillingGroupOutput) {
	op := &request.Operation{
		Name:       opDescribeBillingGroup,
		HTTPMethod: "GET",
		HTTPPath:   "/billing-groups/{billingGroupName}",
	}

	if input == nil {
		input = &DescribeBillingGroupInput{}
	}

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

// DescribeBillingGroup API operation for AWS IoT.
//
// Returns information about a billing group.
//
// Requires permission to access the DescribeBillingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeBillingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) DescribeBillingGroup(input *DescribeBillingGroupInput) (*DescribeBillingGroupOutput, error) {
	req, out := c.DescribeBillingGroupRequest(input)
	return out, req.Send()
}

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

const opDescribeCACertificate = "DescribeCACertificate"

// DescribeCACertificateRequest generates a "aws/request.Request" representing the
// client's request for the DescribeCACertificate 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 DescribeCACertificate for more information on using the DescribeCACertificate
// 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 DescribeCACertificateRequest method.
//	req, resp := client.DescribeCACertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeCACertificateRequest(input *DescribeCACertificateInput) (req *request.Request, output *DescribeCACertificateOutput) {
	op := &request.Operation{
		Name:       opDescribeCACertificate,
		HTTPMethod: "GET",
		HTTPPath:   "/cacertificate/{caCertificateId}",
	}

	if input == nil {
		input = &DescribeCACertificateInput{}
	}

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

// DescribeCACertificate API operation for AWS IoT.
//
// Describes a registered CA certificate.
//
// Requires permission to access the DescribeCACertificate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeCACertificate for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) DescribeCACertificate(input *DescribeCACertificateInput) (*DescribeCACertificateOutput, error) {
	req, out := c.DescribeCACertificateRequest(input)
	return out, req.Send()
}

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

const opDescribeCertificate = "DescribeCertificate"

// DescribeCertificateRequest generates a "aws/request.Request" representing the
// client's request for the DescribeCertificate 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 DescribeCertificate for more information on using the DescribeCertificate
// 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 DescribeCertificateRequest method.
//	req, resp := client.DescribeCertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeCertificateRequest(input *DescribeCertificateInput) (req *request.Request, output *DescribeCertificateOutput) {
	op := &request.Operation{
		Name:       opDescribeCertificate,
		HTTPMethod: "GET",
		HTTPPath:   "/certificates/{certificateId}",
	}

	if input == nil {
		input = &DescribeCertificateInput{}
	}

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

// DescribeCertificate API operation for AWS IoT.
//
// Gets information about the specified certificate.
//
// Requires permission to access the DescribeCertificate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeCertificate for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) DescribeCertificate(input *DescribeCertificateInput) (*DescribeCertificateOutput, error) {
	req, out := c.DescribeCertificateRequest(input)
	return out, req.Send()
}

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

const opDescribeCertificateProvider = "DescribeCertificateProvider"

// DescribeCertificateProviderRequest generates a "aws/request.Request" representing the
// client's request for the DescribeCertificateProvider 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 DescribeCertificateProvider for more information on using the DescribeCertificateProvider
// 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 DescribeCertificateProviderRequest method.
//	req, resp := client.DescribeCertificateProviderRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeCertificateProviderRequest(input *DescribeCertificateProviderInput) (req *request.Request, output *DescribeCertificateProviderOutput) {
	op := &request.Operation{
		Name:       opDescribeCertificateProvider,
		HTTPMethod: "GET",
		HTTPPath:   "/certificate-providers/{certificateProviderName}",
	}

	if input == nil {
		input = &DescribeCertificateProviderInput{}
	}

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

// DescribeCertificateProvider API operation for AWS IoT.
//
// Describes a certificate provider.
//
// Requires permission to access the DescribeCertificateProvider (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeCertificateProvider for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeCertificateProvider(input *DescribeCertificateProviderInput) (*DescribeCertificateProviderOutput, error) {
	req, out := c.DescribeCertificateProviderRequest(input)
	return out, req.Send()
}

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

const opDescribeCustomMetric = "DescribeCustomMetric"

// DescribeCustomMetricRequest generates a "aws/request.Request" representing the
// client's request for the DescribeCustomMetric 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 DescribeCustomMetric for more information on using the DescribeCustomMetric
// 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 DescribeCustomMetricRequest method.
//	req, resp := client.DescribeCustomMetricRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeCustomMetricRequest(input *DescribeCustomMetricInput) (req *request.Request, output *DescribeCustomMetricOutput) {
	op := &request.Operation{
		Name:       opDescribeCustomMetric,
		HTTPMethod: "GET",
		HTTPPath:   "/custom-metric/{metricName}",
	}

	if input == nil {
		input = &DescribeCustomMetricInput{}
	}

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

// DescribeCustomMetric API operation for AWS IoT.
//
// Gets information about a Device Defender detect custom metric.
//
// Requires permission to access the DescribeCustomMetric (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeCustomMetric for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeCustomMetric(input *DescribeCustomMetricInput) (*DescribeCustomMetricOutput, error) {
	req, out := c.DescribeCustomMetricRequest(input)
	return out, req.Send()
}

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

const opDescribeDefaultAuthorizer = "DescribeDefaultAuthorizer"

// DescribeDefaultAuthorizerRequest generates a "aws/request.Request" representing the
// client's request for the DescribeDefaultAuthorizer 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 DescribeDefaultAuthorizer for more information on using the DescribeDefaultAuthorizer
// 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 DescribeDefaultAuthorizerRequest method.
//	req, resp := client.DescribeDefaultAuthorizerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeDefaultAuthorizerRequest(input *DescribeDefaultAuthorizerInput) (req *request.Request, output *DescribeDefaultAuthorizerOutput) {
	op := &request.Operation{
		Name:       opDescribeDefaultAuthorizer,
		HTTPMethod: "GET",
		HTTPPath:   "/default-authorizer",
	}

	if input == nil {
		input = &DescribeDefaultAuthorizerInput{}
	}

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

// DescribeDefaultAuthorizer API operation for AWS IoT.
//
// Describes the default authorizer.
//
// Requires permission to access the DescribeDefaultAuthorizer (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeDefaultAuthorizer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeDefaultAuthorizer(input *DescribeDefaultAuthorizerInput) (*DescribeDefaultAuthorizerOutput, error) {
	req, out := c.DescribeDefaultAuthorizerRequest(input)
	return out, req.Send()
}

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

const opDescribeDetectMitigationActionsTask = "DescribeDetectMitigationActionsTask"

// DescribeDetectMitigationActionsTaskRequest generates a "aws/request.Request" representing the
// client's request for the DescribeDetectMitigationActionsTask 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 DescribeDetectMitigationActionsTask for more information on using the DescribeDetectMitigationActionsTask
// 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 DescribeDetectMitigationActionsTaskRequest method.
//	req, resp := client.DescribeDetectMitigationActionsTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeDetectMitigationActionsTaskRequest(input *DescribeDetectMitigationActionsTaskInput) (req *request.Request, output *DescribeDetectMitigationActionsTaskOutput) {
	op := &request.Operation{
		Name:       opDescribeDetectMitigationActionsTask,
		HTTPMethod: "GET",
		HTTPPath:   "/detect/mitigationactions/tasks/{taskId}",
	}

	if input == nil {
		input = &DescribeDetectMitigationActionsTaskInput{}
	}

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

// DescribeDetectMitigationActionsTask API operation for AWS IoT.
//
// Gets information about a Device Defender ML Detect mitigation action.
//
// Requires permission to access the DescribeDetectMitigationActionsTask (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeDetectMitigationActionsTask for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeDetectMitigationActionsTask(input *DescribeDetectMitigationActionsTaskInput) (*DescribeDetectMitigationActionsTaskOutput, error) {
	req, out := c.DescribeDetectMitigationActionsTaskRequest(input)
	return out, req.Send()
}

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

const opDescribeDimension = "DescribeDimension"

// DescribeDimensionRequest generates a "aws/request.Request" representing the
// client's request for the DescribeDimension 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 DescribeDimension for more information on using the DescribeDimension
// 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 DescribeDimensionRequest method.
//	req, resp := client.DescribeDimensionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeDimensionRequest(input *DescribeDimensionInput) (req *request.Request, output *DescribeDimensionOutput) {
	op := &request.Operation{
		Name:       opDescribeDimension,
		HTTPMethod: "GET",
		HTTPPath:   "/dimensions/{name}",
	}

	if input == nil {
		input = &DescribeDimensionInput{}
	}

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

// DescribeDimension API operation for AWS IoT.
//
// Provides details about a dimension that is defined in your Amazon Web Services
// accounts.
//
// Requires permission to access the DescribeDimension (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeDimension for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) DescribeDimension(input *DescribeDimensionInput) (*DescribeDimensionOutput, error) {
	req, out := c.DescribeDimensionRequest(input)
	return out, req.Send()
}

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

const opDescribeDomainConfiguration = "DescribeDomainConfiguration"

// DescribeDomainConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the DescribeDomainConfiguration 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 DescribeDomainConfiguration for more information on using the DescribeDomainConfiguration
// 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 DescribeDomainConfigurationRequest method.
//	req, resp := client.DescribeDomainConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeDomainConfigurationRequest(input *DescribeDomainConfigurationInput) (req *request.Request, output *DescribeDomainConfigurationOutput) {
	op := &request.Operation{
		Name:       opDescribeDomainConfiguration,
		HTTPMethod: "GET",
		HTTPPath:   "/domainConfigurations/{domainConfigurationName}",
	}

	if input == nil {
		input = &DescribeDomainConfigurationInput{}
	}

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

// DescribeDomainConfiguration API operation for AWS IoT.
//
// Gets summary information about a domain configuration.
//
// Requires permission to access the DescribeDomainConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeDomainConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeDomainConfiguration(input *DescribeDomainConfigurationInput) (*DescribeDomainConfigurationOutput, error) {
	req, out := c.DescribeDomainConfigurationRequest(input)
	return out, req.Send()
}

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

const opDescribeEndpoint = "DescribeEndpoint"

// DescribeEndpointRequest generates a "aws/request.Request" representing the
// client's request for the DescribeEndpoint 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 DescribeEndpoint for more information on using the DescribeEndpoint
// 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 DescribeEndpointRequest method.
//	req, resp := client.DescribeEndpointRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeEndpointRequest(input *DescribeEndpointInput) (req *request.Request, output *DescribeEndpointOutput) {
	op := &request.Operation{
		Name:       opDescribeEndpoint,
		HTTPMethod: "GET",
		HTTPPath:   "/endpoint",
	}

	if input == nil {
		input = &DescribeEndpointInput{}
	}

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

// DescribeEndpoint API operation for AWS IoT.
//
// Returns or creates a unique endpoint specific to the Amazon Web Services
// account making the call.
//
// The first time DescribeEndpoint is called, an endpoint is created. All subsequent
// calls to DescribeEndpoint return the same endpoint.
//
// Requires permission to access the DescribeEndpoint (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeEndpoint for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) DescribeEndpoint(input *DescribeEndpointInput) (*DescribeEndpointOutput, error) {
	req, out := c.DescribeEndpointRequest(input)
	return out, req.Send()
}

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

const opDescribeEventConfigurations = "DescribeEventConfigurations"

// DescribeEventConfigurationsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeEventConfigurations 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 DescribeEventConfigurations for more information on using the DescribeEventConfigurations
// 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 DescribeEventConfigurationsRequest method.
//	req, resp := client.DescribeEventConfigurationsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeEventConfigurationsRequest(input *DescribeEventConfigurationsInput) (req *request.Request, output *DescribeEventConfigurationsOutput) {
	op := &request.Operation{
		Name:       opDescribeEventConfigurations,
		HTTPMethod: "GET",
		HTTPPath:   "/event-configurations",
	}

	if input == nil {
		input = &DescribeEventConfigurationsInput{}
	}

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

// DescribeEventConfigurations API operation for AWS IoT.
//
// Describes event configurations.
//
// Requires permission to access the DescribeEventConfigurations (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeEventConfigurations for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) DescribeEventConfigurations(input *DescribeEventConfigurationsInput) (*DescribeEventConfigurationsOutput, error) {
	req, out := c.DescribeEventConfigurationsRequest(input)
	return out, req.Send()
}

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

const opDescribeFleetMetric = "DescribeFleetMetric"

// DescribeFleetMetricRequest generates a "aws/request.Request" representing the
// client's request for the DescribeFleetMetric 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 DescribeFleetMetric for more information on using the DescribeFleetMetric
// 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 DescribeFleetMetricRequest method.
//	req, resp := client.DescribeFleetMetricRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeFleetMetricRequest(input *DescribeFleetMetricInput) (req *request.Request, output *DescribeFleetMetricOutput) {
	op := &request.Operation{
		Name:       opDescribeFleetMetric,
		HTTPMethod: "GET",
		HTTPPath:   "/fleet-metric/{metricName}",
	}

	if input == nil {
		input = &DescribeFleetMetricInput{}
	}

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

// DescribeFleetMetric API operation for AWS IoT.
//
// Gets information about the specified fleet metric.
//
// Requires permission to access the DescribeFleetMetric (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeFleetMetric for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) DescribeFleetMetric(input *DescribeFleetMetricInput) (*DescribeFleetMetricOutput, error) {
	req, out := c.DescribeFleetMetricRequest(input)
	return out, req.Send()
}

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

const opDescribeIndex = "DescribeIndex"

// DescribeIndexRequest generates a "aws/request.Request" representing the
// client's request for the DescribeIndex 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 DescribeIndex for more information on using the DescribeIndex
// 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 DescribeIndexRequest method.
//	req, resp := client.DescribeIndexRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeIndexRequest(input *DescribeIndexInput) (req *request.Request, output *DescribeIndexOutput) {
	op := &request.Operation{
		Name:       opDescribeIndex,
		HTTPMethod: "GET",
		HTTPPath:   "/indices/{indexName}",
	}

	if input == nil {
		input = &DescribeIndexInput{}
	}

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

// DescribeIndex API operation for AWS IoT.
//
// Describes a search index.
//
// Requires permission to access the DescribeIndex (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeIndex for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) DescribeIndex(input *DescribeIndexInput) (*DescribeIndexOutput, error) {
	req, out := c.DescribeIndexRequest(input)
	return out, req.Send()
}

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

const opDescribeJob = "DescribeJob"

// DescribeJobRequest generates a "aws/request.Request" representing the
// client's request for the DescribeJob 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 DescribeJob for more information on using the DescribeJob
// 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 DescribeJobRequest method.
//	req, resp := client.DescribeJobRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeJobRequest(input *DescribeJobInput) (req *request.Request, output *DescribeJobOutput) {
	op := &request.Operation{
		Name:       opDescribeJob,
		HTTPMethod: "GET",
		HTTPPath:   "/jobs/{jobId}",
	}

	if input == nil {
		input = &DescribeJobInput{}
	}

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

// DescribeJob API operation for AWS IoT.
//
// Describes a job.
//
// Requires permission to access the DescribeJob (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeJob for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) DescribeJob(input *DescribeJobInput) (*DescribeJobOutput, error) {
	req, out := c.DescribeJobRequest(input)
	return out, req.Send()
}

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

const opDescribeJobExecution = "DescribeJobExecution"

// DescribeJobExecutionRequest generates a "aws/request.Request" representing the
// client's request for the DescribeJobExecution 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 DescribeJobExecution for more information on using the DescribeJobExecution
// 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 DescribeJobExecutionRequest method.
//	req, resp := client.DescribeJobExecutionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeJobExecutionRequest(input *DescribeJobExecutionInput) (req *request.Request, output *DescribeJobExecutionOutput) {
	op := &request.Operation{
		Name:       opDescribeJobExecution,
		HTTPMethod: "GET",
		HTTPPath:   "/things/{thingName}/jobs/{jobId}",
	}

	if input == nil {
		input = &DescribeJobExecutionInput{}
	}

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

// DescribeJobExecution API operation for AWS IoT.
//
// Describes a job execution.
//
// Requires permission to access the DescribeJobExecution (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeJobExecution for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) DescribeJobExecution(input *DescribeJobExecutionInput) (*DescribeJobExecutionOutput, error) {
	req, out := c.DescribeJobExecutionRequest(input)
	return out, req.Send()
}

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

const opDescribeJobTemplate = "DescribeJobTemplate"

// DescribeJobTemplateRequest generates a "aws/request.Request" representing the
// client's request for the DescribeJobTemplate 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 DescribeJobTemplate for more information on using the DescribeJobTemplate
// 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 DescribeJobTemplateRequest method.
//	req, resp := client.DescribeJobTemplateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeJobTemplateRequest(input *DescribeJobTemplateInput) (req *request.Request, output *DescribeJobTemplateOutput) {
	op := &request.Operation{
		Name:       opDescribeJobTemplate,
		HTTPMethod: "GET",
		HTTPPath:   "/job-templates/{jobTemplateId}",
	}

	if input == nil {
		input = &DescribeJobTemplateInput{}
	}

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

// DescribeJobTemplate API operation for AWS IoT.
//
// Returns information about a job template.
//
// 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 IoT's
// API operation DescribeJobTemplate for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeJobTemplate(input *DescribeJobTemplateInput) (*DescribeJobTemplateOutput, error) {
	req, out := c.DescribeJobTemplateRequest(input)
	return out, req.Send()
}

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

const opDescribeManagedJobTemplate = "DescribeManagedJobTemplate"

// DescribeManagedJobTemplateRequest generates a "aws/request.Request" representing the
// client's request for the DescribeManagedJobTemplate 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 DescribeManagedJobTemplate for more information on using the DescribeManagedJobTemplate
// 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 DescribeManagedJobTemplateRequest method.
//	req, resp := client.DescribeManagedJobTemplateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeManagedJobTemplateRequest(input *DescribeManagedJobTemplateInput) (req *request.Request, output *DescribeManagedJobTemplateOutput) {
	op := &request.Operation{
		Name:       opDescribeManagedJobTemplate,
		HTTPMethod: "GET",
		HTTPPath:   "/managed-job-templates/{templateName}",
	}

	if input == nil {
		input = &DescribeManagedJobTemplateInput{}
	}

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

// DescribeManagedJobTemplate API operation for AWS IoT.
//
// View details of a managed job template.
//
// 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 IoT's
// API operation DescribeManagedJobTemplate for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
func (c *IoT) DescribeManagedJobTemplate(input *DescribeManagedJobTemplateInput) (*DescribeManagedJobTemplateOutput, error) {
	req, out := c.DescribeManagedJobTemplateRequest(input)
	return out, req.Send()
}

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

const opDescribeMitigationAction = "DescribeMitigationAction"

// DescribeMitigationActionRequest generates a "aws/request.Request" representing the
// client's request for the DescribeMitigationAction 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 DescribeMitigationAction for more information on using the DescribeMitigationAction
// 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 DescribeMitigationActionRequest method.
//	req, resp := client.DescribeMitigationActionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeMitigationActionRequest(input *DescribeMitigationActionInput) (req *request.Request, output *DescribeMitigationActionOutput) {
	op := &request.Operation{
		Name:       opDescribeMitigationAction,
		HTTPMethod: "GET",
		HTTPPath:   "/mitigationactions/actions/{actionName}",
	}

	if input == nil {
		input = &DescribeMitigationActionInput{}
	}

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

// DescribeMitigationAction API operation for AWS IoT.
//
// Gets information about a mitigation action.
//
// Requires permission to access the DescribeMitigationAction (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeMitigationAction for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeMitigationAction(input *DescribeMitigationActionInput) (*DescribeMitigationActionOutput, error) {
	req, out := c.DescribeMitigationActionRequest(input)
	return out, req.Send()
}

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

const opDescribeProvisioningTemplate = "DescribeProvisioningTemplate"

// DescribeProvisioningTemplateRequest generates a "aws/request.Request" representing the
// client's request for the DescribeProvisioningTemplate 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 DescribeProvisioningTemplate for more information on using the DescribeProvisioningTemplate
// 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 DescribeProvisioningTemplateRequest method.
//	req, resp := client.DescribeProvisioningTemplateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeProvisioningTemplateRequest(input *DescribeProvisioningTemplateInput) (req *request.Request, output *DescribeProvisioningTemplateOutput) {
	op := &request.Operation{
		Name:       opDescribeProvisioningTemplate,
		HTTPMethod: "GET",
		HTTPPath:   "/provisioning-templates/{templateName}",
	}

	if input == nil {
		input = &DescribeProvisioningTemplateInput{}
	}

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

// DescribeProvisioningTemplate API operation for AWS IoT.
//
// Returns information about a provisioning template.
//
// Requires permission to access the DescribeProvisioningTemplate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeProvisioningTemplate for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
func (c *IoT) DescribeProvisioningTemplate(input *DescribeProvisioningTemplateInput) (*DescribeProvisioningTemplateOutput, error) {
	req, out := c.DescribeProvisioningTemplateRequest(input)
	return out, req.Send()
}

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

const opDescribeProvisioningTemplateVersion = "DescribeProvisioningTemplateVersion"

// DescribeProvisioningTemplateVersionRequest generates a "aws/request.Request" representing the
// client's request for the DescribeProvisioningTemplateVersion 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 DescribeProvisioningTemplateVersion for more information on using the DescribeProvisioningTemplateVersion
// 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 DescribeProvisioningTemplateVersionRequest method.
//	req, resp := client.DescribeProvisioningTemplateVersionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeProvisioningTemplateVersionRequest(input *DescribeProvisioningTemplateVersionInput) (req *request.Request, output *DescribeProvisioningTemplateVersionOutput) {
	op := &request.Operation{
		Name:       opDescribeProvisioningTemplateVersion,
		HTTPMethod: "GET",
		HTTPPath:   "/provisioning-templates/{templateName}/versions/{versionId}",
	}

	if input == nil {
		input = &DescribeProvisioningTemplateVersionInput{}
	}

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

// DescribeProvisioningTemplateVersion API operation for AWS IoT.
//
// Returns information about a provisioning template version.
//
// Requires permission to access the DescribeProvisioningTemplateVersion (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeProvisioningTemplateVersion for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
func (c *IoT) DescribeProvisioningTemplateVersion(input *DescribeProvisioningTemplateVersionInput) (*DescribeProvisioningTemplateVersionOutput, error) {
	req, out := c.DescribeProvisioningTemplateVersionRequest(input)
	return out, req.Send()
}

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

const opDescribeRoleAlias = "DescribeRoleAlias"

// DescribeRoleAliasRequest generates a "aws/request.Request" representing the
// client's request for the DescribeRoleAlias 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 DescribeRoleAlias for more information on using the DescribeRoleAlias
// 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 DescribeRoleAliasRequest method.
//	req, resp := client.DescribeRoleAliasRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeRoleAliasRequest(input *DescribeRoleAliasInput) (req *request.Request, output *DescribeRoleAliasOutput) {
	op := &request.Operation{
		Name:       opDescribeRoleAlias,
		HTTPMethod: "GET",
		HTTPPath:   "/role-aliases/{roleAlias}",
	}

	if input == nil {
		input = &DescribeRoleAliasInput{}
	}

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

// DescribeRoleAlias API operation for AWS IoT.
//
// Describes a role alias.
//
// Requires permission to access the DescribeRoleAlias (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeRoleAlias for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) DescribeRoleAlias(input *DescribeRoleAliasInput) (*DescribeRoleAliasOutput, error) {
	req, out := c.DescribeRoleAliasRequest(input)
	return out, req.Send()
}

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

const opDescribeScheduledAudit = "DescribeScheduledAudit"

// DescribeScheduledAuditRequest generates a "aws/request.Request" representing the
// client's request for the DescribeScheduledAudit 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 DescribeScheduledAudit for more information on using the DescribeScheduledAudit
// 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 DescribeScheduledAuditRequest method.
//	req, resp := client.DescribeScheduledAuditRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeScheduledAuditRequest(input *DescribeScheduledAuditInput) (req *request.Request, output *DescribeScheduledAuditOutput) {
	op := &request.Operation{
		Name:       opDescribeScheduledAudit,
		HTTPMethod: "GET",
		HTTPPath:   "/audit/scheduledaudits/{scheduledAuditName}",
	}

	if input == nil {
		input = &DescribeScheduledAuditInput{}
	}

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

// DescribeScheduledAudit API operation for AWS IoT.
//
// Gets information about a scheduled audit.
//
// Requires permission to access the DescribeScheduledAudit (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeScheduledAudit for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeScheduledAudit(input *DescribeScheduledAuditInput) (*DescribeScheduledAuditOutput, error) {
	req, out := c.DescribeScheduledAuditRequest(input)
	return out, req.Send()
}

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

const opDescribeSecurityProfile = "DescribeSecurityProfile"

// DescribeSecurityProfileRequest generates a "aws/request.Request" representing the
// client's request for the DescribeSecurityProfile 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 DescribeSecurityProfile for more information on using the DescribeSecurityProfile
// 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 DescribeSecurityProfileRequest method.
//	req, resp := client.DescribeSecurityProfileRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeSecurityProfileRequest(input *DescribeSecurityProfileInput) (req *request.Request, output *DescribeSecurityProfileOutput) {
	op := &request.Operation{
		Name:       opDescribeSecurityProfile,
		HTTPMethod: "GET",
		HTTPPath:   "/security-profiles/{securityProfileName}",
	}

	if input == nil {
		input = &DescribeSecurityProfileInput{}
	}

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

// DescribeSecurityProfile API operation for AWS IoT.
//
// Gets information about a Device Defender security profile.
//
// Requires permission to access the DescribeSecurityProfile (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeSecurityProfile for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeSecurityProfile(input *DescribeSecurityProfileInput) (*DescribeSecurityProfileOutput, error) {
	req, out := c.DescribeSecurityProfileRequest(input)
	return out, req.Send()
}

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

const opDescribeStream = "DescribeStream"

// DescribeStreamRequest generates a "aws/request.Request" representing the
// client's request for the DescribeStream 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 DescribeStream for more information on using the DescribeStream
// 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 DescribeStreamRequest method.
//	req, resp := client.DescribeStreamRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeStreamRequest(input *DescribeStreamInput) (req *request.Request, output *DescribeStreamOutput) {
	op := &request.Operation{
		Name:       opDescribeStream,
		HTTPMethod: "GET",
		HTTPPath:   "/streams/{streamId}",
	}

	if input == nil {
		input = &DescribeStreamInput{}
	}

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

// DescribeStream API operation for AWS IoT.
//
// Gets information about a stream.
//
// Requires permission to access the DescribeStream (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeStream for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeStream(input *DescribeStreamInput) (*DescribeStreamOutput, error) {
	req, out := c.DescribeStreamRequest(input)
	return out, req.Send()
}

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

const opDescribeThing = "DescribeThing"

// DescribeThingRequest generates a "aws/request.Request" representing the
// client's request for the DescribeThing 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 DescribeThing for more information on using the DescribeThing
// 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 DescribeThingRequest method.
//	req, resp := client.DescribeThingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeThingRequest(input *DescribeThingInput) (req *request.Request, output *DescribeThingOutput) {
	op := &request.Operation{
		Name:       opDescribeThing,
		HTTPMethod: "GET",
		HTTPPath:   "/things/{thingName}",
	}

	if input == nil {
		input = &DescribeThingInput{}
	}

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

// DescribeThing API operation for AWS IoT.
//
// Gets information about the specified thing.
//
// Requires permission to access the DescribeThing (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeThing for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeThing(input *DescribeThingInput) (*DescribeThingOutput, error) {
	req, out := c.DescribeThingRequest(input)
	return out, req.Send()
}

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

const opDescribeThingGroup = "DescribeThingGroup"

// DescribeThingGroupRequest generates a "aws/request.Request" representing the
// client's request for the DescribeThingGroup 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 DescribeThingGroup for more information on using the DescribeThingGroup
// 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 DescribeThingGroupRequest method.
//	req, resp := client.DescribeThingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeThingGroupRequest(input *DescribeThingGroupInput) (req *request.Request, output *DescribeThingGroupOutput) {
	op := &request.Operation{
		Name:       opDescribeThingGroup,
		HTTPMethod: "GET",
		HTTPPath:   "/thing-groups/{thingGroupName}",
	}

	if input == nil {
		input = &DescribeThingGroupInput{}
	}

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

// DescribeThingGroup API operation for AWS IoT.
//
// Describe a thing group.
//
// Requires permission to access the DescribeThingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeThingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) DescribeThingGroup(input *DescribeThingGroupInput) (*DescribeThingGroupOutput, error) {
	req, out := c.DescribeThingGroupRequest(input)
	return out, req.Send()
}

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

const opDescribeThingRegistrationTask = "DescribeThingRegistrationTask"

// DescribeThingRegistrationTaskRequest generates a "aws/request.Request" representing the
// client's request for the DescribeThingRegistrationTask 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 DescribeThingRegistrationTask for more information on using the DescribeThingRegistrationTask
// 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 DescribeThingRegistrationTaskRequest method.
//	req, resp := client.DescribeThingRegistrationTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeThingRegistrationTaskRequest(input *DescribeThingRegistrationTaskInput) (req *request.Request, output *DescribeThingRegistrationTaskOutput) {
	op := &request.Operation{
		Name:       opDescribeThingRegistrationTask,
		HTTPMethod: "GET",
		HTTPPath:   "/thing-registration-tasks/{taskId}",
	}

	if input == nil {
		input = &DescribeThingRegistrationTaskInput{}
	}

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

// DescribeThingRegistrationTask API operation for AWS IoT.
//
// Describes a bulk thing provisioning task.
//
// Requires permission to access the DescribeThingRegistrationTask (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeThingRegistrationTask for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) DescribeThingRegistrationTask(input *DescribeThingRegistrationTaskInput) (*DescribeThingRegistrationTaskOutput, error) {
	req, out := c.DescribeThingRegistrationTaskRequest(input)
	return out, req.Send()
}

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

const opDescribeThingType = "DescribeThingType"

// DescribeThingTypeRequest generates a "aws/request.Request" representing the
// client's request for the DescribeThingType 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 DescribeThingType for more information on using the DescribeThingType
// 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 DescribeThingTypeRequest method.
//	req, resp := client.DescribeThingTypeRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DescribeThingTypeRequest(input *DescribeThingTypeInput) (req *request.Request, output *DescribeThingTypeOutput) {
	op := &request.Operation{
		Name:       opDescribeThingType,
		HTTPMethod: "GET",
		HTTPPath:   "/thing-types/{thingTypeName}",
	}

	if input == nil {
		input = &DescribeThingTypeInput{}
	}

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

// DescribeThingType API operation for AWS IoT.
//
// Gets information about the specified thing type.
//
// Requires permission to access the DescribeThingType (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DescribeThingType for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DescribeThingType(input *DescribeThingTypeInput) (*DescribeThingTypeOutput, error) {
	req, out := c.DescribeThingTypeRequest(input)
	return out, req.Send()
}

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

const opDetachPolicy = "DetachPolicy"

// DetachPolicyRequest generates a "aws/request.Request" representing the
// client's request for the DetachPolicy 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 DetachPolicy for more information on using the DetachPolicy
// 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 DetachPolicyRequest method.
//	req, resp := client.DetachPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DetachPolicyRequest(input *DetachPolicyInput) (req *request.Request, output *DetachPolicyOutput) {
	op := &request.Operation{
		Name:       opDetachPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/target-policies/{policyName}",
	}

	if input == nil {
		input = &DetachPolicyInput{}
	}

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

// DetachPolicy API operation for AWS IoT.
//
// Detaches a policy from the specified target.
//
// Because of the distributed nature of Amazon Web Services, it can take up
// to five minutes after a policy is detached before it's ready to be deleted.
//
// Requires permission to access the DetachPolicy (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DetachPolicy for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - LimitExceededException
//     A limit has been exceeded.
func (c *IoT) DetachPolicy(input *DetachPolicyInput) (*DetachPolicyOutput, error) {
	req, out := c.DetachPolicyRequest(input)
	return out, req.Send()
}

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

const opDetachPrincipalPolicy = "DetachPrincipalPolicy"

// DetachPrincipalPolicyRequest generates a "aws/request.Request" representing the
// client's request for the DetachPrincipalPolicy 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 DetachPrincipalPolicy for more information on using the DetachPrincipalPolicy
// 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 DetachPrincipalPolicyRequest method.
//	req, resp := client.DetachPrincipalPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// Deprecated: DetachPrincipalPolicy has been deprecated
func (c *IoT) DetachPrincipalPolicyRequest(input *DetachPrincipalPolicyInput) (req *request.Request, output *DetachPrincipalPolicyOutput) {
	if c.Client.Config.Logger != nil {
		c.Client.Config.Logger.Log("This operation, DetachPrincipalPolicy, has been deprecated")
	}
	op := &request.Operation{
		Name:       opDetachPrincipalPolicy,
		HTTPMethod: "DELETE",
		HTTPPath:   "/principal-policies/{policyName}",
	}

	if input == nil {
		input = &DetachPrincipalPolicyInput{}
	}

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

// DetachPrincipalPolicy API operation for AWS IoT.
//
// Removes the specified policy from the specified certificate.
//
// Note: This action is deprecated and works as expected for backward compatibility,
// but we won't add enhancements. Use DetachPolicy instead.
//
// Requires permission to access the DetachPrincipalPolicy (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DetachPrincipalPolicy for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
// Deprecated: DetachPrincipalPolicy has been deprecated
func (c *IoT) DetachPrincipalPolicy(input *DetachPrincipalPolicyInput) (*DetachPrincipalPolicyOutput, error) {
	req, out := c.DetachPrincipalPolicyRequest(input)
	return out, req.Send()
}

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

const opDetachSecurityProfile = "DetachSecurityProfile"

// DetachSecurityProfileRequest generates a "aws/request.Request" representing the
// client's request for the DetachSecurityProfile 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 DetachSecurityProfile for more information on using the DetachSecurityProfile
// 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 DetachSecurityProfileRequest method.
//	req, resp := client.DetachSecurityProfileRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DetachSecurityProfileRequest(input *DetachSecurityProfileInput) (req *request.Request, output *DetachSecurityProfileOutput) {
	op := &request.Operation{
		Name:       opDetachSecurityProfile,
		HTTPMethod: "DELETE",
		HTTPPath:   "/security-profiles/{securityProfileName}/targets",
	}

	if input == nil {
		input = &DetachSecurityProfileInput{}
	}

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

// DetachSecurityProfile API operation for AWS IoT.
//
// Disassociates a Device Defender security profile from a thing group or from
// this account.
//
// Requires permission to access the DetachSecurityProfile (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DetachSecurityProfile for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DetachSecurityProfile(input *DetachSecurityProfileInput) (*DetachSecurityProfileOutput, error) {
	req, out := c.DetachSecurityProfileRequest(input)
	return out, req.Send()
}

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

const opDetachThingPrincipal = "DetachThingPrincipal"

// DetachThingPrincipalRequest generates a "aws/request.Request" representing the
// client's request for the DetachThingPrincipal 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 DetachThingPrincipal for more information on using the DetachThingPrincipal
// 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 DetachThingPrincipalRequest method.
//	req, resp := client.DetachThingPrincipalRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DetachThingPrincipalRequest(input *DetachThingPrincipalInput) (req *request.Request, output *DetachThingPrincipalOutput) {
	op := &request.Operation{
		Name:       opDetachThingPrincipal,
		HTTPMethod: "DELETE",
		HTTPPath:   "/things/{thingName}/principals",
	}

	if input == nil {
		input = &DetachThingPrincipalInput{}
	}

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

// DetachThingPrincipal API operation for AWS IoT.
//
// Detaches the specified principal from the specified thing. A principal can
// be X.509 certificates, IAM users, groups, and roles, Amazon Cognito identities
// or federated identities.
//
// This call is asynchronous. It might take several seconds for the detachment
// to propagate.
//
// Requires permission to access the DetachThingPrincipal (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DetachThingPrincipal for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) DetachThingPrincipal(input *DetachThingPrincipalInput) (*DetachThingPrincipalOutput, error) {
	req, out := c.DetachThingPrincipalRequest(input)
	return out, req.Send()
}

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

const opDisableTopicRule = "DisableTopicRule"

// DisableTopicRuleRequest generates a "aws/request.Request" representing the
// client's request for the DisableTopicRule 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 DisableTopicRule for more information on using the DisableTopicRule
// 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 DisableTopicRuleRequest method.
//	req, resp := client.DisableTopicRuleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) DisableTopicRuleRequest(input *DisableTopicRuleInput) (req *request.Request, output *DisableTopicRuleOutput) {
	op := &request.Operation{
		Name:       opDisableTopicRule,
		HTTPMethod: "POST",
		HTTPPath:   "/rules/{ruleName}/disable",
	}

	if input == nil {
		input = &DisableTopicRuleInput{}
	}

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

// DisableTopicRule API operation for AWS IoT.
//
// Disables the rule.
//
// Requires permission to access the DisableTopicRule (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation DisableTopicRule for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
func (c *IoT) DisableTopicRule(input *DisableTopicRuleInput) (*DisableTopicRuleOutput, error) {
	req, out := c.DisableTopicRuleRequest(input)
	return out, req.Send()
}

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

const opEnableTopicRule = "EnableTopicRule"

// EnableTopicRuleRequest generates a "aws/request.Request" representing the
// client's request for the EnableTopicRule 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 EnableTopicRule for more information on using the EnableTopicRule
// 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 EnableTopicRuleRequest method.
//	req, resp := client.EnableTopicRuleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) EnableTopicRuleRequest(input *EnableTopicRuleInput) (req *request.Request, output *EnableTopicRuleOutput) {
	op := &request.Operation{
		Name:       opEnableTopicRule,
		HTTPMethod: "POST",
		HTTPPath:   "/rules/{ruleName}/enable",
	}

	if input == nil {
		input = &EnableTopicRuleInput{}
	}

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

// EnableTopicRule API operation for AWS IoT.
//
// Enables the rule.
//
// Requires permission to access the EnableTopicRule (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation EnableTopicRule for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
func (c *IoT) EnableTopicRule(input *EnableTopicRuleInput) (*EnableTopicRuleOutput, error) {
	req, out := c.EnableTopicRuleRequest(input)
	return out, req.Send()
}

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

const opGetBehaviorModelTrainingSummaries = "GetBehaviorModelTrainingSummaries"

// GetBehaviorModelTrainingSummariesRequest generates a "aws/request.Request" representing the
// client's request for the GetBehaviorModelTrainingSummaries 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 GetBehaviorModelTrainingSummaries for more information on using the GetBehaviorModelTrainingSummaries
// 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 GetBehaviorModelTrainingSummariesRequest method.
//	req, resp := client.GetBehaviorModelTrainingSummariesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetBehaviorModelTrainingSummariesRequest(input *GetBehaviorModelTrainingSummariesInput) (req *request.Request, output *GetBehaviorModelTrainingSummariesOutput) {
	op := &request.Operation{
		Name:       opGetBehaviorModelTrainingSummaries,
		HTTPMethod: "GET",
		HTTPPath:   "/behavior-model-training/summaries",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &GetBehaviorModelTrainingSummariesInput{}
	}

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

// GetBehaviorModelTrainingSummaries API operation for AWS IoT.
//
// Returns a Device Defender's ML Detect Security Profile training model's status.
//
// Requires permission to access the GetBehaviorModelTrainingSummaries (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetBehaviorModelTrainingSummaries for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) GetBehaviorModelTrainingSummaries(input *GetBehaviorModelTrainingSummariesInput) (*GetBehaviorModelTrainingSummariesOutput, error) {
	req, out := c.GetBehaviorModelTrainingSummariesRequest(input)
	return out, req.Send()
}

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

// GetBehaviorModelTrainingSummariesPages iterates over the pages of a GetBehaviorModelTrainingSummaries operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See GetBehaviorModelTrainingSummaries 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 GetBehaviorModelTrainingSummaries operation.
//	pageNum := 0
//	err := client.GetBehaviorModelTrainingSummariesPages(params,
//	    func(page *iot.GetBehaviorModelTrainingSummariesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) GetBehaviorModelTrainingSummariesPages(input *GetBehaviorModelTrainingSummariesInput, fn func(*GetBehaviorModelTrainingSummariesOutput, bool) bool) error {
	return c.GetBehaviorModelTrainingSummariesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// GetBehaviorModelTrainingSummariesPagesWithContext same as GetBehaviorModelTrainingSummariesPages 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 *IoT) GetBehaviorModelTrainingSummariesPagesWithContext(ctx aws.Context, input *GetBehaviorModelTrainingSummariesInput, fn func(*GetBehaviorModelTrainingSummariesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *GetBehaviorModelTrainingSummariesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.GetBehaviorModelTrainingSummariesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opGetBucketsAggregation = "GetBucketsAggregation"

// GetBucketsAggregationRequest generates a "aws/request.Request" representing the
// client's request for the GetBucketsAggregation 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 GetBucketsAggregation for more information on using the GetBucketsAggregation
// 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 GetBucketsAggregationRequest method.
//	req, resp := client.GetBucketsAggregationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetBucketsAggregationRequest(input *GetBucketsAggregationInput) (req *request.Request, output *GetBucketsAggregationOutput) {
	op := &request.Operation{
		Name:       opGetBucketsAggregation,
		HTTPMethod: "POST",
		HTTPPath:   "/indices/buckets",
	}

	if input == nil {
		input = &GetBucketsAggregationInput{}
	}

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

// GetBucketsAggregation API operation for AWS IoT.
//
// Aggregates on indexed data with search queries pertaining to particular fields.
//
// Requires permission to access the GetBucketsAggregation (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetBucketsAggregation for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidQueryException
//     The query is invalid.
//
//   - InvalidAggregationException
//     The aggregation is invalid.
//
//   - IndexNotReadyException
//     The index is not ready.
func (c *IoT) GetBucketsAggregation(input *GetBucketsAggregationInput) (*GetBucketsAggregationOutput, error) {
	req, out := c.GetBucketsAggregationRequest(input)
	return out, req.Send()
}

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

const opGetCardinality = "GetCardinality"

// GetCardinalityRequest generates a "aws/request.Request" representing the
// client's request for the GetCardinality 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 GetCardinality for more information on using the GetCardinality
// 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 GetCardinalityRequest method.
//	req, resp := client.GetCardinalityRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetCardinalityRequest(input *GetCardinalityInput) (req *request.Request, output *GetCardinalityOutput) {
	op := &request.Operation{
		Name:       opGetCardinality,
		HTTPMethod: "POST",
		HTTPPath:   "/indices/cardinality",
	}

	if input == nil {
		input = &GetCardinalityInput{}
	}

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

// GetCardinality API operation for AWS IoT.
//
// Returns the approximate count of unique values that match the query.
//
// Requires permission to access the GetCardinality (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetCardinality for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidQueryException
//     The query is invalid.
//
//   - InvalidAggregationException
//     The aggregation is invalid.
//
//   - IndexNotReadyException
//     The index is not ready.
func (c *IoT) GetCardinality(input *GetCardinalityInput) (*GetCardinalityOutput, error) {
	req, out := c.GetCardinalityRequest(input)
	return out, req.Send()
}

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

const opGetEffectivePolicies = "GetEffectivePolicies"

// GetEffectivePoliciesRequest generates a "aws/request.Request" representing the
// client's request for the GetEffectivePolicies 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 GetEffectivePolicies for more information on using the GetEffectivePolicies
// 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 GetEffectivePoliciesRequest method.
//	req, resp := client.GetEffectivePoliciesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetEffectivePoliciesRequest(input *GetEffectivePoliciesInput) (req *request.Request, output *GetEffectivePoliciesOutput) {
	op := &request.Operation{
		Name:       opGetEffectivePolicies,
		HTTPMethod: "POST",
		HTTPPath:   "/effective-policies",
	}

	if input == nil {
		input = &GetEffectivePoliciesInput{}
	}

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

// GetEffectivePolicies API operation for AWS IoT.
//
// Gets a list of the policies that have an effect on the authorization behavior
// of the specified device when it connects to the IoT device gateway.
//
// Requires permission to access the GetEffectivePolicies (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetEffectivePolicies for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - LimitExceededException
//     A limit has been exceeded.
func (c *IoT) GetEffectivePolicies(input *GetEffectivePoliciesInput) (*GetEffectivePoliciesOutput, error) {
	req, out := c.GetEffectivePoliciesRequest(input)
	return out, req.Send()
}

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

const opGetIndexingConfiguration = "GetIndexingConfiguration"

// GetIndexingConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the GetIndexingConfiguration 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 GetIndexingConfiguration for more information on using the GetIndexingConfiguration
// 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 GetIndexingConfigurationRequest method.
//	req, resp := client.GetIndexingConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetIndexingConfigurationRequest(input *GetIndexingConfigurationInput) (req *request.Request, output *GetIndexingConfigurationOutput) {
	op := &request.Operation{
		Name:       opGetIndexingConfiguration,
		HTTPMethod: "GET",
		HTTPPath:   "/indexing/config",
	}

	if input == nil {
		input = &GetIndexingConfigurationInput{}
	}

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

// GetIndexingConfiguration API operation for AWS IoT.
//
// Gets the indexing configuration.
//
// Requires permission to access the GetIndexingConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetIndexingConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) GetIndexingConfiguration(input *GetIndexingConfigurationInput) (*GetIndexingConfigurationOutput, error) {
	req, out := c.GetIndexingConfigurationRequest(input)
	return out, req.Send()
}

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

const opGetJobDocument = "GetJobDocument"

// GetJobDocumentRequest generates a "aws/request.Request" representing the
// client's request for the GetJobDocument 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 GetJobDocument for more information on using the GetJobDocument
// 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 GetJobDocumentRequest method.
//	req, resp := client.GetJobDocumentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetJobDocumentRequest(input *GetJobDocumentInput) (req *request.Request, output *GetJobDocumentOutput) {
	op := &request.Operation{
		Name:       opGetJobDocument,
		HTTPMethod: "GET",
		HTTPPath:   "/jobs/{jobId}/job-document",
	}

	if input == nil {
		input = &GetJobDocumentInput{}
	}

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

// GetJobDocument API operation for AWS IoT.
//
// Gets a job document.
//
// Requires permission to access the GetJobDocument (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetJobDocument for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) GetJobDocument(input *GetJobDocumentInput) (*GetJobDocumentOutput, error) {
	req, out := c.GetJobDocumentRequest(input)
	return out, req.Send()
}

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

const opGetLoggingOptions = "GetLoggingOptions"

// GetLoggingOptionsRequest generates a "aws/request.Request" representing the
// client's request for the GetLoggingOptions 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 GetLoggingOptions for more information on using the GetLoggingOptions
// 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 GetLoggingOptionsRequest method.
//	req, resp := client.GetLoggingOptionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetLoggingOptionsRequest(input *GetLoggingOptionsInput) (req *request.Request, output *GetLoggingOptionsOutput) {
	op := &request.Operation{
		Name:       opGetLoggingOptions,
		HTTPMethod: "GET",
		HTTPPath:   "/loggingOptions",
	}

	if input == nil {
		input = &GetLoggingOptionsInput{}
	}

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

// GetLoggingOptions API operation for AWS IoT.
//
// Gets the logging options.
//
// NOTE: use of this command is not recommended. Use GetV2LoggingOptions instead.
//
// Requires permission to access the GetLoggingOptions (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetLoggingOptions for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) GetLoggingOptions(input *GetLoggingOptionsInput) (*GetLoggingOptionsOutput, error) {
	req, out := c.GetLoggingOptionsRequest(input)
	return out, req.Send()
}

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

const opGetOTAUpdate = "GetOTAUpdate"

// GetOTAUpdateRequest generates a "aws/request.Request" representing the
// client's request for the GetOTAUpdate 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 GetOTAUpdate for more information on using the GetOTAUpdate
// 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 GetOTAUpdateRequest method.
//	req, resp := client.GetOTAUpdateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetOTAUpdateRequest(input *GetOTAUpdateInput) (req *request.Request, output *GetOTAUpdateOutput) {
	op := &request.Operation{
		Name:       opGetOTAUpdate,
		HTTPMethod: "GET",
		HTTPPath:   "/otaUpdates/{otaUpdateId}",
	}

	if input == nil {
		input = &GetOTAUpdateInput{}
	}

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

// GetOTAUpdate API operation for AWS IoT.
//
// Gets an OTA update.
//
// Requires permission to access the GetOTAUpdate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetOTAUpdate for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) GetOTAUpdate(input *GetOTAUpdateInput) (*GetOTAUpdateOutput, error) {
	req, out := c.GetOTAUpdateRequest(input)
	return out, req.Send()
}

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

const opGetPackage = "GetPackage"

// GetPackageRequest generates a "aws/request.Request" representing the
// client's request for the GetPackage 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 GetPackage for more information on using the GetPackage
// 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 GetPackageRequest method.
//	req, resp := client.GetPackageRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetPackageRequest(input *GetPackageInput) (req *request.Request, output *GetPackageOutput) {
	op := &request.Operation{
		Name:       opGetPackage,
		HTTPMethod: "GET",
		HTTPPath:   "/packages/{packageName}",
	}

	if input == nil {
		input = &GetPackageInput{}
	}

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

// GetPackage API operation for AWS IoT.
//
// Gets information about the specified software package.
//
// Requires permission to access the GetPackage (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetPackage for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
//
//   - ValidationException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) GetPackage(input *GetPackageInput) (*GetPackageOutput, error) {
	req, out := c.GetPackageRequest(input)
	return out, req.Send()
}

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

const opGetPackageConfiguration = "GetPackageConfiguration"

// GetPackageConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the GetPackageConfiguration 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 GetPackageConfiguration for more information on using the GetPackageConfiguration
// 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 GetPackageConfigurationRequest method.
//	req, resp := client.GetPackageConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetPackageConfigurationRequest(input *GetPackageConfigurationInput) (req *request.Request, output *GetPackageConfigurationOutput) {
	op := &request.Operation{
		Name:       opGetPackageConfiguration,
		HTTPMethod: "GET",
		HTTPPath:   "/package-configuration",
	}

	if input == nil {
		input = &GetPackageConfigurationInput{}
	}

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

// GetPackageConfiguration API operation for AWS IoT.
//
// Gets information about the specified software package's configuration.
//
// Requires permission to access the GetPackageConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetPackageConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
func (c *IoT) GetPackageConfiguration(input *GetPackageConfigurationInput) (*GetPackageConfigurationOutput, error) {
	req, out := c.GetPackageConfigurationRequest(input)
	return out, req.Send()
}

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

const opGetPackageVersion = "GetPackageVersion"

// GetPackageVersionRequest generates a "aws/request.Request" representing the
// client's request for the GetPackageVersion 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 GetPackageVersion for more information on using the GetPackageVersion
// 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 GetPackageVersionRequest method.
//	req, resp := client.GetPackageVersionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetPackageVersionRequest(input *GetPackageVersionInput) (req *request.Request, output *GetPackageVersionOutput) {
	op := &request.Operation{
		Name:       opGetPackageVersion,
		HTTPMethod: "GET",
		HTTPPath:   "/packages/{packageName}/versions/{versionName}",
	}

	if input == nil {
		input = &GetPackageVersionInput{}
	}

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

// GetPackageVersion API operation for AWS IoT.
//
// Gets information about the specified package version.
//
// Requires permission to access the GetPackageVersion (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetPackageVersion for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
//
//   - ValidationException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) GetPackageVersion(input *GetPackageVersionInput) (*GetPackageVersionOutput, error) {
	req, out := c.GetPackageVersionRequest(input)
	return out, req.Send()
}

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

const opGetPercentiles = "GetPercentiles"

// GetPercentilesRequest generates a "aws/request.Request" representing the
// client's request for the GetPercentiles 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 GetPercentiles for more information on using the GetPercentiles
// 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 GetPercentilesRequest method.
//	req, resp := client.GetPercentilesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetPercentilesRequest(input *GetPercentilesInput) (req *request.Request, output *GetPercentilesOutput) {
	op := &request.Operation{
		Name:       opGetPercentiles,
		HTTPMethod: "POST",
		HTTPPath:   "/indices/percentiles",
	}

	if input == nil {
		input = &GetPercentilesInput{}
	}

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

// GetPercentiles API operation for AWS IoT.
//
// Groups the aggregated values that match the query into percentile groupings.
// The default percentile groupings are: 1,5,25,50,75,95,99, although you can
// specify your own when you call GetPercentiles. This function returns a value
// for each percentile group specified (or the default percentile groupings).
// The percentile group "1" contains the aggregated field value that occurs
// in approximately one percent of the values that match the query. The percentile
// group "5" contains the aggregated field value that occurs in approximately
// five percent of the values that match the query, and so on. The result is
// an approximation, the more values that match the query, the more accurate
// the percentile values.
//
// Requires permission to access the GetPercentiles (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetPercentiles for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidQueryException
//     The query is invalid.
//
//   - InvalidAggregationException
//     The aggregation is invalid.
//
//   - IndexNotReadyException
//     The index is not ready.
func (c *IoT) GetPercentiles(input *GetPercentilesInput) (*GetPercentilesOutput, error) {
	req, out := c.GetPercentilesRequest(input)
	return out, req.Send()
}

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

const opGetPolicy = "GetPolicy"

// GetPolicyRequest generates a "aws/request.Request" representing the
// client's request for the GetPolicy 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 GetPolicy for more information on using the GetPolicy
// 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 GetPolicyRequest method.
//	req, resp := client.GetPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetPolicyRequest(input *GetPolicyInput) (req *request.Request, output *GetPolicyOutput) {
	op := &request.Operation{
		Name:       opGetPolicy,
		HTTPMethod: "GET",
		HTTPPath:   "/policies/{policyName}",
	}

	if input == nil {
		input = &GetPolicyInput{}
	}

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

// GetPolicy API operation for AWS IoT.
//
// Gets information about the specified policy with the policy document of the
// default version.
//
// Requires permission to access the GetPolicy (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetPolicy for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) GetPolicy(input *GetPolicyInput) (*GetPolicyOutput, error) {
	req, out := c.GetPolicyRequest(input)
	return out, req.Send()
}

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

const opGetPolicyVersion = "GetPolicyVersion"

// GetPolicyVersionRequest generates a "aws/request.Request" representing the
// client's request for the GetPolicyVersion 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 GetPolicyVersion for more information on using the GetPolicyVersion
// 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 GetPolicyVersionRequest method.
//	req, resp := client.GetPolicyVersionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetPolicyVersionRequest(input *GetPolicyVersionInput) (req *request.Request, output *GetPolicyVersionOutput) {
	op := &request.Operation{
		Name:       opGetPolicyVersion,
		HTTPMethod: "GET",
		HTTPPath:   "/policies/{policyName}/version/{policyVersionId}",
	}

	if input == nil {
		input = &GetPolicyVersionInput{}
	}

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

// GetPolicyVersion API operation for AWS IoT.
//
// Gets information about the specified policy version.
//
// Requires permission to access the GetPolicyVersion (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetPolicyVersion for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) GetPolicyVersion(input *GetPolicyVersionInput) (*GetPolicyVersionOutput, error) {
	req, out := c.GetPolicyVersionRequest(input)
	return out, req.Send()
}

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

const opGetRegistrationCode = "GetRegistrationCode"

// GetRegistrationCodeRequest generates a "aws/request.Request" representing the
// client's request for the GetRegistrationCode 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 GetRegistrationCode for more information on using the GetRegistrationCode
// 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 GetRegistrationCodeRequest method.
//	req, resp := client.GetRegistrationCodeRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetRegistrationCodeRequest(input *GetRegistrationCodeInput) (req *request.Request, output *GetRegistrationCodeOutput) {
	op := &request.Operation{
		Name:       opGetRegistrationCode,
		HTTPMethod: "GET",
		HTTPPath:   "/registrationcode",
	}

	if input == nil {
		input = &GetRegistrationCodeInput{}
	}

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

// GetRegistrationCode API operation for AWS IoT.
//
// Gets a registration code used to register a CA certificate with IoT.
//
// IoT will create a registration code as part of this API call if the registration
// code doesn't exist or has been deleted. If you already have a registration
// code, this API call will return the same registration code.
//
// Requires permission to access the GetRegistrationCode (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetRegistrationCode for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
func (c *IoT) GetRegistrationCode(input *GetRegistrationCodeInput) (*GetRegistrationCodeOutput, error) {
	req, out := c.GetRegistrationCodeRequest(input)
	return out, req.Send()
}

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

const opGetStatistics = "GetStatistics"

// GetStatisticsRequest generates a "aws/request.Request" representing the
// client's request for the GetStatistics 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 GetStatistics for more information on using the GetStatistics
// 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 GetStatisticsRequest method.
//	req, resp := client.GetStatisticsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetStatisticsRequest(input *GetStatisticsInput) (req *request.Request, output *GetStatisticsOutput) {
	op := &request.Operation{
		Name:       opGetStatistics,
		HTTPMethod: "POST",
		HTTPPath:   "/indices/statistics",
	}

	if input == nil {
		input = &GetStatisticsInput{}
	}

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

// GetStatistics API operation for AWS IoT.
//
// Returns the count, average, sum, minimum, maximum, sum of squares, variance,
// and standard deviation for the specified aggregated field. If the aggregation
// field is of type String, only the count statistic is returned.
//
// Requires permission to access the GetStatistics (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetStatistics for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidQueryException
//     The query is invalid.
//
//   - InvalidAggregationException
//     The aggregation is invalid.
//
//   - IndexNotReadyException
//     The index is not ready.
func (c *IoT) GetStatistics(input *GetStatisticsInput) (*GetStatisticsOutput, error) {
	req, out := c.GetStatisticsRequest(input)
	return out, req.Send()
}

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

const opGetTopicRule = "GetTopicRule"

// GetTopicRuleRequest generates a "aws/request.Request" representing the
// client's request for the GetTopicRule 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 GetTopicRule for more information on using the GetTopicRule
// 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 GetTopicRuleRequest method.
//	req, resp := client.GetTopicRuleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetTopicRuleRequest(input *GetTopicRuleInput) (req *request.Request, output *GetTopicRuleOutput) {
	op := &request.Operation{
		Name:       opGetTopicRule,
		HTTPMethod: "GET",
		HTTPPath:   "/rules/{ruleName}",
	}

	if input == nil {
		input = &GetTopicRuleInput{}
	}

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

// GetTopicRule API operation for AWS IoT.
//
// Gets information about the rule.
//
// Requires permission to access the GetTopicRule (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetTopicRule for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
func (c *IoT) GetTopicRule(input *GetTopicRuleInput) (*GetTopicRuleOutput, error) {
	req, out := c.GetTopicRuleRequest(input)
	return out, req.Send()
}

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

const opGetTopicRuleDestination = "GetTopicRuleDestination"

// GetTopicRuleDestinationRequest generates a "aws/request.Request" representing the
// client's request for the GetTopicRuleDestination 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 GetTopicRuleDestination for more information on using the GetTopicRuleDestination
// 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 GetTopicRuleDestinationRequest method.
//	req, resp := client.GetTopicRuleDestinationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetTopicRuleDestinationRequest(input *GetTopicRuleDestinationInput) (req *request.Request, output *GetTopicRuleDestinationOutput) {
	op := &request.Operation{
		Name:       opGetTopicRuleDestination,
		HTTPMethod: "GET",
		HTTPPath:   "/destinations/{arn+}",
	}

	if input == nil {
		input = &GetTopicRuleDestinationInput{}
	}

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

// GetTopicRuleDestination API operation for AWS IoT.
//
// Gets information about a topic rule destination.
//
// Requires permission to access the GetTopicRuleDestination (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetTopicRuleDestination for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
func (c *IoT) GetTopicRuleDestination(input *GetTopicRuleDestinationInput) (*GetTopicRuleDestinationOutput, error) {
	req, out := c.GetTopicRuleDestinationRequest(input)
	return out, req.Send()
}

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

const opGetV2LoggingOptions = "GetV2LoggingOptions"

// GetV2LoggingOptionsRequest generates a "aws/request.Request" representing the
// client's request for the GetV2LoggingOptions 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 GetV2LoggingOptions for more information on using the GetV2LoggingOptions
// 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 GetV2LoggingOptionsRequest method.
//	req, resp := client.GetV2LoggingOptionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) GetV2LoggingOptionsRequest(input *GetV2LoggingOptionsInput) (req *request.Request, output *GetV2LoggingOptionsOutput) {
	op := &request.Operation{
		Name:       opGetV2LoggingOptions,
		HTTPMethod: "GET",
		HTTPPath:   "/v2LoggingOptions",
	}

	if input == nil {
		input = &GetV2LoggingOptionsInput{}
	}

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

// GetV2LoggingOptions API operation for AWS IoT.
//
// Gets the fine grained logging options.
//
// Requires permission to access the GetV2LoggingOptions (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation GetV2LoggingOptions for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - NotConfiguredException
//     The resource is not configured.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) GetV2LoggingOptions(input *GetV2LoggingOptionsInput) (*GetV2LoggingOptionsOutput, error) {
	req, out := c.GetV2LoggingOptionsRequest(input)
	return out, req.Send()
}

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

const opListActiveViolations = "ListActiveViolations"

// ListActiveViolationsRequest generates a "aws/request.Request" representing the
// client's request for the ListActiveViolations 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 ListActiveViolations for more information on using the ListActiveViolations
// 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 ListActiveViolationsRequest method.
//	req, resp := client.ListActiveViolationsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListActiveViolationsRequest(input *ListActiveViolationsInput) (req *request.Request, output *ListActiveViolationsOutput) {
	op := &request.Operation{
		Name:       opListActiveViolations,
		HTTPMethod: "GET",
		HTTPPath:   "/active-violations",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListActiveViolationsInput{}
	}

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

// ListActiveViolations API operation for AWS IoT.
//
// Lists the active violations for a given Device Defender security profile.
//
// Requires permission to access the ListActiveViolations (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListActiveViolations for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListActiveViolations(input *ListActiveViolationsInput) (*ListActiveViolationsOutput, error) {
	req, out := c.ListActiveViolationsRequest(input)
	return out, req.Send()
}

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

// ListActiveViolationsPages iterates over the pages of a ListActiveViolations operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListActiveViolations 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 ListActiveViolations operation.
//	pageNum := 0
//	err := client.ListActiveViolationsPages(params,
//	    func(page *iot.ListActiveViolationsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListActiveViolationsPages(input *ListActiveViolationsInput, fn func(*ListActiveViolationsOutput, bool) bool) error {
	return c.ListActiveViolationsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListActiveViolationsPagesWithContext same as ListActiveViolationsPages 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 *IoT) ListActiveViolationsPagesWithContext(ctx aws.Context, input *ListActiveViolationsInput, fn func(*ListActiveViolationsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListActiveViolationsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListActiveViolationsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListAttachedPolicies = "ListAttachedPolicies"

// ListAttachedPoliciesRequest generates a "aws/request.Request" representing the
// client's request for the ListAttachedPolicies 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 ListAttachedPolicies for more information on using the ListAttachedPolicies
// 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 ListAttachedPoliciesRequest method.
//	req, resp := client.ListAttachedPoliciesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListAttachedPoliciesRequest(input *ListAttachedPoliciesInput) (req *request.Request, output *ListAttachedPoliciesOutput) {
	op := &request.Operation{
		Name:       opListAttachedPolicies,
		HTTPMethod: "POST",
		HTTPPath:   "/attached-policies/{target}",
		Paginator: &request.Paginator{
			InputTokens:     []string{"marker"},
			OutputTokens:    []string{"nextMarker"},
			LimitToken:      "pageSize",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListAttachedPoliciesInput{}
	}

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

// ListAttachedPolicies API operation for AWS IoT.
//
// Lists the policies attached to the specified thing group.
//
// Requires permission to access the ListAttachedPolicies (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListAttachedPolicies for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - LimitExceededException
//     A limit has been exceeded.
func (c *IoT) ListAttachedPolicies(input *ListAttachedPoliciesInput) (*ListAttachedPoliciesOutput, error) {
	req, out := c.ListAttachedPoliciesRequest(input)
	return out, req.Send()
}

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

// ListAttachedPoliciesPages iterates over the pages of a ListAttachedPolicies operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListAttachedPolicies 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 ListAttachedPolicies operation.
//	pageNum := 0
//	err := client.ListAttachedPoliciesPages(params,
//	    func(page *iot.ListAttachedPoliciesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListAttachedPoliciesPages(input *ListAttachedPoliciesInput, fn func(*ListAttachedPoliciesOutput, bool) bool) error {
	return c.ListAttachedPoliciesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListAttachedPoliciesPagesWithContext same as ListAttachedPoliciesPages 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 *IoT) ListAttachedPoliciesPagesWithContext(ctx aws.Context, input *ListAttachedPoliciesInput, fn func(*ListAttachedPoliciesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListAttachedPoliciesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListAttachedPoliciesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListAuditFindings = "ListAuditFindings"

// ListAuditFindingsRequest generates a "aws/request.Request" representing the
// client's request for the ListAuditFindings 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 ListAuditFindings for more information on using the ListAuditFindings
// 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 ListAuditFindingsRequest method.
//	req, resp := client.ListAuditFindingsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListAuditFindingsRequest(input *ListAuditFindingsInput) (req *request.Request, output *ListAuditFindingsOutput) {
	op := &request.Operation{
		Name:       opListAuditFindings,
		HTTPMethod: "POST",
		HTTPPath:   "/audit/findings",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListAuditFindingsInput{}
	}

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

// ListAuditFindings API operation for AWS IoT.
//
// Lists the findings (results) of a Device Defender audit or of the audits
// performed during a specified time period. (Findings are retained for 90 days.)
//
// Requires permission to access the ListAuditFindings (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListAuditFindings for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListAuditFindings(input *ListAuditFindingsInput) (*ListAuditFindingsOutput, error) {
	req, out := c.ListAuditFindingsRequest(input)
	return out, req.Send()
}

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

// ListAuditFindingsPages iterates over the pages of a ListAuditFindings operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListAuditFindings 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 ListAuditFindings operation.
//	pageNum := 0
//	err := client.ListAuditFindingsPages(params,
//	    func(page *iot.ListAuditFindingsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListAuditFindingsPages(input *ListAuditFindingsInput, fn func(*ListAuditFindingsOutput, bool) bool) error {
	return c.ListAuditFindingsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListAuditFindingsPagesWithContext same as ListAuditFindingsPages 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 *IoT) ListAuditFindingsPagesWithContext(ctx aws.Context, input *ListAuditFindingsInput, fn func(*ListAuditFindingsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListAuditFindingsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListAuditFindingsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListAuditMitigationActionsExecutions = "ListAuditMitigationActionsExecutions"

// ListAuditMitigationActionsExecutionsRequest generates a "aws/request.Request" representing the
// client's request for the ListAuditMitigationActionsExecutions 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 ListAuditMitigationActionsExecutions for more information on using the ListAuditMitigationActionsExecutions
// 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 ListAuditMitigationActionsExecutionsRequest method.
//	req, resp := client.ListAuditMitigationActionsExecutionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListAuditMitigationActionsExecutionsRequest(input *ListAuditMitigationActionsExecutionsInput) (req *request.Request, output *ListAuditMitigationActionsExecutionsOutput) {
	op := &request.Operation{
		Name:       opListAuditMitigationActionsExecutions,
		HTTPMethod: "GET",
		HTTPPath:   "/audit/mitigationactions/executions",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListAuditMitigationActionsExecutionsInput{}
	}

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

// ListAuditMitigationActionsExecutions API operation for AWS IoT.
//
// Gets the status of audit mitigation action tasks that were executed.
//
// Requires permission to access the ListAuditMitigationActionsExecutions (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListAuditMitigationActionsExecutions for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListAuditMitigationActionsExecutions(input *ListAuditMitigationActionsExecutionsInput) (*ListAuditMitigationActionsExecutionsOutput, error) {
	req, out := c.ListAuditMitigationActionsExecutionsRequest(input)
	return out, req.Send()
}

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

// ListAuditMitigationActionsExecutionsPages iterates over the pages of a ListAuditMitigationActionsExecutions operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListAuditMitigationActionsExecutions 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 ListAuditMitigationActionsExecutions operation.
//	pageNum := 0
//	err := client.ListAuditMitigationActionsExecutionsPages(params,
//	    func(page *iot.ListAuditMitigationActionsExecutionsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListAuditMitigationActionsExecutionsPages(input *ListAuditMitigationActionsExecutionsInput, fn func(*ListAuditMitigationActionsExecutionsOutput, bool) bool) error {
	return c.ListAuditMitigationActionsExecutionsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListAuditMitigationActionsExecutionsPagesWithContext same as ListAuditMitigationActionsExecutionsPages 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 *IoT) ListAuditMitigationActionsExecutionsPagesWithContext(ctx aws.Context, input *ListAuditMitigationActionsExecutionsInput, fn func(*ListAuditMitigationActionsExecutionsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListAuditMitigationActionsExecutionsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListAuditMitigationActionsExecutionsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListAuditMitigationActionsTasks = "ListAuditMitigationActionsTasks"

// ListAuditMitigationActionsTasksRequest generates a "aws/request.Request" representing the
// client's request for the ListAuditMitigationActionsTasks 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 ListAuditMitigationActionsTasks for more information on using the ListAuditMitigationActionsTasks
// 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 ListAuditMitigationActionsTasksRequest method.
//	req, resp := client.ListAuditMitigationActionsTasksRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListAuditMitigationActionsTasksRequest(input *ListAuditMitigationActionsTasksInput) (req *request.Request, output *ListAuditMitigationActionsTasksOutput) {
	op := &request.Operation{
		Name:       opListAuditMitigationActionsTasks,
		HTTPMethod: "GET",
		HTTPPath:   "/audit/mitigationactions/tasks",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListAuditMitigationActionsTasksInput{}
	}

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

// ListAuditMitigationActionsTasks API operation for AWS IoT.
//
// Gets a list of audit mitigation action tasks that match the specified filters.
//
// Requires permission to access the ListAuditMitigationActionsTasks (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListAuditMitigationActionsTasks for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListAuditMitigationActionsTasks(input *ListAuditMitigationActionsTasksInput) (*ListAuditMitigationActionsTasksOutput, error) {
	req, out := c.ListAuditMitigationActionsTasksRequest(input)
	return out, req.Send()
}

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

// ListAuditMitigationActionsTasksPages iterates over the pages of a ListAuditMitigationActionsTasks operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListAuditMitigationActionsTasks 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 ListAuditMitigationActionsTasks operation.
//	pageNum := 0
//	err := client.ListAuditMitigationActionsTasksPages(params,
//	    func(page *iot.ListAuditMitigationActionsTasksOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListAuditMitigationActionsTasksPages(input *ListAuditMitigationActionsTasksInput, fn func(*ListAuditMitigationActionsTasksOutput, bool) bool) error {
	return c.ListAuditMitigationActionsTasksPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListAuditMitigationActionsTasksPagesWithContext same as ListAuditMitigationActionsTasksPages 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 *IoT) ListAuditMitigationActionsTasksPagesWithContext(ctx aws.Context, input *ListAuditMitigationActionsTasksInput, fn func(*ListAuditMitigationActionsTasksOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListAuditMitigationActionsTasksInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListAuditMitigationActionsTasksRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListAuditSuppressions = "ListAuditSuppressions"

// ListAuditSuppressionsRequest generates a "aws/request.Request" representing the
// client's request for the ListAuditSuppressions 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 ListAuditSuppressions for more information on using the ListAuditSuppressions
// 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 ListAuditSuppressionsRequest method.
//	req, resp := client.ListAuditSuppressionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListAuditSuppressionsRequest(input *ListAuditSuppressionsInput) (req *request.Request, output *ListAuditSuppressionsOutput) {
	op := &request.Operation{
		Name:       opListAuditSuppressions,
		HTTPMethod: "POST",
		HTTPPath:   "/audit/suppressions/list",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListAuditSuppressionsInput{}
	}

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

// ListAuditSuppressions API operation for AWS IoT.
//
// Lists your Device Defender audit listings.
//
// Requires permission to access the ListAuditSuppressions (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListAuditSuppressions for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListAuditSuppressions(input *ListAuditSuppressionsInput) (*ListAuditSuppressionsOutput, error) {
	req, out := c.ListAuditSuppressionsRequest(input)
	return out, req.Send()
}

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

// ListAuditSuppressionsPages iterates over the pages of a ListAuditSuppressions operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListAuditSuppressions 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 ListAuditSuppressions operation.
//	pageNum := 0
//	err := client.ListAuditSuppressionsPages(params,
//	    func(page *iot.ListAuditSuppressionsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListAuditSuppressionsPages(input *ListAuditSuppressionsInput, fn func(*ListAuditSuppressionsOutput, bool) bool) error {
	return c.ListAuditSuppressionsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListAuditSuppressionsPagesWithContext same as ListAuditSuppressionsPages 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 *IoT) ListAuditSuppressionsPagesWithContext(ctx aws.Context, input *ListAuditSuppressionsInput, fn func(*ListAuditSuppressionsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListAuditSuppressionsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListAuditSuppressionsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListAuditTasks = "ListAuditTasks"

// ListAuditTasksRequest generates a "aws/request.Request" representing the
// client's request for the ListAuditTasks 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 ListAuditTasks for more information on using the ListAuditTasks
// 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 ListAuditTasksRequest method.
//	req, resp := client.ListAuditTasksRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListAuditTasksRequest(input *ListAuditTasksInput) (req *request.Request, output *ListAuditTasksOutput) {
	op := &request.Operation{
		Name:       opListAuditTasks,
		HTTPMethod: "GET",
		HTTPPath:   "/audit/tasks",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListAuditTasksInput{}
	}

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

// ListAuditTasks API operation for AWS IoT.
//
// Lists the Device Defender audits that have been performed during a given
// time period.
//
// Requires permission to access the ListAuditTasks (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListAuditTasks for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListAuditTasks(input *ListAuditTasksInput) (*ListAuditTasksOutput, error) {
	req, out := c.ListAuditTasksRequest(input)
	return out, req.Send()
}

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

// ListAuditTasksPages iterates over the pages of a ListAuditTasks operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListAuditTasks 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 ListAuditTasks operation.
//	pageNum := 0
//	err := client.ListAuditTasksPages(params,
//	    func(page *iot.ListAuditTasksOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListAuditTasksPages(input *ListAuditTasksInput, fn func(*ListAuditTasksOutput, bool) bool) error {
	return c.ListAuditTasksPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListAuditTasksPagesWithContext same as ListAuditTasksPages 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 *IoT) ListAuditTasksPagesWithContext(ctx aws.Context, input *ListAuditTasksInput, fn func(*ListAuditTasksOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListAuditTasksInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListAuditTasksRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListAuthorizers = "ListAuthorizers"

// ListAuthorizersRequest generates a "aws/request.Request" representing the
// client's request for the ListAuthorizers 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 ListAuthorizers for more information on using the ListAuthorizers
// 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 ListAuthorizersRequest method.
//	req, resp := client.ListAuthorizersRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListAuthorizersRequest(input *ListAuthorizersInput) (req *request.Request, output *ListAuthorizersOutput) {
	op := &request.Operation{
		Name:       opListAuthorizers,
		HTTPMethod: "GET",
		HTTPPath:   "/authorizers/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"marker"},
			OutputTokens:    []string{"nextMarker"},
			LimitToken:      "pageSize",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListAuthorizersInput{}
	}

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

// ListAuthorizers API operation for AWS IoT.
//
// Lists the authorizers registered in your account.
//
// Requires permission to access the ListAuthorizers (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListAuthorizers for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListAuthorizers(input *ListAuthorizersInput) (*ListAuthorizersOutput, error) {
	req, out := c.ListAuthorizersRequest(input)
	return out, req.Send()
}

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

// ListAuthorizersPages iterates over the pages of a ListAuthorizers operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListAuthorizers 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 ListAuthorizers operation.
//	pageNum := 0
//	err := client.ListAuthorizersPages(params,
//	    func(page *iot.ListAuthorizersOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListAuthorizersPages(input *ListAuthorizersInput, fn func(*ListAuthorizersOutput, bool) bool) error {
	return c.ListAuthorizersPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListAuthorizersPagesWithContext same as ListAuthorizersPages 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 *IoT) ListAuthorizersPagesWithContext(ctx aws.Context, input *ListAuthorizersInput, fn func(*ListAuthorizersOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListAuthorizersInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListAuthorizersRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListBillingGroups = "ListBillingGroups"

// ListBillingGroupsRequest generates a "aws/request.Request" representing the
// client's request for the ListBillingGroups 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 ListBillingGroups for more information on using the ListBillingGroups
// 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 ListBillingGroupsRequest method.
//	req, resp := client.ListBillingGroupsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListBillingGroupsRequest(input *ListBillingGroupsInput) (req *request.Request, output *ListBillingGroupsOutput) {
	op := &request.Operation{
		Name:       opListBillingGroups,
		HTTPMethod: "GET",
		HTTPPath:   "/billing-groups",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListBillingGroupsInput{}
	}

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

// ListBillingGroups API operation for AWS IoT.
//
// Lists the billing groups you have created.
//
// Requires permission to access the ListBillingGroups (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListBillingGroups for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) ListBillingGroups(input *ListBillingGroupsInput) (*ListBillingGroupsOutput, error) {
	req, out := c.ListBillingGroupsRequest(input)
	return out, req.Send()
}

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

// ListBillingGroupsPages iterates over the pages of a ListBillingGroups operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListBillingGroups 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 ListBillingGroups operation.
//	pageNum := 0
//	err := client.ListBillingGroupsPages(params,
//	    func(page *iot.ListBillingGroupsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListBillingGroupsPages(input *ListBillingGroupsInput, fn func(*ListBillingGroupsOutput, bool) bool) error {
	return c.ListBillingGroupsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListBillingGroupsPagesWithContext same as ListBillingGroupsPages 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 *IoT) ListBillingGroupsPagesWithContext(ctx aws.Context, input *ListBillingGroupsInput, fn func(*ListBillingGroupsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListBillingGroupsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListBillingGroupsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListCACertificates = "ListCACertificates"

// ListCACertificatesRequest generates a "aws/request.Request" representing the
// client's request for the ListCACertificates 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 ListCACertificates for more information on using the ListCACertificates
// 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 ListCACertificatesRequest method.
//	req, resp := client.ListCACertificatesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListCACertificatesRequest(input *ListCACertificatesInput) (req *request.Request, output *ListCACertificatesOutput) {
	op := &request.Operation{
		Name:       opListCACertificates,
		HTTPMethod: "GET",
		HTTPPath:   "/cacertificates",
		Paginator: &request.Paginator{
			InputTokens:     []string{"marker"},
			OutputTokens:    []string{"nextMarker"},
			LimitToken:      "pageSize",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListCACertificatesInput{}
	}

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

// ListCACertificates API operation for AWS IoT.
//
// Lists the CA certificates registered for your Amazon Web Services account.
//
// The results are paginated with a default page size of 25. You can use the
// returned marker to retrieve additional results.
//
// Requires permission to access the ListCACertificates (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListCACertificates for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListCACertificates(input *ListCACertificatesInput) (*ListCACertificatesOutput, error) {
	req, out := c.ListCACertificatesRequest(input)
	return out, req.Send()
}

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

// ListCACertificatesPages iterates over the pages of a ListCACertificates operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListCACertificates 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 ListCACertificates operation.
//	pageNum := 0
//	err := client.ListCACertificatesPages(params,
//	    func(page *iot.ListCACertificatesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListCACertificatesPages(input *ListCACertificatesInput, fn func(*ListCACertificatesOutput, bool) bool) error {
	return c.ListCACertificatesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListCACertificatesPagesWithContext same as ListCACertificatesPages 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 *IoT) ListCACertificatesPagesWithContext(ctx aws.Context, input *ListCACertificatesInput, fn func(*ListCACertificatesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListCACertificatesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListCACertificatesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListCertificateProviders = "ListCertificateProviders"

// ListCertificateProvidersRequest generates a "aws/request.Request" representing the
// client's request for the ListCertificateProviders 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 ListCertificateProviders for more information on using the ListCertificateProviders
// 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 ListCertificateProvidersRequest method.
//	req, resp := client.ListCertificateProvidersRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListCertificateProvidersRequest(input *ListCertificateProvidersInput) (req *request.Request, output *ListCertificateProvidersOutput) {
	op := &request.Operation{
		Name:       opListCertificateProviders,
		HTTPMethod: "GET",
		HTTPPath:   "/certificate-providers/",
	}

	if input == nil {
		input = &ListCertificateProvidersInput{}
	}

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

// ListCertificateProviders API operation for AWS IoT.
//
// Lists all your certificate providers in your Amazon Web Services account.
//
// Requires permission to access the ListCertificateProviders (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListCertificateProviders for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListCertificateProviders(input *ListCertificateProvidersInput) (*ListCertificateProvidersOutput, error) {
	req, out := c.ListCertificateProvidersRequest(input)
	return out, req.Send()
}

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

const opListCertificates = "ListCertificates"

// ListCertificatesRequest generates a "aws/request.Request" representing the
// client's request for the ListCertificates 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 ListCertificates for more information on using the ListCertificates
// 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 ListCertificatesRequest method.
//	req, resp := client.ListCertificatesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListCertificatesRequest(input *ListCertificatesInput) (req *request.Request, output *ListCertificatesOutput) {
	op := &request.Operation{
		Name:       opListCertificates,
		HTTPMethod: "GET",
		HTTPPath:   "/certificates",
		Paginator: &request.Paginator{
			InputTokens:     []string{"marker"},
			OutputTokens:    []string{"nextMarker"},
			LimitToken:      "pageSize",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListCertificatesInput{}
	}

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

// ListCertificates API operation for AWS IoT.
//
// Lists the certificates registered in your Amazon Web Services account.
//
// The results are paginated with a default page size of 25. You can use the
// returned marker to retrieve additional results.
//
// Requires permission to access the ListCertificates (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListCertificates for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListCertificates(input *ListCertificatesInput) (*ListCertificatesOutput, error) {
	req, out := c.ListCertificatesRequest(input)
	return out, req.Send()
}

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

// ListCertificatesPages iterates over the pages of a ListCertificates operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListCertificates 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 ListCertificates operation.
//	pageNum := 0
//	err := client.ListCertificatesPages(params,
//	    func(page *iot.ListCertificatesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListCertificatesPages(input *ListCertificatesInput, fn func(*ListCertificatesOutput, bool) bool) error {
	return c.ListCertificatesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListCertificatesPagesWithContext same as ListCertificatesPages 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 *IoT) ListCertificatesPagesWithContext(ctx aws.Context, input *ListCertificatesInput, fn func(*ListCertificatesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListCertificatesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListCertificatesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListCertificatesByCA = "ListCertificatesByCA"

// ListCertificatesByCARequest generates a "aws/request.Request" representing the
// client's request for the ListCertificatesByCA 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 ListCertificatesByCA for more information on using the ListCertificatesByCA
// 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 ListCertificatesByCARequest method.
//	req, resp := client.ListCertificatesByCARequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListCertificatesByCARequest(input *ListCertificatesByCAInput) (req *request.Request, output *ListCertificatesByCAOutput) {
	op := &request.Operation{
		Name:       opListCertificatesByCA,
		HTTPMethod: "GET",
		HTTPPath:   "/certificates-by-ca/{caCertificateId}",
		Paginator: &request.Paginator{
			InputTokens:     []string{"marker"},
			OutputTokens:    []string{"nextMarker"},
			LimitToken:      "pageSize",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListCertificatesByCAInput{}
	}

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

// ListCertificatesByCA API operation for AWS IoT.
//
// List the device certificates signed by the specified CA certificate.
//
// Requires permission to access the ListCertificatesByCA (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListCertificatesByCA for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListCertificatesByCA(input *ListCertificatesByCAInput) (*ListCertificatesByCAOutput, error) {
	req, out := c.ListCertificatesByCARequest(input)
	return out, req.Send()
}

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

// ListCertificatesByCAPages iterates over the pages of a ListCertificatesByCA operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListCertificatesByCA 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 ListCertificatesByCA operation.
//	pageNum := 0
//	err := client.ListCertificatesByCAPages(params,
//	    func(page *iot.ListCertificatesByCAOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListCertificatesByCAPages(input *ListCertificatesByCAInput, fn func(*ListCertificatesByCAOutput, bool) bool) error {
	return c.ListCertificatesByCAPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListCertificatesByCAPagesWithContext same as ListCertificatesByCAPages 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 *IoT) ListCertificatesByCAPagesWithContext(ctx aws.Context, input *ListCertificatesByCAInput, fn func(*ListCertificatesByCAOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListCertificatesByCAInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListCertificatesByCARequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListCustomMetrics = "ListCustomMetrics"

// ListCustomMetricsRequest generates a "aws/request.Request" representing the
// client's request for the ListCustomMetrics 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 ListCustomMetrics for more information on using the ListCustomMetrics
// 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 ListCustomMetricsRequest method.
//	req, resp := client.ListCustomMetricsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListCustomMetricsRequest(input *ListCustomMetricsInput) (req *request.Request, output *ListCustomMetricsOutput) {
	op := &request.Operation{
		Name:       opListCustomMetrics,
		HTTPMethod: "GET",
		HTTPPath:   "/custom-metrics",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListCustomMetricsInput{}
	}

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

// ListCustomMetrics API operation for AWS IoT.
//
// Lists your Device Defender detect custom metrics.
//
// Requires permission to access the ListCustomMetrics (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListCustomMetrics for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListCustomMetrics(input *ListCustomMetricsInput) (*ListCustomMetricsOutput, error) {
	req, out := c.ListCustomMetricsRequest(input)
	return out, req.Send()
}

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

// ListCustomMetricsPages iterates over the pages of a ListCustomMetrics operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListCustomMetrics 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 ListCustomMetrics operation.
//	pageNum := 0
//	err := client.ListCustomMetricsPages(params,
//	    func(page *iot.ListCustomMetricsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListCustomMetricsPages(input *ListCustomMetricsInput, fn func(*ListCustomMetricsOutput, bool) bool) error {
	return c.ListCustomMetricsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListCustomMetricsPagesWithContext same as ListCustomMetricsPages 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 *IoT) ListCustomMetricsPagesWithContext(ctx aws.Context, input *ListCustomMetricsInput, fn func(*ListCustomMetricsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListCustomMetricsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListCustomMetricsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListDetectMitigationActionsExecutions = "ListDetectMitigationActionsExecutions"

// ListDetectMitigationActionsExecutionsRequest generates a "aws/request.Request" representing the
// client's request for the ListDetectMitigationActionsExecutions 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 ListDetectMitigationActionsExecutions for more information on using the ListDetectMitigationActionsExecutions
// 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 ListDetectMitigationActionsExecutionsRequest method.
//	req, resp := client.ListDetectMitigationActionsExecutionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListDetectMitigationActionsExecutionsRequest(input *ListDetectMitigationActionsExecutionsInput) (req *request.Request, output *ListDetectMitigationActionsExecutionsOutput) {
	op := &request.Operation{
		Name:       opListDetectMitigationActionsExecutions,
		HTTPMethod: "GET",
		HTTPPath:   "/detect/mitigationactions/executions",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListDetectMitigationActionsExecutionsInput{}
	}

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

// ListDetectMitigationActionsExecutions API operation for AWS IoT.
//
// Lists mitigation actions executions for a Device Defender ML Detect Security
// Profile.
//
// Requires permission to access the ListDetectMitigationActionsExecutions (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListDetectMitigationActionsExecutions for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListDetectMitigationActionsExecutions(input *ListDetectMitigationActionsExecutionsInput) (*ListDetectMitigationActionsExecutionsOutput, error) {
	req, out := c.ListDetectMitigationActionsExecutionsRequest(input)
	return out, req.Send()
}

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

// ListDetectMitigationActionsExecutionsPages iterates over the pages of a ListDetectMitigationActionsExecutions operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListDetectMitigationActionsExecutions 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 ListDetectMitigationActionsExecutions operation.
//	pageNum := 0
//	err := client.ListDetectMitigationActionsExecutionsPages(params,
//	    func(page *iot.ListDetectMitigationActionsExecutionsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListDetectMitigationActionsExecutionsPages(input *ListDetectMitigationActionsExecutionsInput, fn func(*ListDetectMitigationActionsExecutionsOutput, bool) bool) error {
	return c.ListDetectMitigationActionsExecutionsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListDetectMitigationActionsExecutionsPagesWithContext same as ListDetectMitigationActionsExecutionsPages 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 *IoT) ListDetectMitigationActionsExecutionsPagesWithContext(ctx aws.Context, input *ListDetectMitigationActionsExecutionsInput, fn func(*ListDetectMitigationActionsExecutionsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListDetectMitigationActionsExecutionsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListDetectMitigationActionsExecutionsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListDetectMitigationActionsTasks = "ListDetectMitigationActionsTasks"

// ListDetectMitigationActionsTasksRequest generates a "aws/request.Request" representing the
// client's request for the ListDetectMitigationActionsTasks 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 ListDetectMitigationActionsTasks for more information on using the ListDetectMitigationActionsTasks
// 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 ListDetectMitigationActionsTasksRequest method.
//	req, resp := client.ListDetectMitigationActionsTasksRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListDetectMitigationActionsTasksRequest(input *ListDetectMitigationActionsTasksInput) (req *request.Request, output *ListDetectMitigationActionsTasksOutput) {
	op := &request.Operation{
		Name:       opListDetectMitigationActionsTasks,
		HTTPMethod: "GET",
		HTTPPath:   "/detect/mitigationactions/tasks",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListDetectMitigationActionsTasksInput{}
	}

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

// ListDetectMitigationActionsTasks API operation for AWS IoT.
//
// List of Device Defender ML Detect mitigation actions tasks.
//
// Requires permission to access the ListDetectMitigationActionsTasks (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListDetectMitigationActionsTasks for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListDetectMitigationActionsTasks(input *ListDetectMitigationActionsTasksInput) (*ListDetectMitigationActionsTasksOutput, error) {
	req, out := c.ListDetectMitigationActionsTasksRequest(input)
	return out, req.Send()
}

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

// ListDetectMitigationActionsTasksPages iterates over the pages of a ListDetectMitigationActionsTasks operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListDetectMitigationActionsTasks 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 ListDetectMitigationActionsTasks operation.
//	pageNum := 0
//	err := client.ListDetectMitigationActionsTasksPages(params,
//	    func(page *iot.ListDetectMitigationActionsTasksOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListDetectMitigationActionsTasksPages(input *ListDetectMitigationActionsTasksInput, fn func(*ListDetectMitigationActionsTasksOutput, bool) bool) error {
	return c.ListDetectMitigationActionsTasksPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListDetectMitigationActionsTasksPagesWithContext same as ListDetectMitigationActionsTasksPages 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 *IoT) ListDetectMitigationActionsTasksPagesWithContext(ctx aws.Context, input *ListDetectMitigationActionsTasksInput, fn func(*ListDetectMitigationActionsTasksOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListDetectMitigationActionsTasksInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListDetectMitigationActionsTasksRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListDimensions = "ListDimensions"

// ListDimensionsRequest generates a "aws/request.Request" representing the
// client's request for the ListDimensions 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 ListDimensions for more information on using the ListDimensions
// 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 ListDimensionsRequest method.
//	req, resp := client.ListDimensionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListDimensionsRequest(input *ListDimensionsInput) (req *request.Request, output *ListDimensionsOutput) {
	op := &request.Operation{
		Name:       opListDimensions,
		HTTPMethod: "GET",
		HTTPPath:   "/dimensions",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListDimensionsInput{}
	}

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

// ListDimensions API operation for AWS IoT.
//
// List the set of dimensions that are defined for your Amazon Web Services
// accounts.
//
// Requires permission to access the ListDimensions (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListDimensions for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) ListDimensions(input *ListDimensionsInput) (*ListDimensionsOutput, error) {
	req, out := c.ListDimensionsRequest(input)
	return out, req.Send()
}

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

// ListDimensionsPages iterates over the pages of a ListDimensions operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListDimensions 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 ListDimensions operation.
//	pageNum := 0
//	err := client.ListDimensionsPages(params,
//	    func(page *iot.ListDimensionsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListDimensionsPages(input *ListDimensionsInput, fn func(*ListDimensionsOutput, bool) bool) error {
	return c.ListDimensionsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListDimensionsPagesWithContext same as ListDimensionsPages 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 *IoT) ListDimensionsPagesWithContext(ctx aws.Context, input *ListDimensionsInput, fn func(*ListDimensionsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListDimensionsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListDimensionsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListDomainConfigurations = "ListDomainConfigurations"

// ListDomainConfigurationsRequest generates a "aws/request.Request" representing the
// client's request for the ListDomainConfigurations 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 ListDomainConfigurations for more information on using the ListDomainConfigurations
// 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 ListDomainConfigurationsRequest method.
//	req, resp := client.ListDomainConfigurationsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListDomainConfigurationsRequest(input *ListDomainConfigurationsInput) (req *request.Request, output *ListDomainConfigurationsOutput) {
	op := &request.Operation{
		Name:       opListDomainConfigurations,
		HTTPMethod: "GET",
		HTTPPath:   "/domainConfigurations",
		Paginator: &request.Paginator{
			InputTokens:     []string{"marker"},
			OutputTokens:    []string{"nextMarker"},
			LimitToken:      "pageSize",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListDomainConfigurationsInput{}
	}

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

// ListDomainConfigurations API operation for AWS IoT.
//
// Gets a list of domain configurations for the user. This list is sorted alphabetically
// by domain configuration name.
//
// Requires permission to access the ListDomainConfigurations (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListDomainConfigurations for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListDomainConfigurations(input *ListDomainConfigurationsInput) (*ListDomainConfigurationsOutput, error) {
	req, out := c.ListDomainConfigurationsRequest(input)
	return out, req.Send()
}

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

// ListDomainConfigurationsPages iterates over the pages of a ListDomainConfigurations operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListDomainConfigurations 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 ListDomainConfigurations operation.
//	pageNum := 0
//	err := client.ListDomainConfigurationsPages(params,
//	    func(page *iot.ListDomainConfigurationsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListDomainConfigurationsPages(input *ListDomainConfigurationsInput, fn func(*ListDomainConfigurationsOutput, bool) bool) error {
	return c.ListDomainConfigurationsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListDomainConfigurationsPagesWithContext same as ListDomainConfigurationsPages 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 *IoT) ListDomainConfigurationsPagesWithContext(ctx aws.Context, input *ListDomainConfigurationsInput, fn func(*ListDomainConfigurationsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListDomainConfigurationsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListDomainConfigurationsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListFleetMetrics = "ListFleetMetrics"

// ListFleetMetricsRequest generates a "aws/request.Request" representing the
// client's request for the ListFleetMetrics 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 ListFleetMetrics for more information on using the ListFleetMetrics
// 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 ListFleetMetricsRequest method.
//	req, resp := client.ListFleetMetricsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListFleetMetricsRequest(input *ListFleetMetricsInput) (req *request.Request, output *ListFleetMetricsOutput) {
	op := &request.Operation{
		Name:       opListFleetMetrics,
		HTTPMethod: "GET",
		HTTPPath:   "/fleet-metrics",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListFleetMetricsInput{}
	}

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

// ListFleetMetrics API operation for AWS IoT.
//
// Lists all your fleet metrics.
//
// Requires permission to access the ListFleetMetrics (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListFleetMetrics for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListFleetMetrics(input *ListFleetMetricsInput) (*ListFleetMetricsOutput, error) {
	req, out := c.ListFleetMetricsRequest(input)
	return out, req.Send()
}

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

// ListFleetMetricsPages iterates over the pages of a ListFleetMetrics operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListFleetMetrics 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 ListFleetMetrics operation.
//	pageNum := 0
//	err := client.ListFleetMetricsPages(params,
//	    func(page *iot.ListFleetMetricsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListFleetMetricsPages(input *ListFleetMetricsInput, fn func(*ListFleetMetricsOutput, bool) bool) error {
	return c.ListFleetMetricsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListFleetMetricsPagesWithContext same as ListFleetMetricsPages 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 *IoT) ListFleetMetricsPagesWithContext(ctx aws.Context, input *ListFleetMetricsInput, fn func(*ListFleetMetricsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListFleetMetricsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListFleetMetricsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListIndices = "ListIndices"

// ListIndicesRequest generates a "aws/request.Request" representing the
// client's request for the ListIndices 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 ListIndices for more information on using the ListIndices
// 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 ListIndicesRequest method.
//	req, resp := client.ListIndicesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListIndicesRequest(input *ListIndicesInput) (req *request.Request, output *ListIndicesOutput) {
	op := &request.Operation{
		Name:       opListIndices,
		HTTPMethod: "GET",
		HTTPPath:   "/indices",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListIndicesInput{}
	}

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

// ListIndices API operation for AWS IoT.
//
// Lists the search indices.
//
// Requires permission to access the ListIndices (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListIndices for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListIndices(input *ListIndicesInput) (*ListIndicesOutput, error) {
	req, out := c.ListIndicesRequest(input)
	return out, req.Send()
}

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

// ListIndicesPages iterates over the pages of a ListIndices operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListIndices 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 ListIndices operation.
//	pageNum := 0
//	err := client.ListIndicesPages(params,
//	    func(page *iot.ListIndicesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListIndicesPages(input *ListIndicesInput, fn func(*ListIndicesOutput, bool) bool) error {
	return c.ListIndicesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListIndicesPagesWithContext same as ListIndicesPages 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 *IoT) ListIndicesPagesWithContext(ctx aws.Context, input *ListIndicesInput, fn func(*ListIndicesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListIndicesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListIndicesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListJobExecutionsForJob = "ListJobExecutionsForJob"

// ListJobExecutionsForJobRequest generates a "aws/request.Request" representing the
// client's request for the ListJobExecutionsForJob 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 ListJobExecutionsForJob for more information on using the ListJobExecutionsForJob
// 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 ListJobExecutionsForJobRequest method.
//	req, resp := client.ListJobExecutionsForJobRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListJobExecutionsForJobRequest(input *ListJobExecutionsForJobInput) (req *request.Request, output *ListJobExecutionsForJobOutput) {
	op := &request.Operation{
		Name:       opListJobExecutionsForJob,
		HTTPMethod: "GET",
		HTTPPath:   "/jobs/{jobId}/things",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListJobExecutionsForJobInput{}
	}

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

// ListJobExecutionsForJob API operation for AWS IoT.
//
// Lists the job executions for a job.
//
// Requires permission to access the ListJobExecutionsForJob (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListJobExecutionsForJob for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) ListJobExecutionsForJob(input *ListJobExecutionsForJobInput) (*ListJobExecutionsForJobOutput, error) {
	req, out := c.ListJobExecutionsForJobRequest(input)
	return out, req.Send()
}

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

// ListJobExecutionsForJobPages iterates over the pages of a ListJobExecutionsForJob operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListJobExecutionsForJob 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 ListJobExecutionsForJob operation.
//	pageNum := 0
//	err := client.ListJobExecutionsForJobPages(params,
//	    func(page *iot.ListJobExecutionsForJobOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListJobExecutionsForJobPages(input *ListJobExecutionsForJobInput, fn func(*ListJobExecutionsForJobOutput, bool) bool) error {
	return c.ListJobExecutionsForJobPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListJobExecutionsForJobPagesWithContext same as ListJobExecutionsForJobPages 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 *IoT) ListJobExecutionsForJobPagesWithContext(ctx aws.Context, input *ListJobExecutionsForJobInput, fn func(*ListJobExecutionsForJobOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListJobExecutionsForJobInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListJobExecutionsForJobRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListJobExecutionsForThing = "ListJobExecutionsForThing"

// ListJobExecutionsForThingRequest generates a "aws/request.Request" representing the
// client's request for the ListJobExecutionsForThing 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 ListJobExecutionsForThing for more information on using the ListJobExecutionsForThing
// 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 ListJobExecutionsForThingRequest method.
//	req, resp := client.ListJobExecutionsForThingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListJobExecutionsForThingRequest(input *ListJobExecutionsForThingInput) (req *request.Request, output *ListJobExecutionsForThingOutput) {
	op := &request.Operation{
		Name:       opListJobExecutionsForThing,
		HTTPMethod: "GET",
		HTTPPath:   "/things/{thingName}/jobs",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListJobExecutionsForThingInput{}
	}

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

// ListJobExecutionsForThing API operation for AWS IoT.
//
// Lists the job executions for the specified thing.
//
// Requires permission to access the ListJobExecutionsForThing (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListJobExecutionsForThing for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) ListJobExecutionsForThing(input *ListJobExecutionsForThingInput) (*ListJobExecutionsForThingOutput, error) {
	req, out := c.ListJobExecutionsForThingRequest(input)
	return out, req.Send()
}

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

// ListJobExecutionsForThingPages iterates over the pages of a ListJobExecutionsForThing operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListJobExecutionsForThing 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 ListJobExecutionsForThing operation.
//	pageNum := 0
//	err := client.ListJobExecutionsForThingPages(params,
//	    func(page *iot.ListJobExecutionsForThingOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListJobExecutionsForThingPages(input *ListJobExecutionsForThingInput, fn func(*ListJobExecutionsForThingOutput, bool) bool) error {
	return c.ListJobExecutionsForThingPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListJobExecutionsForThingPagesWithContext same as ListJobExecutionsForThingPages 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 *IoT) ListJobExecutionsForThingPagesWithContext(ctx aws.Context, input *ListJobExecutionsForThingInput, fn func(*ListJobExecutionsForThingOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListJobExecutionsForThingInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListJobExecutionsForThingRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListJobTemplates = "ListJobTemplates"

// ListJobTemplatesRequest generates a "aws/request.Request" representing the
// client's request for the ListJobTemplates 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 ListJobTemplates for more information on using the ListJobTemplates
// 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 ListJobTemplatesRequest method.
//	req, resp := client.ListJobTemplatesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListJobTemplatesRequest(input *ListJobTemplatesInput) (req *request.Request, output *ListJobTemplatesOutput) {
	op := &request.Operation{
		Name:       opListJobTemplates,
		HTTPMethod: "GET",
		HTTPPath:   "/job-templates",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListJobTemplatesInput{}
	}

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

// ListJobTemplates API operation for AWS IoT.
//
// Returns a list of job templates.
//
// Requires permission to access the ListJobTemplates (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListJobTemplates for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListJobTemplates(input *ListJobTemplatesInput) (*ListJobTemplatesOutput, error) {
	req, out := c.ListJobTemplatesRequest(input)
	return out, req.Send()
}

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

// ListJobTemplatesPages iterates over the pages of a ListJobTemplates operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListJobTemplates 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 ListJobTemplates operation.
//	pageNum := 0
//	err := client.ListJobTemplatesPages(params,
//	    func(page *iot.ListJobTemplatesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListJobTemplatesPages(input *ListJobTemplatesInput, fn func(*ListJobTemplatesOutput, bool) bool) error {
	return c.ListJobTemplatesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListJobTemplatesPagesWithContext same as ListJobTemplatesPages 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 *IoT) ListJobTemplatesPagesWithContext(ctx aws.Context, input *ListJobTemplatesInput, fn func(*ListJobTemplatesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListJobTemplatesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListJobTemplatesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListJobs = "ListJobs"

// ListJobsRequest generates a "aws/request.Request" representing the
// client's request for the ListJobs 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 ListJobs for more information on using the ListJobs
// 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 ListJobsRequest method.
//	req, resp := client.ListJobsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListJobsRequest(input *ListJobsInput) (req *request.Request, output *ListJobsOutput) {
	op := &request.Operation{
		Name:       opListJobs,
		HTTPMethod: "GET",
		HTTPPath:   "/jobs",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListJobsInput{}
	}

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

// ListJobs API operation for AWS IoT.
//
// Lists jobs.
//
// Requires permission to access the ListJobs (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListJobs for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) ListJobs(input *ListJobsInput) (*ListJobsOutput, error) {
	req, out := c.ListJobsRequest(input)
	return out, req.Send()
}

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

// ListJobsPages iterates over the pages of a ListJobs operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListJobs 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 ListJobs operation.
//	pageNum := 0
//	err := client.ListJobsPages(params,
//	    func(page *iot.ListJobsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListJobsPages(input *ListJobsInput, fn func(*ListJobsOutput, bool) bool) error {
	return c.ListJobsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListJobsPagesWithContext same as ListJobsPages 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 *IoT) ListJobsPagesWithContext(ctx aws.Context, input *ListJobsInput, fn func(*ListJobsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListJobsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListJobsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListManagedJobTemplates = "ListManagedJobTemplates"

// ListManagedJobTemplatesRequest generates a "aws/request.Request" representing the
// client's request for the ListManagedJobTemplates 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 ListManagedJobTemplates for more information on using the ListManagedJobTemplates
// 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 ListManagedJobTemplatesRequest method.
//	req, resp := client.ListManagedJobTemplatesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListManagedJobTemplatesRequest(input *ListManagedJobTemplatesInput) (req *request.Request, output *ListManagedJobTemplatesOutput) {
	op := &request.Operation{
		Name:       opListManagedJobTemplates,
		HTTPMethod: "GET",
		HTTPPath:   "/managed-job-templates",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListManagedJobTemplatesInput{}
	}

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

// ListManagedJobTemplates API operation for AWS IoT.
//
// Returns a list of managed job templates.
//
// 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 IoT's
// API operation ListManagedJobTemplates for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
func (c *IoT) ListManagedJobTemplates(input *ListManagedJobTemplatesInput) (*ListManagedJobTemplatesOutput, error) {
	req, out := c.ListManagedJobTemplatesRequest(input)
	return out, req.Send()
}

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

// ListManagedJobTemplatesPages iterates over the pages of a ListManagedJobTemplates operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListManagedJobTemplates 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 ListManagedJobTemplates operation.
//	pageNum := 0
//	err := client.ListManagedJobTemplatesPages(params,
//	    func(page *iot.ListManagedJobTemplatesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListManagedJobTemplatesPages(input *ListManagedJobTemplatesInput, fn func(*ListManagedJobTemplatesOutput, bool) bool) error {
	return c.ListManagedJobTemplatesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListManagedJobTemplatesPagesWithContext same as ListManagedJobTemplatesPages 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 *IoT) ListManagedJobTemplatesPagesWithContext(ctx aws.Context, input *ListManagedJobTemplatesInput, fn func(*ListManagedJobTemplatesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListManagedJobTemplatesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListManagedJobTemplatesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListMetricValues = "ListMetricValues"

// ListMetricValuesRequest generates a "aws/request.Request" representing the
// client's request for the ListMetricValues 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 ListMetricValues for more information on using the ListMetricValues
// 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 ListMetricValuesRequest method.
//	req, resp := client.ListMetricValuesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListMetricValuesRequest(input *ListMetricValuesInput) (req *request.Request, output *ListMetricValuesOutput) {
	op := &request.Operation{
		Name:       opListMetricValues,
		HTTPMethod: "GET",
		HTTPPath:   "/metric-values",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListMetricValuesInput{}
	}

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

// ListMetricValues API operation for AWS IoT.
//
// Lists the values reported for an IoT Device Defender metric (device-side
// metric, cloud-side metric, or custom metric) by the given thing during the
// 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 IoT's
// API operation ListMetricValues for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) ListMetricValues(input *ListMetricValuesInput) (*ListMetricValuesOutput, error) {
	req, out := c.ListMetricValuesRequest(input)
	return out, req.Send()
}

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

// ListMetricValuesPages iterates over the pages of a ListMetricValues operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListMetricValues 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 ListMetricValues operation.
//	pageNum := 0
//	err := client.ListMetricValuesPages(params,
//	    func(page *iot.ListMetricValuesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListMetricValuesPages(input *ListMetricValuesInput, fn func(*ListMetricValuesOutput, bool) bool) error {
	return c.ListMetricValuesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListMetricValuesPagesWithContext same as ListMetricValuesPages 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 *IoT) ListMetricValuesPagesWithContext(ctx aws.Context, input *ListMetricValuesInput, fn func(*ListMetricValuesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListMetricValuesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListMetricValuesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListMitigationActions = "ListMitigationActions"

// ListMitigationActionsRequest generates a "aws/request.Request" representing the
// client's request for the ListMitigationActions 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 ListMitigationActions for more information on using the ListMitigationActions
// 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 ListMitigationActionsRequest method.
//	req, resp := client.ListMitigationActionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListMitigationActionsRequest(input *ListMitigationActionsInput) (req *request.Request, output *ListMitigationActionsOutput) {
	op := &request.Operation{
		Name:       opListMitigationActions,
		HTTPMethod: "GET",
		HTTPPath:   "/mitigationactions/actions",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListMitigationActionsInput{}
	}

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

// ListMitigationActions API operation for AWS IoT.
//
// Gets a list of all mitigation actions that match the specified filter criteria.
//
// Requires permission to access the ListMitigationActions (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListMitigationActions for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListMitigationActions(input *ListMitigationActionsInput) (*ListMitigationActionsOutput, error) {
	req, out := c.ListMitigationActionsRequest(input)
	return out, req.Send()
}

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

// ListMitigationActionsPages iterates over the pages of a ListMitigationActions operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListMitigationActions 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 ListMitigationActions operation.
//	pageNum := 0
//	err := client.ListMitigationActionsPages(params,
//	    func(page *iot.ListMitigationActionsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListMitigationActionsPages(input *ListMitigationActionsInput, fn func(*ListMitigationActionsOutput, bool) bool) error {
	return c.ListMitigationActionsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListMitigationActionsPagesWithContext same as ListMitigationActionsPages 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 *IoT) ListMitigationActionsPagesWithContext(ctx aws.Context, input *ListMitigationActionsInput, fn func(*ListMitigationActionsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListMitigationActionsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListMitigationActionsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListOTAUpdates = "ListOTAUpdates"

// ListOTAUpdatesRequest generates a "aws/request.Request" representing the
// client's request for the ListOTAUpdates 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 ListOTAUpdates for more information on using the ListOTAUpdates
// 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 ListOTAUpdatesRequest method.
//	req, resp := client.ListOTAUpdatesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListOTAUpdatesRequest(input *ListOTAUpdatesInput) (req *request.Request, output *ListOTAUpdatesOutput) {
	op := &request.Operation{
		Name:       opListOTAUpdates,
		HTTPMethod: "GET",
		HTTPPath:   "/otaUpdates",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListOTAUpdatesInput{}
	}

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

// ListOTAUpdates API operation for AWS IoT.
//
// Lists OTA updates.
//
// Requires permission to access the ListOTAUpdates (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListOTAUpdates for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) ListOTAUpdates(input *ListOTAUpdatesInput) (*ListOTAUpdatesOutput, error) {
	req, out := c.ListOTAUpdatesRequest(input)
	return out, req.Send()
}

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

// ListOTAUpdatesPages iterates over the pages of a ListOTAUpdates operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListOTAUpdates 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 ListOTAUpdates operation.
//	pageNum := 0
//	err := client.ListOTAUpdatesPages(params,
//	    func(page *iot.ListOTAUpdatesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListOTAUpdatesPages(input *ListOTAUpdatesInput, fn func(*ListOTAUpdatesOutput, bool) bool) error {
	return c.ListOTAUpdatesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListOTAUpdatesPagesWithContext same as ListOTAUpdatesPages 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 *IoT) ListOTAUpdatesPagesWithContext(ctx aws.Context, input *ListOTAUpdatesInput, fn func(*ListOTAUpdatesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListOTAUpdatesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListOTAUpdatesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListOutgoingCertificates = "ListOutgoingCertificates"

// ListOutgoingCertificatesRequest generates a "aws/request.Request" representing the
// client's request for the ListOutgoingCertificates 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 ListOutgoingCertificates for more information on using the ListOutgoingCertificates
// 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 ListOutgoingCertificatesRequest method.
//	req, resp := client.ListOutgoingCertificatesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListOutgoingCertificatesRequest(input *ListOutgoingCertificatesInput) (req *request.Request, output *ListOutgoingCertificatesOutput) {
	op := &request.Operation{
		Name:       opListOutgoingCertificates,
		HTTPMethod: "GET",
		HTTPPath:   "/certificates-out-going",
		Paginator: &request.Paginator{
			InputTokens:     []string{"marker"},
			OutputTokens:    []string{"nextMarker"},
			LimitToken:      "pageSize",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListOutgoingCertificatesInput{}
	}

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

// ListOutgoingCertificates API operation for AWS IoT.
//
// Lists certificates that are being transferred but not yet accepted.
//
// Requires permission to access the ListOutgoingCertificates (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListOutgoingCertificates for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListOutgoingCertificates(input *ListOutgoingCertificatesInput) (*ListOutgoingCertificatesOutput, error) {
	req, out := c.ListOutgoingCertificatesRequest(input)
	return out, req.Send()
}

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

// ListOutgoingCertificatesPages iterates over the pages of a ListOutgoingCertificates operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListOutgoingCertificates 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 ListOutgoingCertificates operation.
//	pageNum := 0
//	err := client.ListOutgoingCertificatesPages(params,
//	    func(page *iot.ListOutgoingCertificatesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListOutgoingCertificatesPages(input *ListOutgoingCertificatesInput, fn func(*ListOutgoingCertificatesOutput, bool) bool) error {
	return c.ListOutgoingCertificatesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListOutgoingCertificatesPagesWithContext same as ListOutgoingCertificatesPages 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 *IoT) ListOutgoingCertificatesPagesWithContext(ctx aws.Context, input *ListOutgoingCertificatesInput, fn func(*ListOutgoingCertificatesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListOutgoingCertificatesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListOutgoingCertificatesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListPackageVersions = "ListPackageVersions"

// ListPackageVersionsRequest generates a "aws/request.Request" representing the
// client's request for the ListPackageVersions 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 ListPackageVersions for more information on using the ListPackageVersions
// 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 ListPackageVersionsRequest method.
//	req, resp := client.ListPackageVersionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListPackageVersionsRequest(input *ListPackageVersionsInput) (req *request.Request, output *ListPackageVersionsOutput) {
	op := &request.Operation{
		Name:       opListPackageVersions,
		HTTPMethod: "GET",
		HTTPPath:   "/packages/{packageName}/versions",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListPackageVersionsInput{}
	}

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

// ListPackageVersions API operation for AWS IoT.
//
// Lists the software package versions associated to the account.
//
// Requires permission to access the ListPackageVersions (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListPackageVersions for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
//
//   - ValidationException
//     The request is not valid.
func (c *IoT) ListPackageVersions(input *ListPackageVersionsInput) (*ListPackageVersionsOutput, error) {
	req, out := c.ListPackageVersionsRequest(input)
	return out, req.Send()
}

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

// ListPackageVersionsPages iterates over the pages of a ListPackageVersions operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListPackageVersions 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 ListPackageVersions operation.
//	pageNum := 0
//	err := client.ListPackageVersionsPages(params,
//	    func(page *iot.ListPackageVersionsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListPackageVersionsPages(input *ListPackageVersionsInput, fn func(*ListPackageVersionsOutput, bool) bool) error {
	return c.ListPackageVersionsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListPackageVersionsPagesWithContext same as ListPackageVersionsPages 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 *IoT) ListPackageVersionsPagesWithContext(ctx aws.Context, input *ListPackageVersionsInput, fn func(*ListPackageVersionsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListPackageVersionsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListPackageVersionsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListPackages = "ListPackages"

// ListPackagesRequest generates a "aws/request.Request" representing the
// client's request for the ListPackages 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 ListPackages for more information on using the ListPackages
// 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 ListPackagesRequest method.
//	req, resp := client.ListPackagesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListPackagesRequest(input *ListPackagesInput) (req *request.Request, output *ListPackagesOutput) {
	op := &request.Operation{
		Name:       opListPackages,
		HTTPMethod: "GET",
		HTTPPath:   "/packages",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListPackagesInput{}
	}

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

// ListPackages API operation for AWS IoT.
//
// Lists the software packages associated to the account.
//
// Requires permission to access the ListPackages (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListPackages for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
//
//   - ValidationException
//     The request is not valid.
func (c *IoT) ListPackages(input *ListPackagesInput) (*ListPackagesOutput, error) {
	req, out := c.ListPackagesRequest(input)
	return out, req.Send()
}

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

// ListPackagesPages iterates over the pages of a ListPackages operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListPackages 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 ListPackages operation.
//	pageNum := 0
//	err := client.ListPackagesPages(params,
//	    func(page *iot.ListPackagesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListPackagesPages(input *ListPackagesInput, fn func(*ListPackagesOutput, bool) bool) error {
	return c.ListPackagesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListPackagesPagesWithContext same as ListPackagesPages 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 *IoT) ListPackagesPagesWithContext(ctx aws.Context, input *ListPackagesInput, fn func(*ListPackagesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListPackagesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListPackagesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListPolicies = "ListPolicies"

// ListPoliciesRequest generates a "aws/request.Request" representing the
// client's request for the ListPolicies 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 ListPolicies for more information on using the ListPolicies
// 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 ListPoliciesRequest method.
//	req, resp := client.ListPoliciesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListPoliciesRequest(input *ListPoliciesInput) (req *request.Request, output *ListPoliciesOutput) {
	op := &request.Operation{
		Name:       opListPolicies,
		HTTPMethod: "GET",
		HTTPPath:   "/policies",
		Paginator: &request.Paginator{
			InputTokens:     []string{"marker"},
			OutputTokens:    []string{"nextMarker"},
			LimitToken:      "pageSize",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListPoliciesInput{}
	}

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

// ListPolicies API operation for AWS IoT.
//
// Lists your policies.
//
// Requires permission to access the ListPolicies (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListPolicies for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListPolicies(input *ListPoliciesInput) (*ListPoliciesOutput, error) {
	req, out := c.ListPoliciesRequest(input)
	return out, req.Send()
}

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

// ListPoliciesPages iterates over the pages of a ListPolicies operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListPolicies 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 ListPolicies operation.
//	pageNum := 0
//	err := client.ListPoliciesPages(params,
//	    func(page *iot.ListPoliciesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListPoliciesPages(input *ListPoliciesInput, fn func(*ListPoliciesOutput, bool) bool) error {
	return c.ListPoliciesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListPoliciesPagesWithContext same as ListPoliciesPages 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 *IoT) ListPoliciesPagesWithContext(ctx aws.Context, input *ListPoliciesInput, fn func(*ListPoliciesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListPoliciesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListPoliciesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListPolicyPrincipals = "ListPolicyPrincipals"

// ListPolicyPrincipalsRequest generates a "aws/request.Request" representing the
// client's request for the ListPolicyPrincipals 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 ListPolicyPrincipals for more information on using the ListPolicyPrincipals
// 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 ListPolicyPrincipalsRequest method.
//	req, resp := client.ListPolicyPrincipalsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// Deprecated: ListPolicyPrincipals has been deprecated
func (c *IoT) ListPolicyPrincipalsRequest(input *ListPolicyPrincipalsInput) (req *request.Request, output *ListPolicyPrincipalsOutput) {
	if c.Client.Config.Logger != nil {
		c.Client.Config.Logger.Log("This operation, ListPolicyPrincipals, has been deprecated")
	}
	op := &request.Operation{
		Name:       opListPolicyPrincipals,
		HTTPMethod: "GET",
		HTTPPath:   "/policy-principals",
		Paginator: &request.Paginator{
			InputTokens:     []string{"marker"},
			OutputTokens:    []string{"nextMarker"},
			LimitToken:      "pageSize",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListPolicyPrincipalsInput{}
	}

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

// ListPolicyPrincipals API operation for AWS IoT.
//
// Lists the principals associated with the specified policy.
//
// Note: This action is deprecated and works as expected for backward compatibility,
// but we won't add enhancements. Use ListTargetsForPolicy instead.
//
// Requires permission to access the ListPolicyPrincipals (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListPolicyPrincipals for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
// Deprecated: ListPolicyPrincipals has been deprecated
func (c *IoT) ListPolicyPrincipals(input *ListPolicyPrincipalsInput) (*ListPolicyPrincipalsOutput, error) {
	req, out := c.ListPolicyPrincipalsRequest(input)
	return out, req.Send()
}

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

// ListPolicyPrincipalsPages iterates over the pages of a ListPolicyPrincipals operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListPolicyPrincipals 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 ListPolicyPrincipals operation.
//	pageNum := 0
//	err := client.ListPolicyPrincipalsPages(params,
//	    func(page *iot.ListPolicyPrincipalsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
//
// Deprecated: ListPolicyPrincipalsPages has been deprecated
func (c *IoT) ListPolicyPrincipalsPages(input *ListPolicyPrincipalsInput, fn func(*ListPolicyPrincipalsOutput, bool) bool) error {
	return c.ListPolicyPrincipalsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListPolicyPrincipalsPagesWithContext same as ListPolicyPrincipalsPages 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.
//
// Deprecated: ListPolicyPrincipalsPagesWithContext has been deprecated
func (c *IoT) ListPolicyPrincipalsPagesWithContext(ctx aws.Context, input *ListPolicyPrincipalsInput, fn func(*ListPolicyPrincipalsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListPolicyPrincipalsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListPolicyPrincipalsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListPolicyVersions = "ListPolicyVersions"

// ListPolicyVersionsRequest generates a "aws/request.Request" representing the
// client's request for the ListPolicyVersions 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 ListPolicyVersions for more information on using the ListPolicyVersions
// 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 ListPolicyVersionsRequest method.
//	req, resp := client.ListPolicyVersionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListPolicyVersionsRequest(input *ListPolicyVersionsInput) (req *request.Request, output *ListPolicyVersionsOutput) {
	op := &request.Operation{
		Name:       opListPolicyVersions,
		HTTPMethod: "GET",
		HTTPPath:   "/policies/{policyName}/version",
	}

	if input == nil {
		input = &ListPolicyVersionsInput{}
	}

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

// ListPolicyVersions API operation for AWS IoT.
//
// Lists the versions of the specified policy and identifies the default version.
//
// Requires permission to access the ListPolicyVersions (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListPolicyVersions for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListPolicyVersions(input *ListPolicyVersionsInput) (*ListPolicyVersionsOutput, error) {
	req, out := c.ListPolicyVersionsRequest(input)
	return out, req.Send()
}

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

const opListPrincipalPolicies = "ListPrincipalPolicies"

// ListPrincipalPoliciesRequest generates a "aws/request.Request" representing the
// client's request for the ListPrincipalPolicies 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 ListPrincipalPolicies for more information on using the ListPrincipalPolicies
// 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 ListPrincipalPoliciesRequest method.
//	req, resp := client.ListPrincipalPoliciesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// Deprecated: ListPrincipalPolicies has been deprecated
func (c *IoT) ListPrincipalPoliciesRequest(input *ListPrincipalPoliciesInput) (req *request.Request, output *ListPrincipalPoliciesOutput) {
	if c.Client.Config.Logger != nil {
		c.Client.Config.Logger.Log("This operation, ListPrincipalPolicies, has been deprecated")
	}
	op := &request.Operation{
		Name:       opListPrincipalPolicies,
		HTTPMethod: "GET",
		HTTPPath:   "/principal-policies",
		Paginator: &request.Paginator{
			InputTokens:     []string{"marker"},
			OutputTokens:    []string{"nextMarker"},
			LimitToken:      "pageSize",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListPrincipalPoliciesInput{}
	}

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

// ListPrincipalPolicies API operation for AWS IoT.
//
// Lists the policies attached to the specified principal. If you use an Cognito
// identity, the ID must be in AmazonCognito Identity format (https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html#API_GetCredentialsForIdentity_RequestSyntax).
//
// Note: This action is deprecated and works as expected for backward compatibility,
// but we won't add enhancements. Use ListAttachedPolicies instead.
//
// Requires permission to access the ListPrincipalPolicies (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListPrincipalPolicies for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
// Deprecated: ListPrincipalPolicies has been deprecated
func (c *IoT) ListPrincipalPolicies(input *ListPrincipalPoliciesInput) (*ListPrincipalPoliciesOutput, error) {
	req, out := c.ListPrincipalPoliciesRequest(input)
	return out, req.Send()
}

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

// ListPrincipalPoliciesPages iterates over the pages of a ListPrincipalPolicies operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListPrincipalPolicies 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 ListPrincipalPolicies operation.
//	pageNum := 0
//	err := client.ListPrincipalPoliciesPages(params,
//	    func(page *iot.ListPrincipalPoliciesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
//
// Deprecated: ListPrincipalPoliciesPages has been deprecated
func (c *IoT) ListPrincipalPoliciesPages(input *ListPrincipalPoliciesInput, fn func(*ListPrincipalPoliciesOutput, bool) bool) error {
	return c.ListPrincipalPoliciesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListPrincipalPoliciesPagesWithContext same as ListPrincipalPoliciesPages 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.
//
// Deprecated: ListPrincipalPoliciesPagesWithContext has been deprecated
func (c *IoT) ListPrincipalPoliciesPagesWithContext(ctx aws.Context, input *ListPrincipalPoliciesInput, fn func(*ListPrincipalPoliciesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListPrincipalPoliciesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListPrincipalPoliciesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListPrincipalThings = "ListPrincipalThings"

// ListPrincipalThingsRequest generates a "aws/request.Request" representing the
// client's request for the ListPrincipalThings 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 ListPrincipalThings for more information on using the ListPrincipalThings
// 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 ListPrincipalThingsRequest method.
//	req, resp := client.ListPrincipalThingsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListPrincipalThingsRequest(input *ListPrincipalThingsInput) (req *request.Request, output *ListPrincipalThingsOutput) {
	op := &request.Operation{
		Name:       opListPrincipalThings,
		HTTPMethod: "GET",
		HTTPPath:   "/principals/things",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListPrincipalThingsInput{}
	}

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

// ListPrincipalThings API operation for AWS IoT.
//
// Lists the things associated with the specified principal. A principal can
// be X.509 certificates, IAM users, groups, and roles, Amazon Cognito identities
// or federated identities.
//
// Requires permission to access the ListPrincipalThings (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListPrincipalThings for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) ListPrincipalThings(input *ListPrincipalThingsInput) (*ListPrincipalThingsOutput, error) {
	req, out := c.ListPrincipalThingsRequest(input)
	return out, req.Send()
}

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

// ListPrincipalThingsPages iterates over the pages of a ListPrincipalThings operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListPrincipalThings 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 ListPrincipalThings operation.
//	pageNum := 0
//	err := client.ListPrincipalThingsPages(params,
//	    func(page *iot.ListPrincipalThingsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListPrincipalThingsPages(input *ListPrincipalThingsInput, fn func(*ListPrincipalThingsOutput, bool) bool) error {
	return c.ListPrincipalThingsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListPrincipalThingsPagesWithContext same as ListPrincipalThingsPages 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 *IoT) ListPrincipalThingsPagesWithContext(ctx aws.Context, input *ListPrincipalThingsInput, fn func(*ListPrincipalThingsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListPrincipalThingsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListPrincipalThingsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListProvisioningTemplateVersions = "ListProvisioningTemplateVersions"

// ListProvisioningTemplateVersionsRequest generates a "aws/request.Request" representing the
// client's request for the ListProvisioningTemplateVersions 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 ListProvisioningTemplateVersions for more information on using the ListProvisioningTemplateVersions
// 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 ListProvisioningTemplateVersionsRequest method.
//	req, resp := client.ListProvisioningTemplateVersionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListProvisioningTemplateVersionsRequest(input *ListProvisioningTemplateVersionsInput) (req *request.Request, output *ListProvisioningTemplateVersionsOutput) {
	op := &request.Operation{
		Name:       opListProvisioningTemplateVersions,
		HTTPMethod: "GET",
		HTTPPath:   "/provisioning-templates/{templateName}/versions",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListProvisioningTemplateVersionsInput{}
	}

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

// ListProvisioningTemplateVersions API operation for AWS IoT.
//
// A list of provisioning template versions.
//
// Requires permission to access the ListProvisioningTemplateVersions (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListProvisioningTemplateVersions for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
func (c *IoT) ListProvisioningTemplateVersions(input *ListProvisioningTemplateVersionsInput) (*ListProvisioningTemplateVersionsOutput, error) {
	req, out := c.ListProvisioningTemplateVersionsRequest(input)
	return out, req.Send()
}

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

// ListProvisioningTemplateVersionsPages iterates over the pages of a ListProvisioningTemplateVersions operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListProvisioningTemplateVersions 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 ListProvisioningTemplateVersions operation.
//	pageNum := 0
//	err := client.ListProvisioningTemplateVersionsPages(params,
//	    func(page *iot.ListProvisioningTemplateVersionsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListProvisioningTemplateVersionsPages(input *ListProvisioningTemplateVersionsInput, fn func(*ListProvisioningTemplateVersionsOutput, bool) bool) error {
	return c.ListProvisioningTemplateVersionsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListProvisioningTemplateVersionsPagesWithContext same as ListProvisioningTemplateVersionsPages 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 *IoT) ListProvisioningTemplateVersionsPagesWithContext(ctx aws.Context, input *ListProvisioningTemplateVersionsInput, fn func(*ListProvisioningTemplateVersionsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListProvisioningTemplateVersionsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListProvisioningTemplateVersionsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListProvisioningTemplates = "ListProvisioningTemplates"

// ListProvisioningTemplatesRequest generates a "aws/request.Request" representing the
// client's request for the ListProvisioningTemplates 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 ListProvisioningTemplates for more information on using the ListProvisioningTemplates
// 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 ListProvisioningTemplatesRequest method.
//	req, resp := client.ListProvisioningTemplatesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListProvisioningTemplatesRequest(input *ListProvisioningTemplatesInput) (req *request.Request, output *ListProvisioningTemplatesOutput) {
	op := &request.Operation{
		Name:       opListProvisioningTemplates,
		HTTPMethod: "GET",
		HTTPPath:   "/provisioning-templates",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListProvisioningTemplatesInput{}
	}

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

// ListProvisioningTemplates API operation for AWS IoT.
//
// Lists the provisioning templates in your Amazon Web Services account.
//
// Requires permission to access the ListProvisioningTemplates (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListProvisioningTemplates for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
func (c *IoT) ListProvisioningTemplates(input *ListProvisioningTemplatesInput) (*ListProvisioningTemplatesOutput, error) {
	req, out := c.ListProvisioningTemplatesRequest(input)
	return out, req.Send()
}

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

// ListProvisioningTemplatesPages iterates over the pages of a ListProvisioningTemplates operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListProvisioningTemplates 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 ListProvisioningTemplates operation.
//	pageNum := 0
//	err := client.ListProvisioningTemplatesPages(params,
//	    func(page *iot.ListProvisioningTemplatesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListProvisioningTemplatesPages(input *ListProvisioningTemplatesInput, fn func(*ListProvisioningTemplatesOutput, bool) bool) error {
	return c.ListProvisioningTemplatesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListProvisioningTemplatesPagesWithContext same as ListProvisioningTemplatesPages 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 *IoT) ListProvisioningTemplatesPagesWithContext(ctx aws.Context, input *ListProvisioningTemplatesInput, fn func(*ListProvisioningTemplatesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListProvisioningTemplatesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListProvisioningTemplatesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListRelatedResourcesForAuditFinding = "ListRelatedResourcesForAuditFinding"

// ListRelatedResourcesForAuditFindingRequest generates a "aws/request.Request" representing the
// client's request for the ListRelatedResourcesForAuditFinding 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 ListRelatedResourcesForAuditFinding for more information on using the ListRelatedResourcesForAuditFinding
// 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 ListRelatedResourcesForAuditFindingRequest method.
//	req, resp := client.ListRelatedResourcesForAuditFindingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListRelatedResourcesForAuditFindingRequest(input *ListRelatedResourcesForAuditFindingInput) (req *request.Request, output *ListRelatedResourcesForAuditFindingOutput) {
	op := &request.Operation{
		Name:       opListRelatedResourcesForAuditFinding,
		HTTPMethod: "GET",
		HTTPPath:   "/audit/relatedResources",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListRelatedResourcesForAuditFindingInput{}
	}

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

// ListRelatedResourcesForAuditFinding API operation for AWS IoT.
//
// The related resources of an Audit finding. The following resources can be
// returned from calling this API:
//
//   - DEVICE_CERTIFICATE
//
//   - CA_CERTIFICATE
//
//   - IOT_POLICY
//
//   - COGNITO_IDENTITY_POOL
//
//   - CLIENT_ID
//
//   - ACCOUNT_SETTINGS
//
//   - ROLE_ALIAS
//
//   - IAM_ROLE
//
//   - ISSUER_CERTIFICATE
//
// This API is similar to DescribeAuditFinding's RelatedResources (https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuditFinding.html)
// but provides pagination and is not limited to 10 resources. When calling
// DescribeAuditFinding (https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuditFinding.html)
// for the intermediate CA revoked for active device certificates check, RelatedResources
// will not be populated. You must use this API, ListRelatedResourcesForAuditFinding,
// to list the certificates.
//
// 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 IoT's
// API operation ListRelatedResourcesForAuditFinding for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListRelatedResourcesForAuditFinding(input *ListRelatedResourcesForAuditFindingInput) (*ListRelatedResourcesForAuditFindingOutput, error) {
	req, out := c.ListRelatedResourcesForAuditFindingRequest(input)
	return out, req.Send()
}

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

// ListRelatedResourcesForAuditFindingPages iterates over the pages of a ListRelatedResourcesForAuditFinding operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListRelatedResourcesForAuditFinding 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 ListRelatedResourcesForAuditFinding operation.
//	pageNum := 0
//	err := client.ListRelatedResourcesForAuditFindingPages(params,
//	    func(page *iot.ListRelatedResourcesForAuditFindingOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListRelatedResourcesForAuditFindingPages(input *ListRelatedResourcesForAuditFindingInput, fn func(*ListRelatedResourcesForAuditFindingOutput, bool) bool) error {
	return c.ListRelatedResourcesForAuditFindingPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListRelatedResourcesForAuditFindingPagesWithContext same as ListRelatedResourcesForAuditFindingPages 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 *IoT) ListRelatedResourcesForAuditFindingPagesWithContext(ctx aws.Context, input *ListRelatedResourcesForAuditFindingInput, fn func(*ListRelatedResourcesForAuditFindingOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListRelatedResourcesForAuditFindingInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListRelatedResourcesForAuditFindingRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListRoleAliases = "ListRoleAliases"

// ListRoleAliasesRequest generates a "aws/request.Request" representing the
// client's request for the ListRoleAliases 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 ListRoleAliases for more information on using the ListRoleAliases
// 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 ListRoleAliasesRequest method.
//	req, resp := client.ListRoleAliasesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListRoleAliasesRequest(input *ListRoleAliasesInput) (req *request.Request, output *ListRoleAliasesOutput) {
	op := &request.Operation{
		Name:       opListRoleAliases,
		HTTPMethod: "GET",
		HTTPPath:   "/role-aliases",
		Paginator: &request.Paginator{
			InputTokens:     []string{"marker"},
			OutputTokens:    []string{"nextMarker"},
			LimitToken:      "pageSize",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListRoleAliasesInput{}
	}

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

// ListRoleAliases API operation for AWS IoT.
//
// Lists the role aliases registered in your account.
//
// Requires permission to access the ListRoleAliases (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListRoleAliases for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListRoleAliases(input *ListRoleAliasesInput) (*ListRoleAliasesOutput, error) {
	req, out := c.ListRoleAliasesRequest(input)
	return out, req.Send()
}

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

// ListRoleAliasesPages iterates over the pages of a ListRoleAliases operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListRoleAliases 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 ListRoleAliases operation.
//	pageNum := 0
//	err := client.ListRoleAliasesPages(params,
//	    func(page *iot.ListRoleAliasesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListRoleAliasesPages(input *ListRoleAliasesInput, fn func(*ListRoleAliasesOutput, bool) bool) error {
	return c.ListRoleAliasesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListRoleAliasesPagesWithContext same as ListRoleAliasesPages 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 *IoT) ListRoleAliasesPagesWithContext(ctx aws.Context, input *ListRoleAliasesInput, fn func(*ListRoleAliasesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListRoleAliasesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListRoleAliasesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListScheduledAudits = "ListScheduledAudits"

// ListScheduledAuditsRequest generates a "aws/request.Request" representing the
// client's request for the ListScheduledAudits 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 ListScheduledAudits for more information on using the ListScheduledAudits
// 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 ListScheduledAuditsRequest method.
//	req, resp := client.ListScheduledAuditsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListScheduledAuditsRequest(input *ListScheduledAuditsInput) (req *request.Request, output *ListScheduledAuditsOutput) {
	op := &request.Operation{
		Name:       opListScheduledAudits,
		HTTPMethod: "GET",
		HTTPPath:   "/audit/scheduledaudits",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListScheduledAuditsInput{}
	}

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

// ListScheduledAudits API operation for AWS IoT.
//
// Lists all of your scheduled audits.
//
// Requires permission to access the ListScheduledAudits (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListScheduledAudits for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListScheduledAudits(input *ListScheduledAuditsInput) (*ListScheduledAuditsOutput, error) {
	req, out := c.ListScheduledAuditsRequest(input)
	return out, req.Send()
}

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

// ListScheduledAuditsPages iterates over the pages of a ListScheduledAudits operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListScheduledAudits 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 ListScheduledAudits operation.
//	pageNum := 0
//	err := client.ListScheduledAuditsPages(params,
//	    func(page *iot.ListScheduledAuditsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListScheduledAuditsPages(input *ListScheduledAuditsInput, fn func(*ListScheduledAuditsOutput, bool) bool) error {
	return c.ListScheduledAuditsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListScheduledAuditsPagesWithContext same as ListScheduledAuditsPages 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 *IoT) ListScheduledAuditsPagesWithContext(ctx aws.Context, input *ListScheduledAuditsInput, fn func(*ListScheduledAuditsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListScheduledAuditsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListScheduledAuditsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListSecurityProfiles = "ListSecurityProfiles"

// ListSecurityProfilesRequest generates a "aws/request.Request" representing the
// client's request for the ListSecurityProfiles 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 ListSecurityProfiles for more information on using the ListSecurityProfiles
// 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 ListSecurityProfilesRequest method.
//	req, resp := client.ListSecurityProfilesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListSecurityProfilesRequest(input *ListSecurityProfilesInput) (req *request.Request, output *ListSecurityProfilesOutput) {
	op := &request.Operation{
		Name:       opListSecurityProfiles,
		HTTPMethod: "GET",
		HTTPPath:   "/security-profiles",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListSecurityProfilesInput{}
	}

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

// ListSecurityProfiles API operation for AWS IoT.
//
// Lists the Device Defender security profiles you've created. You can filter
// security profiles by dimension or custom metric.
//
// Requires permission to access the ListSecurityProfiles (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// dimensionName and metricName cannot be used in the same 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 IoT's
// API operation ListSecurityProfiles for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) ListSecurityProfiles(input *ListSecurityProfilesInput) (*ListSecurityProfilesOutput, error) {
	req, out := c.ListSecurityProfilesRequest(input)
	return out, req.Send()
}

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

// ListSecurityProfilesPages iterates over the pages of a ListSecurityProfiles operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListSecurityProfiles 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 ListSecurityProfiles operation.
//	pageNum := 0
//	err := client.ListSecurityProfilesPages(params,
//	    func(page *iot.ListSecurityProfilesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListSecurityProfilesPages(input *ListSecurityProfilesInput, fn func(*ListSecurityProfilesOutput, bool) bool) error {
	return c.ListSecurityProfilesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListSecurityProfilesPagesWithContext same as ListSecurityProfilesPages 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 *IoT) ListSecurityProfilesPagesWithContext(ctx aws.Context, input *ListSecurityProfilesInput, fn func(*ListSecurityProfilesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListSecurityProfilesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListSecurityProfilesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListSecurityProfilesForTarget = "ListSecurityProfilesForTarget"

// ListSecurityProfilesForTargetRequest generates a "aws/request.Request" representing the
// client's request for the ListSecurityProfilesForTarget 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 ListSecurityProfilesForTarget for more information on using the ListSecurityProfilesForTarget
// 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 ListSecurityProfilesForTargetRequest method.
//	req, resp := client.ListSecurityProfilesForTargetRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListSecurityProfilesForTargetRequest(input *ListSecurityProfilesForTargetInput) (req *request.Request, output *ListSecurityProfilesForTargetOutput) {
	op := &request.Operation{
		Name:       opListSecurityProfilesForTarget,
		HTTPMethod: "GET",
		HTTPPath:   "/security-profiles-for-target",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListSecurityProfilesForTargetInput{}
	}

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

// ListSecurityProfilesForTarget API operation for AWS IoT.
//
// Lists the Device Defender security profiles attached to a target (thing group).
//
// Requires permission to access the ListSecurityProfilesForTarget (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListSecurityProfilesForTarget for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) ListSecurityProfilesForTarget(input *ListSecurityProfilesForTargetInput) (*ListSecurityProfilesForTargetOutput, error) {
	req, out := c.ListSecurityProfilesForTargetRequest(input)
	return out, req.Send()
}

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

// ListSecurityProfilesForTargetPages iterates over the pages of a ListSecurityProfilesForTarget operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListSecurityProfilesForTarget 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 ListSecurityProfilesForTarget operation.
//	pageNum := 0
//	err := client.ListSecurityProfilesForTargetPages(params,
//	    func(page *iot.ListSecurityProfilesForTargetOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListSecurityProfilesForTargetPages(input *ListSecurityProfilesForTargetInput, fn func(*ListSecurityProfilesForTargetOutput, bool) bool) error {
	return c.ListSecurityProfilesForTargetPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListSecurityProfilesForTargetPagesWithContext same as ListSecurityProfilesForTargetPages 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 *IoT) ListSecurityProfilesForTargetPagesWithContext(ctx aws.Context, input *ListSecurityProfilesForTargetInput, fn func(*ListSecurityProfilesForTargetOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListSecurityProfilesForTargetInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListSecurityProfilesForTargetRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListStreams = "ListStreams"

// ListStreamsRequest generates a "aws/request.Request" representing the
// client's request for the ListStreams 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 ListStreams for more information on using the ListStreams
// 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 ListStreamsRequest method.
//	req, resp := client.ListStreamsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListStreamsRequest(input *ListStreamsInput) (req *request.Request, output *ListStreamsOutput) {
	op := &request.Operation{
		Name:       opListStreams,
		HTTPMethod: "GET",
		HTTPPath:   "/streams",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListStreamsInput{}
	}

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

// ListStreams API operation for AWS IoT.
//
// Lists all of the streams in your Amazon Web Services account.
//
// Requires permission to access the ListStreams (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListStreams for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListStreams(input *ListStreamsInput) (*ListStreamsOutput, error) {
	req, out := c.ListStreamsRequest(input)
	return out, req.Send()
}

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

// ListStreamsPages iterates over the pages of a ListStreams operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListStreams 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 ListStreams operation.
//	pageNum := 0
//	err := client.ListStreamsPages(params,
//	    func(page *iot.ListStreamsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListStreamsPages(input *ListStreamsInput, fn func(*ListStreamsOutput, bool) bool) error {
	return c.ListStreamsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListStreamsPagesWithContext same as ListStreamsPages 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 *IoT) ListStreamsPagesWithContext(ctx aws.Context, input *ListStreamsInput, fn func(*ListStreamsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListStreamsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListStreamsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListTagsForResource = "ListTagsForResource"

// ListTagsForResourceRequest generates a "aws/request.Request" representing the
// client's request for the ListTagsForResource 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 ListTagsForResource for more information on using the ListTagsForResource
// 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 ListTagsForResourceRequest method.
//	req, resp := client.ListTagsForResourceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListTagsForResourceRequest(input *ListTagsForResourceInput) (req *request.Request, output *ListTagsForResourceOutput) {
	op := &request.Operation{
		Name:       opListTagsForResource,
		HTTPMethod: "GET",
		HTTPPath:   "/tags",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListTagsForResourceInput{}
	}

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

// ListTagsForResource API operation for AWS IoT.
//
// Lists the tags (metadata) you have assigned to the resource.
//
// Requires permission to access the ListTagsForResource (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) ListTagsForResource(input *ListTagsForResourceInput) (*ListTagsForResourceOutput, error) {
	req, out := c.ListTagsForResourceRequest(input)
	return out, req.Send()
}

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

// ListTagsForResourcePages iterates over the pages of a ListTagsForResource operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListTagsForResource 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 ListTagsForResource operation.
//	pageNum := 0
//	err := client.ListTagsForResourcePages(params,
//	    func(page *iot.ListTagsForResourceOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListTagsForResourcePages(input *ListTagsForResourceInput, fn func(*ListTagsForResourceOutput, bool) bool) error {
	return c.ListTagsForResourcePagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListTagsForResourcePagesWithContext same as ListTagsForResourcePages 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 *IoT) ListTagsForResourcePagesWithContext(ctx aws.Context, input *ListTagsForResourceInput, fn func(*ListTagsForResourceOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListTagsForResourceInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListTagsForResourceRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListTargetsForPolicy = "ListTargetsForPolicy"

// ListTargetsForPolicyRequest generates a "aws/request.Request" representing the
// client's request for the ListTargetsForPolicy 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 ListTargetsForPolicy for more information on using the ListTargetsForPolicy
// 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 ListTargetsForPolicyRequest method.
//	req, resp := client.ListTargetsForPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListTargetsForPolicyRequest(input *ListTargetsForPolicyInput) (req *request.Request, output *ListTargetsForPolicyOutput) {
	op := &request.Operation{
		Name:       opListTargetsForPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/policy-targets/{policyName}",
		Paginator: &request.Paginator{
			InputTokens:     []string{"marker"},
			OutputTokens:    []string{"nextMarker"},
			LimitToken:      "pageSize",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListTargetsForPolicyInput{}
	}

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

// ListTargetsForPolicy API operation for AWS IoT.
//
// List targets for the specified policy.
//
// Requires permission to access the ListTargetsForPolicy (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListTargetsForPolicy for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - LimitExceededException
//     A limit has been exceeded.
func (c *IoT) ListTargetsForPolicy(input *ListTargetsForPolicyInput) (*ListTargetsForPolicyOutput, error) {
	req, out := c.ListTargetsForPolicyRequest(input)
	return out, req.Send()
}

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

// ListTargetsForPolicyPages iterates over the pages of a ListTargetsForPolicy operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListTargetsForPolicy 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 ListTargetsForPolicy operation.
//	pageNum := 0
//	err := client.ListTargetsForPolicyPages(params,
//	    func(page *iot.ListTargetsForPolicyOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListTargetsForPolicyPages(input *ListTargetsForPolicyInput, fn func(*ListTargetsForPolicyOutput, bool) bool) error {
	return c.ListTargetsForPolicyPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListTargetsForPolicyPagesWithContext same as ListTargetsForPolicyPages 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 *IoT) ListTargetsForPolicyPagesWithContext(ctx aws.Context, input *ListTargetsForPolicyInput, fn func(*ListTargetsForPolicyOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListTargetsForPolicyInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListTargetsForPolicyRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListTargetsForSecurityProfile = "ListTargetsForSecurityProfile"

// ListTargetsForSecurityProfileRequest generates a "aws/request.Request" representing the
// client's request for the ListTargetsForSecurityProfile 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 ListTargetsForSecurityProfile for more information on using the ListTargetsForSecurityProfile
// 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 ListTargetsForSecurityProfileRequest method.
//	req, resp := client.ListTargetsForSecurityProfileRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListTargetsForSecurityProfileRequest(input *ListTargetsForSecurityProfileInput) (req *request.Request, output *ListTargetsForSecurityProfileOutput) {
	op := &request.Operation{
		Name:       opListTargetsForSecurityProfile,
		HTTPMethod: "GET",
		HTTPPath:   "/security-profiles/{securityProfileName}/targets",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListTargetsForSecurityProfileInput{}
	}

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

// ListTargetsForSecurityProfile API operation for AWS IoT.
//
// Lists the targets (thing groups) associated with a given Device Defender
// security profile.
//
// Requires permission to access the ListTargetsForSecurityProfile (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListTargetsForSecurityProfile for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListTargetsForSecurityProfile(input *ListTargetsForSecurityProfileInput) (*ListTargetsForSecurityProfileOutput, error) {
	req, out := c.ListTargetsForSecurityProfileRequest(input)
	return out, req.Send()
}

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

// ListTargetsForSecurityProfilePages iterates over the pages of a ListTargetsForSecurityProfile operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListTargetsForSecurityProfile 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 ListTargetsForSecurityProfile operation.
//	pageNum := 0
//	err := client.ListTargetsForSecurityProfilePages(params,
//	    func(page *iot.ListTargetsForSecurityProfileOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListTargetsForSecurityProfilePages(input *ListTargetsForSecurityProfileInput, fn func(*ListTargetsForSecurityProfileOutput, bool) bool) error {
	return c.ListTargetsForSecurityProfilePagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListTargetsForSecurityProfilePagesWithContext same as ListTargetsForSecurityProfilePages 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 *IoT) ListTargetsForSecurityProfilePagesWithContext(ctx aws.Context, input *ListTargetsForSecurityProfileInput, fn func(*ListTargetsForSecurityProfileOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListTargetsForSecurityProfileInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListTargetsForSecurityProfileRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListThingGroups = "ListThingGroups"

// ListThingGroupsRequest generates a "aws/request.Request" representing the
// client's request for the ListThingGroups 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 ListThingGroups for more information on using the ListThingGroups
// 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 ListThingGroupsRequest method.
//	req, resp := client.ListThingGroupsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListThingGroupsRequest(input *ListThingGroupsInput) (req *request.Request, output *ListThingGroupsOutput) {
	op := &request.Operation{
		Name:       opListThingGroups,
		HTTPMethod: "GET",
		HTTPPath:   "/thing-groups",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListThingGroupsInput{}
	}

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

// ListThingGroups API operation for AWS IoT.
//
// List the thing groups in your account.
//
// Requires permission to access the ListThingGroups (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListThingGroups for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) ListThingGroups(input *ListThingGroupsInput) (*ListThingGroupsOutput, error) {
	req, out := c.ListThingGroupsRequest(input)
	return out, req.Send()
}

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

// ListThingGroupsPages iterates over the pages of a ListThingGroups operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListThingGroups 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 ListThingGroups operation.
//	pageNum := 0
//	err := client.ListThingGroupsPages(params,
//	    func(page *iot.ListThingGroupsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListThingGroupsPages(input *ListThingGroupsInput, fn func(*ListThingGroupsOutput, bool) bool) error {
	return c.ListThingGroupsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListThingGroupsPagesWithContext same as ListThingGroupsPages 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 *IoT) ListThingGroupsPagesWithContext(ctx aws.Context, input *ListThingGroupsInput, fn func(*ListThingGroupsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListThingGroupsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListThingGroupsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListThingGroupsForThing = "ListThingGroupsForThing"

// ListThingGroupsForThingRequest generates a "aws/request.Request" representing the
// client's request for the ListThingGroupsForThing 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 ListThingGroupsForThing for more information on using the ListThingGroupsForThing
// 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 ListThingGroupsForThingRequest method.
//	req, resp := client.ListThingGroupsForThingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListThingGroupsForThingRequest(input *ListThingGroupsForThingInput) (req *request.Request, output *ListThingGroupsForThingOutput) {
	op := &request.Operation{
		Name:       opListThingGroupsForThing,
		HTTPMethod: "GET",
		HTTPPath:   "/things/{thingName}/thing-groups",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListThingGroupsForThingInput{}
	}

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

// ListThingGroupsForThing API operation for AWS IoT.
//
// List the thing groups to which the specified thing belongs.
//
// Requires permission to access the ListThingGroupsForThing (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListThingGroupsForThing for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) ListThingGroupsForThing(input *ListThingGroupsForThingInput) (*ListThingGroupsForThingOutput, error) {
	req, out := c.ListThingGroupsForThingRequest(input)
	return out, req.Send()
}

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

// ListThingGroupsForThingPages iterates over the pages of a ListThingGroupsForThing operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListThingGroupsForThing 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 ListThingGroupsForThing operation.
//	pageNum := 0
//	err := client.ListThingGroupsForThingPages(params,
//	    func(page *iot.ListThingGroupsForThingOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListThingGroupsForThingPages(input *ListThingGroupsForThingInput, fn func(*ListThingGroupsForThingOutput, bool) bool) error {
	return c.ListThingGroupsForThingPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListThingGroupsForThingPagesWithContext same as ListThingGroupsForThingPages 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 *IoT) ListThingGroupsForThingPagesWithContext(ctx aws.Context, input *ListThingGroupsForThingInput, fn func(*ListThingGroupsForThingOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListThingGroupsForThingInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListThingGroupsForThingRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListThingPrincipals = "ListThingPrincipals"

// ListThingPrincipalsRequest generates a "aws/request.Request" representing the
// client's request for the ListThingPrincipals 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 ListThingPrincipals for more information on using the ListThingPrincipals
// 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 ListThingPrincipalsRequest method.
//	req, resp := client.ListThingPrincipalsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListThingPrincipalsRequest(input *ListThingPrincipalsInput) (req *request.Request, output *ListThingPrincipalsOutput) {
	op := &request.Operation{
		Name:       opListThingPrincipals,
		HTTPMethod: "GET",
		HTTPPath:   "/things/{thingName}/principals",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListThingPrincipalsInput{}
	}

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

// ListThingPrincipals API operation for AWS IoT.
//
// Lists the principals associated with the specified thing. A principal can
// be X.509 certificates, IAM users, groups, and roles, Amazon Cognito identities
// or federated identities.
//
// Requires permission to access the ListThingPrincipals (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListThingPrincipals for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) ListThingPrincipals(input *ListThingPrincipalsInput) (*ListThingPrincipalsOutput, error) {
	req, out := c.ListThingPrincipalsRequest(input)
	return out, req.Send()
}

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

// ListThingPrincipalsPages iterates over the pages of a ListThingPrincipals operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListThingPrincipals 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 ListThingPrincipals operation.
//	pageNum := 0
//	err := client.ListThingPrincipalsPages(params,
//	    func(page *iot.ListThingPrincipalsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListThingPrincipalsPages(input *ListThingPrincipalsInput, fn func(*ListThingPrincipalsOutput, bool) bool) error {
	return c.ListThingPrincipalsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListThingPrincipalsPagesWithContext same as ListThingPrincipalsPages 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 *IoT) ListThingPrincipalsPagesWithContext(ctx aws.Context, input *ListThingPrincipalsInput, fn func(*ListThingPrincipalsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListThingPrincipalsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListThingPrincipalsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListThingRegistrationTaskReports = "ListThingRegistrationTaskReports"

// ListThingRegistrationTaskReportsRequest generates a "aws/request.Request" representing the
// client's request for the ListThingRegistrationTaskReports 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 ListThingRegistrationTaskReports for more information on using the ListThingRegistrationTaskReports
// 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 ListThingRegistrationTaskReportsRequest method.
//	req, resp := client.ListThingRegistrationTaskReportsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListThingRegistrationTaskReportsRequest(input *ListThingRegistrationTaskReportsInput) (req *request.Request, output *ListThingRegistrationTaskReportsOutput) {
	op := &request.Operation{
		Name:       opListThingRegistrationTaskReports,
		HTTPMethod: "GET",
		HTTPPath:   "/thing-registration-tasks/{taskId}/reports",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListThingRegistrationTaskReportsInput{}
	}

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

// ListThingRegistrationTaskReports API operation for AWS IoT.
//
// Information about the thing registration tasks.
//
// 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 IoT's
// API operation ListThingRegistrationTaskReports for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListThingRegistrationTaskReports(input *ListThingRegistrationTaskReportsInput) (*ListThingRegistrationTaskReportsOutput, error) {
	req, out := c.ListThingRegistrationTaskReportsRequest(input)
	return out, req.Send()
}

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

// ListThingRegistrationTaskReportsPages iterates over the pages of a ListThingRegistrationTaskReports operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListThingRegistrationTaskReports 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 ListThingRegistrationTaskReports operation.
//	pageNum := 0
//	err := client.ListThingRegistrationTaskReportsPages(params,
//	    func(page *iot.ListThingRegistrationTaskReportsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListThingRegistrationTaskReportsPages(input *ListThingRegistrationTaskReportsInput, fn func(*ListThingRegistrationTaskReportsOutput, bool) bool) error {
	return c.ListThingRegistrationTaskReportsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListThingRegistrationTaskReportsPagesWithContext same as ListThingRegistrationTaskReportsPages 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 *IoT) ListThingRegistrationTaskReportsPagesWithContext(ctx aws.Context, input *ListThingRegistrationTaskReportsInput, fn func(*ListThingRegistrationTaskReportsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListThingRegistrationTaskReportsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListThingRegistrationTaskReportsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListThingRegistrationTasks = "ListThingRegistrationTasks"

// ListThingRegistrationTasksRequest generates a "aws/request.Request" representing the
// client's request for the ListThingRegistrationTasks 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 ListThingRegistrationTasks for more information on using the ListThingRegistrationTasks
// 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 ListThingRegistrationTasksRequest method.
//	req, resp := client.ListThingRegistrationTasksRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListThingRegistrationTasksRequest(input *ListThingRegistrationTasksInput) (req *request.Request, output *ListThingRegistrationTasksOutput) {
	op := &request.Operation{
		Name:       opListThingRegistrationTasks,
		HTTPMethod: "GET",
		HTTPPath:   "/thing-registration-tasks",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListThingRegistrationTasksInput{}
	}

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

// ListThingRegistrationTasks API operation for AWS IoT.
//
// List bulk thing provisioning tasks.
//
// Requires permission to access the ListThingRegistrationTasks (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListThingRegistrationTasks for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListThingRegistrationTasks(input *ListThingRegistrationTasksInput) (*ListThingRegistrationTasksOutput, error) {
	req, out := c.ListThingRegistrationTasksRequest(input)
	return out, req.Send()
}

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

// ListThingRegistrationTasksPages iterates over the pages of a ListThingRegistrationTasks operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListThingRegistrationTasks 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 ListThingRegistrationTasks operation.
//	pageNum := 0
//	err := client.ListThingRegistrationTasksPages(params,
//	    func(page *iot.ListThingRegistrationTasksOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListThingRegistrationTasksPages(input *ListThingRegistrationTasksInput, fn func(*ListThingRegistrationTasksOutput, bool) bool) error {
	return c.ListThingRegistrationTasksPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListThingRegistrationTasksPagesWithContext same as ListThingRegistrationTasksPages 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 *IoT) ListThingRegistrationTasksPagesWithContext(ctx aws.Context, input *ListThingRegistrationTasksInput, fn func(*ListThingRegistrationTasksOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListThingRegistrationTasksInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListThingRegistrationTasksRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListThingTypes = "ListThingTypes"

// ListThingTypesRequest generates a "aws/request.Request" representing the
// client's request for the ListThingTypes 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 ListThingTypes for more information on using the ListThingTypes
// 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 ListThingTypesRequest method.
//	req, resp := client.ListThingTypesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListThingTypesRequest(input *ListThingTypesInput) (req *request.Request, output *ListThingTypesOutput) {
	op := &request.Operation{
		Name:       opListThingTypes,
		HTTPMethod: "GET",
		HTTPPath:   "/thing-types",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListThingTypesInput{}
	}

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

// ListThingTypes API operation for AWS IoT.
//
// Lists the existing thing types.
//
// Requires permission to access the ListThingTypes (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListThingTypes for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListThingTypes(input *ListThingTypesInput) (*ListThingTypesOutput, error) {
	req, out := c.ListThingTypesRequest(input)
	return out, req.Send()
}

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

// ListThingTypesPages iterates over the pages of a ListThingTypes operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListThingTypes 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 ListThingTypes operation.
//	pageNum := 0
//	err := client.ListThingTypesPages(params,
//	    func(page *iot.ListThingTypesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListThingTypesPages(input *ListThingTypesInput, fn func(*ListThingTypesOutput, bool) bool) error {
	return c.ListThingTypesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListThingTypesPagesWithContext same as ListThingTypesPages 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 *IoT) ListThingTypesPagesWithContext(ctx aws.Context, input *ListThingTypesInput, fn func(*ListThingTypesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListThingTypesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListThingTypesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListThings = "ListThings"

// ListThingsRequest generates a "aws/request.Request" representing the
// client's request for the ListThings 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 ListThings for more information on using the ListThings
// 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 ListThingsRequest method.
//	req, resp := client.ListThingsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListThingsRequest(input *ListThingsInput) (req *request.Request, output *ListThingsOutput) {
	op := &request.Operation{
		Name:       opListThings,
		HTTPMethod: "GET",
		HTTPPath:   "/things",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListThingsInput{}
	}

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

// ListThings API operation for AWS IoT.
//
// Lists your things. Use the attributeName and attributeValue parameters to
// filter your things. For example, calling ListThings with attributeName=Color
// and attributeValue=Red retrieves all things in the registry that contain
// an attribute Color with the value Red. For more information, see List Things
// (https://docs.aws.amazon.com/iot/latest/developerguide/thing-registry.html#list-things)
// from the Amazon Web Services IoT Core Developer Guide.
//
// Requires permission to access the ListThings (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// You will not be charged for calling this API if an Access denied error is
// returned. You will also not be charged if no attributes or pagination token
// was provided in request and no pagination token and no results were returned.
//
// 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 IoT's
// API operation ListThings for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListThings(input *ListThingsInput) (*ListThingsOutput, error) {
	req, out := c.ListThingsRequest(input)
	return out, req.Send()
}

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

// ListThingsPages iterates over the pages of a ListThings operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListThings 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 ListThings operation.
//	pageNum := 0
//	err := client.ListThingsPages(params,
//	    func(page *iot.ListThingsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListThingsPages(input *ListThingsInput, fn func(*ListThingsOutput, bool) bool) error {
	return c.ListThingsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListThingsPagesWithContext same as ListThingsPages 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 *IoT) ListThingsPagesWithContext(ctx aws.Context, input *ListThingsInput, fn func(*ListThingsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListThingsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListThingsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListThingsInBillingGroup = "ListThingsInBillingGroup"

// ListThingsInBillingGroupRequest generates a "aws/request.Request" representing the
// client's request for the ListThingsInBillingGroup 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 ListThingsInBillingGroup for more information on using the ListThingsInBillingGroup
// 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 ListThingsInBillingGroupRequest method.
//	req, resp := client.ListThingsInBillingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListThingsInBillingGroupRequest(input *ListThingsInBillingGroupInput) (req *request.Request, output *ListThingsInBillingGroupOutput) {
	op := &request.Operation{
		Name:       opListThingsInBillingGroup,
		HTTPMethod: "GET",
		HTTPPath:   "/billing-groups/{billingGroupName}/things",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListThingsInBillingGroupInput{}
	}

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

// ListThingsInBillingGroup API operation for AWS IoT.
//
// Lists the things you have added to the given billing group.
//
// Requires permission to access the ListThingsInBillingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListThingsInBillingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) ListThingsInBillingGroup(input *ListThingsInBillingGroupInput) (*ListThingsInBillingGroupOutput, error) {
	req, out := c.ListThingsInBillingGroupRequest(input)
	return out, req.Send()
}

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

// ListThingsInBillingGroupPages iterates over the pages of a ListThingsInBillingGroup operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListThingsInBillingGroup 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 ListThingsInBillingGroup operation.
//	pageNum := 0
//	err := client.ListThingsInBillingGroupPages(params,
//	    func(page *iot.ListThingsInBillingGroupOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListThingsInBillingGroupPages(input *ListThingsInBillingGroupInput, fn func(*ListThingsInBillingGroupOutput, bool) bool) error {
	return c.ListThingsInBillingGroupPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListThingsInBillingGroupPagesWithContext same as ListThingsInBillingGroupPages 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 *IoT) ListThingsInBillingGroupPagesWithContext(ctx aws.Context, input *ListThingsInBillingGroupInput, fn func(*ListThingsInBillingGroupOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListThingsInBillingGroupInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListThingsInBillingGroupRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListThingsInThingGroup = "ListThingsInThingGroup"

// ListThingsInThingGroupRequest generates a "aws/request.Request" representing the
// client's request for the ListThingsInThingGroup 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 ListThingsInThingGroup for more information on using the ListThingsInThingGroup
// 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 ListThingsInThingGroupRequest method.
//	req, resp := client.ListThingsInThingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListThingsInThingGroupRequest(input *ListThingsInThingGroupInput) (req *request.Request, output *ListThingsInThingGroupOutput) {
	op := &request.Operation{
		Name:       opListThingsInThingGroup,
		HTTPMethod: "GET",
		HTTPPath:   "/thing-groups/{thingGroupName}/things",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListThingsInThingGroupInput{}
	}

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

// ListThingsInThingGroup API operation for AWS IoT.
//
// Lists the things in the specified group.
//
// Requires permission to access the ListThingsInThingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListThingsInThingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) ListThingsInThingGroup(input *ListThingsInThingGroupInput) (*ListThingsInThingGroupOutput, error) {
	req, out := c.ListThingsInThingGroupRequest(input)
	return out, req.Send()
}

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

// ListThingsInThingGroupPages iterates over the pages of a ListThingsInThingGroup operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListThingsInThingGroup 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 ListThingsInThingGroup operation.
//	pageNum := 0
//	err := client.ListThingsInThingGroupPages(params,
//	    func(page *iot.ListThingsInThingGroupOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListThingsInThingGroupPages(input *ListThingsInThingGroupInput, fn func(*ListThingsInThingGroupOutput, bool) bool) error {
	return c.ListThingsInThingGroupPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListThingsInThingGroupPagesWithContext same as ListThingsInThingGroupPages 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 *IoT) ListThingsInThingGroupPagesWithContext(ctx aws.Context, input *ListThingsInThingGroupInput, fn func(*ListThingsInThingGroupOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListThingsInThingGroupInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListThingsInThingGroupRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListTopicRuleDestinations = "ListTopicRuleDestinations"

// ListTopicRuleDestinationsRequest generates a "aws/request.Request" representing the
// client's request for the ListTopicRuleDestinations 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 ListTopicRuleDestinations for more information on using the ListTopicRuleDestinations
// 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 ListTopicRuleDestinationsRequest method.
//	req, resp := client.ListTopicRuleDestinationsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListTopicRuleDestinationsRequest(input *ListTopicRuleDestinationsInput) (req *request.Request, output *ListTopicRuleDestinationsOutput) {
	op := &request.Operation{
		Name:       opListTopicRuleDestinations,
		HTTPMethod: "GET",
		HTTPPath:   "/destinations",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListTopicRuleDestinationsInput{}
	}

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

// ListTopicRuleDestinations API operation for AWS IoT.
//
// Lists all the topic rule destinations in your Amazon Web Services account.
//
// Requires permission to access the ListTopicRuleDestinations (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListTopicRuleDestinations for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
func (c *IoT) ListTopicRuleDestinations(input *ListTopicRuleDestinationsInput) (*ListTopicRuleDestinationsOutput, error) {
	req, out := c.ListTopicRuleDestinationsRequest(input)
	return out, req.Send()
}

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

// ListTopicRuleDestinationsPages iterates over the pages of a ListTopicRuleDestinations operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListTopicRuleDestinations 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 ListTopicRuleDestinations operation.
//	pageNum := 0
//	err := client.ListTopicRuleDestinationsPages(params,
//	    func(page *iot.ListTopicRuleDestinationsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListTopicRuleDestinationsPages(input *ListTopicRuleDestinationsInput, fn func(*ListTopicRuleDestinationsOutput, bool) bool) error {
	return c.ListTopicRuleDestinationsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListTopicRuleDestinationsPagesWithContext same as ListTopicRuleDestinationsPages 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 *IoT) ListTopicRuleDestinationsPagesWithContext(ctx aws.Context, input *ListTopicRuleDestinationsInput, fn func(*ListTopicRuleDestinationsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListTopicRuleDestinationsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListTopicRuleDestinationsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListTopicRules = "ListTopicRules"

// ListTopicRulesRequest generates a "aws/request.Request" representing the
// client's request for the ListTopicRules 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 ListTopicRules for more information on using the ListTopicRules
// 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 ListTopicRulesRequest method.
//	req, resp := client.ListTopicRulesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListTopicRulesRequest(input *ListTopicRulesInput) (req *request.Request, output *ListTopicRulesOutput) {
	op := &request.Operation{
		Name:       opListTopicRules,
		HTTPMethod: "GET",
		HTTPPath:   "/rules",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListTopicRulesInput{}
	}

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

// ListTopicRules API operation for AWS IoT.
//
// Lists the rules for the specific topic.
//
// Requires permission to access the ListTopicRules (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListTopicRules for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) ListTopicRules(input *ListTopicRulesInput) (*ListTopicRulesOutput, error) {
	req, out := c.ListTopicRulesRequest(input)
	return out, req.Send()
}

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

// ListTopicRulesPages iterates over the pages of a ListTopicRules operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListTopicRules 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 ListTopicRules operation.
//	pageNum := 0
//	err := client.ListTopicRulesPages(params,
//	    func(page *iot.ListTopicRulesOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListTopicRulesPages(input *ListTopicRulesInput, fn func(*ListTopicRulesOutput, bool) bool) error {
	return c.ListTopicRulesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListTopicRulesPagesWithContext same as ListTopicRulesPages 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 *IoT) ListTopicRulesPagesWithContext(ctx aws.Context, input *ListTopicRulesInput, fn func(*ListTopicRulesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListTopicRulesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListTopicRulesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListV2LoggingLevels = "ListV2LoggingLevels"

// ListV2LoggingLevelsRequest generates a "aws/request.Request" representing the
// client's request for the ListV2LoggingLevels 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 ListV2LoggingLevels for more information on using the ListV2LoggingLevels
// 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 ListV2LoggingLevelsRequest method.
//	req, resp := client.ListV2LoggingLevelsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListV2LoggingLevelsRequest(input *ListV2LoggingLevelsInput) (req *request.Request, output *ListV2LoggingLevelsOutput) {
	op := &request.Operation{
		Name:       opListV2LoggingLevels,
		HTTPMethod: "GET",
		HTTPPath:   "/v2LoggingLevel",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListV2LoggingLevelsInput{}
	}

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

// ListV2LoggingLevels API operation for AWS IoT.
//
// Lists logging levels.
//
// Requires permission to access the ListV2LoggingLevels (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListV2LoggingLevels for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - NotConfiguredException
//     The resource is not configured.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) ListV2LoggingLevels(input *ListV2LoggingLevelsInput) (*ListV2LoggingLevelsOutput, error) {
	req, out := c.ListV2LoggingLevelsRequest(input)
	return out, req.Send()
}

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

// ListV2LoggingLevelsPages iterates over the pages of a ListV2LoggingLevels operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListV2LoggingLevels 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 ListV2LoggingLevels operation.
//	pageNum := 0
//	err := client.ListV2LoggingLevelsPages(params,
//	    func(page *iot.ListV2LoggingLevelsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListV2LoggingLevelsPages(input *ListV2LoggingLevelsInput, fn func(*ListV2LoggingLevelsOutput, bool) bool) error {
	return c.ListV2LoggingLevelsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListV2LoggingLevelsPagesWithContext same as ListV2LoggingLevelsPages 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 *IoT) ListV2LoggingLevelsPagesWithContext(ctx aws.Context, input *ListV2LoggingLevelsInput, fn func(*ListV2LoggingLevelsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListV2LoggingLevelsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListV2LoggingLevelsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListViolationEvents = "ListViolationEvents"

// ListViolationEventsRequest generates a "aws/request.Request" representing the
// client's request for the ListViolationEvents 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 ListViolationEvents for more information on using the ListViolationEvents
// 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 ListViolationEventsRequest method.
//	req, resp := client.ListViolationEventsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ListViolationEventsRequest(input *ListViolationEventsInput) (req *request.Request, output *ListViolationEventsOutput) {
	op := &request.Operation{
		Name:       opListViolationEvents,
		HTTPMethod: "GET",
		HTTPPath:   "/violation-events",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListViolationEventsInput{}
	}

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

// ListViolationEvents API operation for AWS IoT.
//
// Lists the Device Defender security profile violations discovered during the
// given time period. You can use filters to limit the results to those alerts
// issued for a particular security profile, behavior, or thing (device).
//
// Requires permission to access the ListViolationEvents (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ListViolationEvents for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ListViolationEvents(input *ListViolationEventsInput) (*ListViolationEventsOutput, error) {
	req, out := c.ListViolationEventsRequest(input)
	return out, req.Send()
}

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

// ListViolationEventsPages iterates over the pages of a ListViolationEvents operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListViolationEvents 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 ListViolationEvents operation.
//	pageNum := 0
//	err := client.ListViolationEventsPages(params,
//	    func(page *iot.ListViolationEventsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *IoT) ListViolationEventsPages(input *ListViolationEventsInput, fn func(*ListViolationEventsOutput, bool) bool) error {
	return c.ListViolationEventsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListViolationEventsPagesWithContext same as ListViolationEventsPages 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 *IoT) ListViolationEventsPagesWithContext(ctx aws.Context, input *ListViolationEventsInput, fn func(*ListViolationEventsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListViolationEventsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListViolationEventsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opPutVerificationStateOnViolation = "PutVerificationStateOnViolation"

// PutVerificationStateOnViolationRequest generates a "aws/request.Request" representing the
// client's request for the PutVerificationStateOnViolation 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 PutVerificationStateOnViolation for more information on using the PutVerificationStateOnViolation
// 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 PutVerificationStateOnViolationRequest method.
//	req, resp := client.PutVerificationStateOnViolationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) PutVerificationStateOnViolationRequest(input *PutVerificationStateOnViolationInput) (req *request.Request, output *PutVerificationStateOnViolationOutput) {
	op := &request.Operation{
		Name:       opPutVerificationStateOnViolation,
		HTTPMethod: "POST",
		HTTPPath:   "/violations/verification-state/{violationId}",
	}

	if input == nil {
		input = &PutVerificationStateOnViolationInput{}
	}

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

// PutVerificationStateOnViolation API operation for AWS IoT.
//
// Set a verification state and provide a description of that verification state
// on a violation (detect alarm).
//
// 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 IoT's
// API operation PutVerificationStateOnViolation for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) PutVerificationStateOnViolation(input *PutVerificationStateOnViolationInput) (*PutVerificationStateOnViolationOutput, error) {
	req, out := c.PutVerificationStateOnViolationRequest(input)
	return out, req.Send()
}

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

const opRegisterCACertificate = "RegisterCACertificate"

// RegisterCACertificateRequest generates a "aws/request.Request" representing the
// client's request for the RegisterCACertificate 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 RegisterCACertificate for more information on using the RegisterCACertificate
// 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 RegisterCACertificateRequest method.
//	req, resp := client.RegisterCACertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) RegisterCACertificateRequest(input *RegisterCACertificateInput) (req *request.Request, output *RegisterCACertificateOutput) {
	op := &request.Operation{
		Name:       opRegisterCACertificate,
		HTTPMethod: "POST",
		HTTPPath:   "/cacertificate",
	}

	if input == nil {
		input = &RegisterCACertificateInput{}
	}

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

// RegisterCACertificate API operation for AWS IoT.
//
// Registers a CA certificate with Amazon Web Services IoT Core. There is no
// limit to the number of CA certificates you can register in your Amazon Web
// Services account. You can register up to 10 CA certificates with the same
// CA subject field per Amazon Web Services account.
//
// Requires permission to access the RegisterCACertificate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation RegisterCACertificate for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - RegistrationCodeValidationException
//     The registration code is invalid.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - CertificateValidationException
//     The certificate is invalid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) RegisterCACertificate(input *RegisterCACertificateInput) (*RegisterCACertificateOutput, error) {
	req, out := c.RegisterCACertificateRequest(input)
	return out, req.Send()
}

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

const opRegisterCertificate = "RegisterCertificate"

// RegisterCertificateRequest generates a "aws/request.Request" representing the
// client's request for the RegisterCertificate 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 RegisterCertificate for more information on using the RegisterCertificate
// 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 RegisterCertificateRequest method.
//	req, resp := client.RegisterCertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) RegisterCertificateRequest(input *RegisterCertificateInput) (req *request.Request, output *RegisterCertificateOutput) {
	op := &request.Operation{
		Name:       opRegisterCertificate,
		HTTPMethod: "POST",
		HTTPPath:   "/certificate/register",
	}

	if input == nil {
		input = &RegisterCertificateInput{}
	}

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

// RegisterCertificate API operation for AWS IoT.
//
// Registers a device certificate with IoT in the same certificate mode (https://docs.aws.amazon.com/iot/latest/apireference/API_CertificateDescription.html#iot-Type-CertificateDescription-certificateMode)
// as the signing CA. If you have more than one CA certificate that has the
// same subject field, you must specify the CA certificate that was used to
// sign the device certificate being registered.
//
// Requires permission to access the RegisterCertificate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation RegisterCertificate for usage and error information.
//
// Returned Error Types:
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - CertificateValidationException
//     The certificate is invalid.
//
//   - CertificateStateException
//     The certificate operation is not allowed.
//
//   - CertificateConflictException
//     Unable to verify the CA certificate used to sign the device certificate you
//     are attempting to register. This is happens when you have registered more
//     than one CA certificate that has the same subject field and public key.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) RegisterCertificate(input *RegisterCertificateInput) (*RegisterCertificateOutput, error) {
	req, out := c.RegisterCertificateRequest(input)
	return out, req.Send()
}

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

const opRegisterCertificateWithoutCA = "RegisterCertificateWithoutCA"

// RegisterCertificateWithoutCARequest generates a "aws/request.Request" representing the
// client's request for the RegisterCertificateWithoutCA 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 RegisterCertificateWithoutCA for more information on using the RegisterCertificateWithoutCA
// 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 RegisterCertificateWithoutCARequest method.
//	req, resp := client.RegisterCertificateWithoutCARequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) RegisterCertificateWithoutCARequest(input *RegisterCertificateWithoutCAInput) (req *request.Request, output *RegisterCertificateWithoutCAOutput) {
	op := &request.Operation{
		Name:       opRegisterCertificateWithoutCA,
		HTTPMethod: "POST",
		HTTPPath:   "/certificate/register-no-ca",
	}

	if input == nil {
		input = &RegisterCertificateWithoutCAInput{}
	}

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

// RegisterCertificateWithoutCA API operation for AWS IoT.
//
// Register a certificate that does not have a certificate authority (CA). For
// supported certificates, consult Certificate signing algorithms supported
// by IoT (https://docs.aws.amazon.com/iot/latest/developerguide/x509-client-certs.html#x509-cert-algorithms).
//
// 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 IoT's
// API operation RegisterCertificateWithoutCA for usage and error information.
//
// Returned Error Types:
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - CertificateStateException
//     The certificate operation is not allowed.
//
//   - CertificateValidationException
//     The certificate is invalid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) RegisterCertificateWithoutCA(input *RegisterCertificateWithoutCAInput) (*RegisterCertificateWithoutCAOutput, error) {
	req, out := c.RegisterCertificateWithoutCARequest(input)
	return out, req.Send()
}

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

const opRegisterThing = "RegisterThing"

// RegisterThingRequest generates a "aws/request.Request" representing the
// client's request for the RegisterThing 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 RegisterThing for more information on using the RegisterThing
// 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 RegisterThingRequest method.
//	req, resp := client.RegisterThingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) RegisterThingRequest(input *RegisterThingInput) (req *request.Request, output *RegisterThingOutput) {
	op := &request.Operation{
		Name:       opRegisterThing,
		HTTPMethod: "POST",
		HTTPPath:   "/things",
	}

	if input == nil {
		input = &RegisterThingInput{}
	}

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

// RegisterThing API operation for AWS IoT.
//
// Provisions a thing in the device registry. RegisterThing calls other IoT
// control plane APIs. These calls might exceed your account level IoT Throttling
// Limits (https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_iot)
// and cause throttle errors. Please contact Amazon Web Services Customer Support
// (https://console.aws.amazon.com/support/home) to raise your throttling limits
// if necessary.
//
// Requires permission to access the RegisterThing (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation RegisterThing for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
//
//   - ResourceRegistrationFailureException
//     The resource registration failed.
func (c *IoT) RegisterThing(input *RegisterThingInput) (*RegisterThingOutput, error) {
	req, out := c.RegisterThingRequest(input)
	return out, req.Send()
}

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

const opRejectCertificateTransfer = "RejectCertificateTransfer"

// RejectCertificateTransferRequest generates a "aws/request.Request" representing the
// client's request for the RejectCertificateTransfer 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 RejectCertificateTransfer for more information on using the RejectCertificateTransfer
// 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 RejectCertificateTransferRequest method.
//	req, resp := client.RejectCertificateTransferRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) RejectCertificateTransferRequest(input *RejectCertificateTransferInput) (req *request.Request, output *RejectCertificateTransferOutput) {
	op := &request.Operation{
		Name:       opRejectCertificateTransfer,
		HTTPMethod: "PATCH",
		HTTPPath:   "/reject-certificate-transfer/{certificateId}",
	}

	if input == nil {
		input = &RejectCertificateTransferInput{}
	}

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

// RejectCertificateTransfer API operation for AWS IoT.
//
// Rejects a pending certificate transfer. After IoT rejects a certificate transfer,
// the certificate status changes from PENDING_TRANSFER to INACTIVE.
//
// To check for pending certificate transfers, call ListCertificates to enumerate
// your certificates.
//
// This operation can only be called by the transfer destination. After it is
// called, the certificate will be returned to the source's account in the INACTIVE
// state.
//
// Requires permission to access the RejectCertificateTransfer (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation RejectCertificateTransfer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - TransferAlreadyCompletedException
//     You can't revert the certificate transfer because the transfer is already
//     complete.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) RejectCertificateTransfer(input *RejectCertificateTransferInput) (*RejectCertificateTransferOutput, error) {
	req, out := c.RejectCertificateTransferRequest(input)
	return out, req.Send()
}

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

const opRemoveThingFromBillingGroup = "RemoveThingFromBillingGroup"

// RemoveThingFromBillingGroupRequest generates a "aws/request.Request" representing the
// client's request for the RemoveThingFromBillingGroup 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 RemoveThingFromBillingGroup for more information on using the RemoveThingFromBillingGroup
// 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 RemoveThingFromBillingGroupRequest method.
//	req, resp := client.RemoveThingFromBillingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) RemoveThingFromBillingGroupRequest(input *RemoveThingFromBillingGroupInput) (req *request.Request, output *RemoveThingFromBillingGroupOutput) {
	op := &request.Operation{
		Name:       opRemoveThingFromBillingGroup,
		HTTPMethod: "PUT",
		HTTPPath:   "/billing-groups/removeThingFromBillingGroup",
	}

	if input == nil {
		input = &RemoveThingFromBillingGroupInput{}
	}

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

// RemoveThingFromBillingGroup API operation for AWS IoT.
//
// Removes the given thing from the billing group.
//
// Requires permission to access the RemoveThingFromBillingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// This call is asynchronous. It might take several seconds for the detachment
// to propagate.
//
// 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 IoT's
// API operation RemoveThingFromBillingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) RemoveThingFromBillingGroup(input *RemoveThingFromBillingGroupInput) (*RemoveThingFromBillingGroupOutput, error) {
	req, out := c.RemoveThingFromBillingGroupRequest(input)
	return out, req.Send()
}

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

const opRemoveThingFromThingGroup = "RemoveThingFromThingGroup"

// RemoveThingFromThingGroupRequest generates a "aws/request.Request" representing the
// client's request for the RemoveThingFromThingGroup 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 RemoveThingFromThingGroup for more information on using the RemoveThingFromThingGroup
// 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 RemoveThingFromThingGroupRequest method.
//	req, resp := client.RemoveThingFromThingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) RemoveThingFromThingGroupRequest(input *RemoveThingFromThingGroupInput) (req *request.Request, output *RemoveThingFromThingGroupOutput) {
	op := &request.Operation{
		Name:       opRemoveThingFromThingGroup,
		HTTPMethod: "PUT",
		HTTPPath:   "/thing-groups/removeThingFromThingGroup",
	}

	if input == nil {
		input = &RemoveThingFromThingGroupInput{}
	}

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

// RemoveThingFromThingGroup API operation for AWS IoT.
//
// Remove the specified thing from the specified group.
//
// You must specify either a thingGroupArn or a thingGroupName to identify the
// thing group and either a thingArn or a thingName to identify the thing to
// remove from the thing group.
//
// Requires permission to access the RemoveThingFromThingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation RemoveThingFromThingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) RemoveThingFromThingGroup(input *RemoveThingFromThingGroupInput) (*RemoveThingFromThingGroupOutput, error) {
	req, out := c.RemoveThingFromThingGroupRequest(input)
	return out, req.Send()
}

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

const opReplaceTopicRule = "ReplaceTopicRule"

// ReplaceTopicRuleRequest generates a "aws/request.Request" representing the
// client's request for the ReplaceTopicRule 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 ReplaceTopicRule for more information on using the ReplaceTopicRule
// 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 ReplaceTopicRuleRequest method.
//	req, resp := client.ReplaceTopicRuleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ReplaceTopicRuleRequest(input *ReplaceTopicRuleInput) (req *request.Request, output *ReplaceTopicRuleOutput) {
	op := &request.Operation{
		Name:       opReplaceTopicRule,
		HTTPMethod: "PATCH",
		HTTPPath:   "/rules/{ruleName}",
	}

	if input == nil {
		input = &ReplaceTopicRuleInput{}
	}

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

// ReplaceTopicRule API operation for AWS IoT.
//
// Replaces the rule. You must specify all parameters for the new rule. Creating
// rules is an administrator-level action. Any user who has permission to create
// rules will be able to access data processed by the rule.
//
// Requires permission to access the ReplaceTopicRule (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ReplaceTopicRule for usage and error information.
//
// Returned Error Types:
//
//   - SqlParseException
//     The Rule-SQL expression can't be parsed correctly.
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
func (c *IoT) ReplaceTopicRule(input *ReplaceTopicRuleInput) (*ReplaceTopicRuleOutput, error) {
	req, out := c.ReplaceTopicRuleRequest(input)
	return out, req.Send()
}

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

const opSearchIndex = "SearchIndex"

// SearchIndexRequest generates a "aws/request.Request" representing the
// client's request for the SearchIndex 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 SearchIndex for more information on using the SearchIndex
// 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 SearchIndexRequest method.
//	req, resp := client.SearchIndexRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) SearchIndexRequest(input *SearchIndexInput) (req *request.Request, output *SearchIndexOutput) {
	op := &request.Operation{
		Name:       opSearchIndex,
		HTTPMethod: "POST",
		HTTPPath:   "/indices/search",
	}

	if input == nil {
		input = &SearchIndexInput{}
	}

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

// SearchIndex API operation for AWS IoT.
//
// The query search index.
//
// Requires permission to access the SearchIndex (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation SearchIndex for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidQueryException
//     The query is invalid.
//
//   - IndexNotReadyException
//     The index is not ready.
func (c *IoT) SearchIndex(input *SearchIndexInput) (*SearchIndexOutput, error) {
	req, out := c.SearchIndexRequest(input)
	return out, req.Send()
}

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

const opSetDefaultAuthorizer = "SetDefaultAuthorizer"

// SetDefaultAuthorizerRequest generates a "aws/request.Request" representing the
// client's request for the SetDefaultAuthorizer 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 SetDefaultAuthorizer for more information on using the SetDefaultAuthorizer
// 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 SetDefaultAuthorizerRequest method.
//	req, resp := client.SetDefaultAuthorizerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) SetDefaultAuthorizerRequest(input *SetDefaultAuthorizerInput) (req *request.Request, output *SetDefaultAuthorizerOutput) {
	op := &request.Operation{
		Name:       opSetDefaultAuthorizer,
		HTTPMethod: "POST",
		HTTPPath:   "/default-authorizer",
	}

	if input == nil {
		input = &SetDefaultAuthorizerInput{}
	}

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

// SetDefaultAuthorizer API operation for AWS IoT.
//
// Sets the default authorizer. This will be used if a websocket connection
// is made without specifying an authorizer.
//
// Requires permission to access the SetDefaultAuthorizer (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation SetDefaultAuthorizer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceAlreadyExistsException
//     The resource already exists.
func (c *IoT) SetDefaultAuthorizer(input *SetDefaultAuthorizerInput) (*SetDefaultAuthorizerOutput, error) {
	req, out := c.SetDefaultAuthorizerRequest(input)
	return out, req.Send()
}

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

const opSetDefaultPolicyVersion = "SetDefaultPolicyVersion"

// SetDefaultPolicyVersionRequest generates a "aws/request.Request" representing the
// client's request for the SetDefaultPolicyVersion 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 SetDefaultPolicyVersion for more information on using the SetDefaultPolicyVersion
// 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 SetDefaultPolicyVersionRequest method.
//	req, resp := client.SetDefaultPolicyVersionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) SetDefaultPolicyVersionRequest(input *SetDefaultPolicyVersionInput) (req *request.Request, output *SetDefaultPolicyVersionOutput) {
	op := &request.Operation{
		Name:       opSetDefaultPolicyVersion,
		HTTPMethod: "PATCH",
		HTTPPath:   "/policies/{policyName}/version/{policyVersionId}",
	}

	if input == nil {
		input = &SetDefaultPolicyVersionInput{}
	}

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

// SetDefaultPolicyVersion API operation for AWS IoT.
//
// Sets the specified version of the specified policy as the policy's default
// (operative) version. This action affects all certificates to which the policy
// is attached. To list the principals the policy is attached to, use the ListPrincipalPolicies
// action.
//
// Requires permission to access the SetDefaultPolicyVersion (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation SetDefaultPolicyVersion for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) SetDefaultPolicyVersion(input *SetDefaultPolicyVersionInput) (*SetDefaultPolicyVersionOutput, error) {
	req, out := c.SetDefaultPolicyVersionRequest(input)
	return out, req.Send()
}

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

const opSetLoggingOptions = "SetLoggingOptions"

// SetLoggingOptionsRequest generates a "aws/request.Request" representing the
// client's request for the SetLoggingOptions 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 SetLoggingOptions for more information on using the SetLoggingOptions
// 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 SetLoggingOptionsRequest method.
//	req, resp := client.SetLoggingOptionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) SetLoggingOptionsRequest(input *SetLoggingOptionsInput) (req *request.Request, output *SetLoggingOptionsOutput) {
	op := &request.Operation{
		Name:       opSetLoggingOptions,
		HTTPMethod: "POST",
		HTTPPath:   "/loggingOptions",
	}

	if input == nil {
		input = &SetLoggingOptionsInput{}
	}

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

// SetLoggingOptions API operation for AWS IoT.
//
// Sets the logging options.
//
// NOTE: use of this command is not recommended. Use SetV2LoggingOptions instead.
//
// Requires permission to access the SetLoggingOptions (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation SetLoggingOptions for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) SetLoggingOptions(input *SetLoggingOptionsInput) (*SetLoggingOptionsOutput, error) {
	req, out := c.SetLoggingOptionsRequest(input)
	return out, req.Send()
}

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

const opSetV2LoggingLevel = "SetV2LoggingLevel"

// SetV2LoggingLevelRequest generates a "aws/request.Request" representing the
// client's request for the SetV2LoggingLevel 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 SetV2LoggingLevel for more information on using the SetV2LoggingLevel
// 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 SetV2LoggingLevelRequest method.
//	req, resp := client.SetV2LoggingLevelRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) SetV2LoggingLevelRequest(input *SetV2LoggingLevelInput) (req *request.Request, output *SetV2LoggingLevelOutput) {
	op := &request.Operation{
		Name:       opSetV2LoggingLevel,
		HTTPMethod: "POST",
		HTTPPath:   "/v2LoggingLevel",
	}

	if input == nil {
		input = &SetV2LoggingLevelInput{}
	}

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

// SetV2LoggingLevel API operation for AWS IoT.
//
// Sets the logging level.
//
// Requires permission to access the SetV2LoggingLevel (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation SetV2LoggingLevel for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - NotConfiguredException
//     The resource is not configured.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - LimitExceededException
//     A limit has been exceeded.
func (c *IoT) SetV2LoggingLevel(input *SetV2LoggingLevelInput) (*SetV2LoggingLevelOutput, error) {
	req, out := c.SetV2LoggingLevelRequest(input)
	return out, req.Send()
}

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

const opSetV2LoggingOptions = "SetV2LoggingOptions"

// SetV2LoggingOptionsRequest generates a "aws/request.Request" representing the
// client's request for the SetV2LoggingOptions 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 SetV2LoggingOptions for more information on using the SetV2LoggingOptions
// 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 SetV2LoggingOptionsRequest method.
//	req, resp := client.SetV2LoggingOptionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) SetV2LoggingOptionsRequest(input *SetV2LoggingOptionsInput) (req *request.Request, output *SetV2LoggingOptionsOutput) {
	op := &request.Operation{
		Name:       opSetV2LoggingOptions,
		HTTPMethod: "POST",
		HTTPPath:   "/v2LoggingOptions",
	}

	if input == nil {
		input = &SetV2LoggingOptionsInput{}
	}

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

// SetV2LoggingOptions API operation for AWS IoT.
//
// Sets the logging options for the V2 logging service.
//
// Requires permission to access the SetV2LoggingOptions (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation SetV2LoggingOptions for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) SetV2LoggingOptions(input *SetV2LoggingOptionsInput) (*SetV2LoggingOptionsOutput, error) {
	req, out := c.SetV2LoggingOptionsRequest(input)
	return out, req.Send()
}

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

const opStartAuditMitigationActionsTask = "StartAuditMitigationActionsTask"

// StartAuditMitigationActionsTaskRequest generates a "aws/request.Request" representing the
// client's request for the StartAuditMitigationActionsTask 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 StartAuditMitigationActionsTask for more information on using the StartAuditMitigationActionsTask
// 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 StartAuditMitigationActionsTaskRequest method.
//	req, resp := client.StartAuditMitigationActionsTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) StartAuditMitigationActionsTaskRequest(input *StartAuditMitigationActionsTaskInput) (req *request.Request, output *StartAuditMitigationActionsTaskOutput) {
	op := &request.Operation{
		Name:       opStartAuditMitigationActionsTask,
		HTTPMethod: "POST",
		HTTPPath:   "/audit/mitigationactions/tasks/{taskId}",
	}

	if input == nil {
		input = &StartAuditMitigationActionsTaskInput{}
	}

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

// StartAuditMitigationActionsTask API operation for AWS IoT.
//
// Starts a task that applies a set of mitigation actions to the specified target.
//
// Requires permission to access the StartAuditMitigationActionsTask (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation StartAuditMitigationActionsTask for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - TaskAlreadyExistsException
//     This exception occurs if you attempt to start a task with the same task-id
//     as an existing task but with a different clientRequestToken.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) StartAuditMitigationActionsTask(input *StartAuditMitigationActionsTaskInput) (*StartAuditMitigationActionsTaskOutput, error) {
	req, out := c.StartAuditMitigationActionsTaskRequest(input)
	return out, req.Send()
}

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

const opStartDetectMitigationActionsTask = "StartDetectMitigationActionsTask"

// StartDetectMitigationActionsTaskRequest generates a "aws/request.Request" representing the
// client's request for the StartDetectMitigationActionsTask 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 StartDetectMitigationActionsTask for more information on using the StartDetectMitigationActionsTask
// 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 StartDetectMitigationActionsTaskRequest method.
//	req, resp := client.StartDetectMitigationActionsTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) StartDetectMitigationActionsTaskRequest(input *StartDetectMitigationActionsTaskInput) (req *request.Request, output *StartDetectMitigationActionsTaskOutput) {
	op := &request.Operation{
		Name:       opStartDetectMitigationActionsTask,
		HTTPMethod: "PUT",
		HTTPPath:   "/detect/mitigationactions/tasks/{taskId}",
	}

	if input == nil {
		input = &StartDetectMitigationActionsTaskInput{}
	}

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

// StartDetectMitigationActionsTask API operation for AWS IoT.
//
// Starts a Device Defender ML Detect mitigation actions task.
//
// Requires permission to access the StartDetectMitigationActionsTask (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation StartDetectMitigationActionsTask for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - TaskAlreadyExistsException
//     This exception occurs if you attempt to start a task with the same task-id
//     as an existing task but with a different clientRequestToken.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) StartDetectMitigationActionsTask(input *StartDetectMitigationActionsTaskInput) (*StartDetectMitigationActionsTaskOutput, error) {
	req, out := c.StartDetectMitigationActionsTaskRequest(input)
	return out, req.Send()
}

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

const opStartOnDemandAuditTask = "StartOnDemandAuditTask"

// StartOnDemandAuditTaskRequest generates a "aws/request.Request" representing the
// client's request for the StartOnDemandAuditTask 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 StartOnDemandAuditTask for more information on using the StartOnDemandAuditTask
// 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 StartOnDemandAuditTaskRequest method.
//	req, resp := client.StartOnDemandAuditTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) StartOnDemandAuditTaskRequest(input *StartOnDemandAuditTaskInput) (req *request.Request, output *StartOnDemandAuditTaskOutput) {
	op := &request.Operation{
		Name:       opStartOnDemandAuditTask,
		HTTPMethod: "POST",
		HTTPPath:   "/audit/tasks",
	}

	if input == nil {
		input = &StartOnDemandAuditTaskInput{}
	}

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

// StartOnDemandAuditTask API operation for AWS IoT.
//
// Starts an on-demand Device Defender audit.
//
// Requires permission to access the StartOnDemandAuditTask (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation StartOnDemandAuditTask for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - LimitExceededException
//     A limit has been exceeded.
func (c *IoT) StartOnDemandAuditTask(input *StartOnDemandAuditTaskInput) (*StartOnDemandAuditTaskOutput, error) {
	req, out := c.StartOnDemandAuditTaskRequest(input)
	return out, req.Send()
}

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

const opStartThingRegistrationTask = "StartThingRegistrationTask"

// StartThingRegistrationTaskRequest generates a "aws/request.Request" representing the
// client's request for the StartThingRegistrationTask 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 StartThingRegistrationTask for more information on using the StartThingRegistrationTask
// 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 StartThingRegistrationTaskRequest method.
//	req, resp := client.StartThingRegistrationTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) StartThingRegistrationTaskRequest(input *StartThingRegistrationTaskInput) (req *request.Request, output *StartThingRegistrationTaskOutput) {
	op := &request.Operation{
		Name:       opStartThingRegistrationTask,
		HTTPMethod: "POST",
		HTTPPath:   "/thing-registration-tasks",
	}

	if input == nil {
		input = &StartThingRegistrationTaskInput{}
	}

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

// StartThingRegistrationTask API operation for AWS IoT.
//
// Creates a bulk thing provisioning task.
//
// Requires permission to access the StartThingRegistrationTask (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation StartThingRegistrationTask for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) StartThingRegistrationTask(input *StartThingRegistrationTaskInput) (*StartThingRegistrationTaskOutput, error) {
	req, out := c.StartThingRegistrationTaskRequest(input)
	return out, req.Send()
}

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

const opStopThingRegistrationTask = "StopThingRegistrationTask"

// StopThingRegistrationTaskRequest generates a "aws/request.Request" representing the
// client's request for the StopThingRegistrationTask 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 StopThingRegistrationTask for more information on using the StopThingRegistrationTask
// 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 StopThingRegistrationTaskRequest method.
//	req, resp := client.StopThingRegistrationTaskRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) StopThingRegistrationTaskRequest(input *StopThingRegistrationTaskInput) (req *request.Request, output *StopThingRegistrationTaskOutput) {
	op := &request.Operation{
		Name:       opStopThingRegistrationTask,
		HTTPMethod: "PUT",
		HTTPPath:   "/thing-registration-tasks/{taskId}/cancel",
	}

	if input == nil {
		input = &StopThingRegistrationTaskInput{}
	}

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

// StopThingRegistrationTask API operation for AWS IoT.
//
// Cancels a bulk thing provisioning task.
//
// Requires permission to access the StopThingRegistrationTask (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation StopThingRegistrationTask for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) StopThingRegistrationTask(input *StopThingRegistrationTaskInput) (*StopThingRegistrationTaskOutput, error) {
	req, out := c.StopThingRegistrationTaskRequest(input)
	return out, req.Send()
}

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

const opTagResource = "TagResource"

// TagResourceRequest generates a "aws/request.Request" representing the
// client's request for the TagResource 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 TagResource for more information on using the TagResource
// 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 TagResourceRequest method.
//	req, resp := client.TagResourceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) TagResourceRequest(input *TagResourceInput) (req *request.Request, output *TagResourceOutput) {
	op := &request.Operation{
		Name:       opTagResource,
		HTTPMethod: "POST",
		HTTPPath:   "/tags",
	}

	if input == nil {
		input = &TagResourceInput{}
	}

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

// TagResource API operation for AWS IoT.
//
// Adds to or modifies the tags of the given resource. Tags are metadata which
// can be used to manage a resource.
//
// Requires permission to access the TagResource (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - LimitExceededException
//     A limit has been exceeded.
func (c *IoT) TagResource(input *TagResourceInput) (*TagResourceOutput, error) {
	req, out := c.TagResourceRequest(input)
	return out, req.Send()
}

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

const opTestAuthorization = "TestAuthorization"

// TestAuthorizationRequest generates a "aws/request.Request" representing the
// client's request for the TestAuthorization 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 TestAuthorization for more information on using the TestAuthorization
// 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 TestAuthorizationRequest method.
//	req, resp := client.TestAuthorizationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) TestAuthorizationRequest(input *TestAuthorizationInput) (req *request.Request, output *TestAuthorizationOutput) {
	op := &request.Operation{
		Name:       opTestAuthorization,
		HTTPMethod: "POST",
		HTTPPath:   "/test-authorization",
	}

	if input == nil {
		input = &TestAuthorizationInput{}
	}

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

// TestAuthorization API operation for AWS IoT.
//
// Tests if a specified principal is authorized to perform an IoT action on
// a specified resource. Use this to test and debug the authorization behavior
// of devices that connect to the IoT device gateway.
//
// Requires permission to access the TestAuthorization (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation TestAuthorization for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - LimitExceededException
//     A limit has been exceeded.
func (c *IoT) TestAuthorization(input *TestAuthorizationInput) (*TestAuthorizationOutput, error) {
	req, out := c.TestAuthorizationRequest(input)
	return out, req.Send()
}

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

const opTestInvokeAuthorizer = "TestInvokeAuthorizer"

// TestInvokeAuthorizerRequest generates a "aws/request.Request" representing the
// client's request for the TestInvokeAuthorizer 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 TestInvokeAuthorizer for more information on using the TestInvokeAuthorizer
// 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 TestInvokeAuthorizerRequest method.
//	req, resp := client.TestInvokeAuthorizerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) TestInvokeAuthorizerRequest(input *TestInvokeAuthorizerInput) (req *request.Request, output *TestInvokeAuthorizerOutput) {
	op := &request.Operation{
		Name:       opTestInvokeAuthorizer,
		HTTPMethod: "POST",
		HTTPPath:   "/authorizer/{authorizerName}/test",
	}

	if input == nil {
		input = &TestInvokeAuthorizerInput{}
	}

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

// TestInvokeAuthorizer API operation for AWS IoT.
//
// Tests a custom authorization behavior by invoking a specified custom authorizer.
// Use this to test and debug the custom authorization behavior of devices that
// connect to the IoT device gateway.
//
// Requires permission to access the TestInvokeAuthorizer (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation TestInvokeAuthorizer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidResponseException
//     The response is invalid.
func (c *IoT) TestInvokeAuthorizer(input *TestInvokeAuthorizerInput) (*TestInvokeAuthorizerOutput, error) {
	req, out := c.TestInvokeAuthorizerRequest(input)
	return out, req.Send()
}

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

const opTransferCertificate = "TransferCertificate"

// TransferCertificateRequest generates a "aws/request.Request" representing the
// client's request for the TransferCertificate 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 TransferCertificate for more information on using the TransferCertificate
// 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 TransferCertificateRequest method.
//	req, resp := client.TransferCertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) TransferCertificateRequest(input *TransferCertificateInput) (req *request.Request, output *TransferCertificateOutput) {
	op := &request.Operation{
		Name:       opTransferCertificate,
		HTTPMethod: "PATCH",
		HTTPPath:   "/transfer-certificate/{certificateId}",
	}

	if input == nil {
		input = &TransferCertificateInput{}
	}

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

// TransferCertificate API operation for AWS IoT.
//
// Transfers the specified certificate to the specified Amazon Web Services
// account.
//
// Requires permission to access the TransferCertificate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// You can cancel the transfer until it is acknowledged by the recipient.
//
// No notification is sent to the transfer destination's account. It is up to
// the caller to notify the transfer target.
//
// The certificate being transferred must not be in the ACTIVE state. You can
// use the UpdateCertificate action to deactivate it.
//
// The certificate must not have any policies attached to it. You can use the
// DetachPolicy action to detach them.
//
// 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 IoT's
// API operation TransferCertificate for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - CertificateStateException
//     The certificate operation is not allowed.
//
//   - TransferConflictException
//     You can't transfer the certificate because authorization policies are still
//     attached.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) TransferCertificate(input *TransferCertificateInput) (*TransferCertificateOutput, error) {
	req, out := c.TransferCertificateRequest(input)
	return out, req.Send()
}

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

const opUntagResource = "UntagResource"

// UntagResourceRequest generates a "aws/request.Request" representing the
// client's request for the UntagResource 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 UntagResource for more information on using the UntagResource
// 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 UntagResourceRequest method.
//	req, resp := client.UntagResourceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UntagResourceRequest(input *UntagResourceInput) (req *request.Request, output *UntagResourceOutput) {
	op := &request.Operation{
		Name:       opUntagResource,
		HTTPMethod: "POST",
		HTTPPath:   "/untag",
	}

	if input == nil {
		input = &UntagResourceInput{}
	}

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

// UntagResource API operation for AWS IoT.
//
// Removes the given tags (metadata) from the resource.
//
// Requires permission to access the UntagResource (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) UntagResource(input *UntagResourceInput) (*UntagResourceOutput, error) {
	req, out := c.UntagResourceRequest(input)
	return out, req.Send()
}

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

const opUpdateAccountAuditConfiguration = "UpdateAccountAuditConfiguration"

// UpdateAccountAuditConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the UpdateAccountAuditConfiguration 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 UpdateAccountAuditConfiguration for more information on using the UpdateAccountAuditConfiguration
// 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 UpdateAccountAuditConfigurationRequest method.
//	req, resp := client.UpdateAccountAuditConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateAccountAuditConfigurationRequest(input *UpdateAccountAuditConfigurationInput) (req *request.Request, output *UpdateAccountAuditConfigurationOutput) {
	op := &request.Operation{
		Name:       opUpdateAccountAuditConfiguration,
		HTTPMethod: "PATCH",
		HTTPPath:   "/audit/configuration",
	}

	if input == nil {
		input = &UpdateAccountAuditConfigurationInput{}
	}

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

// UpdateAccountAuditConfiguration API operation for AWS IoT.
//
// Configures or reconfigures the Device Defender audit settings for this account.
// Settings include how audit notifications are sent and which audit checks
// are enabled or disabled.
//
// Requires permission to access the UpdateAccountAuditConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateAccountAuditConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateAccountAuditConfiguration(input *UpdateAccountAuditConfigurationInput) (*UpdateAccountAuditConfigurationOutput, error) {
	req, out := c.UpdateAccountAuditConfigurationRequest(input)
	return out, req.Send()
}

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

const opUpdateAuditSuppression = "UpdateAuditSuppression"

// UpdateAuditSuppressionRequest generates a "aws/request.Request" representing the
// client's request for the UpdateAuditSuppression 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 UpdateAuditSuppression for more information on using the UpdateAuditSuppression
// 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 UpdateAuditSuppressionRequest method.
//	req, resp := client.UpdateAuditSuppressionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateAuditSuppressionRequest(input *UpdateAuditSuppressionInput) (req *request.Request, output *UpdateAuditSuppressionOutput) {
	op := &request.Operation{
		Name:       opUpdateAuditSuppression,
		HTTPMethod: "PATCH",
		HTTPPath:   "/audit/suppressions/update",
	}

	if input == nil {
		input = &UpdateAuditSuppressionInput{}
	}

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

// UpdateAuditSuppression API operation for AWS IoT.
//
// Updates a Device Defender audit suppression.
//
// 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 IoT's
// API operation UpdateAuditSuppression for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateAuditSuppression(input *UpdateAuditSuppressionInput) (*UpdateAuditSuppressionOutput, error) {
	req, out := c.UpdateAuditSuppressionRequest(input)
	return out, req.Send()
}

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

const opUpdateAuthorizer = "UpdateAuthorizer"

// UpdateAuthorizerRequest generates a "aws/request.Request" representing the
// client's request for the UpdateAuthorizer 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 UpdateAuthorizer for more information on using the UpdateAuthorizer
// 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 UpdateAuthorizerRequest method.
//	req, resp := client.UpdateAuthorizerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateAuthorizerRequest(input *UpdateAuthorizerInput) (req *request.Request, output *UpdateAuthorizerOutput) {
	op := &request.Operation{
		Name:       opUpdateAuthorizer,
		HTTPMethod: "PUT",
		HTTPPath:   "/authorizer/{authorizerName}",
	}

	if input == nil {
		input = &UpdateAuthorizerInput{}
	}

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

// UpdateAuthorizer API operation for AWS IoT.
//
// Updates an authorizer.
//
// Requires permission to access the UpdateAuthorizer (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateAuthorizer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - LimitExceededException
//     A limit has been exceeded.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateAuthorizer(input *UpdateAuthorizerInput) (*UpdateAuthorizerOutput, error) {
	req, out := c.UpdateAuthorizerRequest(input)
	return out, req.Send()
}

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

const opUpdateBillingGroup = "UpdateBillingGroup"

// UpdateBillingGroupRequest generates a "aws/request.Request" representing the
// client's request for the UpdateBillingGroup 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 UpdateBillingGroup for more information on using the UpdateBillingGroup
// 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 UpdateBillingGroupRequest method.
//	req, resp := client.UpdateBillingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateBillingGroupRequest(input *UpdateBillingGroupInput) (req *request.Request, output *UpdateBillingGroupOutput) {
	op := &request.Operation{
		Name:       opUpdateBillingGroup,
		HTTPMethod: "PATCH",
		HTTPPath:   "/billing-groups/{billingGroupName}",
	}

	if input == nil {
		input = &UpdateBillingGroupInput{}
	}

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

// UpdateBillingGroup API operation for AWS IoT.
//
// Updates information about the billing group.
//
// Requires permission to access the UpdateBillingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateBillingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) UpdateBillingGroup(input *UpdateBillingGroupInput) (*UpdateBillingGroupOutput, error) {
	req, out := c.UpdateBillingGroupRequest(input)
	return out, req.Send()
}

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

const opUpdateCACertificate = "UpdateCACertificate"

// UpdateCACertificateRequest generates a "aws/request.Request" representing the
// client's request for the UpdateCACertificate 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 UpdateCACertificate for more information on using the UpdateCACertificate
// 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 UpdateCACertificateRequest method.
//	req, resp := client.UpdateCACertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateCACertificateRequest(input *UpdateCACertificateInput) (req *request.Request, output *UpdateCACertificateOutput) {
	op := &request.Operation{
		Name:       opUpdateCACertificate,
		HTTPMethod: "PUT",
		HTTPPath:   "/cacertificate/{caCertificateId}",
	}

	if input == nil {
		input = &UpdateCACertificateInput{}
	}

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

// UpdateCACertificate API operation for AWS IoT.
//
// Updates a registered CA certificate.
//
// Requires permission to access the UpdateCACertificate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateCACertificate for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateCACertificate(input *UpdateCACertificateInput) (*UpdateCACertificateOutput, error) {
	req, out := c.UpdateCACertificateRequest(input)
	return out, req.Send()
}

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

const opUpdateCertificate = "UpdateCertificate"

// UpdateCertificateRequest generates a "aws/request.Request" representing the
// client's request for the UpdateCertificate 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 UpdateCertificate for more information on using the UpdateCertificate
// 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 UpdateCertificateRequest method.
//	req, resp := client.UpdateCertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateCertificateRequest(input *UpdateCertificateInput) (req *request.Request, output *UpdateCertificateOutput) {
	op := &request.Operation{
		Name:       opUpdateCertificate,
		HTTPMethod: "PUT",
		HTTPPath:   "/certificates/{certificateId}",
	}

	if input == nil {
		input = &UpdateCertificateInput{}
	}

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

// UpdateCertificate API operation for AWS IoT.
//
// Updates the status of the specified certificate. This operation is idempotent.
//
// Requires permission to access the UpdateCertificate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// Certificates must be in the ACTIVE state to authenticate devices that use
// a certificate to connect to IoT.
//
// Within a few minutes of updating a certificate from the ACTIVE state to any
// other state, IoT disconnects all devices that used that certificate to connect.
// Devices cannot use a certificate that is not in the ACTIVE state to reconnect.
//
// 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 IoT's
// API operation UpdateCertificate for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - CertificateStateException
//     The certificate operation is not allowed.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateCertificate(input *UpdateCertificateInput) (*UpdateCertificateOutput, error) {
	req, out := c.UpdateCertificateRequest(input)
	return out, req.Send()
}

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

const opUpdateCertificateProvider = "UpdateCertificateProvider"

// UpdateCertificateProviderRequest generates a "aws/request.Request" representing the
// client's request for the UpdateCertificateProvider 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 UpdateCertificateProvider for more information on using the UpdateCertificateProvider
// 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 UpdateCertificateProviderRequest method.
//	req, resp := client.UpdateCertificateProviderRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateCertificateProviderRequest(input *UpdateCertificateProviderInput) (req *request.Request, output *UpdateCertificateProviderOutput) {
	op := &request.Operation{
		Name:       opUpdateCertificateProvider,
		HTTPMethod: "PUT",
		HTTPPath:   "/certificate-providers/{certificateProviderName}",
	}

	if input == nil {
		input = &UpdateCertificateProviderInput{}
	}

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

// UpdateCertificateProvider API operation for AWS IoT.
//
// Updates a certificate provider.
//
// Requires permission to access the UpdateCertificateProvider (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateCertificateProvider for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateCertificateProvider(input *UpdateCertificateProviderInput) (*UpdateCertificateProviderOutput, error) {
	req, out := c.UpdateCertificateProviderRequest(input)
	return out, req.Send()
}

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

const opUpdateCustomMetric = "UpdateCustomMetric"

// UpdateCustomMetricRequest generates a "aws/request.Request" representing the
// client's request for the UpdateCustomMetric 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 UpdateCustomMetric for more information on using the UpdateCustomMetric
// 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 UpdateCustomMetricRequest method.
//	req, resp := client.UpdateCustomMetricRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateCustomMetricRequest(input *UpdateCustomMetricInput) (req *request.Request, output *UpdateCustomMetricOutput) {
	op := &request.Operation{
		Name:       opUpdateCustomMetric,
		HTTPMethod: "PATCH",
		HTTPPath:   "/custom-metric/{metricName}",
	}

	if input == nil {
		input = &UpdateCustomMetricInput{}
	}

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

// UpdateCustomMetric API operation for AWS IoT.
//
// Updates a Device Defender detect custom metric.
//
// Requires permission to access the UpdateCustomMetric (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateCustomMetric for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateCustomMetric(input *UpdateCustomMetricInput) (*UpdateCustomMetricOutput, error) {
	req, out := c.UpdateCustomMetricRequest(input)
	return out, req.Send()
}

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

const opUpdateDimension = "UpdateDimension"

// UpdateDimensionRequest generates a "aws/request.Request" representing the
// client's request for the UpdateDimension 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 UpdateDimension for more information on using the UpdateDimension
// 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 UpdateDimensionRequest method.
//	req, resp := client.UpdateDimensionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateDimensionRequest(input *UpdateDimensionInput) (req *request.Request, output *UpdateDimensionOutput) {
	op := &request.Operation{
		Name:       opUpdateDimension,
		HTTPMethod: "PATCH",
		HTTPPath:   "/dimensions/{name}",
	}

	if input == nil {
		input = &UpdateDimensionInput{}
	}

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

// UpdateDimension API operation for AWS IoT.
//
// Updates the definition for a dimension. You cannot change the type of a dimension
// after it is created (you can delete it and recreate it).
//
// Requires permission to access the UpdateDimension (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateDimension for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) UpdateDimension(input *UpdateDimensionInput) (*UpdateDimensionOutput, error) {
	req, out := c.UpdateDimensionRequest(input)
	return out, req.Send()
}

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

const opUpdateDomainConfiguration = "UpdateDomainConfiguration"

// UpdateDomainConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the UpdateDomainConfiguration 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 UpdateDomainConfiguration for more information on using the UpdateDomainConfiguration
// 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 UpdateDomainConfigurationRequest method.
//	req, resp := client.UpdateDomainConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateDomainConfigurationRequest(input *UpdateDomainConfigurationInput) (req *request.Request, output *UpdateDomainConfigurationOutput) {
	op := &request.Operation{
		Name:       opUpdateDomainConfiguration,
		HTTPMethod: "PUT",
		HTTPPath:   "/domainConfigurations/{domainConfigurationName}",
	}

	if input == nil {
		input = &UpdateDomainConfigurationInput{}
	}

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

// UpdateDomainConfiguration API operation for AWS IoT.
//
// Updates values stored in the domain configuration. Domain configurations
// for default endpoints can't be updated.
//
// Requires permission to access the UpdateDomainConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateDomainConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - CertificateValidationException
//     The certificate is invalid.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateDomainConfiguration(input *UpdateDomainConfigurationInput) (*UpdateDomainConfigurationOutput, error) {
	req, out := c.UpdateDomainConfigurationRequest(input)
	return out, req.Send()
}

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

const opUpdateDynamicThingGroup = "UpdateDynamicThingGroup"

// UpdateDynamicThingGroupRequest generates a "aws/request.Request" representing the
// client's request for the UpdateDynamicThingGroup 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 UpdateDynamicThingGroup for more information on using the UpdateDynamicThingGroup
// 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 UpdateDynamicThingGroupRequest method.
//	req, resp := client.UpdateDynamicThingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateDynamicThingGroupRequest(input *UpdateDynamicThingGroupInput) (req *request.Request, output *UpdateDynamicThingGroupOutput) {
	op := &request.Operation{
		Name:       opUpdateDynamicThingGroup,
		HTTPMethod: "PATCH",
		HTTPPath:   "/dynamic-thing-groups/{thingGroupName}",
	}

	if input == nil {
		input = &UpdateDynamicThingGroupInput{}
	}

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

// UpdateDynamicThingGroup API operation for AWS IoT.
//
// Updates a dynamic thing group.
//
// Requires permission to access the UpdateDynamicThingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateDynamicThingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidQueryException
//     The query is invalid.
func (c *IoT) UpdateDynamicThingGroup(input *UpdateDynamicThingGroupInput) (*UpdateDynamicThingGroupOutput, error) {
	req, out := c.UpdateDynamicThingGroupRequest(input)
	return out, req.Send()
}

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

const opUpdateEventConfigurations = "UpdateEventConfigurations"

// UpdateEventConfigurationsRequest generates a "aws/request.Request" representing the
// client's request for the UpdateEventConfigurations 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 UpdateEventConfigurations for more information on using the UpdateEventConfigurations
// 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 UpdateEventConfigurationsRequest method.
//	req, resp := client.UpdateEventConfigurationsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateEventConfigurationsRequest(input *UpdateEventConfigurationsInput) (req *request.Request, output *UpdateEventConfigurationsOutput) {
	op := &request.Operation{
		Name:       opUpdateEventConfigurations,
		HTTPMethod: "PATCH",
		HTTPPath:   "/event-configurations",
	}

	if input == nil {
		input = &UpdateEventConfigurationsInput{}
	}

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

// UpdateEventConfigurations API operation for AWS IoT.
//
// Updates the event configurations.
//
// Requires permission to access the UpdateEventConfigurations (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateEventConfigurations for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ThrottlingException
//     The rate exceeds the limit.
func (c *IoT) UpdateEventConfigurations(input *UpdateEventConfigurationsInput) (*UpdateEventConfigurationsOutput, error) {
	req, out := c.UpdateEventConfigurationsRequest(input)
	return out, req.Send()
}

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

const opUpdateFleetMetric = "UpdateFleetMetric"

// UpdateFleetMetricRequest generates a "aws/request.Request" representing the
// client's request for the UpdateFleetMetric 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 UpdateFleetMetric for more information on using the UpdateFleetMetric
// 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 UpdateFleetMetricRequest method.
//	req, resp := client.UpdateFleetMetricRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateFleetMetricRequest(input *UpdateFleetMetricInput) (req *request.Request, output *UpdateFleetMetricOutput) {
	op := &request.Operation{
		Name:       opUpdateFleetMetric,
		HTTPMethod: "PATCH",
		HTTPPath:   "/fleet-metric/{metricName}",
	}

	if input == nil {
		input = &UpdateFleetMetricInput{}
	}

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

// UpdateFleetMetric API operation for AWS IoT.
//
// Updates the data for a fleet metric.
//
// Requires permission to access the UpdateFleetMetric (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateFleetMetric for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidQueryException
//     The query is invalid.
//
//   - InvalidAggregationException
//     The aggregation is invalid.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
//
//   - IndexNotReadyException
//     The index is not ready.
func (c *IoT) UpdateFleetMetric(input *UpdateFleetMetricInput) (*UpdateFleetMetricOutput, error) {
	req, out := c.UpdateFleetMetricRequest(input)
	return out, req.Send()
}

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

const opUpdateIndexingConfiguration = "UpdateIndexingConfiguration"

// UpdateIndexingConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the UpdateIndexingConfiguration 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 UpdateIndexingConfiguration for more information on using the UpdateIndexingConfiguration
// 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 UpdateIndexingConfigurationRequest method.
//	req, resp := client.UpdateIndexingConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateIndexingConfigurationRequest(input *UpdateIndexingConfigurationInput) (req *request.Request, output *UpdateIndexingConfigurationOutput) {
	op := &request.Operation{
		Name:       opUpdateIndexingConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/indexing/config",
	}

	if input == nil {
		input = &UpdateIndexingConfigurationInput{}
	}

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

// UpdateIndexingConfiguration API operation for AWS IoT.
//
// Updates the search configuration.
//
// Requires permission to access the UpdateIndexingConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateIndexingConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateIndexingConfiguration(input *UpdateIndexingConfigurationInput) (*UpdateIndexingConfigurationOutput, error) {
	req, out := c.UpdateIndexingConfigurationRequest(input)
	return out, req.Send()
}

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

const opUpdateJob = "UpdateJob"

// UpdateJobRequest generates a "aws/request.Request" representing the
// client's request for the UpdateJob 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 UpdateJob for more information on using the UpdateJob
// 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 UpdateJobRequest method.
//	req, resp := client.UpdateJobRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateJobRequest(input *UpdateJobInput) (req *request.Request, output *UpdateJobOutput) {
	op := &request.Operation{
		Name:       opUpdateJob,
		HTTPMethod: "PATCH",
		HTTPPath:   "/jobs/{jobId}",
	}

	if input == nil {
		input = &UpdateJobInput{}
	}

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

// UpdateJob API operation for AWS IoT.
//
// Updates supported fields of the specified job.
//
// Requires permission to access the UpdateJob (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateJob for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
func (c *IoT) UpdateJob(input *UpdateJobInput) (*UpdateJobOutput, error) {
	req, out := c.UpdateJobRequest(input)
	return out, req.Send()
}

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

const opUpdateMitigationAction = "UpdateMitigationAction"

// UpdateMitigationActionRequest generates a "aws/request.Request" representing the
// client's request for the UpdateMitigationAction 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 UpdateMitigationAction for more information on using the UpdateMitigationAction
// 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 UpdateMitigationActionRequest method.
//	req, resp := client.UpdateMitigationActionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateMitigationActionRequest(input *UpdateMitigationActionInput) (req *request.Request, output *UpdateMitigationActionOutput) {
	op := &request.Operation{
		Name:       opUpdateMitigationAction,
		HTTPMethod: "PATCH",
		HTTPPath:   "/mitigationactions/actions/{actionName}",
	}

	if input == nil {
		input = &UpdateMitigationActionInput{}
	}

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

// UpdateMitigationAction API operation for AWS IoT.
//
// Updates the definition for the specified mitigation action.
//
// Requires permission to access the UpdateMitigationAction (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateMitigationAction for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateMitigationAction(input *UpdateMitigationActionInput) (*UpdateMitigationActionOutput, error) {
	req, out := c.UpdateMitigationActionRequest(input)
	return out, req.Send()
}

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

const opUpdatePackage = "UpdatePackage"

// UpdatePackageRequest generates a "aws/request.Request" representing the
// client's request for the UpdatePackage 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 UpdatePackage for more information on using the UpdatePackage
// 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 UpdatePackageRequest method.
//	req, resp := client.UpdatePackageRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdatePackageRequest(input *UpdatePackageInput) (req *request.Request, output *UpdatePackageOutput) {
	op := &request.Operation{
		Name:       opUpdatePackage,
		HTTPMethod: "PATCH",
		HTTPPath:   "/packages/{packageName}",
	}

	if input == nil {
		input = &UpdatePackageInput{}
	}

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

// UpdatePackage API operation for AWS IoT.
//
// Updates the supported fields for a specific software package.
//
// Requires permission to access the UpdatePackage (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// and GetIndexingConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// actions.
//
// 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 IoT's
// API operation UpdatePackage for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ConflictException
//     A resource with the same name already exists.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
//
//   - ValidationException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) UpdatePackage(input *UpdatePackageInput) (*UpdatePackageOutput, error) {
	req, out := c.UpdatePackageRequest(input)
	return out, req.Send()
}

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

const opUpdatePackageConfiguration = "UpdatePackageConfiguration"

// UpdatePackageConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the UpdatePackageConfiguration 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 UpdatePackageConfiguration for more information on using the UpdatePackageConfiguration
// 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 UpdatePackageConfigurationRequest method.
//	req, resp := client.UpdatePackageConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdatePackageConfigurationRequest(input *UpdatePackageConfigurationInput) (req *request.Request, output *UpdatePackageConfigurationOutput) {
	op := &request.Operation{
		Name:       opUpdatePackageConfiguration,
		HTTPMethod: "PATCH",
		HTTPPath:   "/package-configuration",
	}

	if input == nil {
		input = &UpdatePackageConfigurationInput{}
	}

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

// UpdatePackageConfiguration API operation for AWS IoT.
//
// Updates the software package configuration.
//
// Requires permission to access the UpdatePackageConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// and iam:PassRole (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)
// actions.
//
// 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 IoT's
// API operation UpdatePackageConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ConflictException
//     A resource with the same name already exists.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
//
//   - ValidationException
//     The request is not valid.
func (c *IoT) UpdatePackageConfiguration(input *UpdatePackageConfigurationInput) (*UpdatePackageConfigurationOutput, error) {
	req, out := c.UpdatePackageConfigurationRequest(input)
	return out, req.Send()
}

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

const opUpdatePackageVersion = "UpdatePackageVersion"

// UpdatePackageVersionRequest generates a "aws/request.Request" representing the
// client's request for the UpdatePackageVersion 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 UpdatePackageVersion for more information on using the UpdatePackageVersion
// 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 UpdatePackageVersionRequest method.
//	req, resp := client.UpdatePackageVersionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdatePackageVersionRequest(input *UpdatePackageVersionInput) (req *request.Request, output *UpdatePackageVersionOutput) {
	op := &request.Operation{
		Name:       opUpdatePackageVersion,
		HTTPMethod: "PATCH",
		HTTPPath:   "/packages/{packageName}/versions/{versionName}",
	}

	if input == nil {
		input = &UpdatePackageVersionInput{}
	}

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

// UpdatePackageVersion API operation for AWS IoT.
//
// Updates the supported fields for a specific package version.
//
// Requires permission to access the UpdatePackageVersion (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// and GetIndexingConfiguration (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// actions.
//
// 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 IoT's
// API operation UpdatePackageVersion for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - ConflictException
//     A resource with the same name already exists.
//
//   - InternalServerException
//     Internal error from the service that indicates an unexpected error or that
//     the service is unavailable.
//
//   - ValidationException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) UpdatePackageVersion(input *UpdatePackageVersionInput) (*UpdatePackageVersionOutput, error) {
	req, out := c.UpdatePackageVersionRequest(input)
	return out, req.Send()
}

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

const opUpdateProvisioningTemplate = "UpdateProvisioningTemplate"

// UpdateProvisioningTemplateRequest generates a "aws/request.Request" representing the
// client's request for the UpdateProvisioningTemplate 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 UpdateProvisioningTemplate for more information on using the UpdateProvisioningTemplate
// 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 UpdateProvisioningTemplateRequest method.
//	req, resp := client.UpdateProvisioningTemplateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateProvisioningTemplateRequest(input *UpdateProvisioningTemplateInput) (req *request.Request, output *UpdateProvisioningTemplateOutput) {
	op := &request.Operation{
		Name:       opUpdateProvisioningTemplate,
		HTTPMethod: "PATCH",
		HTTPPath:   "/provisioning-templates/{templateName}",
	}

	if input == nil {
		input = &UpdateProvisioningTemplateInput{}
	}

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

// UpdateProvisioningTemplate API operation for AWS IoT.
//
// Updates a provisioning template.
//
// Requires permission to access the UpdateProvisioningTemplate (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateProvisioningTemplate for usage and error information.
//
// Returned Error Types:
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
func (c *IoT) UpdateProvisioningTemplate(input *UpdateProvisioningTemplateInput) (*UpdateProvisioningTemplateOutput, error) {
	req, out := c.UpdateProvisioningTemplateRequest(input)
	return out, req.Send()
}

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

const opUpdateRoleAlias = "UpdateRoleAlias"

// UpdateRoleAliasRequest generates a "aws/request.Request" representing the
// client's request for the UpdateRoleAlias 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 UpdateRoleAlias for more information on using the UpdateRoleAlias
// 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 UpdateRoleAliasRequest method.
//	req, resp := client.UpdateRoleAliasRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateRoleAliasRequest(input *UpdateRoleAliasInput) (req *request.Request, output *UpdateRoleAliasOutput) {
	op := &request.Operation{
		Name:       opUpdateRoleAlias,
		HTTPMethod: "PUT",
		HTTPPath:   "/role-aliases/{roleAlias}",
	}

	if input == nil {
		input = &UpdateRoleAliasInput{}
	}

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

// UpdateRoleAlias API operation for AWS IoT.
//
// Updates a role alias.
//
// Requires permission to access the UpdateRoleAlias (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateRoleAlias for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateRoleAlias(input *UpdateRoleAliasInput) (*UpdateRoleAliasOutput, error) {
	req, out := c.UpdateRoleAliasRequest(input)
	return out, req.Send()
}

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

const opUpdateScheduledAudit = "UpdateScheduledAudit"

// UpdateScheduledAuditRequest generates a "aws/request.Request" representing the
// client's request for the UpdateScheduledAudit 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 UpdateScheduledAudit for more information on using the UpdateScheduledAudit
// 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 UpdateScheduledAuditRequest method.
//	req, resp := client.UpdateScheduledAuditRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateScheduledAuditRequest(input *UpdateScheduledAuditInput) (req *request.Request, output *UpdateScheduledAuditOutput) {
	op := &request.Operation{
		Name:       opUpdateScheduledAudit,
		HTTPMethod: "PATCH",
		HTTPPath:   "/audit/scheduledaudits/{scheduledAuditName}",
	}

	if input == nil {
		input = &UpdateScheduledAuditInput{}
	}

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

// UpdateScheduledAudit API operation for AWS IoT.
//
// Updates a scheduled audit, including which checks are performed and how often
// the audit takes place.
//
// Requires permission to access the UpdateScheduledAudit (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateScheduledAudit for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateScheduledAudit(input *UpdateScheduledAuditInput) (*UpdateScheduledAuditOutput, error) {
	req, out := c.UpdateScheduledAuditRequest(input)
	return out, req.Send()
}

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

const opUpdateSecurityProfile = "UpdateSecurityProfile"

// UpdateSecurityProfileRequest generates a "aws/request.Request" representing the
// client's request for the UpdateSecurityProfile 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 UpdateSecurityProfile for more information on using the UpdateSecurityProfile
// 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 UpdateSecurityProfileRequest method.
//	req, resp := client.UpdateSecurityProfileRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateSecurityProfileRequest(input *UpdateSecurityProfileInput) (req *request.Request, output *UpdateSecurityProfileOutput) {
	op := &request.Operation{
		Name:       opUpdateSecurityProfile,
		HTTPMethod: "PATCH",
		HTTPPath:   "/security-profiles/{securityProfileName}",
	}

	if input == nil {
		input = &UpdateSecurityProfileInput{}
	}

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

// UpdateSecurityProfile API operation for AWS IoT.
//
// Updates a Device Defender security profile.
//
// Requires permission to access the UpdateSecurityProfile (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateSecurityProfile for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateSecurityProfile(input *UpdateSecurityProfileInput) (*UpdateSecurityProfileOutput, error) {
	req, out := c.UpdateSecurityProfileRequest(input)
	return out, req.Send()
}

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

const opUpdateStream = "UpdateStream"

// UpdateStreamRequest generates a "aws/request.Request" representing the
// client's request for the UpdateStream 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 UpdateStream for more information on using the UpdateStream
// 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 UpdateStreamRequest method.
//	req, resp := client.UpdateStreamRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateStreamRequest(input *UpdateStreamInput) (req *request.Request, output *UpdateStreamOutput) {
	op := &request.Operation{
		Name:       opUpdateStream,
		HTTPMethod: "PUT",
		HTTPPath:   "/streams/{streamId}",
	}

	if input == nil {
		input = &UpdateStreamInput{}
	}

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

// UpdateStream API operation for AWS IoT.
//
// Updates an existing stream. The stream version will be incremented by one.
//
// Requires permission to access the UpdateStream (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateStream for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) UpdateStream(input *UpdateStreamInput) (*UpdateStreamOutput, error) {
	req, out := c.UpdateStreamRequest(input)
	return out, req.Send()
}

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

const opUpdateThing = "UpdateThing"

// UpdateThingRequest generates a "aws/request.Request" representing the
// client's request for the UpdateThing 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 UpdateThing for more information on using the UpdateThing
// 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 UpdateThingRequest method.
//	req, resp := client.UpdateThingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateThingRequest(input *UpdateThingInput) (req *request.Request, output *UpdateThingOutput) {
	op := &request.Operation{
		Name:       opUpdateThing,
		HTTPMethod: "PATCH",
		HTTPPath:   "/things/{thingName}",
	}

	if input == nil {
		input = &UpdateThingInput{}
	}

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

// UpdateThing API operation for AWS IoT.
//
// Updates the data for a thing.
//
// Requires permission to access the UpdateThing (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateThing for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) UpdateThing(input *UpdateThingInput) (*UpdateThingOutput, error) {
	req, out := c.UpdateThingRequest(input)
	return out, req.Send()
}

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

const opUpdateThingGroup = "UpdateThingGroup"

// UpdateThingGroupRequest generates a "aws/request.Request" representing the
// client's request for the UpdateThingGroup 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 UpdateThingGroup for more information on using the UpdateThingGroup
// 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 UpdateThingGroupRequest method.
//	req, resp := client.UpdateThingGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateThingGroupRequest(input *UpdateThingGroupInput) (req *request.Request, output *UpdateThingGroupOutput) {
	op := &request.Operation{
		Name:       opUpdateThingGroup,
		HTTPMethod: "PATCH",
		HTTPPath:   "/thing-groups/{thingGroupName}",
	}

	if input == nil {
		input = &UpdateThingGroupInput{}
	}

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

// UpdateThingGroup API operation for AWS IoT.
//
// Update a thing group.
//
// Requires permission to access the UpdateThingGroup (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateThingGroup for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - VersionConflictException
//     An exception thrown when the version of an entity specified with the expectedVersion
//     parameter does not match the latest version in the system.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) UpdateThingGroup(input *UpdateThingGroupInput) (*UpdateThingGroupOutput, error) {
	req, out := c.UpdateThingGroupRequest(input)
	return out, req.Send()
}

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

const opUpdateThingGroupsForThing = "UpdateThingGroupsForThing"

// UpdateThingGroupsForThingRequest generates a "aws/request.Request" representing the
// client's request for the UpdateThingGroupsForThing 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 UpdateThingGroupsForThing for more information on using the UpdateThingGroupsForThing
// 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 UpdateThingGroupsForThingRequest method.
//	req, resp := client.UpdateThingGroupsForThingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateThingGroupsForThingRequest(input *UpdateThingGroupsForThingInput) (req *request.Request, output *UpdateThingGroupsForThingOutput) {
	op := &request.Operation{
		Name:       opUpdateThingGroupsForThing,
		HTTPMethod: "PUT",
		HTTPPath:   "/thing-groups/updateThingGroupsForThing",
	}

	if input == nil {
		input = &UpdateThingGroupsForThingInput{}
	}

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

// UpdateThingGroupsForThing API operation for AWS IoT.
//
// Updates the groups to which the thing belongs.
//
// Requires permission to access the UpdateThingGroupsForThing (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateThingGroupsForThing for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
//
//   - ResourceNotFoundException
//     The specified resource does not exist.
func (c *IoT) UpdateThingGroupsForThing(input *UpdateThingGroupsForThingInput) (*UpdateThingGroupsForThingOutput, error) {
	req, out := c.UpdateThingGroupsForThingRequest(input)
	return out, req.Send()
}

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

const opUpdateTopicRuleDestination = "UpdateTopicRuleDestination"

// UpdateTopicRuleDestinationRequest generates a "aws/request.Request" representing the
// client's request for the UpdateTopicRuleDestination 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 UpdateTopicRuleDestination for more information on using the UpdateTopicRuleDestination
// 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 UpdateTopicRuleDestinationRequest method.
//	req, resp := client.UpdateTopicRuleDestinationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) UpdateTopicRuleDestinationRequest(input *UpdateTopicRuleDestinationInput) (req *request.Request, output *UpdateTopicRuleDestinationOutput) {
	op := &request.Operation{
		Name:       opUpdateTopicRuleDestination,
		HTTPMethod: "PATCH",
		HTTPPath:   "/destinations",
	}

	if input == nil {
		input = &UpdateTopicRuleDestinationInput{}
	}

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

// UpdateTopicRuleDestination API operation for AWS IoT.
//
// Updates a topic rule destination. You use this to change the status, endpoint
// URL, or confirmation URL of the destination.
//
// Requires permission to access the UpdateTopicRuleDestination (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation UpdateTopicRuleDestination for usage and error information.
//
// Returned Error Types:
//
//   - InternalException
//     An unexpected error has occurred.
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ServiceUnavailableException
//     The service is temporarily unavailable.
//
//   - UnauthorizedException
//     You are not authorized to perform this operation.
//
//   - ConflictingResourceUpdateException
//     A conflicting resource update exception. This exception is thrown when two
//     pending updates cause a conflict.
func (c *IoT) UpdateTopicRuleDestination(input *UpdateTopicRuleDestinationInput) (*UpdateTopicRuleDestinationOutput, error) {
	req, out := c.UpdateTopicRuleDestinationRequest(input)
	return out, req.Send()
}

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

const opValidateSecurityProfileBehaviors = "ValidateSecurityProfileBehaviors"

// ValidateSecurityProfileBehaviorsRequest generates a "aws/request.Request" representing the
// client's request for the ValidateSecurityProfileBehaviors 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 ValidateSecurityProfileBehaviors for more information on using the ValidateSecurityProfileBehaviors
// 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 ValidateSecurityProfileBehaviorsRequest method.
//	req, resp := client.ValidateSecurityProfileBehaviorsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
func (c *IoT) ValidateSecurityProfileBehaviorsRequest(input *ValidateSecurityProfileBehaviorsInput) (req *request.Request, output *ValidateSecurityProfileBehaviorsOutput) {
	op := &request.Operation{
		Name:       opValidateSecurityProfileBehaviors,
		HTTPMethod: "POST",
		HTTPPath:   "/security-profile-behaviors/validate",
	}

	if input == nil {
		input = &ValidateSecurityProfileBehaviorsInput{}
	}

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

// ValidateSecurityProfileBehaviors API operation for AWS IoT.
//
// Validates a Device Defender security profile behaviors specification.
//
// Requires permission to access the ValidateSecurityProfileBehaviors (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
//
// 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 IoT's
// API operation ValidateSecurityProfileBehaviors for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     The request is not valid.
//
//   - ThrottlingException
//     The rate exceeds the limit.
//
//   - InternalFailureException
//     An unexpected error has occurred.
func (c *IoT) ValidateSecurityProfileBehaviors(input *ValidateSecurityProfileBehaviorsInput) (*ValidateSecurityProfileBehaviorsOutput, error) {
	req, out := c.ValidateSecurityProfileBehaviorsRequest(input)
	return out, req.Send()
}

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

// The criteria that determine when and how a job abort takes place.
type AbortConfig struct {
	_ struct{} `type:"structure"`

	// The list of criteria that determine when and how to abort the job.
	//
	// CriteriaList is a required field
	CriteriaList []*AbortCriteria `locationName:"criteriaList" min:"1" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AbortConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AbortConfig) GoString() string {
	return s.String()
}

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

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

// SetCriteriaList sets the CriteriaList field's value.
func (s *AbortConfig) SetCriteriaList(v []*AbortCriteria) *AbortConfig {
	s.CriteriaList = v
	return s
}

// The criteria that determine when and how a job abort takes place.
type AbortCriteria struct {
	_ struct{} `type:"structure"`

	// The type of job action to take to initiate the job abort.
	//
	// Action is a required field
	Action *string `locationName:"action" type:"string" required:"true" enum:"AbortAction"`

	// The type of job execution failures that can initiate a job abort.
	//
	// FailureType is a required field
	FailureType *string `locationName:"failureType" type:"string" required:"true" enum:"JobExecutionFailureType"`

	// The minimum number of things which must receive job execution notifications
	// before the job can be aborted.
	//
	// MinNumberOfExecutedThings is a required field
	MinNumberOfExecutedThings *int64 `locationName:"minNumberOfExecutedThings" min:"1" type:"integer" required:"true"`

	// The minimum percentage of job execution failures that must occur to initiate
	// the job abort.
	//
	// Amazon Web Services IoT Core supports up to two digits after the decimal
	// (for example, 10.9 and 10.99, but not 10.999).
	//
	// ThresholdPercentage is a required field
	ThresholdPercentage *float64 `locationName:"thresholdPercentage" type:"double" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AbortCriteria) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AbortCriteria) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AbortCriteria) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AbortCriteria"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.FailureType == nil {
		invalidParams.Add(request.NewErrParamRequired("FailureType"))
	}
	if s.MinNumberOfExecutedThings == nil {
		invalidParams.Add(request.NewErrParamRequired("MinNumberOfExecutedThings"))
	}
	if s.MinNumberOfExecutedThings != nil && *s.MinNumberOfExecutedThings < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MinNumberOfExecutedThings", 1))
	}
	if s.ThresholdPercentage == nil {
		invalidParams.Add(request.NewErrParamRequired("ThresholdPercentage"))
	}

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

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

// SetFailureType sets the FailureType field's value.
func (s *AbortCriteria) SetFailureType(v string) *AbortCriteria {
	s.FailureType = &v
	return s
}

// SetMinNumberOfExecutedThings sets the MinNumberOfExecutedThings field's value.
func (s *AbortCriteria) SetMinNumberOfExecutedThings(v int64) *AbortCriteria {
	s.MinNumberOfExecutedThings = &v
	return s
}

// SetThresholdPercentage sets the ThresholdPercentage field's value.
func (s *AbortCriteria) SetThresholdPercentage(v float64) *AbortCriteria {
	s.ThresholdPercentage = &v
	return s
}

// The input for the AcceptCertificateTransfer operation.
type AcceptCertificateTransferInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The ID of the certificate. (The last part of the certificate ARN contains
	// the certificate ID.)
	//
	// CertificateId is a required field
	CertificateId *string `location:"uri" locationName:"certificateId" min:"64" type:"string" required:"true"`

	// Specifies whether the certificate is active.
	SetAsActive *bool `location:"querystring" locationName:"setAsActive" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AcceptCertificateTransferInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AcceptCertificateTransferInput) GoString() string {
	return s.String()
}

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

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

// SetCertificateId sets the CertificateId field's value.
func (s *AcceptCertificateTransferInput) SetCertificateId(v string) *AcceptCertificateTransferInput {
	s.CertificateId = &v
	return s
}

// SetSetAsActive sets the SetAsActive field's value.
func (s *AcceptCertificateTransferInput) SetSetAsActive(v bool) *AcceptCertificateTransferInput {
	s.SetAsActive = &v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AcceptCertificateTransferOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AcceptCertificateTransferOutput) GoString() string {
	return s.String()
}

// Describes the actions associated with a rule.
type Action struct {
	_ struct{} `type:"structure"`

	// Change the state of a CloudWatch alarm.
	CloudwatchAlarm *CloudwatchAlarmAction `locationName:"cloudwatchAlarm" type:"structure"`

	// Send data to CloudWatch Logs.
	CloudwatchLogs *CloudwatchLogsAction `locationName:"cloudwatchLogs" type:"structure"`

	// Capture a CloudWatch metric.
	CloudwatchMetric *CloudwatchMetricAction `locationName:"cloudwatchMetric" type:"structure"`

	// Write to a DynamoDB table.
	DynamoDB *DynamoDBAction `locationName:"dynamoDB" type:"structure"`

	// Write to a DynamoDB table. This is a new version of the DynamoDB action.
	// It allows you to write each attribute in an MQTT message payload into a separate
	// DynamoDB column.
	DynamoDBv2 *DynamoDBv2Action `locationName:"dynamoDBv2" type:"structure"`

	// Write data to an Amazon OpenSearch Service domain.
	//
	// The Elasticsearch action can only be used by existing rule actions. To create
	// a new rule action or to update an existing rule action, use the OpenSearch
	// rule action instead. For more information, see OpenSearchAction (https://docs.aws.amazon.com/iot/latest/apireference/API_OpenSearchAction.html).
	Elasticsearch *ElasticsearchAction `locationName:"elasticsearch" type:"structure"`

	// Write to an Amazon Kinesis Firehose stream.
	Firehose *FirehoseAction `locationName:"firehose" type:"structure"`

	// Send data to an HTTPS endpoint.
	Http *HttpAction `locationName:"http" type:"structure"`

	// Sends message data to an IoT Analytics channel.
	IotAnalytics *IotAnalyticsAction `locationName:"iotAnalytics" type:"structure"`

	// Sends an input to an IoT Events detector.
	IotEvents *IotEventsAction `locationName:"iotEvents" type:"structure"`

	// Sends data from the MQTT message that triggered the rule to IoT SiteWise
	// asset properties.
	IotSiteWise *IotSiteWiseAction `locationName:"iotSiteWise" type:"structure"`

	// Send messages to an Amazon Managed Streaming for Apache Kafka (Amazon MSK)
	// or self-managed Apache Kafka cluster.
	Kafka *KafkaAction `locationName:"kafka" type:"structure"`

	// Write data to an Amazon Kinesis stream.
	Kinesis *KinesisAction `locationName:"kinesis" type:"structure"`

	// Invoke a Lambda function.
	Lambda *LambdaAction `locationName:"lambda" type:"structure"`

	// The Amazon Location Service rule action sends device location updates from
	// an MQTT message to an Amazon Location tracker resource.
	Location *LocationAction `locationName:"location" type:"structure"`

	// Write data to an Amazon OpenSearch Service domain.
	OpenSearch *OpenSearchAction `locationName:"openSearch" type:"structure"`

	// Publish to another MQTT topic.
	Republish *RepublishAction `locationName:"republish" type:"structure"`

	// Write to an Amazon S3 bucket.
	S3 *S3Action `locationName:"s3" type:"structure"`

	// Send a message to a Salesforce IoT Cloud Input Stream.
	Salesforce *SalesforceAction `locationName:"salesforce" type:"structure"`

	// Publish to an Amazon SNS topic.
	Sns *SnsAction `locationName:"sns" type:"structure"`

	// Publish to an Amazon SQS queue.
	Sqs *SqsAction `locationName:"sqs" type:"structure"`

	// Starts execution of a Step Functions state machine.
	StepFunctions *StepFunctionsAction `locationName:"stepFunctions" type:"structure"`

	// The Timestream rule action writes attributes (measures) from an MQTT message
	// into an Amazon Timestream table. For more information, see the Timestream
	// (https://docs.aws.amazon.com/iot/latest/developerguide/timestream-rule-action.html)
	// topic rule action documentation.
	Timestream *TimestreamAction `locationName:"timestream" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Action) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Action) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Action) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Action"}
	if s.CloudwatchAlarm != nil {
		if err := s.CloudwatchAlarm.Validate(); err != nil {
			invalidParams.AddNested("CloudwatchAlarm", err.(request.ErrInvalidParams))
		}
	}
	if s.CloudwatchLogs != nil {
		if err := s.CloudwatchLogs.Validate(); err != nil {
			invalidParams.AddNested("CloudwatchLogs", err.(request.ErrInvalidParams))
		}
	}
	if s.CloudwatchMetric != nil {
		if err := s.CloudwatchMetric.Validate(); err != nil {
			invalidParams.AddNested("CloudwatchMetric", err.(request.ErrInvalidParams))
		}
	}
	if s.DynamoDB != nil {
		if err := s.DynamoDB.Validate(); err != nil {
			invalidParams.AddNested("DynamoDB", err.(request.ErrInvalidParams))
		}
	}
	if s.DynamoDBv2 != nil {
		if err := s.DynamoDBv2.Validate(); err != nil {
			invalidParams.AddNested("DynamoDBv2", err.(request.ErrInvalidParams))
		}
	}
	if s.Elasticsearch != nil {
		if err := s.Elasticsearch.Validate(); err != nil {
			invalidParams.AddNested("Elasticsearch", err.(request.ErrInvalidParams))
		}
	}
	if s.Firehose != nil {
		if err := s.Firehose.Validate(); err != nil {
			invalidParams.AddNested("Firehose", err.(request.ErrInvalidParams))
		}
	}
	if s.Http != nil {
		if err := s.Http.Validate(); err != nil {
			invalidParams.AddNested("Http", err.(request.ErrInvalidParams))
		}
	}
	if s.IotEvents != nil {
		if err := s.IotEvents.Validate(); err != nil {
			invalidParams.AddNested("IotEvents", err.(request.ErrInvalidParams))
		}
	}
	if s.IotSiteWise != nil {
		if err := s.IotSiteWise.Validate(); err != nil {
			invalidParams.AddNested("IotSiteWise", err.(request.ErrInvalidParams))
		}
	}
	if s.Kafka != nil {
		if err := s.Kafka.Validate(); err != nil {
			invalidParams.AddNested("Kafka", err.(request.ErrInvalidParams))
		}
	}
	if s.Kinesis != nil {
		if err := s.Kinesis.Validate(); err != nil {
			invalidParams.AddNested("Kinesis", err.(request.ErrInvalidParams))
		}
	}
	if s.Lambda != nil {
		if err := s.Lambda.Validate(); err != nil {
			invalidParams.AddNested("Lambda", err.(request.ErrInvalidParams))
		}
	}
	if s.Location != nil {
		if err := s.Location.Validate(); err != nil {
			invalidParams.AddNested("Location", err.(request.ErrInvalidParams))
		}
	}
	if s.OpenSearch != nil {
		if err := s.OpenSearch.Validate(); err != nil {
			invalidParams.AddNested("OpenSearch", err.(request.ErrInvalidParams))
		}
	}
	if s.Republish != nil {
		if err := s.Republish.Validate(); err != nil {
			invalidParams.AddNested("Republish", err.(request.ErrInvalidParams))
		}
	}
	if s.S3 != nil {
		if err := s.S3.Validate(); err != nil {
			invalidParams.AddNested("S3", err.(request.ErrInvalidParams))
		}
	}
	if s.Salesforce != nil {
		if err := s.Salesforce.Validate(); err != nil {
			invalidParams.AddNested("Salesforce", err.(request.ErrInvalidParams))
		}
	}
	if s.Sns != nil {
		if err := s.Sns.Validate(); err != nil {
			invalidParams.AddNested("Sns", err.(request.ErrInvalidParams))
		}
	}
	if s.Sqs != nil {
		if err := s.Sqs.Validate(); err != nil {
			invalidParams.AddNested("Sqs", err.(request.ErrInvalidParams))
		}
	}
	if s.StepFunctions != nil {
		if err := s.StepFunctions.Validate(); err != nil {
			invalidParams.AddNested("StepFunctions", err.(request.ErrInvalidParams))
		}
	}
	if s.Timestream != nil {
		if err := s.Timestream.Validate(); err != nil {
			invalidParams.AddNested("Timestream", err.(request.ErrInvalidParams))
		}
	}

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

// SetCloudwatchAlarm sets the CloudwatchAlarm field's value.
func (s *Action) SetCloudwatchAlarm(v *CloudwatchAlarmAction) *Action {
	s.CloudwatchAlarm = v
	return s
}

// SetCloudwatchLogs sets the CloudwatchLogs field's value.
func (s *Action) SetCloudwatchLogs(v *CloudwatchLogsAction) *Action {
	s.CloudwatchLogs = v
	return s
}

// SetCloudwatchMetric sets the CloudwatchMetric field's value.
func (s *Action) SetCloudwatchMetric(v *CloudwatchMetricAction) *Action {
	s.CloudwatchMetric = v
	return s
}

// SetDynamoDB sets the DynamoDB field's value.
func (s *Action) SetDynamoDB(v *DynamoDBAction) *Action {
	s.DynamoDB = v
	return s
}

// SetDynamoDBv2 sets the DynamoDBv2 field's value.
func (s *Action) SetDynamoDBv2(v *DynamoDBv2Action) *Action {
	s.DynamoDBv2 = v
	return s
}

// SetElasticsearch sets the Elasticsearch field's value.
func (s *Action) SetElasticsearch(v *ElasticsearchAction) *Action {
	s.Elasticsearch = v
	return s
}

// SetFirehose sets the Firehose field's value.
func (s *Action) SetFirehose(v *FirehoseAction) *Action {
	s.Firehose = v
	return s
}

// SetHttp sets the Http field's value.
func (s *Action) SetHttp(v *HttpAction) *Action {
	s.Http = v
	return s
}

// SetIotAnalytics sets the IotAnalytics field's value.
func (s *Action) SetIotAnalytics(v *IotAnalyticsAction) *Action {
	s.IotAnalytics = v
	return s
}

// SetIotEvents sets the IotEvents field's value.
func (s *Action) SetIotEvents(v *IotEventsAction) *Action {
	s.IotEvents = v
	return s
}

// SetIotSiteWise sets the IotSiteWise field's value.
func (s *Action) SetIotSiteWise(v *IotSiteWiseAction) *Action {
	s.IotSiteWise = v
	return s
}

// SetKafka sets the Kafka field's value.
func (s *Action) SetKafka(v *KafkaAction) *Action {
	s.Kafka = v
	return s
}

// SetKinesis sets the Kinesis field's value.
func (s *Action) SetKinesis(v *KinesisAction) *Action {
	s.Kinesis = v
	return s
}

// SetLambda sets the Lambda field's value.
func (s *Action) SetLambda(v *LambdaAction) *Action {
	s.Lambda = v
	return s
}

// SetLocation sets the Location field's value.
func (s *Action) SetLocation(v *LocationAction) *Action {
	s.Location = v
	return s
}

// SetOpenSearch sets the OpenSearch field's value.
func (s *Action) SetOpenSearch(v *OpenSearchAction) *Action {
	s.OpenSearch = v
	return s
}

// SetRepublish sets the Republish field's value.
func (s *Action) SetRepublish(v *RepublishAction) *Action {
	s.Republish = v
	return s
}

// SetS3 sets the S3 field's value.
func (s *Action) SetS3(v *S3Action) *Action {
	s.S3 = v
	return s
}

// SetSalesforce sets the Salesforce field's value.
func (s *Action) SetSalesforce(v *SalesforceAction) *Action {
	s.Salesforce = v
	return s
}

// SetSns sets the Sns field's value.
func (s *Action) SetSns(v *SnsAction) *Action {
	s.Sns = v
	return s
}

// SetSqs sets the Sqs field's value.
func (s *Action) SetSqs(v *SqsAction) *Action {
	s.Sqs = v
	return s
}

// SetStepFunctions sets the StepFunctions field's value.
func (s *Action) SetStepFunctions(v *StepFunctionsAction) *Action {
	s.StepFunctions = v
	return s
}

// SetTimestream sets the Timestream field's value.
func (s *Action) SetTimestream(v *TimestreamAction) *Action {
	s.Timestream = v
	return s
}

// Information about an active Device Defender security profile behavior violation.
type ActiveViolation struct {
	_ struct{} `type:"structure"`

	// The behavior that is being violated.
	Behavior *Behavior `locationName:"behavior" type:"structure"`

	// The time the most recent violation occurred.
	LastViolationTime *time.Time `locationName:"lastViolationTime" type:"timestamp"`

	// The value of the metric (the measurement) that caused the most recent violation.
	LastViolationValue *MetricValue `locationName:"lastViolationValue" type:"structure"`

	// The security profile with the behavior is in violation.
	SecurityProfileName *string `locationName:"securityProfileName" min:"1" type:"string"`

	// The name of the thing responsible for the active violation.
	ThingName *string `locationName:"thingName" min:"1" type:"string"`

	// The verification state of the violation (detect alarm).
	VerificationState *string `locationName:"verificationState" type:"string" enum:"VerificationState"`

	// The description of the verification state of the violation.
	VerificationStateDescription *string `locationName:"verificationStateDescription" type:"string"`

	// The details of a violation event.
	ViolationEventAdditionalInfo *ViolationEventAdditionalInfo `locationName:"violationEventAdditionalInfo" type:"structure"`

	// The ID of the active violation.
	ViolationId *string `locationName:"violationId" min:"1" type:"string"`

	// The time the violation started.
	ViolationStartTime *time.Time `locationName:"violationStartTime" type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ActiveViolation) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ActiveViolation) GoString() string {
	return s.String()
}

// SetBehavior sets the Behavior field's value.
func (s *ActiveViolation) SetBehavior(v *Behavior) *ActiveViolation {
	s.Behavior = v
	return s
}

// SetLastViolationTime sets the LastViolationTime field's value.
func (s *ActiveViolation) SetLastViolationTime(v time.Time) *ActiveViolation {
	s.LastViolationTime = &v
	return s
}

// SetLastViolationValue sets the LastViolationValue field's value.
func (s *ActiveViolation) SetLastViolationValue(v *MetricValue) *ActiveViolation {
	s.LastViolationValue = v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *ActiveViolation) SetSecurityProfileName(v string) *ActiveViolation {
	s.SecurityProfileName = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *ActiveViolation) SetThingName(v string) *ActiveViolation {
	s.ThingName = &v
	return s
}

// SetVerificationState sets the VerificationState field's value.
func (s *ActiveViolation) SetVerificationState(v string) *ActiveViolation {
	s.VerificationState = &v
	return s
}

// SetVerificationStateDescription sets the VerificationStateDescription field's value.
func (s *ActiveViolation) SetVerificationStateDescription(v string) *ActiveViolation {
	s.VerificationStateDescription = &v
	return s
}

// SetViolationEventAdditionalInfo sets the ViolationEventAdditionalInfo field's value.
func (s *ActiveViolation) SetViolationEventAdditionalInfo(v *ViolationEventAdditionalInfo) *ActiveViolation {
	s.ViolationEventAdditionalInfo = v
	return s
}

// SetViolationId sets the ViolationId field's value.
func (s *ActiveViolation) SetViolationId(v string) *ActiveViolation {
	s.ViolationId = &v
	return s
}

// SetViolationStartTime sets the ViolationStartTime field's value.
func (s *ActiveViolation) SetViolationStartTime(v time.Time) *ActiveViolation {
	s.ViolationStartTime = &v
	return s
}

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

	// The ARN of the billing group.
	BillingGroupArn *string `locationName:"billingGroupArn" type:"string"`

	// The name of the billing group.
	//
	// This call is asynchronous. It might take several seconds for the detachment
	// to propagate.
	BillingGroupName *string `locationName:"billingGroupName" min:"1" type:"string"`

	// The ARN of the thing to be added to the billing group.
	ThingArn *string `locationName:"thingArn" type:"string"`

	// The name of the thing to be added to the billing group.
	ThingName *string `locationName:"thingName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AddThingToBillingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AddThingToBillingGroupInput) GoString() string {
	return s.String()
}

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

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

// SetBillingGroupArn sets the BillingGroupArn field's value.
func (s *AddThingToBillingGroupInput) SetBillingGroupArn(v string) *AddThingToBillingGroupInput {
	s.BillingGroupArn = &v
	return s
}

// SetBillingGroupName sets the BillingGroupName field's value.
func (s *AddThingToBillingGroupInput) SetBillingGroupName(v string) *AddThingToBillingGroupInput {
	s.BillingGroupName = &v
	return s
}

// SetThingArn sets the ThingArn field's value.
func (s *AddThingToBillingGroupInput) SetThingArn(v string) *AddThingToBillingGroupInput {
	s.ThingArn = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *AddThingToBillingGroupInput) SetThingName(v string) *AddThingToBillingGroupInput {
	s.ThingName = &v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AddThingToBillingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AddThingToBillingGroupOutput) GoString() string {
	return s.String()
}

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

	// Override dynamic thing groups with static thing groups when 10-group limit
	// is reached. If a thing belongs to 10 thing groups, and one or more of those
	// groups are dynamic thing groups, adding a thing to a static group removes
	// the thing from the last dynamic group.
	OverrideDynamicGroups *bool `locationName:"overrideDynamicGroups" type:"boolean"`

	// The ARN of the thing to add to a group.
	ThingArn *string `locationName:"thingArn" type:"string"`

	// The ARN of the group to which you are adding a thing.
	ThingGroupArn *string `locationName:"thingGroupArn" type:"string"`

	// The name of the group to which you are adding a thing.
	ThingGroupName *string `locationName:"thingGroupName" min:"1" type:"string"`

	// The name of the thing to add to a group.
	ThingName *string `locationName:"thingName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AddThingToThingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AddThingToThingGroupInput) GoString() string {
	return s.String()
}

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

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

// SetOverrideDynamicGroups sets the OverrideDynamicGroups field's value.
func (s *AddThingToThingGroupInput) SetOverrideDynamicGroups(v bool) *AddThingToThingGroupInput {
	s.OverrideDynamicGroups = &v
	return s
}

// SetThingArn sets the ThingArn field's value.
func (s *AddThingToThingGroupInput) SetThingArn(v string) *AddThingToThingGroupInput {
	s.ThingArn = &v
	return s
}

// SetThingGroupArn sets the ThingGroupArn field's value.
func (s *AddThingToThingGroupInput) SetThingGroupArn(v string) *AddThingToThingGroupInput {
	s.ThingGroupArn = &v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *AddThingToThingGroupInput) SetThingGroupName(v string) *AddThingToThingGroupInput {
	s.ThingGroupName = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *AddThingToThingGroupInput) SetThingName(v string) *AddThingToThingGroupInput {
	s.ThingName = &v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AddThingToThingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AddThingToThingGroupOutput) GoString() string {
	return s.String()
}

// Parameters used when defining a mitigation action that move a set of things
// to a thing group.
type AddThingsToThingGroupParams struct {
	_ struct{} `type:"structure"`

	// Specifies if this mitigation action can move the things that triggered the
	// mitigation action even if they are part of one or more dynamic thing groups.
	OverrideDynamicGroups *bool `locationName:"overrideDynamicGroups" type:"boolean"`

	// The list of groups to which you want to add the things that triggered the
	// mitigation action. You can add a thing to a maximum of 10 groups, but you
	// can't add a thing to more than one group in the same hierarchy.
	//
	// ThingGroupNames is a required field
	ThingGroupNames []*string `locationName:"thingGroupNames" min:"1" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AddThingsToThingGroupParams) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AddThingsToThingGroupParams) GoString() string {
	return s.String()
}

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

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

// SetOverrideDynamicGroups sets the OverrideDynamicGroups field's value.
func (s *AddThingsToThingGroupParams) SetOverrideDynamicGroups(v bool) *AddThingsToThingGroupParams {
	s.OverrideDynamicGroups = &v
	return s
}

// SetThingGroupNames sets the ThingGroupNames field's value.
func (s *AddThingsToThingGroupParams) SetThingGroupNames(v []*string) *AddThingsToThingGroupParams {
	s.ThingGroupNames = v
	return s
}

// The type of aggregation queries.
type AggregationType struct {
	_ struct{} `type:"structure"`

	// The name of the aggregation type.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true" enum:"AggregationTypeName"`

	// A list of the values of aggregation types.
	Values []*string `locationName:"values" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AggregationType) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AggregationType) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AggregationType) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AggregationType"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}

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

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

// SetValues sets the Values field's value.
func (s *AggregationType) SetValues(v []*string) *AggregationType {
	s.Values = v
	return s
}

// A structure containing the alert target ARN and the role ARN.
type AlertTarget struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the notification target to which alerts
	// are sent.
	//
	// AlertTargetArn is a required field
	AlertTargetArn *string `locationName:"alertTargetArn" type:"string" required:"true"`

	// The ARN of the role that grants permission to send alerts to the notification
	// target.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" min:"20" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AlertTarget) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AlertTarget) GoString() string {
	return s.String()
}

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

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

// SetAlertTargetArn sets the AlertTargetArn field's value.
func (s *AlertTarget) SetAlertTargetArn(v string) *AlertTarget {
	s.AlertTargetArn = &v
	return s
}

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

// Contains information that allowed the authorization.
type Allowed struct {
	_ struct{} `type:"structure"`

	// A list of policies that allowed the authentication.
	Policies []*Policy `locationName:"policies" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Allowed) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Allowed) GoString() string {
	return s.String()
}

// SetPolicies sets the Policies field's value.
func (s *Allowed) SetPolicies(v []*Policy) *Allowed {
	s.Policies = v
	return s
}

// An asset property timestamp entry containing the following information.
type AssetPropertyTimestamp struct {
	_ struct{} `type:"structure"`

	// Optional. A string that contains the nanosecond time offset. Accepts substitution
	// templates.
	OffsetInNanos *string `locationName:"offsetInNanos" type:"string"`

	// A string that contains the time in seconds since epoch. Accepts substitution
	// templates.
	//
	// TimeInSeconds is a required field
	TimeInSeconds *string `locationName:"timeInSeconds" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AssetPropertyTimestamp) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AssetPropertyTimestamp) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AssetPropertyTimestamp) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AssetPropertyTimestamp"}
	if s.TimeInSeconds == nil {
		invalidParams.Add(request.NewErrParamRequired("TimeInSeconds"))
	}

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

// SetOffsetInNanos sets the OffsetInNanos field's value.
func (s *AssetPropertyTimestamp) SetOffsetInNanos(v string) *AssetPropertyTimestamp {
	s.OffsetInNanos = &v
	return s
}

// SetTimeInSeconds sets the TimeInSeconds field's value.
func (s *AssetPropertyTimestamp) SetTimeInSeconds(v string) *AssetPropertyTimestamp {
	s.TimeInSeconds = &v
	return s
}

// An asset property value entry containing the following information.
type AssetPropertyValue struct {
	_ struct{} `type:"structure"`

	// Optional. A string that describes the quality of the value. Accepts substitution
	// templates. Must be GOOD, BAD, or UNCERTAIN.
	Quality *string `locationName:"quality" type:"string"`

	// The asset property value timestamp.
	//
	// Timestamp is a required field
	Timestamp *AssetPropertyTimestamp `locationName:"timestamp" type:"structure" required:"true"`

	// The value of the asset property.
	//
	// Value is a required field
	Value *AssetPropertyVariant `locationName:"value" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AssetPropertyValue) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AssetPropertyValue) GoString() string {
	return s.String()
}

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

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

// SetQuality sets the Quality field's value.
func (s *AssetPropertyValue) SetQuality(v string) *AssetPropertyValue {
	s.Quality = &v
	return s
}

// SetTimestamp sets the Timestamp field's value.
func (s *AssetPropertyValue) SetTimestamp(v *AssetPropertyTimestamp) *AssetPropertyValue {
	s.Timestamp = v
	return s
}

// SetValue sets the Value field's value.
func (s *AssetPropertyValue) SetValue(v *AssetPropertyVariant) *AssetPropertyValue {
	s.Value = v
	return s
}

// Contains an asset property value (of a single type).
type AssetPropertyVariant struct {
	_ struct{} `type:"structure"`

	// Optional. A string that contains the boolean value (true or false) of the
	// value entry. Accepts substitution templates.
	BooleanValue *string `locationName:"booleanValue" type:"string"`

	// Optional. A string that contains the double value of the value entry. Accepts
	// substitution templates.
	DoubleValue *string `locationName:"doubleValue" type:"string"`

	// Optional. A string that contains the integer value of the value entry. Accepts
	// substitution templates.
	IntegerValue *string `locationName:"integerValue" type:"string"`

	// Optional. The string value of the value entry. Accepts substitution templates.
	StringValue *string `locationName:"stringValue" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AssetPropertyVariant) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AssetPropertyVariant) GoString() string {
	return s.String()
}

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

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

// SetBooleanValue sets the BooleanValue field's value.
func (s *AssetPropertyVariant) SetBooleanValue(v string) *AssetPropertyVariant {
	s.BooleanValue = &v
	return s
}

// SetDoubleValue sets the DoubleValue field's value.
func (s *AssetPropertyVariant) SetDoubleValue(v string) *AssetPropertyVariant {
	s.DoubleValue = &v
	return s
}

// SetIntegerValue sets the IntegerValue field's value.
func (s *AssetPropertyVariant) SetIntegerValue(v string) *AssetPropertyVariant {
	s.IntegerValue = &v
	return s
}

// SetStringValue sets the StringValue field's value.
func (s *AssetPropertyVariant) SetStringValue(v string) *AssetPropertyVariant {
	s.StringValue = &v
	return s
}

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

	// An optional comment string describing why the job was associated with the
	// targets.
	Comment *string `locationName:"comment" type:"string"`

	// The unique identifier you assigned to this job when it was created.
	//
	// JobId is a required field
	JobId *string `location:"uri" locationName:"jobId" min:"1" type:"string" required:"true"`

	// The namespace used to indicate that a job is a customer-managed job.
	//
	// When you specify a value for this parameter, Amazon Web Services IoT Core
	// sends jobs notifications to MQTT topics that contain the value in the following
	// format.
	//
	// $aws/things/THING_NAME/jobs/JOB_ID/notify-namespace-NAMESPACE_ID/
	//
	// The namespaceId feature is only supported by IoT Greengrass at this time.
	// For more information, see Setting up IoT Greengrass core devices. (https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html)
	NamespaceId *string `location:"querystring" locationName:"namespaceId" type:"string"`

	// A list of thing group ARNs that define the targets of the job.
	//
	// Targets is a required field
	Targets []*string `locationName:"targets" min:"1" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AssociateTargetsWithJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AssociateTargetsWithJobInput) GoString() string {
	return s.String()
}

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

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

// SetComment sets the Comment field's value.
func (s *AssociateTargetsWithJobInput) SetComment(v string) *AssociateTargetsWithJobInput {
	s.Comment = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *AssociateTargetsWithJobInput) SetJobId(v string) *AssociateTargetsWithJobInput {
	s.JobId = &v
	return s
}

// SetNamespaceId sets the NamespaceId field's value.
func (s *AssociateTargetsWithJobInput) SetNamespaceId(v string) *AssociateTargetsWithJobInput {
	s.NamespaceId = &v
	return s
}

// SetTargets sets the Targets field's value.
func (s *AssociateTargetsWithJobInput) SetTargets(v []*string) *AssociateTargetsWithJobInput {
	s.Targets = v
	return s
}

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

	// A short text description of the job.
	Description *string `locationName:"description" type:"string"`

	// An ARN identifying the job.
	JobArn *string `locationName:"jobArn" type:"string"`

	// The unique identifier you assigned to this job when it was created.
	JobId *string `locationName:"jobId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AssociateTargetsWithJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AssociateTargetsWithJobOutput) GoString() string {
	return s.String()
}

// SetDescription sets the Description field's value.
func (s *AssociateTargetsWithJobOutput) SetDescription(v string) *AssociateTargetsWithJobOutput {
	s.Description = &v
	return s
}

// SetJobArn sets the JobArn field's value.
func (s *AssociateTargetsWithJobOutput) SetJobArn(v string) *AssociateTargetsWithJobOutput {
	s.JobArn = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *AssociateTargetsWithJobOutput) SetJobId(v string) *AssociateTargetsWithJobOutput {
	s.JobId = &v
	return s
}

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

	// The name of the policy to attach.
	//
	// PolicyName is a required field
	PolicyName *string `location:"uri" locationName:"policyName" min:"1" type:"string" required:"true"`

	// The identity (https://docs.aws.amazon.com/iot/latest/developerguide/security-iam.html)
	// to which the policy is attached. For example, a thing group or a certificate.
	//
	// Target is a required field
	Target *string `locationName:"target" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachPolicyInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachPolicyInput) GoString() string {
	return s.String()
}

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

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

// SetPolicyName sets the PolicyName field's value.
func (s *AttachPolicyInput) SetPolicyName(v string) *AttachPolicyInput {
	s.PolicyName = &v
	return s
}

// SetTarget sets the Target field's value.
func (s *AttachPolicyInput) SetTarget(v string) *AttachPolicyInput {
	s.Target = &v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachPolicyOutput) GoString() string {
	return s.String()
}

// The input for the AttachPrincipalPolicy operation.
type AttachPrincipalPolicyInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The policy name.
	//
	// PolicyName is a required field
	PolicyName *string `location:"uri" locationName:"policyName" min:"1" type:"string" required:"true"`

	// The principal, which can be a certificate ARN (as returned from the CreateCertificate
	// operation) or an Amazon Cognito ID.
	//
	// Principal is a required field
	Principal *string `location:"header" locationName:"x-amzn-iot-principal" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachPrincipalPolicyInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachPrincipalPolicyInput) GoString() string {
	return s.String()
}

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

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

// SetPolicyName sets the PolicyName field's value.
func (s *AttachPrincipalPolicyInput) SetPolicyName(v string) *AttachPrincipalPolicyInput {
	s.PolicyName = &v
	return s
}

// SetPrincipal sets the Principal field's value.
func (s *AttachPrincipalPolicyInput) SetPrincipal(v string) *AttachPrincipalPolicyInput {
	s.Principal = &v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachPrincipalPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachPrincipalPolicyOutput) GoString() string {
	return s.String()
}

type AttachSecurityProfileInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The security profile that is attached.
	//
	// SecurityProfileName is a required field
	SecurityProfileName *string `location:"uri" locationName:"securityProfileName" min:"1" type:"string" required:"true"`

	// The ARN of the target (thing group) to which the security profile is attached.
	//
	// SecurityProfileTargetArn is a required field
	SecurityProfileTargetArn *string `location:"querystring" locationName:"securityProfileTargetArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachSecurityProfileInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachSecurityProfileInput) GoString() string {
	return s.String()
}

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

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

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *AttachSecurityProfileInput) SetSecurityProfileName(v string) *AttachSecurityProfileInput {
	s.SecurityProfileName = &v
	return s
}

// SetSecurityProfileTargetArn sets the SecurityProfileTargetArn field's value.
func (s *AttachSecurityProfileInput) SetSecurityProfileTargetArn(v string) *AttachSecurityProfileInput {
	s.SecurityProfileTargetArn = &v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachSecurityProfileOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachSecurityProfileOutput) GoString() string {
	return s.String()
}

// The input for the AttachThingPrincipal operation.
type AttachThingPrincipalInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The principal, which can be a certificate ARN (as returned from the CreateCertificate
	// operation) or an Amazon Cognito ID.
	//
	// Principal is a required field
	Principal *string `location:"header" locationName:"x-amzn-principal" type:"string" required:"true"`

	// The name of the thing.
	//
	// ThingName is a required field
	ThingName *string `location:"uri" locationName:"thingName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachThingPrincipalInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachThingPrincipalInput) GoString() string {
	return s.String()
}

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

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

// SetPrincipal sets the Principal field's value.
func (s *AttachThingPrincipalInput) SetPrincipal(v string) *AttachThingPrincipalInput {
	s.Principal = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *AttachThingPrincipalInput) SetThingName(v string) *AttachThingPrincipalInput {
	s.ThingName = &v
	return s
}

// The output from the AttachThingPrincipal operation.
type AttachThingPrincipalOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachThingPrincipalOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttachThingPrincipalOutput) GoString() string {
	return s.String()
}

// The attribute payload.
type AttributePayload struct {
	_ struct{} `type:"structure"`

	// A JSON string containing up to three key-value pair in JSON format. For example:
	//
	// {\"attributes\":{\"string1\":\"string2\"}}
	Attributes map[string]*string `locationName:"attributes" type:"map"`

	// Specifies whether the list of attributes provided in the AttributePayload
	// is merged with the attributes stored in the registry, instead of overwriting
	// them.
	//
	// To remove an attribute, call UpdateThing with an empty attribute value.
	//
	// The merge attribute is only valid when calling UpdateThing or UpdateThingGroup.
	Merge *bool `locationName:"merge" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttributePayload) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AttributePayload) GoString() string {
	return s.String()
}

// SetAttributes sets the Attributes field's value.
func (s *AttributePayload) SetAttributes(v map[string]*string) *AttributePayload {
	s.Attributes = v
	return s
}

// SetMerge sets the Merge field's value.
func (s *AttributePayload) SetMerge(v bool) *AttributePayload {
	s.Merge = &v
	return s
}

// Which audit checks are enabled and disabled for this account.
type AuditCheckConfiguration struct {
	_ struct{} `type:"structure"`

	// True if this audit check is enabled for this account.
	Enabled *bool `locationName:"enabled" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditCheckConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditCheckConfiguration) GoString() string {
	return s.String()
}

// SetEnabled sets the Enabled field's value.
func (s *AuditCheckConfiguration) SetEnabled(v bool) *AuditCheckConfiguration {
	s.Enabled = &v
	return s
}

// Information about the audit check.
type AuditCheckDetails struct {
	_ struct{} `type:"structure"`

	// True if the check is complete and found all resources compliant.
	CheckCompliant *bool `locationName:"checkCompliant" type:"boolean"`

	// The completion status of this check. One of "IN_PROGRESS", "WAITING_FOR_DATA_COLLECTION",
	// "CANCELED", "COMPLETED_COMPLIANT", "COMPLETED_NON_COMPLIANT", or "FAILED".
	CheckRunStatus *string `locationName:"checkRunStatus" type:"string" enum:"AuditCheckRunStatus"`

	// The code of any error encountered when this check is performed during this
	// audit. One of "INSUFFICIENT_PERMISSIONS" or "AUDIT_CHECK_DISABLED".
	ErrorCode *string `locationName:"errorCode" type:"string"`

	// The message associated with any error encountered when this check is performed
	// during this audit.
	Message *string `locationName:"message" type:"string"`

	// The number of resources that were found noncompliant during the check.
	NonCompliantResourcesCount *int64 `locationName:"nonCompliantResourcesCount" type:"long"`

	// Describes how many of the non-compliant resources created during the evaluation
	// of an audit check were marked as suppressed.
	SuppressedNonCompliantResourcesCount *int64 `locationName:"suppressedNonCompliantResourcesCount" type:"long"`

	// The number of resources on which the check was performed.
	TotalResourcesCount *int64 `locationName:"totalResourcesCount" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditCheckDetails) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditCheckDetails) GoString() string {
	return s.String()
}

// SetCheckCompliant sets the CheckCompliant field's value.
func (s *AuditCheckDetails) SetCheckCompliant(v bool) *AuditCheckDetails {
	s.CheckCompliant = &v
	return s
}

// SetCheckRunStatus sets the CheckRunStatus field's value.
func (s *AuditCheckDetails) SetCheckRunStatus(v string) *AuditCheckDetails {
	s.CheckRunStatus = &v
	return s
}

// SetErrorCode sets the ErrorCode field's value.
func (s *AuditCheckDetails) SetErrorCode(v string) *AuditCheckDetails {
	s.ErrorCode = &v
	return s
}

// SetMessage sets the Message field's value.
func (s *AuditCheckDetails) SetMessage(v string) *AuditCheckDetails {
	s.Message = &v
	return s
}

// SetNonCompliantResourcesCount sets the NonCompliantResourcesCount field's value.
func (s *AuditCheckDetails) SetNonCompliantResourcesCount(v int64) *AuditCheckDetails {
	s.NonCompliantResourcesCount = &v
	return s
}

// SetSuppressedNonCompliantResourcesCount sets the SuppressedNonCompliantResourcesCount field's value.
func (s *AuditCheckDetails) SetSuppressedNonCompliantResourcesCount(v int64) *AuditCheckDetails {
	s.SuppressedNonCompliantResourcesCount = &v
	return s
}

// SetTotalResourcesCount sets the TotalResourcesCount field's value.
func (s *AuditCheckDetails) SetTotalResourcesCount(v int64) *AuditCheckDetails {
	s.TotalResourcesCount = &v
	return s
}

// The findings (results) of the audit.
type AuditFinding struct {
	_ struct{} `type:"structure"`

	// The audit check that generated this result.
	CheckName *string `locationName:"checkName" type:"string"`

	// A unique identifier for this set of audit findings. This identifier is used
	// to apply mitigation tasks to one or more sets of findings.
	FindingId *string `locationName:"findingId" min:"1" type:"string"`

	// The time the result (finding) was discovered.
	FindingTime *time.Time `locationName:"findingTime" type:"timestamp"`

	// Indicates whether the audit finding was suppressed or not during reporting.
	IsSuppressed *bool `locationName:"isSuppressed" type:"boolean"`

	// The resource that was found to be noncompliant with the audit check.
	NonCompliantResource *NonCompliantResource `locationName:"nonCompliantResource" type:"structure"`

	// The reason the resource was noncompliant.
	ReasonForNonCompliance *string `locationName:"reasonForNonCompliance" type:"string"`

	// A code that indicates the reason that the resource was noncompliant.
	ReasonForNonComplianceCode *string `locationName:"reasonForNonComplianceCode" type:"string"`

	// The list of related resources.
	RelatedResources []*RelatedResource `locationName:"relatedResources" type:"list"`

	// The severity of the result (finding).
	Severity *string `locationName:"severity" type:"string" enum:"AuditFindingSeverity"`

	// The ID of the audit that generated this result (finding).
	TaskId *string `locationName:"taskId" min:"1" type:"string"`

	// The time the audit started.
	TaskStartTime *time.Time `locationName:"taskStartTime" type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditFinding) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditFinding) GoString() string {
	return s.String()
}

// SetCheckName sets the CheckName field's value.
func (s *AuditFinding) SetCheckName(v string) *AuditFinding {
	s.CheckName = &v
	return s
}

// SetFindingId sets the FindingId field's value.
func (s *AuditFinding) SetFindingId(v string) *AuditFinding {
	s.FindingId = &v
	return s
}

// SetFindingTime sets the FindingTime field's value.
func (s *AuditFinding) SetFindingTime(v time.Time) *AuditFinding {
	s.FindingTime = &v
	return s
}

// SetIsSuppressed sets the IsSuppressed field's value.
func (s *AuditFinding) SetIsSuppressed(v bool) *AuditFinding {
	s.IsSuppressed = &v
	return s
}

// SetNonCompliantResource sets the NonCompliantResource field's value.
func (s *AuditFinding) SetNonCompliantResource(v *NonCompliantResource) *AuditFinding {
	s.NonCompliantResource = v
	return s
}

// SetReasonForNonCompliance sets the ReasonForNonCompliance field's value.
func (s *AuditFinding) SetReasonForNonCompliance(v string) *AuditFinding {
	s.ReasonForNonCompliance = &v
	return s
}

// SetReasonForNonComplianceCode sets the ReasonForNonComplianceCode field's value.
func (s *AuditFinding) SetReasonForNonComplianceCode(v string) *AuditFinding {
	s.ReasonForNonComplianceCode = &v
	return s
}

// SetRelatedResources sets the RelatedResources field's value.
func (s *AuditFinding) SetRelatedResources(v []*RelatedResource) *AuditFinding {
	s.RelatedResources = v
	return s
}

// SetSeverity sets the Severity field's value.
func (s *AuditFinding) SetSeverity(v string) *AuditFinding {
	s.Severity = &v
	return s
}

// SetTaskId sets the TaskId field's value.
func (s *AuditFinding) SetTaskId(v string) *AuditFinding {
	s.TaskId = &v
	return s
}

// SetTaskStartTime sets the TaskStartTime field's value.
func (s *AuditFinding) SetTaskStartTime(v time.Time) *AuditFinding {
	s.TaskStartTime = &v
	return s
}

// Returned by ListAuditMitigationActionsTask, this object contains information
// that describes a mitigation action that has been started.
type AuditMitigationActionExecutionMetadata struct {
	_ struct{} `type:"structure"`

	// The unique identifier for the mitigation action being applied by the task.
	ActionId *string `locationName:"actionId" type:"string"`

	// The friendly name of the mitigation action being applied by the task.
	ActionName *string `locationName:"actionName" type:"string"`

	// The date and time when the task was completed or canceled. Blank if the task
	// is still running.
	EndTime *time.Time `locationName:"endTime" type:"timestamp"`

	// If an error occurred, the code that indicates which type of error occurred.
	ErrorCode *string `locationName:"errorCode" type:"string"`

	// The unique identifier for the findings to which the task and associated mitigation
	// action are applied.
	FindingId *string `locationName:"findingId" min:"1" type:"string"`

	// If an error occurred, a message that describes the error.
	Message *string `locationName:"message" type:"string"`

	// The date and time when the task was started.
	StartTime *time.Time `locationName:"startTime" type:"timestamp"`

	// The current status of the task being executed.
	Status *string `locationName:"status" type:"string" enum:"AuditMitigationActionsExecutionStatus"`

	// The unique identifier for the task that applies the mitigation action.
	TaskId *string `locationName:"taskId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditMitigationActionExecutionMetadata) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditMitigationActionExecutionMetadata) GoString() string {
	return s.String()
}

// SetActionId sets the ActionId field's value.
func (s *AuditMitigationActionExecutionMetadata) SetActionId(v string) *AuditMitigationActionExecutionMetadata {
	s.ActionId = &v
	return s
}

// SetActionName sets the ActionName field's value.
func (s *AuditMitigationActionExecutionMetadata) SetActionName(v string) *AuditMitigationActionExecutionMetadata {
	s.ActionName = &v
	return s
}

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

// SetErrorCode sets the ErrorCode field's value.
func (s *AuditMitigationActionExecutionMetadata) SetErrorCode(v string) *AuditMitigationActionExecutionMetadata {
	s.ErrorCode = &v
	return s
}

// SetFindingId sets the FindingId field's value.
func (s *AuditMitigationActionExecutionMetadata) SetFindingId(v string) *AuditMitigationActionExecutionMetadata {
	s.FindingId = &v
	return s
}

// SetMessage sets the Message field's value.
func (s *AuditMitigationActionExecutionMetadata) SetMessage(v string) *AuditMitigationActionExecutionMetadata {
	s.Message = &v
	return s
}

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

// SetStatus sets the Status field's value.
func (s *AuditMitigationActionExecutionMetadata) SetStatus(v string) *AuditMitigationActionExecutionMetadata {
	s.Status = &v
	return s
}

// SetTaskId sets the TaskId field's value.
func (s *AuditMitigationActionExecutionMetadata) SetTaskId(v string) *AuditMitigationActionExecutionMetadata {
	s.TaskId = &v
	return s
}

// Information about an audit mitigation actions task that is returned by ListAuditMitigationActionsTasks.
type AuditMitigationActionsTaskMetadata struct {
	_ struct{} `type:"structure"`

	// The time at which the audit mitigation actions task was started.
	StartTime *time.Time `locationName:"startTime" type:"timestamp"`

	// The unique identifier for the task.
	TaskId *string `locationName:"taskId" min:"1" type:"string"`

	// The current state of the audit mitigation actions task.
	TaskStatus *string `locationName:"taskStatus" type:"string" enum:"AuditMitigationActionsTaskStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditMitigationActionsTaskMetadata) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditMitigationActionsTaskMetadata) GoString() string {
	return s.String()
}

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

// SetTaskId sets the TaskId field's value.
func (s *AuditMitigationActionsTaskMetadata) SetTaskId(v string) *AuditMitigationActionsTaskMetadata {
	s.TaskId = &v
	return s
}

// SetTaskStatus sets the TaskStatus field's value.
func (s *AuditMitigationActionsTaskMetadata) SetTaskStatus(v string) *AuditMitigationActionsTaskMetadata {
	s.TaskStatus = &v
	return s
}

// Used in MitigationActionParams, this information identifies the target findings
// to which the mitigation actions are applied. Only one entry appears.
type AuditMitigationActionsTaskTarget struct {
	_ struct{} `type:"structure"`

	// Specifies a filter in the form of an audit check and set of reason codes
	// that identify the findings from the audit to which the audit mitigation actions
	// task apply.
	AuditCheckToReasonCodeFilter map[string][]*string `locationName:"auditCheckToReasonCodeFilter" type:"map"`

	// If the task will apply a mitigation action to findings from a specific audit,
	// this value uniquely identifies the audit.
	AuditTaskId *string `locationName:"auditTaskId" min:"1" type:"string"`

	// If the task will apply a mitigation action to one or more listed findings,
	// this value uniquely identifies those findings.
	FindingIds []*string `locationName:"findingIds" min:"1" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditMitigationActionsTaskTarget) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditMitigationActionsTaskTarget) GoString() string {
	return s.String()
}

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

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

// SetAuditCheckToReasonCodeFilter sets the AuditCheckToReasonCodeFilter field's value.
func (s *AuditMitigationActionsTaskTarget) SetAuditCheckToReasonCodeFilter(v map[string][]*string) *AuditMitigationActionsTaskTarget {
	s.AuditCheckToReasonCodeFilter = v
	return s
}

// SetAuditTaskId sets the AuditTaskId field's value.
func (s *AuditMitigationActionsTaskTarget) SetAuditTaskId(v string) *AuditMitigationActionsTaskTarget {
	s.AuditTaskId = &v
	return s
}

// SetFindingIds sets the FindingIds field's value.
func (s *AuditMitigationActionsTaskTarget) SetFindingIds(v []*string) *AuditMitigationActionsTaskTarget {
	s.FindingIds = v
	return s
}

// Information about the targets to which audit notifications are sent.
type AuditNotificationTarget struct {
	_ struct{} `type:"structure"`

	// True if notifications to the target are enabled.
	Enabled *bool `locationName:"enabled" type:"boolean"`

	// The ARN of the role that grants permission to send notifications to the target.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`

	// The ARN of the target (SNS topic) to which audit notifications are sent.
	TargetArn *string `locationName:"targetArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditNotificationTarget) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditNotificationTarget) GoString() string {
	return s.String()
}

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

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

// SetEnabled sets the Enabled field's value.
func (s *AuditNotificationTarget) SetEnabled(v bool) *AuditNotificationTarget {
	s.Enabled = &v
	return s
}

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

// SetTargetArn sets the TargetArn field's value.
func (s *AuditNotificationTarget) SetTargetArn(v string) *AuditNotificationTarget {
	s.TargetArn = &v
	return s
}

// Filters out specific findings of a Device Defender audit.
type AuditSuppression struct {
	_ struct{} `type:"structure"`

	// An audit check name. Checks must be enabled for your account. (Use DescribeAccountAuditConfiguration
	// to see the list of all checks, including those that are enabled or use UpdateAccountAuditConfiguration
	// to select which checks are enabled.)
	//
	// CheckName is a required field
	CheckName *string `locationName:"checkName" type:"string" required:"true"`

	// The description of the audit suppression.
	Description *string `locationName:"description" type:"string"`

	// The expiration date (epoch timestamp in seconds) that you want the suppression
	// to adhere to.
	ExpirationDate *time.Time `locationName:"expirationDate" type:"timestamp"`

	// Information that identifies the noncompliant resource.
	//
	// ResourceIdentifier is a required field
	ResourceIdentifier *ResourceIdentifier `locationName:"resourceIdentifier" type:"structure" required:"true"`

	// Indicates whether a suppression should exist indefinitely or not.
	SuppressIndefinitely *bool `locationName:"suppressIndefinitely" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditSuppression) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditSuppression) GoString() string {
	return s.String()
}

// SetCheckName sets the CheckName field's value.
func (s *AuditSuppression) SetCheckName(v string) *AuditSuppression {
	s.CheckName = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *AuditSuppression) SetDescription(v string) *AuditSuppression {
	s.Description = &v
	return s
}

// SetExpirationDate sets the ExpirationDate field's value.
func (s *AuditSuppression) SetExpirationDate(v time.Time) *AuditSuppression {
	s.ExpirationDate = &v
	return s
}

// SetResourceIdentifier sets the ResourceIdentifier field's value.
func (s *AuditSuppression) SetResourceIdentifier(v *ResourceIdentifier) *AuditSuppression {
	s.ResourceIdentifier = v
	return s
}

// SetSuppressIndefinitely sets the SuppressIndefinitely field's value.
func (s *AuditSuppression) SetSuppressIndefinitely(v bool) *AuditSuppression {
	s.SuppressIndefinitely = &v
	return s
}

// The audits that were performed.
type AuditTaskMetadata struct {
	_ struct{} `type:"structure"`

	// The ID of this audit.
	TaskId *string `locationName:"taskId" min:"1" type:"string"`

	// The status of this audit. One of "IN_PROGRESS", "COMPLETED", "FAILED", or
	// "CANCELED".
	TaskStatus *string `locationName:"taskStatus" type:"string" enum:"AuditTaskStatus"`

	// The type of this audit. One of "ON_DEMAND_AUDIT_TASK" or "SCHEDULED_AUDIT_TASK".
	TaskType *string `locationName:"taskType" type:"string" enum:"AuditTaskType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditTaskMetadata) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuditTaskMetadata) GoString() string {
	return s.String()
}

// SetTaskId sets the TaskId field's value.
func (s *AuditTaskMetadata) SetTaskId(v string) *AuditTaskMetadata {
	s.TaskId = &v
	return s
}

// SetTaskStatus sets the TaskStatus field's value.
func (s *AuditTaskMetadata) SetTaskStatus(v string) *AuditTaskMetadata {
	s.TaskStatus = &v
	return s
}

// SetTaskType sets the TaskType field's value.
func (s *AuditTaskMetadata) SetTaskType(v string) *AuditTaskMetadata {
	s.TaskType = &v
	return s
}

// A collection of authorization information.
type AuthInfo struct {
	_ struct{} `type:"structure"`

	// The type of action for which the principal is being authorized.
	ActionType *string `locationName:"actionType" type:"string" enum:"ActionType"`

	// The resources for which the principal is being authorized to perform the
	// specified action.
	//
	// Resources is a required field
	Resources []*string `locationName:"resources" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuthInfo) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuthInfo) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AuthInfo) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AuthInfo"}
	if s.Resources == nil {
		invalidParams.Add(request.NewErrParamRequired("Resources"))
	}

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

// SetActionType sets the ActionType field's value.
func (s *AuthInfo) SetActionType(v string) *AuthInfo {
	s.ActionType = &v
	return s
}

// SetResources sets the Resources field's value.
func (s *AuthInfo) SetResources(v []*string) *AuthInfo {
	s.Resources = v
	return s
}

// The authorizer result.
type AuthResult struct {
	_ struct{} `type:"structure"`

	// The policies and statements that allowed the specified action.
	Allowed *Allowed `locationName:"allowed" type:"structure"`

	// The final authorization decision of this scenario. Multiple statements are
	// taken into account when determining the authorization decision. An explicit
	// deny statement can override multiple allow statements.
	AuthDecision *string `locationName:"authDecision" type:"string" enum:"AuthDecision"`

	// Authorization information.
	AuthInfo *AuthInfo `locationName:"authInfo" type:"structure"`

	// The policies and statements that denied the specified action.
	Denied *Denied `locationName:"denied" type:"structure"`

	// Contains any missing context values found while evaluating policy.
	MissingContextValues []*string `locationName:"missingContextValues" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuthResult) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuthResult) GoString() string {
	return s.String()
}

// SetAllowed sets the Allowed field's value.
func (s *AuthResult) SetAllowed(v *Allowed) *AuthResult {
	s.Allowed = v
	return s
}

// SetAuthDecision sets the AuthDecision field's value.
func (s *AuthResult) SetAuthDecision(v string) *AuthResult {
	s.AuthDecision = &v
	return s
}

// SetAuthInfo sets the AuthInfo field's value.
func (s *AuthResult) SetAuthInfo(v *AuthInfo) *AuthResult {
	s.AuthInfo = v
	return s
}

// SetDenied sets the Denied field's value.
func (s *AuthResult) SetDenied(v *Denied) *AuthResult {
	s.Denied = v
	return s
}

// SetMissingContextValues sets the MissingContextValues field's value.
func (s *AuthResult) SetMissingContextValues(v []*string) *AuthResult {
	s.MissingContextValues = v
	return s
}

// An object that specifies the authorization service for a domain.
type AuthorizerConfig struct {
	_ struct{} `type:"structure"`

	// A Boolean that specifies whether the domain configuration's authorization
	// service can be overridden.
	AllowAuthorizerOverride *bool `locationName:"allowAuthorizerOverride" type:"boolean"`

	// The name of the authorization service for a domain configuration.
	DefaultAuthorizerName *string `locationName:"defaultAuthorizerName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuthorizerConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuthorizerConfig) GoString() string {
	return s.String()
}

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

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

// SetAllowAuthorizerOverride sets the AllowAuthorizerOverride field's value.
func (s *AuthorizerConfig) SetAllowAuthorizerOverride(v bool) *AuthorizerConfig {
	s.AllowAuthorizerOverride = &v
	return s
}

// SetDefaultAuthorizerName sets the DefaultAuthorizerName field's value.
func (s *AuthorizerConfig) SetDefaultAuthorizerName(v string) *AuthorizerConfig {
	s.DefaultAuthorizerName = &v
	return s
}

// The authorizer description.
type AuthorizerDescription struct {
	_ struct{} `type:"structure"`

	// The authorizer ARN.
	AuthorizerArn *string `locationName:"authorizerArn" type:"string"`

	// The authorizer's Lambda function ARN.
	AuthorizerFunctionArn *string `locationName:"authorizerFunctionArn" type:"string"`

	// The authorizer name.
	AuthorizerName *string `locationName:"authorizerName" min:"1" type:"string"`

	// The UNIX timestamp of when the authorizer was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// When true, the result from the authorizer’s Lambda function is cached for
	// the time specified in refreshAfterInSeconds. The cached result is used while
	// the device reuses the same HTTP connection.
	EnableCachingForHttp *bool `locationName:"enableCachingForHttp" type:"boolean"`

	// The UNIX timestamp of when the authorizer was last updated.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// Specifies whether IoT validates the token signature in an authorization request.
	SigningDisabled *bool `locationName:"signingDisabled" type:"boolean"`

	// The status of the authorizer.
	Status *string `locationName:"status" type:"string" enum:"AuthorizerStatus"`

	// The key used to extract the token from the HTTP headers.
	TokenKeyName *string `locationName:"tokenKeyName" min:"1" type:"string"`

	// The public keys used to validate the token signature returned by your custom
	// authentication service.
	TokenSigningPublicKeys map[string]*string `locationName:"tokenSigningPublicKeys" type:"map"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuthorizerDescription) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuthorizerDescription) GoString() string {
	return s.String()
}

// SetAuthorizerArn sets the AuthorizerArn field's value.
func (s *AuthorizerDescription) SetAuthorizerArn(v string) *AuthorizerDescription {
	s.AuthorizerArn = &v
	return s
}

// SetAuthorizerFunctionArn sets the AuthorizerFunctionArn field's value.
func (s *AuthorizerDescription) SetAuthorizerFunctionArn(v string) *AuthorizerDescription {
	s.AuthorizerFunctionArn = &v
	return s
}

// SetAuthorizerName sets the AuthorizerName field's value.
func (s *AuthorizerDescription) SetAuthorizerName(v string) *AuthorizerDescription {
	s.AuthorizerName = &v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *AuthorizerDescription) SetCreationDate(v time.Time) *AuthorizerDescription {
	s.CreationDate = &v
	return s
}

// SetEnableCachingForHttp sets the EnableCachingForHttp field's value.
func (s *AuthorizerDescription) SetEnableCachingForHttp(v bool) *AuthorizerDescription {
	s.EnableCachingForHttp = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *AuthorizerDescription) SetLastModifiedDate(v time.Time) *AuthorizerDescription {
	s.LastModifiedDate = &v
	return s
}

// SetSigningDisabled sets the SigningDisabled field's value.
func (s *AuthorizerDescription) SetSigningDisabled(v bool) *AuthorizerDescription {
	s.SigningDisabled = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *AuthorizerDescription) SetStatus(v string) *AuthorizerDescription {
	s.Status = &v
	return s
}

// SetTokenKeyName sets the TokenKeyName field's value.
func (s *AuthorizerDescription) SetTokenKeyName(v string) *AuthorizerDescription {
	s.TokenKeyName = &v
	return s
}

// SetTokenSigningPublicKeys sets the TokenSigningPublicKeys field's value.
func (s *AuthorizerDescription) SetTokenSigningPublicKeys(v map[string]*string) *AuthorizerDescription {
	s.TokenSigningPublicKeys = v
	return s
}

// The authorizer summary.
type AuthorizerSummary struct {
	_ struct{} `type:"structure"`

	// The authorizer ARN.
	AuthorizerArn *string `locationName:"authorizerArn" type:"string"`

	// The authorizer name.
	AuthorizerName *string `locationName:"authorizerName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuthorizerSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AuthorizerSummary) GoString() string {
	return s.String()
}

// SetAuthorizerArn sets the AuthorizerArn field's value.
func (s *AuthorizerSummary) SetAuthorizerArn(v string) *AuthorizerSummary {
	s.AuthorizerArn = &v
	return s
}

// SetAuthorizerName sets the AuthorizerName field's value.
func (s *AuthorizerSummary) SetAuthorizerName(v string) *AuthorizerSummary {
	s.AuthorizerName = &v
	return s
}

// The criteria that determine when and how a job abort takes place.
type AwsJobAbortConfig struct {
	_ struct{} `type:"structure"`

	// The list of criteria that determine when and how to abort the job.
	//
	// AbortCriteriaList is a required field
	AbortCriteriaList []*AwsJobAbortCriteria `locationName:"abortCriteriaList" min:"1" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobAbortConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobAbortConfig) GoString() string {
	return s.String()
}

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

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

// SetAbortCriteriaList sets the AbortCriteriaList field's value.
func (s *AwsJobAbortConfig) SetAbortCriteriaList(v []*AwsJobAbortCriteria) *AwsJobAbortConfig {
	s.AbortCriteriaList = v
	return s
}

// The criteria that determine when and how a job abort takes place.
type AwsJobAbortCriteria struct {
	_ struct{} `type:"structure"`

	// The type of job action to take to initiate the job abort.
	//
	// Action is a required field
	Action *string `locationName:"action" type:"string" required:"true" enum:"AwsJobAbortCriteriaAbortAction"`

	// The type of job execution failures that can initiate a job abort.
	//
	// FailureType is a required field
	FailureType *string `locationName:"failureType" type:"string" required:"true" enum:"AwsJobAbortCriteriaFailureType"`

	// The minimum number of things which must receive job execution notifications
	// before the job can be aborted.
	//
	// MinNumberOfExecutedThings is a required field
	MinNumberOfExecutedThings *int64 `locationName:"minNumberOfExecutedThings" min:"1" type:"integer" required:"true"`

	// The minimum percentage of job execution failures that must occur to initiate
	// the job abort.
	//
	// Amazon Web Services IoT Core supports up to two digits after the decimal
	// (for example, 10.9 and 10.99, but not 10.999).
	//
	// ThresholdPercentage is a required field
	ThresholdPercentage *float64 `locationName:"thresholdPercentage" type:"double" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobAbortCriteria) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobAbortCriteria) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AwsJobAbortCriteria) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AwsJobAbortCriteria"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.FailureType == nil {
		invalidParams.Add(request.NewErrParamRequired("FailureType"))
	}
	if s.MinNumberOfExecutedThings == nil {
		invalidParams.Add(request.NewErrParamRequired("MinNumberOfExecutedThings"))
	}
	if s.MinNumberOfExecutedThings != nil && *s.MinNumberOfExecutedThings < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MinNumberOfExecutedThings", 1))
	}
	if s.ThresholdPercentage == nil {
		invalidParams.Add(request.NewErrParamRequired("ThresholdPercentage"))
	}

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

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

// SetFailureType sets the FailureType field's value.
func (s *AwsJobAbortCriteria) SetFailureType(v string) *AwsJobAbortCriteria {
	s.FailureType = &v
	return s
}

// SetMinNumberOfExecutedThings sets the MinNumberOfExecutedThings field's value.
func (s *AwsJobAbortCriteria) SetMinNumberOfExecutedThings(v int64) *AwsJobAbortCriteria {
	s.MinNumberOfExecutedThings = &v
	return s
}

// SetThresholdPercentage sets the ThresholdPercentage field's value.
func (s *AwsJobAbortCriteria) SetThresholdPercentage(v float64) *AwsJobAbortCriteria {
	s.ThresholdPercentage = &v
	return s
}

// Configuration for the rollout of OTA updates.
type AwsJobExecutionsRolloutConfig struct {
	_ struct{} `type:"structure"`

	// The rate of increase for a job rollout. This parameter allows you to define
	// an exponential rate increase for a job rollout.
	ExponentialRate *AwsJobExponentialRolloutRate `locationName:"exponentialRate" type:"structure"`

	// The maximum number of OTA update job executions started per minute.
	MaximumPerMinute *int64 `locationName:"maximumPerMinute" min:"1" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobExecutionsRolloutConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobExecutionsRolloutConfig) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AwsJobExecutionsRolloutConfig) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AwsJobExecutionsRolloutConfig"}
	if s.MaximumPerMinute != nil && *s.MaximumPerMinute < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaximumPerMinute", 1))
	}
	if s.ExponentialRate != nil {
		if err := s.ExponentialRate.Validate(); err != nil {
			invalidParams.AddNested("ExponentialRate", err.(request.ErrInvalidParams))
		}
	}

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

// SetExponentialRate sets the ExponentialRate field's value.
func (s *AwsJobExecutionsRolloutConfig) SetExponentialRate(v *AwsJobExponentialRolloutRate) *AwsJobExecutionsRolloutConfig {
	s.ExponentialRate = v
	return s
}

// SetMaximumPerMinute sets the MaximumPerMinute field's value.
func (s *AwsJobExecutionsRolloutConfig) SetMaximumPerMinute(v int64) *AwsJobExecutionsRolloutConfig {
	s.MaximumPerMinute = &v
	return s
}

// The rate of increase for a job rollout. This parameter allows you to define
// an exponential rate increase for a job rollout.
type AwsJobExponentialRolloutRate struct {
	_ struct{} `type:"structure"`

	// The minimum number of things that will be notified of a pending job, per
	// minute, at the start of the job rollout. This is the initial rate of the
	// rollout.
	//
	// BaseRatePerMinute is a required field
	BaseRatePerMinute *int64 `locationName:"baseRatePerMinute" min:"1" type:"integer" required:"true"`

	// The rate of increase for a job rollout. The number of things notified is
	// multiplied by this factor.
	//
	// IncrementFactor is a required field
	IncrementFactor *float64 `locationName:"incrementFactor" type:"double" required:"true"`

	// The criteria to initiate the increase in rate of rollout for a job.
	//
	// Amazon Web Services IoT Core supports up to one digit after the decimal (for
	// example, 1.5, but not 1.55).
	//
	// RateIncreaseCriteria is a required field
	RateIncreaseCriteria *AwsJobRateIncreaseCriteria `locationName:"rateIncreaseCriteria" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobExponentialRolloutRate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobExponentialRolloutRate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AwsJobExponentialRolloutRate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AwsJobExponentialRolloutRate"}
	if s.BaseRatePerMinute == nil {
		invalidParams.Add(request.NewErrParamRequired("BaseRatePerMinute"))
	}
	if s.BaseRatePerMinute != nil && *s.BaseRatePerMinute < 1 {
		invalidParams.Add(request.NewErrParamMinValue("BaseRatePerMinute", 1))
	}
	if s.IncrementFactor == nil {
		invalidParams.Add(request.NewErrParamRequired("IncrementFactor"))
	}
	if s.RateIncreaseCriteria == nil {
		invalidParams.Add(request.NewErrParamRequired("RateIncreaseCriteria"))
	}
	if s.RateIncreaseCriteria != nil {
		if err := s.RateIncreaseCriteria.Validate(); err != nil {
			invalidParams.AddNested("RateIncreaseCriteria", err.(request.ErrInvalidParams))
		}
	}

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

// SetBaseRatePerMinute sets the BaseRatePerMinute field's value.
func (s *AwsJobExponentialRolloutRate) SetBaseRatePerMinute(v int64) *AwsJobExponentialRolloutRate {
	s.BaseRatePerMinute = &v
	return s
}

// SetIncrementFactor sets the IncrementFactor field's value.
func (s *AwsJobExponentialRolloutRate) SetIncrementFactor(v float64) *AwsJobExponentialRolloutRate {
	s.IncrementFactor = &v
	return s
}

// SetRateIncreaseCriteria sets the RateIncreaseCriteria field's value.
func (s *AwsJobExponentialRolloutRate) SetRateIncreaseCriteria(v *AwsJobRateIncreaseCriteria) *AwsJobExponentialRolloutRate {
	s.RateIncreaseCriteria = v
	return s
}

// Configuration information for pre-signed URLs. Valid when protocols contains
// HTTP.
type AwsJobPresignedUrlConfig struct {
	_ struct{} `type:"structure"`

	// How long (in seconds) pre-signed URLs are valid. Valid values are 60 - 3600,
	// the default value is 1800 seconds. Pre-signed URLs are generated when a request
	// for the job document is received.
	ExpiresInSec *int64 `locationName:"expiresInSec" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobPresignedUrlConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobPresignedUrlConfig) GoString() string {
	return s.String()
}

// SetExpiresInSec sets the ExpiresInSec field's value.
func (s *AwsJobPresignedUrlConfig) SetExpiresInSec(v int64) *AwsJobPresignedUrlConfig {
	s.ExpiresInSec = &v
	return s
}

// The criteria to initiate the increase in rate of rollout for a job.
type AwsJobRateIncreaseCriteria struct {
	_ struct{} `type:"structure"`

	// When this number of things have been notified, it will initiate an increase
	// in the rollout rate.
	NumberOfNotifiedThings *int64 `locationName:"numberOfNotifiedThings" min:"1" type:"integer"`

	// When this number of things have succeeded in their job execution, it will
	// initiate an increase in the rollout rate.
	NumberOfSucceededThings *int64 `locationName:"numberOfSucceededThings" min:"1" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobRateIncreaseCriteria) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobRateIncreaseCriteria) GoString() string {
	return s.String()
}

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

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

// SetNumberOfNotifiedThings sets the NumberOfNotifiedThings field's value.
func (s *AwsJobRateIncreaseCriteria) SetNumberOfNotifiedThings(v int64) *AwsJobRateIncreaseCriteria {
	s.NumberOfNotifiedThings = &v
	return s
}

// SetNumberOfSucceededThings sets the NumberOfSucceededThings field's value.
func (s *AwsJobRateIncreaseCriteria) SetNumberOfSucceededThings(v int64) *AwsJobRateIncreaseCriteria {
	s.NumberOfSucceededThings = &v
	return s
}

// Specifies the amount of time each device has to finish its execution of the
// job. A timer is started when the job execution status is set to IN_PROGRESS.
// If the job execution status is not set to another terminal state before the
// timer expires, it will be automatically set to TIMED_OUT.
type AwsJobTimeoutConfig struct {
	_ struct{} `type:"structure"`

	// Specifies the amount of time, in minutes, this device has to finish execution
	// of this job. The timeout interval can be anywhere between 1 minute and 7
	// days (1 to 10080 minutes). The in progress timer can't be updated and will
	// apply to all job executions for the job. Whenever a job execution remains
	// in the IN_PROGRESS status for longer than this interval, the job execution
	// will fail and switch to the terminal TIMED_OUT status.
	InProgressTimeoutInMinutes *int64 `locationName:"inProgressTimeoutInMinutes" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobTimeoutConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AwsJobTimeoutConfig) GoString() string {
	return s.String()
}

// SetInProgressTimeoutInMinutes sets the InProgressTimeoutInMinutes field's value.
func (s *AwsJobTimeoutConfig) SetInProgressTimeoutInMinutes(v int64) *AwsJobTimeoutConfig {
	s.InProgressTimeoutInMinutes = &v
	return s
}

// A Device Defender security profile behavior.
type Behavior struct {
	_ struct{} `type:"structure"`

	// The criteria that determine if a device is behaving normally in regard to
	// the metric.
	//
	// In the IoT console, you can choose to be sent an alert through Amazon SNS
	// when IoT Device Defender detects that a device is behaving anomalously.
	Criteria *BehaviorCriteria `locationName:"criteria" type:"structure"`

	// Value indicates exporting metrics related to the behavior when it is true.
	ExportMetric *bool `locationName:"exportMetric" type:"boolean"`

	// What is measured by the behavior.
	Metric *string `locationName:"metric" type:"string"`

	// The dimension for a metric in your behavior. For example, using a TOPIC_FILTER
	// dimension, you can narrow down the scope of the metric to only MQTT topics
	// where the name matches the pattern specified in the dimension. This can't
	// be used with custom metrics.
	MetricDimension *MetricDimension `locationName:"metricDimension" type:"structure"`

	// The name you've given to the behavior.
	//
	// Name is a required field
	Name *string `locationName:"name" min:"1" type:"string" required:"true"`

	// Suppresses alerts.
	SuppressAlerts *bool `locationName:"suppressAlerts" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Behavior) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Behavior) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Behavior) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Behavior"}
	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.Criteria != nil {
		if err := s.Criteria.Validate(); err != nil {
			invalidParams.AddNested("Criteria", err.(request.ErrInvalidParams))
		}
	}
	if s.MetricDimension != nil {
		if err := s.MetricDimension.Validate(); err != nil {
			invalidParams.AddNested("MetricDimension", err.(request.ErrInvalidParams))
		}
	}

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

// SetCriteria sets the Criteria field's value.
func (s *Behavior) SetCriteria(v *BehaviorCriteria) *Behavior {
	s.Criteria = v
	return s
}

// SetExportMetric sets the ExportMetric field's value.
func (s *Behavior) SetExportMetric(v bool) *Behavior {
	s.ExportMetric = &v
	return s
}

// SetMetric sets the Metric field's value.
func (s *Behavior) SetMetric(v string) *Behavior {
	s.Metric = &v
	return s
}

// SetMetricDimension sets the MetricDimension field's value.
func (s *Behavior) SetMetricDimension(v *MetricDimension) *Behavior {
	s.MetricDimension = v
	return s
}

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

// SetSuppressAlerts sets the SuppressAlerts field's value.
func (s *Behavior) SetSuppressAlerts(v bool) *Behavior {
	s.SuppressAlerts = &v
	return s
}

// The criteria by which the behavior is determined to be normal.
type BehaviorCriteria struct {
	_ struct{} `type:"structure"`

	// The operator that relates the thing measured (metric) to the criteria (containing
	// a value or statisticalThreshold). Valid operators include:
	//
	//    * string-list: in-set and not-in-set
	//
	//    * number-list: in-set and not-in-set
	//
	//    * ip-address-list: in-cidr-set and not-in-cidr-set
	//
	//    * number: less-than, less-than-equals, greater-than, and greater-than-equals
	ComparisonOperator *string `locationName:"comparisonOperator" type:"string" enum:"ComparisonOperator"`

	// If a device is in violation of the behavior for the specified number of consecutive
	// datapoints, an alarm occurs. If not specified, the default is 1.
	ConsecutiveDatapointsToAlarm *int64 `locationName:"consecutiveDatapointsToAlarm" min:"1" type:"integer"`

	// If an alarm has occurred and the offending device is no longer in violation
	// of the behavior for the specified number of consecutive datapoints, the alarm
	// is cleared. If not specified, the default is 1.
	ConsecutiveDatapointsToClear *int64 `locationName:"consecutiveDatapointsToClear" min:"1" type:"integer"`

	// Use this to specify the time duration over which the behavior is evaluated,
	// for those criteria that have a time dimension (for example, NUM_MESSAGES_SENT).
	// For a statisticalThreshhold metric comparison, measurements from all devices
	// are accumulated over this time duration before being used to calculate percentiles,
	// and later, measurements from an individual device are also accumulated over
	// this time duration before being given a percentile rank. Cannot be used with
	// list-based metric datatypes.
	DurationSeconds *int64 `locationName:"durationSeconds" type:"integer"`

	// The configuration of an ML Detect
	MlDetectionConfig *MachineLearningDetectionConfig `locationName:"mlDetectionConfig" type:"structure"`

	// A statistical ranking (percentile)that indicates a threshold value by which
	// a behavior is determined to be in compliance or in violation of the behavior.
	StatisticalThreshold *StatisticalThreshold `locationName:"statisticalThreshold" type:"structure"`

	// The value to be compared with the metric.
	Value *MetricValue `locationName:"value" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s BehaviorCriteria) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s BehaviorCriteria) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *BehaviorCriteria) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "BehaviorCriteria"}
	if s.ConsecutiveDatapointsToAlarm != nil && *s.ConsecutiveDatapointsToAlarm < 1 {
		invalidParams.Add(request.NewErrParamMinValue("ConsecutiveDatapointsToAlarm", 1))
	}
	if s.ConsecutiveDatapointsToClear != nil && *s.ConsecutiveDatapointsToClear < 1 {
		invalidParams.Add(request.NewErrParamMinValue("ConsecutiveDatapointsToClear", 1))
	}
	if s.MlDetectionConfig != nil {
		if err := s.MlDetectionConfig.Validate(); err != nil {
			invalidParams.AddNested("MlDetectionConfig", err.(request.ErrInvalidParams))
		}
	}

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

// SetComparisonOperator sets the ComparisonOperator field's value.
func (s *BehaviorCriteria) SetComparisonOperator(v string) *BehaviorCriteria {
	s.ComparisonOperator = &v
	return s
}

// SetConsecutiveDatapointsToAlarm sets the ConsecutiveDatapointsToAlarm field's value.
func (s *BehaviorCriteria) SetConsecutiveDatapointsToAlarm(v int64) *BehaviorCriteria {
	s.ConsecutiveDatapointsToAlarm = &v
	return s
}

// SetConsecutiveDatapointsToClear sets the ConsecutiveDatapointsToClear field's value.
func (s *BehaviorCriteria) SetConsecutiveDatapointsToClear(v int64) *BehaviorCriteria {
	s.ConsecutiveDatapointsToClear = &v
	return s
}

// SetDurationSeconds sets the DurationSeconds field's value.
func (s *BehaviorCriteria) SetDurationSeconds(v int64) *BehaviorCriteria {
	s.DurationSeconds = &v
	return s
}

// SetMlDetectionConfig sets the MlDetectionConfig field's value.
func (s *BehaviorCriteria) SetMlDetectionConfig(v *MachineLearningDetectionConfig) *BehaviorCriteria {
	s.MlDetectionConfig = v
	return s
}

// SetStatisticalThreshold sets the StatisticalThreshold field's value.
func (s *BehaviorCriteria) SetStatisticalThreshold(v *StatisticalThreshold) *BehaviorCriteria {
	s.StatisticalThreshold = v
	return s
}

// SetValue sets the Value field's value.
func (s *BehaviorCriteria) SetValue(v *MetricValue) *BehaviorCriteria {
	s.Value = v
	return s
}

// The summary of an ML Detect behavior model.
type BehaviorModelTrainingSummary struct {
	_ struct{} `type:"structure"`

	// The name of the behavior.
	BehaviorName *string `locationName:"behaviorName" min:"1" type:"string"`

	// The percentage of datapoints collected.
	DatapointsCollectionPercentage *float64 `locationName:"datapointsCollectionPercentage" type:"double"`

	// The date the model was last refreshed.
	LastModelRefreshDate *time.Time `locationName:"lastModelRefreshDate" type:"timestamp"`

	// The status of the behavior model.
	ModelStatus *string `locationName:"modelStatus" type:"string" enum:"ModelStatus"`

	// The name of the security profile.
	SecurityProfileName *string `locationName:"securityProfileName" min:"1" type:"string"`

	// The date a training model started collecting data.
	TrainingDataCollectionStartDate *time.Time `locationName:"trainingDataCollectionStartDate" type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s BehaviorModelTrainingSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s BehaviorModelTrainingSummary) GoString() string {
	return s.String()
}

// SetBehaviorName sets the BehaviorName field's value.
func (s *BehaviorModelTrainingSummary) SetBehaviorName(v string) *BehaviorModelTrainingSummary {
	s.BehaviorName = &v
	return s
}

// SetDatapointsCollectionPercentage sets the DatapointsCollectionPercentage field's value.
func (s *BehaviorModelTrainingSummary) SetDatapointsCollectionPercentage(v float64) *BehaviorModelTrainingSummary {
	s.DatapointsCollectionPercentage = &v
	return s
}

// SetLastModelRefreshDate sets the LastModelRefreshDate field's value.
func (s *BehaviorModelTrainingSummary) SetLastModelRefreshDate(v time.Time) *BehaviorModelTrainingSummary {
	s.LastModelRefreshDate = &v
	return s
}

// SetModelStatus sets the ModelStatus field's value.
func (s *BehaviorModelTrainingSummary) SetModelStatus(v string) *BehaviorModelTrainingSummary {
	s.ModelStatus = &v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *BehaviorModelTrainingSummary) SetSecurityProfileName(v string) *BehaviorModelTrainingSummary {
	s.SecurityProfileName = &v
	return s
}

// SetTrainingDataCollectionStartDate sets the TrainingDataCollectionStartDate field's value.
func (s *BehaviorModelTrainingSummary) SetTrainingDataCollectionStartDate(v time.Time) *BehaviorModelTrainingSummary {
	s.TrainingDataCollectionStartDate = &v
	return s
}

// Additional information about the billing group.
type BillingGroupMetadata struct {
	_ struct{} `type:"structure"`

	// The date the billing group was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s BillingGroupMetadata) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s BillingGroupMetadata) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *BillingGroupMetadata) SetCreationDate(v time.Time) *BillingGroupMetadata {
	s.CreationDate = &v
	return s
}

// The properties of a billing group.
type BillingGroupProperties struct {
	_ struct{} `type:"structure"`

	// The description of the billing group.
	BillingGroupDescription *string `locationName:"billingGroupDescription" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s BillingGroupProperties) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s BillingGroupProperties) GoString() string {
	return s.String()
}

// SetBillingGroupDescription sets the BillingGroupDescription field's value.
func (s *BillingGroupProperties) SetBillingGroupDescription(v string) *BillingGroupProperties {
	s.BillingGroupDescription = &v
	return s
}

// A count of documents that meets a specific aggregation criteria.
type Bucket struct {
	_ struct{} `type:"structure"`

	// The number of documents that have the value counted for the particular bucket.
	Count *int64 `locationName:"count" type:"integer"`

	// The value counted for the particular bucket.
	KeyValue *string `locationName:"keyValue" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Bucket) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Bucket) GoString() string {
	return s.String()
}

// SetCount sets the Count field's value.
func (s *Bucket) SetCount(v int64) *Bucket {
	s.Count = &v
	return s
}

// SetKeyValue sets the KeyValue field's value.
func (s *Bucket) SetKeyValue(v string) *Bucket {
	s.KeyValue = &v
	return s
}

// The type of bucketed aggregation performed.
type BucketsAggregationType struct {
	_ struct{} `type:"structure"`

	// Performs an aggregation that will return a list of buckets. The list of buckets
	// is a ranked list of the number of occurrences of an aggregation field value.
	TermsAggregation *TermsAggregation `locationName:"termsAggregation" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s BucketsAggregationType) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s BucketsAggregationType) GoString() string {
	return s.String()
}

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

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

// SetTermsAggregation sets the TermsAggregation field's value.
func (s *BucketsAggregationType) SetTermsAggregation(v *TermsAggregation) *BucketsAggregationType {
	s.TermsAggregation = v
	return s
}

// A CA certificate.
type CACertificate struct {
	_ struct{} `type:"structure"`

	// The ARN of the CA certificate.
	CertificateArn *string `locationName:"certificateArn" type:"string"`

	// The ID of the CA certificate.
	CertificateId *string `locationName:"certificateId" min:"64" type:"string"`

	// The date the CA certificate was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The status of the CA certificate.
	//
	// The status value REGISTER_INACTIVE is deprecated and should not be used.
	Status *string `locationName:"status" type:"string" enum:"CACertificateStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CACertificate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CACertificate) GoString() string {
	return s.String()
}

// SetCertificateArn sets the CertificateArn field's value.
func (s *CACertificate) SetCertificateArn(v string) *CACertificate {
	s.CertificateArn = &v
	return s
}

// SetCertificateId sets the CertificateId field's value.
func (s *CACertificate) SetCertificateId(v string) *CACertificate {
	s.CertificateId = &v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *CACertificate) SetCreationDate(v time.Time) *CACertificate {
	s.CreationDate = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *CACertificate) SetStatus(v string) *CACertificate {
	s.Status = &v
	return s
}

// Describes a CA certificate.
type CACertificateDescription struct {
	_ struct{} `type:"structure"`

	// Whether the CA certificate configured for auto registration of device certificates.
	// Valid values are "ENABLE" and "DISABLE"
	AutoRegistrationStatus *string `locationName:"autoRegistrationStatus" type:"string" enum:"AutoRegistrationStatus"`

	// The CA certificate ARN.
	CertificateArn *string `locationName:"certificateArn" type:"string"`

	// The CA certificate ID.
	CertificateId *string `locationName:"certificateId" min:"64" type:"string"`

	// The mode of the CA.
	//
	// All the device certificates that are registered using this CA will be registered
	// in the same mode as the CA. For more information about certificate mode for
	// device certificates, see certificate mode (https://docs.aws.amazon.com/iot/latest/apireference/API_CertificateDescription.html#iot-Type-CertificateDescription-certificateMode).
	CertificateMode *string `locationName:"certificateMode" type:"string" enum:"CertificateMode"`

	// The CA certificate data, in PEM format.
	CertificatePem *string `locationName:"certificatePem" min:"1" type:"string"`

	// The date the CA certificate was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The customer version of the CA certificate.
	CustomerVersion *int64 `locationName:"customerVersion" min:"1" type:"integer"`

	// The generation ID of the CA certificate.
	GenerationId *string `locationName:"generationId" type:"string"`

	// The date the CA certificate was last modified.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The owner of the CA certificate.
	OwnedBy *string `locationName:"ownedBy" min:"12" type:"string"`

	// The status of a CA certificate.
	Status *string `locationName:"status" type:"string" enum:"CACertificateStatus"`

	// When the CA certificate is valid.
	Validity *CertificateValidity `locationName:"validity" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CACertificateDescription) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CACertificateDescription) GoString() string {
	return s.String()
}

// SetAutoRegistrationStatus sets the AutoRegistrationStatus field's value.
func (s *CACertificateDescription) SetAutoRegistrationStatus(v string) *CACertificateDescription {
	s.AutoRegistrationStatus = &v
	return s
}

// SetCertificateArn sets the CertificateArn field's value.
func (s *CACertificateDescription) SetCertificateArn(v string) *CACertificateDescription {
	s.CertificateArn = &v
	return s
}

// SetCertificateId sets the CertificateId field's value.
func (s *CACertificateDescription) SetCertificateId(v string) *CACertificateDescription {
	s.CertificateId = &v
	return s
}

// SetCertificateMode sets the CertificateMode field's value.
func (s *CACertificateDescription) SetCertificateMode(v string) *CACertificateDescription {
	s.CertificateMode = &v
	return s
}

// SetCertificatePem sets the CertificatePem field's value.
func (s *CACertificateDescription) SetCertificatePem(v string) *CACertificateDescription {
	s.CertificatePem = &v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *CACertificateDescription) SetCreationDate(v time.Time) *CACertificateDescription {
	s.CreationDate = &v
	return s
}

// SetCustomerVersion sets the CustomerVersion field's value.
func (s *CACertificateDescription) SetCustomerVersion(v int64) *CACertificateDescription {
	s.CustomerVersion = &v
	return s
}

// SetGenerationId sets the GenerationId field's value.
func (s *CACertificateDescription) SetGenerationId(v string) *CACertificateDescription {
	s.GenerationId = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *CACertificateDescription) SetLastModifiedDate(v time.Time) *CACertificateDescription {
	s.LastModifiedDate = &v
	return s
}

// SetOwnedBy sets the OwnedBy field's value.
func (s *CACertificateDescription) SetOwnedBy(v string) *CACertificateDescription {
	s.OwnedBy = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *CACertificateDescription) SetStatus(v string) *CACertificateDescription {
	s.Status = &v
	return s
}

// SetValidity sets the Validity field's value.
func (s *CACertificateDescription) SetValidity(v *CertificateValidity) *CACertificateDescription {
	s.Validity = v
	return s
}

type CancelAuditMitigationActionsTaskInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique identifier for the task that you want to cancel.
	//
	// TaskId is a required field
	TaskId *string `location:"uri" locationName:"taskId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelAuditMitigationActionsTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelAuditMitigationActionsTaskInput) GoString() string {
	return s.String()
}

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

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

// SetTaskId sets the TaskId field's value.
func (s *CancelAuditMitigationActionsTaskInput) SetTaskId(v string) *CancelAuditMitigationActionsTaskInput {
	s.TaskId = &v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelAuditMitigationActionsTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelAuditMitigationActionsTaskOutput) GoString() string {
	return s.String()
}

type CancelAuditTaskInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The ID of the audit you want to cancel. You can only cancel an audit that
	// is "IN_PROGRESS".
	//
	// TaskId is a required field
	TaskId *string `location:"uri" locationName:"taskId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelAuditTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelAuditTaskInput) GoString() string {
	return s.String()
}

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

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

// SetTaskId sets the TaskId field's value.
func (s *CancelAuditTaskInput) SetTaskId(v string) *CancelAuditTaskInput {
	s.TaskId = &v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelAuditTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelAuditTaskOutput) GoString() string {
	return s.String()
}

// The input for the CancelCertificateTransfer operation.
type CancelCertificateTransferInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The ID of the certificate. (The last part of the certificate ARN contains
	// the certificate ID.)
	//
	// CertificateId is a required field
	CertificateId *string `location:"uri" locationName:"certificateId" min:"64" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelCertificateTransferInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelCertificateTransferInput) GoString() string {
	return s.String()
}

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

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

// SetCertificateId sets the CertificateId field's value.
func (s *CancelCertificateTransferInput) SetCertificateId(v string) *CancelCertificateTransferInput {
	s.CertificateId = &v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelCertificateTransferOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelCertificateTransferOutput) GoString() string {
	return s.String()
}

type CancelDetectMitigationActionsTaskInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique identifier of the task.
	//
	// TaskId is a required field
	TaskId *string `location:"uri" locationName:"taskId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelDetectMitigationActionsTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelDetectMitigationActionsTaskInput) GoString() string {
	return s.String()
}

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

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

// SetTaskId sets the TaskId field's value.
func (s *CancelDetectMitigationActionsTaskInput) SetTaskId(v string) *CancelDetectMitigationActionsTaskInput {
	s.TaskId = &v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelDetectMitigationActionsTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelDetectMitigationActionsTaskOutput) GoString() string {
	return s.String()
}

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

	// (Optional) The expected current version of the job execution. Each time you
	// update the job execution, its version is incremented. If the version of the
	// job execution stored in Jobs does not match, the update is rejected with
	// a VersionMismatch error, and an ErrorResponse that contains the current job
	// execution status data is returned. (This makes it unnecessary to perform
	// a separate DescribeJobExecution request in order to obtain the job execution
	// status data.)
	ExpectedVersion *int64 `locationName:"expectedVersion" type:"long"`

	// (Optional) If true the job execution will be canceled if it has status IN_PROGRESS
	// or QUEUED, otherwise the job execution will be canceled only if it has status
	// QUEUED. If you attempt to cancel a job execution that is IN_PROGRESS, and
	// you do not set force to true, then an InvalidStateTransitionException will
	// be thrown. The default is false.
	//
	// Canceling a job execution which is "IN_PROGRESS", will cause the device to
	// be unable to update the job execution status. Use caution and ensure that
	// the device is able to recover to a valid state.
	Force *bool `location:"querystring" locationName:"force" type:"boolean"`

	// The ID of the job to be canceled.
	//
	// JobId is a required field
	JobId *string `location:"uri" locationName:"jobId" min:"1" type:"string" required:"true"`

	// A collection of name/value pairs that describe the status of the job execution.
	// If not specified, the statusDetails are unchanged. You can specify at most
	// 10 name/value pairs.
	StatusDetails map[string]*string `locationName:"statusDetails" type:"map"`

	// The name of the thing whose execution of the job will be canceled.
	//
	// ThingName is a required field
	ThingName *string `location:"uri" locationName:"thingName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelJobExecutionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelJobExecutionInput) GoString() string {
	return s.String()
}

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

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

// SetExpectedVersion sets the ExpectedVersion field's value.
func (s *CancelJobExecutionInput) SetExpectedVersion(v int64) *CancelJobExecutionInput {
	s.ExpectedVersion = &v
	return s
}

// SetForce sets the Force field's value.
func (s *CancelJobExecutionInput) SetForce(v bool) *CancelJobExecutionInput {
	s.Force = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *CancelJobExecutionInput) SetJobId(v string) *CancelJobExecutionInput {
	s.JobId = &v
	return s
}

// SetStatusDetails sets the StatusDetails field's value.
func (s *CancelJobExecutionInput) SetStatusDetails(v map[string]*string) *CancelJobExecutionInput {
	s.StatusDetails = v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *CancelJobExecutionInput) SetThingName(v string) *CancelJobExecutionInput {
	s.ThingName = &v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelJobExecutionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelJobExecutionOutput) GoString() string {
	return s.String()
}

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

	// An optional comment string describing why the job was canceled.
	Comment *string `locationName:"comment" type:"string"`

	// (Optional) If true job executions with status "IN_PROGRESS" and "QUEUED"
	// are canceled, otherwise only job executions with status "QUEUED" are canceled.
	// The default is false.
	//
	// Canceling a job which is "IN_PROGRESS", will cause a device which is executing
	// the job to be unable to update the job execution status. Use caution and
	// ensure that each device executing a job which is canceled is able to recover
	// to a valid state.
	Force *bool `location:"querystring" locationName:"force" type:"boolean"`

	// The unique identifier you assigned to this job when it was created.
	//
	// JobId is a required field
	JobId *string `location:"uri" locationName:"jobId" min:"1" type:"string" required:"true"`

	// (Optional)A reason code string that explains why the job was canceled.
	ReasonCode *string `locationName:"reasonCode" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelJobInput) GoString() string {
	return s.String()
}

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

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

// SetComment sets the Comment field's value.
func (s *CancelJobInput) SetComment(v string) *CancelJobInput {
	s.Comment = &v
	return s
}

// SetForce sets the Force field's value.
func (s *CancelJobInput) SetForce(v bool) *CancelJobInput {
	s.Force = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *CancelJobInput) SetJobId(v string) *CancelJobInput {
	s.JobId = &v
	return s
}

// SetReasonCode sets the ReasonCode field's value.
func (s *CancelJobInput) SetReasonCode(v string) *CancelJobInput {
	s.ReasonCode = &v
	return s
}

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

	// A short text description of the job.
	Description *string `locationName:"description" type:"string"`

	// The job ARN.
	JobArn *string `locationName:"jobArn" type:"string"`

	// The unique identifier you assigned to this job when it was created.
	JobId *string `locationName:"jobId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CancelJobOutput) GoString() string {
	return s.String()
}

// SetDescription sets the Description field's value.
func (s *CancelJobOutput) SetDescription(v string) *CancelJobOutput {
	s.Description = &v
	return s
}

// SetJobArn sets the JobArn field's value.
func (s *CancelJobOutput) SetJobArn(v string) *CancelJobOutput {
	s.JobArn = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *CancelJobOutput) SetJobId(v string) *CancelJobOutput {
	s.JobId = &v
	return s
}

// Information about a certificate.
type Certificate struct {
	_ struct{} `type:"structure"`

	// The ARN of the certificate.
	CertificateArn *string `locationName:"certificateArn" type:"string"`

	// The ID of the certificate. (The last part of the certificate ARN contains
	// the certificate ID.)
	CertificateId *string `locationName:"certificateId" min:"64" type:"string"`

	// The mode of the certificate.
	//
	// DEFAULT: A certificate in DEFAULT mode is either generated by Amazon Web
	// Services IoT Core or registered with an issuer certificate authority (CA)
	// in DEFAULT mode. Devices with certificates in DEFAULT mode aren't required
	// to send the Server Name Indication (SNI) extension when connecting to Amazon
	// Web Services IoT Core. However, to use features such as custom domains and
	// VPC endpoints, we recommend that you use the SNI extension when connecting
	// to Amazon Web Services IoT Core.
	//
	// SNI_ONLY: A certificate in SNI_ONLY mode is registered without an issuer
	// CA. Devices with certificates in SNI_ONLY mode must send the SNI extension
	// when connecting to Amazon Web Services IoT Core.
	CertificateMode *string `locationName:"certificateMode" type:"string" enum:"CertificateMode"`

	// The date and time the certificate was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The status of the certificate.
	//
	// The status value REGISTER_INACTIVE is deprecated and should not be used.
	Status *string `locationName:"status" type:"string" enum:"CertificateStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Certificate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Certificate) GoString() string {
	return s.String()
}

// SetCertificateArn sets the CertificateArn field's value.
func (s *Certificate) SetCertificateArn(v string) *Certificate {
	s.CertificateArn = &v
	return s
}

// SetCertificateId sets the CertificateId field's value.
func (s *Certificate) SetCertificateId(v string) *Certificate {
	s.CertificateId = &v
	return s
}

// SetCertificateMode sets the CertificateMode field's value.
func (s *Certificate) SetCertificateMode(v string) *Certificate {
	s.CertificateMode = &v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *Certificate) SetCreationDate(v time.Time) *Certificate {
	s.CreationDate = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *Certificate) SetStatus(v string) *Certificate {
	s.Status = &v
	return s
}

// Unable to verify the CA certificate used to sign the device certificate you
// are attempting to register. This is happens when you have registered more
// than one CA certificate that has the same subject field and public key.
type CertificateConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CertificateConflictException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CertificateConflictException) GoString() string {
	return s.String()
}

func newErrorCertificateConflictException(v protocol.ResponseMetadata) error {
	return &CertificateConflictException{
		RespMetadata: v,
	}
}

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

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

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

func (s *CertificateConflictException) 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 *CertificateConflictException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// Describes a certificate.
type CertificateDescription struct {
	_ struct{} `type:"structure"`

	// The certificate ID of the CA certificate used to sign this certificate.
	CaCertificateId *string `locationName:"caCertificateId" min:"64" type:"string"`

	// The ARN of the certificate.
	CertificateArn *string `locationName:"certificateArn" type:"string"`

	// The ID of the certificate.
	CertificateId *string `locationName:"certificateId" min:"64" type:"string"`

	// The mode of the certificate.
	//
	// DEFAULT: A certificate in DEFAULT mode is either generated by Amazon Web
	// Services IoT Core or registered with an issuer certificate authority (CA)
	// in DEFAULT mode. Devices with certificates in DEFAULT mode aren't required
	// to send the Server Name Indication (SNI) extension when connecting to Amazon
	// Web Services IoT Core. However, to use features such as custom domains and
	// VPC endpoints, we recommend that you use the SNI extension when connecting
	// to Amazon Web Services IoT Core.
	//
	// SNI_ONLY: A certificate in SNI_ONLY mode is registered without an issuer
	// CA. Devices with certificates in SNI_ONLY mode must send the SNI extension
	// when connecting to Amazon Web Services IoT Core.
	//
	// For more information about the value for SNI extension, see Transport security
	// in IoT (https://docs.aws.amazon.com/iot/latest/developerguide/transport-security.html).
	CertificateMode *string `locationName:"certificateMode" type:"string" enum:"CertificateMode"`

	// The certificate data, in PEM format.
	CertificatePem *string `locationName:"certificatePem" min:"1" type:"string"`

	// The date and time the certificate was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The customer version of the certificate.
	CustomerVersion *int64 `locationName:"customerVersion" min:"1" type:"integer"`

	// The generation ID of the certificate.
	GenerationId *string `locationName:"generationId" type:"string"`

	// The date and time the certificate was last modified.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The ID of the Amazon Web Services account that owns the certificate.
	OwnedBy *string `locationName:"ownedBy" min:"12" type:"string"`

	// The ID of the Amazon Web Services account of the previous owner of the certificate.
	PreviousOwnedBy *string `locationName:"previousOwnedBy" min:"12" type:"string"`

	// The status of the certificate.
	Status *string `locationName:"status" type:"string" enum:"CertificateStatus"`

	// The transfer data.
	TransferData *TransferData `locationName:"transferData" type:"structure"`

	// When the certificate is valid.
	Validity *CertificateValidity `locationName:"validity" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CertificateDescription) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CertificateDescription) GoString() string {
	return s.String()
}

// SetCaCertificateId sets the CaCertificateId field's value.
func (s *CertificateDescription) SetCaCertificateId(v string) *CertificateDescription {
	s.CaCertificateId = &v
	return s
}

// SetCertificateArn sets the CertificateArn field's value.
func (s *CertificateDescription) SetCertificateArn(v string) *CertificateDescription {
	s.CertificateArn = &v
	return s
}

// SetCertificateId sets the CertificateId field's value.
func (s *CertificateDescription) SetCertificateId(v string) *CertificateDescription {
	s.CertificateId = &v
	return s
}

// SetCertificateMode sets the CertificateMode field's value.
func (s *CertificateDescription) SetCertificateMode(v string) *CertificateDescription {
	s.CertificateMode = &v
	return s
}

// SetCertificatePem sets the CertificatePem field's value.
func (s *CertificateDescription) SetCertificatePem(v string) *CertificateDescription {
	s.CertificatePem = &v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *CertificateDescription) SetCreationDate(v time.Time) *CertificateDescription {
	s.CreationDate = &v
	return s
}

// SetCustomerVersion sets the CustomerVersion field's value.
func (s *CertificateDescription) SetCustomerVersion(v int64) *CertificateDescription {
	s.CustomerVersion = &v
	return s
}

// SetGenerationId sets the GenerationId field's value.
func (s *CertificateDescription) SetGenerationId(v string) *CertificateDescription {
	s.GenerationId = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *CertificateDescription) SetLastModifiedDate(v time.Time) *CertificateDescription {
	s.LastModifiedDate = &v
	return s
}

// SetOwnedBy sets the OwnedBy field's value.
func (s *CertificateDescription) SetOwnedBy(v string) *CertificateDescription {
	s.OwnedBy = &v
	return s
}

// SetPreviousOwnedBy sets the PreviousOwnedBy field's value.
func (s *CertificateDescription) SetPreviousOwnedBy(v string) *CertificateDescription {
	s.PreviousOwnedBy = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *CertificateDescription) SetStatus(v string) *CertificateDescription {
	s.Status = &v
	return s
}

// SetTransferData sets the TransferData field's value.
func (s *CertificateDescription) SetTransferData(v *TransferData) *CertificateDescription {
	s.TransferData = v
	return s
}

// SetValidity sets the Validity field's value.
func (s *CertificateDescription) SetValidity(v *CertificateValidity) *CertificateDescription {
	s.Validity = v
	return s
}

// The certificate provider summary.
type CertificateProviderSummary struct {
	_ struct{} `type:"structure"`

	// The ARN of the certificate provider.
	CertificateProviderArn *string `locationName:"certificateProviderArn" type:"string"`

	// The name of the certificate provider.
	CertificateProviderName *string `locationName:"certificateProviderName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CertificateProviderSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CertificateProviderSummary) GoString() string {
	return s.String()
}

// SetCertificateProviderArn sets the CertificateProviderArn field's value.
func (s *CertificateProviderSummary) SetCertificateProviderArn(v string) *CertificateProviderSummary {
	s.CertificateProviderArn = &v
	return s
}

// SetCertificateProviderName sets the CertificateProviderName field's value.
func (s *CertificateProviderSummary) SetCertificateProviderName(v string) *CertificateProviderSummary {
	s.CertificateProviderName = &v
	return s
}

// The certificate operation is not allowed.
type CertificateStateException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CertificateStateException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CertificateStateException) GoString() string {
	return s.String()
}

func newErrorCertificateStateException(v protocol.ResponseMetadata) error {
	return &CertificateStateException{
		RespMetadata: v,
	}
}

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

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

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

func (s *CertificateStateException) 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 *CertificateStateException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The certificate is invalid.
type CertificateValidationException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// Additional information about the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CertificateValidationException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CertificateValidationException) GoString() string {
	return s.String()
}

func newErrorCertificateValidationException(v protocol.ResponseMetadata) error {
	return &CertificateValidationException{
		RespMetadata: v,
	}
}

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

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

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

func (s *CertificateValidationException) 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 *CertificateValidationException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// When the certificate is valid.
type CertificateValidity struct {
	_ struct{} `type:"structure"`

	// The certificate is not valid after this date.
	NotAfter *time.Time `locationName:"notAfter" type:"timestamp"`

	// The certificate is not valid before this date.
	NotBefore *time.Time `locationName:"notBefore" type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CertificateValidity) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CertificateValidity) GoString() string {
	return s.String()
}

// SetNotAfter sets the NotAfter field's value.
func (s *CertificateValidity) SetNotAfter(v time.Time) *CertificateValidity {
	s.NotAfter = &v
	return s
}

// SetNotBefore sets the NotBefore field's value.
func (s *CertificateValidity) SetNotBefore(v time.Time) *CertificateValidity {
	s.NotBefore = &v
	return s
}

type ClearDefaultAuthorizerInput struct {
	_ struct{} `type:"structure" nopayload:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClearDefaultAuthorizerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClearDefaultAuthorizerInput) GoString() string {
	return s.String()
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClearDefaultAuthorizerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ClearDefaultAuthorizerOutput) GoString() string {
	return s.String()
}

// Describes an action that updates a CloudWatch alarm.
type CloudwatchAlarmAction struct {
	_ struct{} `type:"structure"`

	// The CloudWatch alarm name.
	//
	// AlarmName is a required field
	AlarmName *string `locationName:"alarmName" type:"string" required:"true"`

	// The IAM role that allows access to the CloudWatch alarm.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// The reason for the alarm change.
	//
	// StateReason is a required field
	StateReason *string `locationName:"stateReason" type:"string" required:"true"`

	// The value of the alarm state. Acceptable values are: OK, ALARM, INSUFFICIENT_DATA.
	//
	// StateValue is a required field
	StateValue *string `locationName:"stateValue" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CloudwatchAlarmAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CloudwatchAlarmAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CloudwatchAlarmAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CloudwatchAlarmAction"}
	if s.AlarmName == nil {
		invalidParams.Add(request.NewErrParamRequired("AlarmName"))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.StateReason == nil {
		invalidParams.Add(request.NewErrParamRequired("StateReason"))
	}
	if s.StateValue == nil {
		invalidParams.Add(request.NewErrParamRequired("StateValue"))
	}

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

// SetAlarmName sets the AlarmName field's value.
func (s *CloudwatchAlarmAction) SetAlarmName(v string) *CloudwatchAlarmAction {
	s.AlarmName = &v
	return s
}

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

// SetStateReason sets the StateReason field's value.
func (s *CloudwatchAlarmAction) SetStateReason(v string) *CloudwatchAlarmAction {
	s.StateReason = &v
	return s
}

// SetStateValue sets the StateValue field's value.
func (s *CloudwatchAlarmAction) SetStateValue(v string) *CloudwatchAlarmAction {
	s.StateValue = &v
	return s
}

// Describes an action that sends data to CloudWatch Logs.
type CloudwatchLogsAction struct {
	_ struct{} `type:"structure"`

	// Indicates whether batches of log records will be extracted and uploaded into
	// CloudWatch. Values include true or false (default).
	BatchMode *bool `locationName:"batchMode" type:"boolean"`

	// The CloudWatch log group to which the action sends data.
	//
	// LogGroupName is a required field
	LogGroupName *string `locationName:"logGroupName" type:"string" required:"true"`

	// The IAM role that allows access to the CloudWatch log.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CloudwatchLogsAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CloudwatchLogsAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CloudwatchLogsAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CloudwatchLogsAction"}
	if s.LogGroupName == nil {
		invalidParams.Add(request.NewErrParamRequired("LogGroupName"))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}

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

// SetBatchMode sets the BatchMode field's value.
func (s *CloudwatchLogsAction) SetBatchMode(v bool) *CloudwatchLogsAction {
	s.BatchMode = &v
	return s
}

// SetLogGroupName sets the LogGroupName field's value.
func (s *CloudwatchLogsAction) SetLogGroupName(v string) *CloudwatchLogsAction {
	s.LogGroupName = &v
	return s
}

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

// Describes an action that captures a CloudWatch metric.
type CloudwatchMetricAction struct {
	_ struct{} `type:"structure"`

	// The CloudWatch metric name.
	//
	// MetricName is a required field
	MetricName *string `locationName:"metricName" type:"string" required:"true"`

	// The CloudWatch metric namespace name.
	//
	// MetricNamespace is a required field
	MetricNamespace *string `locationName:"metricNamespace" type:"string" required:"true"`

	// An optional Unix timestamp (https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#about_timestamp).
	MetricTimestamp *string `locationName:"metricTimestamp" type:"string"`

	// The metric unit (https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#Unit)
	// supported by CloudWatch.
	//
	// MetricUnit is a required field
	MetricUnit *string `locationName:"metricUnit" type:"string" required:"true"`

	// The CloudWatch metric value.
	//
	// MetricValue is a required field
	MetricValue *string `locationName:"metricValue" type:"string" required:"true"`

	// The IAM role that allows access to the CloudWatch metric.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CloudwatchMetricAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CloudwatchMetricAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CloudwatchMetricAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CloudwatchMetricAction"}
	if s.MetricName == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricName"))
	}
	if s.MetricNamespace == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricNamespace"))
	}
	if s.MetricUnit == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricUnit"))
	}
	if s.MetricValue == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricValue"))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}

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

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

// SetMetricNamespace sets the MetricNamespace field's value.
func (s *CloudwatchMetricAction) SetMetricNamespace(v string) *CloudwatchMetricAction {
	s.MetricNamespace = &v
	return s
}

// SetMetricTimestamp sets the MetricTimestamp field's value.
func (s *CloudwatchMetricAction) SetMetricTimestamp(v string) *CloudwatchMetricAction {
	s.MetricTimestamp = &v
	return s
}

// SetMetricUnit sets the MetricUnit field's value.
func (s *CloudwatchMetricAction) SetMetricUnit(v string) *CloudwatchMetricAction {
	s.MetricUnit = &v
	return s
}

// SetMetricValue sets the MetricValue field's value.
func (s *CloudwatchMetricAction) SetMetricValue(v string) *CloudwatchMetricAction {
	s.MetricValue = &v
	return s
}

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

// Describes the method to use when code signing a file.
type CodeSigning struct {
	_ struct{} `type:"structure"`

	// The ID of the AWSSignerJob which was created to sign the file.
	AwsSignerJobId *string `locationName:"awsSignerJobId" type:"string"`

	// A custom method for code signing a file.
	CustomCodeSigning *CustomCodeSigning `locationName:"customCodeSigning" type:"structure"`

	// Describes the code-signing job.
	StartSigningJobParameter *StartSigningJobParameter `locationName:"startSigningJobParameter" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CodeSigning) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CodeSigning) GoString() string {
	return s.String()
}

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

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

// SetAwsSignerJobId sets the AwsSignerJobId field's value.
func (s *CodeSigning) SetAwsSignerJobId(v string) *CodeSigning {
	s.AwsSignerJobId = &v
	return s
}

// SetCustomCodeSigning sets the CustomCodeSigning field's value.
func (s *CodeSigning) SetCustomCodeSigning(v *CustomCodeSigning) *CodeSigning {
	s.CustomCodeSigning = v
	return s
}

// SetStartSigningJobParameter sets the StartSigningJobParameter field's value.
func (s *CodeSigning) SetStartSigningJobParameter(v *StartSigningJobParameter) *CodeSigning {
	s.StartSigningJobParameter = v
	return s
}

// Describes the certificate chain being used when code signing a file.
type CodeSigningCertificateChain struct {
	_ struct{} `type:"structure"`

	// The name of the certificate.
	CertificateName *string `locationName:"certificateName" type:"string"`

	// A base64 encoded binary representation of the code signing certificate chain.
	InlineDocument *string `locationName:"inlineDocument" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CodeSigningCertificateChain) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CodeSigningCertificateChain) GoString() string {
	return s.String()
}

// SetCertificateName sets the CertificateName field's value.
func (s *CodeSigningCertificateChain) SetCertificateName(v string) *CodeSigningCertificateChain {
	s.CertificateName = &v
	return s
}

// SetInlineDocument sets the InlineDocument field's value.
func (s *CodeSigningCertificateChain) SetInlineDocument(v string) *CodeSigningCertificateChain {
	s.InlineDocument = &v
	return s
}

// Describes the signature for a file.
type CodeSigningSignature struct {
	_ struct{} `type:"structure"`

	// A base64 encoded binary representation of the code signing signature.
	// InlineDocument is automatically base64 encoded/decoded by the SDK.
	InlineDocument []byte `locationName:"inlineDocument" type:"blob"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CodeSigningSignature) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CodeSigningSignature) GoString() string {
	return s.String()
}

// SetInlineDocument sets the InlineDocument field's value.
func (s *CodeSigningSignature) SetInlineDocument(v []byte) *CodeSigningSignature {
	s.InlineDocument = v
	return s
}

// Configuration.
type Configuration struct {
	_ struct{} `type:"structure"`

	// True to enable the configuration.
	Enabled *bool `type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Configuration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Configuration) GoString() string {
	return s.String()
}

// SetEnabled sets the Enabled field's value.
func (s *Configuration) SetEnabled(v bool) *Configuration {
	s.Enabled = &v
	return s
}

type ConfirmTopicRuleDestinationInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The token used to confirm ownership or access to the topic rule confirmation
	// URL.
	//
	// ConfirmationToken is a required field
	ConfirmationToken *string `location:"uri" locationName:"confirmationToken" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ConfirmTopicRuleDestinationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ConfirmTopicRuleDestinationInput) GoString() string {
	return s.String()
}

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

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

// SetConfirmationToken sets the ConfirmationToken field's value.
func (s *ConfirmTopicRuleDestinationInput) SetConfirmationToken(v string) *ConfirmTopicRuleDestinationInput {
	s.ConfirmationToken = &v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ConfirmTopicRuleDestinationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ConfirmTopicRuleDestinationOutput) GoString() string {
	return s.String()
}

// A resource with the same name already exists.
type ConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

	// A resource with the same name already exists.
	ResourceId *string `locationName:"resourceId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ConflictException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ConflictException) GoString() string {
	return s.String()
}

func newErrorConflictException(v protocol.ResponseMetadata) error {
	return &ConflictException{
		RespMetadata: v,
	}
}

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

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

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

func (s *ConflictException) 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 *ConflictException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// A conflicting resource update exception. This exception is thrown when two
// pending updates cause a conflict.
type ConflictingResourceUpdateException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ConflictingResourceUpdateException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ConflictingResourceUpdateException) GoString() string {
	return s.String()
}

func newErrorConflictingResourceUpdateException(v protocol.ResponseMetadata) error {
	return &ConflictingResourceUpdateException{
		RespMetadata: v,
	}
}

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

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

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

func (s *ConflictingResourceUpdateException) 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 *ConflictingResourceUpdateException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

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

	// An audit check name. Checks must be enabled for your account. (Use DescribeAccountAuditConfiguration
	// to see the list of all checks, including those that are enabled or use UpdateAccountAuditConfiguration
	// to select which checks are enabled.)
	//
	// CheckName is a required field
	CheckName *string `locationName:"checkName" type:"string" required:"true"`

	// Each audit supression must have a unique client request token. If you try
	// to create a new audit suppression with the same token as one that already
	// exists, an exception occurs. If you omit this value, Amazon Web Services
	// SDKs will automatically generate a unique client request.
	ClientRequestToken *string `locationName:"clientRequestToken" min:"1" type:"string" idempotencyToken:"true"`

	// The description of the audit suppression.
	Description *string `locationName:"description" type:"string"`

	// The epoch timestamp in seconds at which this suppression expires.
	ExpirationDate *time.Time `locationName:"expirationDate" type:"timestamp"`

	// Information that identifies the noncompliant resource.
	//
	// ResourceIdentifier is a required field
	ResourceIdentifier *ResourceIdentifier `locationName:"resourceIdentifier" type:"structure" required:"true"`

	// Indicates whether a suppression should exist indefinitely or not.
	SuppressIndefinitely *bool `locationName:"suppressIndefinitely" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateAuditSuppressionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateAuditSuppressionInput) GoString() string {
	return s.String()
}

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

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

// SetCheckName sets the CheckName field's value.
func (s *CreateAuditSuppressionInput) SetCheckName(v string) *CreateAuditSuppressionInput {
	s.CheckName = &v
	return s
}

// SetClientRequestToken sets the ClientRequestToken field's value.
func (s *CreateAuditSuppressionInput) SetClientRequestToken(v string) *CreateAuditSuppressionInput {
	s.ClientRequestToken = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreateAuditSuppressionInput) SetDescription(v string) *CreateAuditSuppressionInput {
	s.Description = &v
	return s
}

// SetExpirationDate sets the ExpirationDate field's value.
func (s *CreateAuditSuppressionInput) SetExpirationDate(v time.Time) *CreateAuditSuppressionInput {
	s.ExpirationDate = &v
	return s
}

// SetResourceIdentifier sets the ResourceIdentifier field's value.
func (s *CreateAuditSuppressionInput) SetResourceIdentifier(v *ResourceIdentifier) *CreateAuditSuppressionInput {
	s.ResourceIdentifier = v
	return s
}

// SetSuppressIndefinitely sets the SuppressIndefinitely field's value.
func (s *CreateAuditSuppressionInput) SetSuppressIndefinitely(v bool) *CreateAuditSuppressionInput {
	s.SuppressIndefinitely = &v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateAuditSuppressionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateAuditSuppressionOutput) GoString() string {
	return s.String()
}

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

	// The ARN of the authorizer's Lambda function.
	//
	// AuthorizerFunctionArn is a required field
	AuthorizerFunctionArn *string `locationName:"authorizerFunctionArn" type:"string" required:"true"`

	// The authorizer name.
	//
	// AuthorizerName is a required field
	AuthorizerName *string `location:"uri" locationName:"authorizerName" min:"1" type:"string" required:"true"`

	// When true, the result from the authorizer’s Lambda function is cached for
	// clients that use persistent HTTP connections. The results are cached for
	// the time specified by the Lambda function in refreshAfterInSeconds. This
	// value does not affect authorization of clients that use MQTT connections.
	//
	// The default value is false.
	EnableCachingForHttp *bool `locationName:"enableCachingForHttp" type:"boolean"`

	// Specifies whether IoT validates the token signature in an authorization request.
	SigningDisabled *bool `locationName:"signingDisabled" type:"boolean"`

	// The status of the create authorizer request.
	Status *string `locationName:"status" type:"string" enum:"AuthorizerStatus"`

	// Metadata which can be used to manage the custom authorizer.
	//
	// For URI Request parameters use format: ...key1=value1&key2=value2...
	//
	// For the CLI command-line parameter use format: &&tags "key1=value1&key2=value2..."
	//
	// For the cli-input-json file use format: "tags": "key1=value1&key2=value2..."
	Tags []*Tag `locationName:"tags" type:"list"`

	// The name of the token key used to extract the token from the HTTP headers.
	TokenKeyName *string `locationName:"tokenKeyName" min:"1" type:"string"`

	// The public keys used to verify the digital signature returned by your custom
	// authentication service.
	TokenSigningPublicKeys map[string]*string `locationName:"tokenSigningPublicKeys" type:"map"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateAuthorizerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateAuthorizerInput) GoString() string {
	return s.String()
}

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

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

// SetAuthorizerFunctionArn sets the AuthorizerFunctionArn field's value.
func (s *CreateAuthorizerInput) SetAuthorizerFunctionArn(v string) *CreateAuthorizerInput {
	s.AuthorizerFunctionArn = &v
	return s
}

// SetAuthorizerName sets the AuthorizerName field's value.
func (s *CreateAuthorizerInput) SetAuthorizerName(v string) *CreateAuthorizerInput {
	s.AuthorizerName = &v
	return s
}

// SetEnableCachingForHttp sets the EnableCachingForHttp field's value.
func (s *CreateAuthorizerInput) SetEnableCachingForHttp(v bool) *CreateAuthorizerInput {
	s.EnableCachingForHttp = &v
	return s
}

// SetSigningDisabled sets the SigningDisabled field's value.
func (s *CreateAuthorizerInput) SetSigningDisabled(v bool) *CreateAuthorizerInput {
	s.SigningDisabled = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *CreateAuthorizerInput) SetStatus(v string) *CreateAuthorizerInput {
	s.Status = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateAuthorizerInput) SetTags(v []*Tag) *CreateAuthorizerInput {
	s.Tags = v
	return s
}

// SetTokenKeyName sets the TokenKeyName field's value.
func (s *CreateAuthorizerInput) SetTokenKeyName(v string) *CreateAuthorizerInput {
	s.TokenKeyName = &v
	return s
}

// SetTokenSigningPublicKeys sets the TokenSigningPublicKeys field's value.
func (s *CreateAuthorizerInput) SetTokenSigningPublicKeys(v map[string]*string) *CreateAuthorizerInput {
	s.TokenSigningPublicKeys = v
	return s
}

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

	// The authorizer ARN.
	AuthorizerArn *string `locationName:"authorizerArn" type:"string"`

	// The authorizer's name.
	AuthorizerName *string `locationName:"authorizerName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateAuthorizerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateAuthorizerOutput) GoString() string {
	return s.String()
}

// SetAuthorizerArn sets the AuthorizerArn field's value.
func (s *CreateAuthorizerOutput) SetAuthorizerArn(v string) *CreateAuthorizerOutput {
	s.AuthorizerArn = &v
	return s
}

// SetAuthorizerName sets the AuthorizerName field's value.
func (s *CreateAuthorizerOutput) SetAuthorizerName(v string) *CreateAuthorizerOutput {
	s.AuthorizerName = &v
	return s
}

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

	// The name you wish to give to the billing group.
	//
	// BillingGroupName is a required field
	BillingGroupName *string `location:"uri" locationName:"billingGroupName" min:"1" type:"string" required:"true"`

	// The properties of the billing group.
	BillingGroupProperties *BillingGroupProperties `locationName:"billingGroupProperties" type:"structure"`

	// Metadata which can be used to manage the billing group.
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateBillingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateBillingGroupInput) GoString() string {
	return s.String()
}

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

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

// SetBillingGroupName sets the BillingGroupName field's value.
func (s *CreateBillingGroupInput) SetBillingGroupName(v string) *CreateBillingGroupInput {
	s.BillingGroupName = &v
	return s
}

// SetBillingGroupProperties sets the BillingGroupProperties field's value.
func (s *CreateBillingGroupInput) SetBillingGroupProperties(v *BillingGroupProperties) *CreateBillingGroupInput {
	s.BillingGroupProperties = v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateBillingGroupInput) SetTags(v []*Tag) *CreateBillingGroupInput {
	s.Tags = v
	return s
}

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

	// The ARN of the billing group.
	BillingGroupArn *string `locationName:"billingGroupArn" type:"string"`

	// The ID of the billing group.
	BillingGroupId *string `locationName:"billingGroupId" min:"1" type:"string"`

	// The name you gave to the billing group.
	BillingGroupName *string `locationName:"billingGroupName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateBillingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateBillingGroupOutput) GoString() string {
	return s.String()
}

// SetBillingGroupArn sets the BillingGroupArn field's value.
func (s *CreateBillingGroupOutput) SetBillingGroupArn(v string) *CreateBillingGroupOutput {
	s.BillingGroupArn = &v
	return s
}

// SetBillingGroupId sets the BillingGroupId field's value.
func (s *CreateBillingGroupOutput) SetBillingGroupId(v string) *CreateBillingGroupOutput {
	s.BillingGroupId = &v
	return s
}

// SetBillingGroupName sets the BillingGroupName field's value.
func (s *CreateBillingGroupOutput) SetBillingGroupName(v string) *CreateBillingGroupOutput {
	s.BillingGroupName = &v
	return s
}

// The input for the CreateCertificateFromCsr operation.
type CreateCertificateFromCsrInput struct {
	_ struct{} `type:"structure"`

	// The certificate signing request (CSR).
	//
	// CertificateSigningRequest is a required field
	CertificateSigningRequest *string `locationName:"certificateSigningRequest" min:"1" type:"string" required:"true"`

	// Specifies whether the certificate is active.
	SetAsActive *bool `location:"querystring" locationName:"setAsActive" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCertificateFromCsrInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCertificateFromCsrInput) GoString() string {
	return s.String()
}

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

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

// SetCertificateSigningRequest sets the CertificateSigningRequest field's value.
func (s *CreateCertificateFromCsrInput) SetCertificateSigningRequest(v string) *CreateCertificateFromCsrInput {
	s.CertificateSigningRequest = &v
	return s
}

// SetSetAsActive sets the SetAsActive field's value.
func (s *CreateCertificateFromCsrInput) SetSetAsActive(v bool) *CreateCertificateFromCsrInput {
	s.SetAsActive = &v
	return s
}

// The output from the CreateCertificateFromCsr operation.
type CreateCertificateFromCsrOutput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the certificate. You can use the ARN as
	// a principal for policy operations.
	CertificateArn *string `locationName:"certificateArn" type:"string"`

	// The ID of the certificate. Certificate management operations only take a
	// certificateId.
	CertificateId *string `locationName:"certificateId" min:"64" type:"string"`

	// The certificate data, in PEM format.
	CertificatePem *string `locationName:"certificatePem" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCertificateFromCsrOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCertificateFromCsrOutput) GoString() string {
	return s.String()
}

// SetCertificateArn sets the CertificateArn field's value.
func (s *CreateCertificateFromCsrOutput) SetCertificateArn(v string) *CreateCertificateFromCsrOutput {
	s.CertificateArn = &v
	return s
}

// SetCertificateId sets the CertificateId field's value.
func (s *CreateCertificateFromCsrOutput) SetCertificateId(v string) *CreateCertificateFromCsrOutput {
	s.CertificateId = &v
	return s
}

// SetCertificatePem sets the CertificatePem field's value.
func (s *CreateCertificateFromCsrOutput) SetCertificatePem(v string) *CreateCertificateFromCsrOutput {
	s.CertificatePem = &v
	return s
}

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

	// A list of the operations that the certificate provider will use to generate
	// certificates. Valid value: CreateCertificateFromCsr.
	//
	// AccountDefaultForOperations is a required field
	AccountDefaultForOperations []*string `locationName:"accountDefaultForOperations" min:"1" type:"list" required:"true" enum:"CertificateProviderOperation"`

	// The name of the certificate provider.
	//
	// CertificateProviderName is a required field
	CertificateProviderName *string `location:"uri" locationName:"certificateProviderName" min:"1" type:"string" required:"true"`

	// A string that you can optionally pass in the CreateCertificateProvider request
	// to make sure the request is idempotent.
	ClientToken *string `locationName:"clientToken" min:"36" type:"string" idempotencyToken:"true"`

	// The ARN of the Lambda function that defines the authentication logic.
	//
	// LambdaFunctionArn is a required field
	LambdaFunctionArn *string `locationName:"lambdaFunctionArn" type:"string" required:"true"`

	// Metadata which can be used to manage the certificate provider.
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCertificateProviderInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCertificateProviderInput) GoString() string {
	return s.String()
}

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

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

// SetAccountDefaultForOperations sets the AccountDefaultForOperations field's value.
func (s *CreateCertificateProviderInput) SetAccountDefaultForOperations(v []*string) *CreateCertificateProviderInput {
	s.AccountDefaultForOperations = v
	return s
}

// SetCertificateProviderName sets the CertificateProviderName field's value.
func (s *CreateCertificateProviderInput) SetCertificateProviderName(v string) *CreateCertificateProviderInput {
	s.CertificateProviderName = &v
	return s
}

// SetClientToken sets the ClientToken field's value.
func (s *CreateCertificateProviderInput) SetClientToken(v string) *CreateCertificateProviderInput {
	s.ClientToken = &v
	return s
}

// SetLambdaFunctionArn sets the LambdaFunctionArn field's value.
func (s *CreateCertificateProviderInput) SetLambdaFunctionArn(v string) *CreateCertificateProviderInput {
	s.LambdaFunctionArn = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateCertificateProviderInput) SetTags(v []*Tag) *CreateCertificateProviderInput {
	s.Tags = v
	return s
}

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

	// The ARN of the certificate provider.
	CertificateProviderArn *string `locationName:"certificateProviderArn" type:"string"`

	// The name of the certificate provider.
	CertificateProviderName *string `locationName:"certificateProviderName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCertificateProviderOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCertificateProviderOutput) GoString() string {
	return s.String()
}

// SetCertificateProviderArn sets the CertificateProviderArn field's value.
func (s *CreateCertificateProviderOutput) SetCertificateProviderArn(v string) *CreateCertificateProviderOutput {
	s.CertificateProviderArn = &v
	return s
}

// SetCertificateProviderName sets the CertificateProviderName field's value.
func (s *CreateCertificateProviderOutput) SetCertificateProviderName(v string) *CreateCertificateProviderOutput {
	s.CertificateProviderName = &v
	return s
}

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

	// Each custom metric must have a unique client request token. If you try to
	// create a new custom metric that already exists with a different token, an
	// exception occurs. If you omit this value, Amazon Web Services SDKs will automatically
	// generate a unique client request.
	ClientRequestToken *string `locationName:"clientRequestToken" min:"1" type:"string" idempotencyToken:"true"`

	// The friendly name in the console for the custom metric. This name doesn't
	// have to be unique. Don't use this name as the metric identifier in the device
	// metric report. You can update the friendly name after you define it.
	DisplayName *string `locationName:"displayName" type:"string"`

	// The name of the custom metric. This will be used in the metric report submitted
	// from the device/thing. The name can't begin with aws:. You can't change the
	// name after you define it.
	//
	// MetricName is a required field
	MetricName *string `location:"uri" locationName:"metricName" min:"1" type:"string" required:"true"`

	// The type of the custom metric.
	//
	// The type number only takes a single metric value as an input, but when you
	// submit the metrics value in the DeviceMetrics report, you must pass it as
	// an array with a single value.
	//
	// MetricType is a required field
	MetricType *string `locationName:"metricType" type:"string" required:"true" enum:"CustomMetricType"`

	// Metadata that can be used to manage the custom metric.
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCustomMetricInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCustomMetricInput) GoString() string {
	return s.String()
}

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

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

// SetClientRequestToken sets the ClientRequestToken field's value.
func (s *CreateCustomMetricInput) SetClientRequestToken(v string) *CreateCustomMetricInput {
	s.ClientRequestToken = &v
	return s
}

// SetDisplayName sets the DisplayName field's value.
func (s *CreateCustomMetricInput) SetDisplayName(v string) *CreateCustomMetricInput {
	s.DisplayName = &v
	return s
}

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

// SetMetricType sets the MetricType field's value.
func (s *CreateCustomMetricInput) SetMetricType(v string) *CreateCustomMetricInput {
	s.MetricType = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateCustomMetricInput) SetTags(v []*Tag) *CreateCustomMetricInput {
	s.Tags = v
	return s
}

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

	// The Amazon Resource Number (ARN) of the custom metric. For example, arn:aws-partition:iot:region:accountId:custommetric/metricName
	MetricArn *string `locationName:"metricArn" type:"string"`

	// The name of the custom metric to be used in the metric report.
	MetricName *string `locationName:"metricName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCustomMetricOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateCustomMetricOutput) GoString() string {
	return s.String()
}

// SetMetricArn sets the MetricArn field's value.
func (s *CreateCustomMetricOutput) SetMetricArn(v string) *CreateCustomMetricOutput {
	s.MetricArn = &v
	return s
}

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

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

	// Each dimension must have a unique client request token. If you try to create
	// a new dimension with the same token as a dimension that already exists, an
	// exception occurs. If you omit this value, Amazon Web Services SDKs will automatically
	// generate a unique client request.
	ClientRequestToken *string `locationName:"clientRequestToken" min:"1" type:"string" idempotencyToken:"true"`

	// A unique identifier for the dimension. Choose something that describes the
	// type and value to make it easy to remember what it does.
	//
	// Name is a required field
	Name *string `location:"uri" locationName:"name" min:"1" type:"string" required:"true"`

	// Specifies the value or list of values for the dimension. For TOPIC_FILTER
	// dimensions, this is a pattern used to match the MQTT topic (for example,
	// "admin/#").
	//
	// StringValues is a required field
	StringValues []*string `locationName:"stringValues" min:"1" type:"list" required:"true"`

	// Metadata that can be used to manage the dimension.
	Tags []*Tag `locationName:"tags" type:"list"`

	// Specifies the type of dimension. Supported types: TOPIC_FILTER.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true" enum:"DimensionType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateDimensionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateDimensionInput) GoString() string {
	return s.String()
}

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

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

// SetClientRequestToken sets the ClientRequestToken field's value.
func (s *CreateDimensionInput) SetClientRequestToken(v string) *CreateDimensionInput {
	s.ClientRequestToken = &v
	return s
}

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

// SetStringValues sets the StringValues field's value.
func (s *CreateDimensionInput) SetStringValues(v []*string) *CreateDimensionInput {
	s.StringValues = v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateDimensionInput) SetTags(v []*Tag) *CreateDimensionInput {
	s.Tags = v
	return s
}

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

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

	// The Amazon Resource Name (ARN) of the created dimension.
	Arn *string `locationName:"arn" type:"string"`

	// A unique identifier for the dimension.
	Name *string `locationName:"name" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateDimensionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateDimensionOutput) GoString() string {
	return s.String()
}

// SetArn sets the Arn field's value.
func (s *CreateDimensionOutput) SetArn(v string) *CreateDimensionOutput {
	s.Arn = &v
	return s
}

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

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

	// An object that specifies the authorization service for a domain.
	AuthorizerConfig *AuthorizerConfig `locationName:"authorizerConfig" type:"structure"`

	// The name of the domain configuration. This value must be unique to a region.
	//
	// DomainConfigurationName is a required field
	DomainConfigurationName *string `location:"uri" locationName:"domainConfigurationName" min:"1" type:"string" required:"true"`

	// The name of the domain.
	DomainName *string `locationName:"domainName" min:"1" type:"string"`

	// The ARNs of the certificates that IoT passes to the device during the TLS
	// handshake. Currently you can specify only one certificate ARN. This value
	// is not required for Amazon Web Services-managed domains.
	ServerCertificateArns []*string `locationName:"serverCertificateArns" type:"list"`

	// The server certificate configuration.
	ServerCertificateConfig *ServerCertificateConfig `locationName:"serverCertificateConfig" type:"structure"`

	// The type of service delivered by the endpoint.
	//
	// Amazon Web Services IoT Core currently supports only the DATA service type.
	ServiceType *string `locationName:"serviceType" type:"string" enum:"ServiceType"`

	// Metadata which can be used to manage the domain configuration.
	//
	// For URI Request parameters use format: ...key1=value1&key2=value2...
	//
	// For the CLI command-line parameter use format: &&tags "key1=value1&key2=value2..."
	//
	// For the cli-input-json file use format: "tags": "key1=value1&key2=value2..."
	Tags []*Tag `locationName:"tags" type:"list"`

	// An object that specifies the TLS configuration for a domain.
	TlsConfig *TlsConfig `locationName:"tlsConfig" type:"structure"`

	// The certificate used to validate the server certificate and prove domain
	// name ownership. This certificate must be signed by a public certificate authority.
	// This value is not required for Amazon Web Services-managed domains.
	ValidationCertificateArn *string `locationName:"validationCertificateArn" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateDomainConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateDomainConfigurationInput) GoString() string {
	return s.String()
}

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

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

// SetAuthorizerConfig sets the AuthorizerConfig field's value.
func (s *CreateDomainConfigurationInput) SetAuthorizerConfig(v *AuthorizerConfig) *CreateDomainConfigurationInput {
	s.AuthorizerConfig = v
	return s
}

// SetDomainConfigurationName sets the DomainConfigurationName field's value.
func (s *CreateDomainConfigurationInput) SetDomainConfigurationName(v string) *CreateDomainConfigurationInput {
	s.DomainConfigurationName = &v
	return s
}

// SetDomainName sets the DomainName field's value.
func (s *CreateDomainConfigurationInput) SetDomainName(v string) *CreateDomainConfigurationInput {
	s.DomainName = &v
	return s
}

// SetServerCertificateArns sets the ServerCertificateArns field's value.
func (s *CreateDomainConfigurationInput) SetServerCertificateArns(v []*string) *CreateDomainConfigurationInput {
	s.ServerCertificateArns = v
	return s
}

// SetServerCertificateConfig sets the ServerCertificateConfig field's value.
func (s *CreateDomainConfigurationInput) SetServerCertificateConfig(v *ServerCertificateConfig) *CreateDomainConfigurationInput {
	s.ServerCertificateConfig = v
	return s
}

// SetServiceType sets the ServiceType field's value.
func (s *CreateDomainConfigurationInput) SetServiceType(v string) *CreateDomainConfigurationInput {
	s.ServiceType = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateDomainConfigurationInput) SetTags(v []*Tag) *CreateDomainConfigurationInput {
	s.Tags = v
	return s
}

// SetTlsConfig sets the TlsConfig field's value.
func (s *CreateDomainConfigurationInput) SetTlsConfig(v *TlsConfig) *CreateDomainConfigurationInput {
	s.TlsConfig = v
	return s
}

// SetValidationCertificateArn sets the ValidationCertificateArn field's value.
func (s *CreateDomainConfigurationInput) SetValidationCertificateArn(v string) *CreateDomainConfigurationInput {
	s.ValidationCertificateArn = &v
	return s
}

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

	// The ARN of the domain configuration.
	DomainConfigurationArn *string `locationName:"domainConfigurationArn" type:"string"`

	// The name of the domain configuration.
	DomainConfigurationName *string `locationName:"domainConfigurationName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateDomainConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateDomainConfigurationOutput) GoString() string {
	return s.String()
}

// SetDomainConfigurationArn sets the DomainConfigurationArn field's value.
func (s *CreateDomainConfigurationOutput) SetDomainConfigurationArn(v string) *CreateDomainConfigurationOutput {
	s.DomainConfigurationArn = &v
	return s
}

// SetDomainConfigurationName sets the DomainConfigurationName field's value.
func (s *CreateDomainConfigurationOutput) SetDomainConfigurationName(v string) *CreateDomainConfigurationOutput {
	s.DomainConfigurationName = &v
	return s
}

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

	// The dynamic thing group index name.
	//
	// Currently one index is supported: AWS_Things.
	IndexName *string `locationName:"indexName" min:"1" type:"string"`

	// The dynamic thing group search query string.
	//
	// See Query Syntax (https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html)
	// for information about query string syntax.
	//
	// QueryString is a required field
	QueryString *string `locationName:"queryString" min:"1" type:"string" required:"true"`

	// The dynamic thing group query version.
	//
	// Currently one query version is supported: "2017-09-30". If not specified,
	// the query version defaults to this value.
	QueryVersion *string `locationName:"queryVersion" type:"string"`

	// Metadata which can be used to manage the dynamic thing group.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The dynamic thing group name to create.
	//
	// ThingGroupName is a required field
	ThingGroupName *string `location:"uri" locationName:"thingGroupName" min:"1" type:"string" required:"true"`

	// The dynamic thing group properties.
	ThingGroupProperties *ThingGroupProperties `locationName:"thingGroupProperties" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateDynamicThingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateDynamicThingGroupInput) GoString() string {
	return s.String()
}

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

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

// SetIndexName sets the IndexName field's value.
func (s *CreateDynamicThingGroupInput) SetIndexName(v string) *CreateDynamicThingGroupInput {
	s.IndexName = &v
	return s
}

// SetQueryString sets the QueryString field's value.
func (s *CreateDynamicThingGroupInput) SetQueryString(v string) *CreateDynamicThingGroupInput {
	s.QueryString = &v
	return s
}

// SetQueryVersion sets the QueryVersion field's value.
func (s *CreateDynamicThingGroupInput) SetQueryVersion(v string) *CreateDynamicThingGroupInput {
	s.QueryVersion = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateDynamicThingGroupInput) SetTags(v []*Tag) *CreateDynamicThingGroupInput {
	s.Tags = v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *CreateDynamicThingGroupInput) SetThingGroupName(v string) *CreateDynamicThingGroupInput {
	s.ThingGroupName = &v
	return s
}

// SetThingGroupProperties sets the ThingGroupProperties field's value.
func (s *CreateDynamicThingGroupInput) SetThingGroupProperties(v *ThingGroupProperties) *CreateDynamicThingGroupInput {
	s.ThingGroupProperties = v
	return s
}

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

	// The dynamic thing group index name.
	IndexName *string `locationName:"indexName" min:"1" type:"string"`

	// The dynamic thing group search query string.
	QueryString *string `locationName:"queryString" min:"1" type:"string"`

	// The dynamic thing group query version.
	QueryVersion *string `locationName:"queryVersion" type:"string"`

	// The dynamic thing group ARN.
	ThingGroupArn *string `locationName:"thingGroupArn" type:"string"`

	// The dynamic thing group ID.
	ThingGroupId *string `locationName:"thingGroupId" min:"1" type:"string"`

	// The dynamic thing group name.
	ThingGroupName *string `locationName:"thingGroupName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateDynamicThingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateDynamicThingGroupOutput) GoString() string {
	return s.String()
}

// SetIndexName sets the IndexName field's value.
func (s *CreateDynamicThingGroupOutput) SetIndexName(v string) *CreateDynamicThingGroupOutput {
	s.IndexName = &v
	return s
}

// SetQueryString sets the QueryString field's value.
func (s *CreateDynamicThingGroupOutput) SetQueryString(v string) *CreateDynamicThingGroupOutput {
	s.QueryString = &v
	return s
}

// SetQueryVersion sets the QueryVersion field's value.
func (s *CreateDynamicThingGroupOutput) SetQueryVersion(v string) *CreateDynamicThingGroupOutput {
	s.QueryVersion = &v
	return s
}

// SetThingGroupArn sets the ThingGroupArn field's value.
func (s *CreateDynamicThingGroupOutput) SetThingGroupArn(v string) *CreateDynamicThingGroupOutput {
	s.ThingGroupArn = &v
	return s
}

// SetThingGroupId sets the ThingGroupId field's value.
func (s *CreateDynamicThingGroupOutput) SetThingGroupId(v string) *CreateDynamicThingGroupOutput {
	s.ThingGroupId = &v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *CreateDynamicThingGroupOutput) SetThingGroupName(v string) *CreateDynamicThingGroupOutput {
	s.ThingGroupName = &v
	return s
}

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

	// The field to aggregate.
	//
	// AggregationField is a required field
	AggregationField *string `locationName:"aggregationField" min:"1" type:"string" required:"true"`

	// The type of the aggregation query.
	//
	// AggregationType is a required field
	AggregationType *AggregationType `locationName:"aggregationType" type:"structure" required:"true"`

	// The fleet metric description.
	Description *string `locationName:"description" type:"string"`

	// The name of the index to search.
	IndexName *string `locationName:"indexName" min:"1" type:"string"`

	// The name of the fleet metric to create.
	//
	// MetricName is a required field
	MetricName *string `location:"uri" locationName:"metricName" min:"1" type:"string" required:"true"`

	// The time in seconds between fleet metric emissions. Range [60(1 min), 86400(1
	// day)] and must be multiple of 60.
	//
	// Period is a required field
	Period *int64 `locationName:"period" min:"60" type:"integer" required:"true"`

	// The search query string.
	//
	// QueryString is a required field
	QueryString *string `locationName:"queryString" min:"1" type:"string" required:"true"`

	// The query version.
	QueryVersion *string `locationName:"queryVersion" type:"string"`

	// Metadata, which can be used to manage the fleet metric.
	Tags []*Tag `locationName:"tags" type:"list"`

	// Used to support unit transformation such as milliseconds to seconds. The
	// unit must be supported by CW metric (https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html).
	// Default to null.
	Unit *string `locationName:"unit" type:"string" enum:"FleetMetricUnit"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateFleetMetricInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateFleetMetricInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateFleetMetricInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateFleetMetricInput"}
	if s.AggregationField == nil {
		invalidParams.Add(request.NewErrParamRequired("AggregationField"))
	}
	if s.AggregationField != nil && len(*s.AggregationField) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AggregationField", 1))
	}
	if s.AggregationType == nil {
		invalidParams.Add(request.NewErrParamRequired("AggregationType"))
	}
	if s.IndexName != nil && len(*s.IndexName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("IndexName", 1))
	}
	if s.MetricName == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricName"))
	}
	if s.MetricName != nil && len(*s.MetricName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("MetricName", 1))
	}
	if s.Period == nil {
		invalidParams.Add(request.NewErrParamRequired("Period"))
	}
	if s.Period != nil && *s.Period < 60 {
		invalidParams.Add(request.NewErrParamMinValue("Period", 60))
	}
	if s.QueryString == nil {
		invalidParams.Add(request.NewErrParamRequired("QueryString"))
	}
	if s.QueryString != nil && len(*s.QueryString) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("QueryString", 1))
	}
	if s.AggregationType != nil {
		if err := s.AggregationType.Validate(); err != nil {
			invalidParams.AddNested("AggregationType", err.(request.ErrInvalidParams))
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetAggregationField sets the AggregationField field's value.
func (s *CreateFleetMetricInput) SetAggregationField(v string) *CreateFleetMetricInput {
	s.AggregationField = &v
	return s
}

// SetAggregationType sets the AggregationType field's value.
func (s *CreateFleetMetricInput) SetAggregationType(v *AggregationType) *CreateFleetMetricInput {
	s.AggregationType = v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreateFleetMetricInput) SetDescription(v string) *CreateFleetMetricInput {
	s.Description = &v
	return s
}

// SetIndexName sets the IndexName field's value.
func (s *CreateFleetMetricInput) SetIndexName(v string) *CreateFleetMetricInput {
	s.IndexName = &v
	return s
}

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

// SetPeriod sets the Period field's value.
func (s *CreateFleetMetricInput) SetPeriod(v int64) *CreateFleetMetricInput {
	s.Period = &v
	return s
}

// SetQueryString sets the QueryString field's value.
func (s *CreateFleetMetricInput) SetQueryString(v string) *CreateFleetMetricInput {
	s.QueryString = &v
	return s
}

// SetQueryVersion sets the QueryVersion field's value.
func (s *CreateFleetMetricInput) SetQueryVersion(v string) *CreateFleetMetricInput {
	s.QueryVersion = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateFleetMetricInput) SetTags(v []*Tag) *CreateFleetMetricInput {
	s.Tags = v
	return s
}

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

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

	// The Amazon Resource Name (ARN) of the new fleet metric.
	MetricArn *string `locationName:"metricArn" type:"string"`

	// The name of the fleet metric to create.
	MetricName *string `locationName:"metricName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateFleetMetricOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateFleetMetricOutput) GoString() string {
	return s.String()
}

// SetMetricArn sets the MetricArn field's value.
func (s *CreateFleetMetricOutput) SetMetricArn(v string) *CreateFleetMetricOutput {
	s.MetricArn = &v
	return s
}

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

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

	// Allows you to create the criteria to abort a job.
	AbortConfig *AbortConfig `locationName:"abortConfig" type:"structure"`

	// A short text description of the job.
	Description *string `locationName:"description" type:"string"`

	// The package version Amazon Resource Names (ARNs) that are installed on the
	// device when the job successfully completes. The package version must be in
	// either the Published or Deprecated state when the job deploys. For more information,
	// see Package version lifecycle (https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#package-version-lifecycle).
	//
	// Note:The following Length Constraints relates to a single ARN. Up to 25 package
	// version ARNs are allowed.
	DestinationPackageVersions []*string `locationName:"destinationPackageVersions" type:"list"`

	// The job document. Required if you don't specify a value for documentSource.
	Document *string `locationName:"document" type:"string"`

	// Parameters of an Amazon Web Services managed template that you can specify
	// to create the job document.
	//
	// documentParameters can only be used when creating jobs from Amazon Web Services
	// managed templates. This parameter can't be used with custom job templates
	// or to create jobs from them.
	DocumentParameters map[string]*string `locationName:"documentParameters" type:"map"`

	// An S3 link, or S3 object URL, to the job document. The link is an Amazon
	// S3 object URL and is required if you don't specify a value for document.
	//
	// For example, --document-source https://s3.region-code.amazonaws.com/example-firmware/device-firmware.1.0
	//
	// For more information, see Methods for accessing a bucket (https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html).
	DocumentSource *string `locationName:"documentSource" min:"1" type:"string"`

	// Allows you to create the criteria to retry a job.
	JobExecutionsRetryConfig *JobExecutionsRetryConfig `locationName:"jobExecutionsRetryConfig" type:"structure"`

	// Allows you to create a staged rollout of the job.
	JobExecutionsRolloutConfig *JobExecutionsRolloutConfig `locationName:"jobExecutionsRolloutConfig" type:"structure"`

	// A job identifier which must be unique for your Amazon Web Services account.
	// We recommend using a UUID. Alpha-numeric characters, "-" and "_" are valid
	// for use here.
	//
	// JobId is a required field
	JobId *string `location:"uri" locationName:"jobId" min:"1" type:"string" required:"true"`

	// The ARN of the job template used to create the job.
	JobTemplateArn *string `locationName:"jobTemplateArn" min:"1" type:"string"`

	// The namespace used to indicate that a job is a customer-managed job.
	//
	// When you specify a value for this parameter, Amazon Web Services IoT Core
	// sends jobs notifications to MQTT topics that contain the value in the following
	// format.
	//
	// $aws/things/THING_NAME/jobs/JOB_ID/notify-namespace-NAMESPACE_ID/
	//
	// The namespaceId feature is only supported by IoT Greengrass at this time.
	// For more information, see Setting up IoT Greengrass core devices. (https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html)
	NamespaceId *string `locationName:"namespaceId" type:"string"`

	// Configuration information for pre-signed S3 URLs.
	PresignedUrlConfig *PresignedUrlConfig `locationName:"presignedUrlConfig" type:"structure"`

	// The configuration that allows you to schedule a job for a future date and
	// time in addition to specifying the end behavior for each job execution.
	SchedulingConfig *SchedulingConfig `locationName:"schedulingConfig" type:"structure"`

	// Metadata which can be used to manage the job.
	Tags []*Tag `locationName:"tags" type:"list"`

	// Specifies whether the job will continue to run (CONTINUOUS), or will be complete
	// after all those things specified as targets have completed the job (SNAPSHOT).
	// If continuous, the job may also be run on a thing when a change is detected
	// in a target. For example, a job will run on a thing when the thing is added
	// to a target group, even after the job was completed by all things originally
	// in the group.
	//
	// We recommend that you use continuous jobs instead of snapshot jobs for dynamic
	// thing group targets. By using continuous jobs, devices that join the group
	// receive the job execution even after the job has been created.
	TargetSelection *string `locationName:"targetSelection" type:"string" enum:"TargetSelection"`

	// A list of things and thing groups to which the job should be sent.
	//
	// Targets is a required field
	Targets []*string `locationName:"targets" min:"1" type:"list" required:"true"`

	// Specifies the amount of time each device has to finish its execution of the
	// job. The timer is started when the job execution status is set to IN_PROGRESS.
	// If the job execution status is not set to another terminal state before the
	// time expires, it will be automatically set to TIMED_OUT.
	TimeoutConfig *TimeoutConfig `locationName:"timeoutConfig" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateJobInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateJobInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateJobInput"}
	if s.DocumentSource != nil && len(*s.DocumentSource) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DocumentSource", 1))
	}
	if s.JobId == nil {
		invalidParams.Add(request.NewErrParamRequired("JobId"))
	}
	if s.JobId != nil && len(*s.JobId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("JobId", 1))
	}
	if s.JobTemplateArn != nil && len(*s.JobTemplateArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("JobTemplateArn", 1))
	}
	if s.Targets == nil {
		invalidParams.Add(request.NewErrParamRequired("Targets"))
	}
	if s.Targets != nil && len(s.Targets) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Targets", 1))
	}
	if s.AbortConfig != nil {
		if err := s.AbortConfig.Validate(); err != nil {
			invalidParams.AddNested("AbortConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.JobExecutionsRetryConfig != nil {
		if err := s.JobExecutionsRetryConfig.Validate(); err != nil {
			invalidParams.AddNested("JobExecutionsRetryConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.JobExecutionsRolloutConfig != nil {
		if err := s.JobExecutionsRolloutConfig.Validate(); err != nil {
			invalidParams.AddNested("JobExecutionsRolloutConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.PresignedUrlConfig != nil {
		if err := s.PresignedUrlConfig.Validate(); err != nil {
			invalidParams.AddNested("PresignedUrlConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.SchedulingConfig != nil {
		if err := s.SchedulingConfig.Validate(); err != nil {
			invalidParams.AddNested("SchedulingConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetAbortConfig sets the AbortConfig field's value.
func (s *CreateJobInput) SetAbortConfig(v *AbortConfig) *CreateJobInput {
	s.AbortConfig = v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreateJobInput) SetDescription(v string) *CreateJobInput {
	s.Description = &v
	return s
}

// SetDestinationPackageVersions sets the DestinationPackageVersions field's value.
func (s *CreateJobInput) SetDestinationPackageVersions(v []*string) *CreateJobInput {
	s.DestinationPackageVersions = v
	return s
}

// SetDocument sets the Document field's value.
func (s *CreateJobInput) SetDocument(v string) *CreateJobInput {
	s.Document = &v
	return s
}

// SetDocumentParameters sets the DocumentParameters field's value.
func (s *CreateJobInput) SetDocumentParameters(v map[string]*string) *CreateJobInput {
	s.DocumentParameters = v
	return s
}

// SetDocumentSource sets the DocumentSource field's value.
func (s *CreateJobInput) SetDocumentSource(v string) *CreateJobInput {
	s.DocumentSource = &v
	return s
}

// SetJobExecutionsRetryConfig sets the JobExecutionsRetryConfig field's value.
func (s *CreateJobInput) SetJobExecutionsRetryConfig(v *JobExecutionsRetryConfig) *CreateJobInput {
	s.JobExecutionsRetryConfig = v
	return s
}

// SetJobExecutionsRolloutConfig sets the JobExecutionsRolloutConfig field's value.
func (s *CreateJobInput) SetJobExecutionsRolloutConfig(v *JobExecutionsRolloutConfig) *CreateJobInput {
	s.JobExecutionsRolloutConfig = v
	return s
}

// SetJobId sets the JobId field's value.
func (s *CreateJobInput) SetJobId(v string) *CreateJobInput {
	s.JobId = &v
	return s
}

// SetJobTemplateArn sets the JobTemplateArn field's value.
func (s *CreateJobInput) SetJobTemplateArn(v string) *CreateJobInput {
	s.JobTemplateArn = &v
	return s
}

// SetNamespaceId sets the NamespaceId field's value.
func (s *CreateJobInput) SetNamespaceId(v string) *CreateJobInput {
	s.NamespaceId = &v
	return s
}

// SetPresignedUrlConfig sets the PresignedUrlConfig field's value.
func (s *CreateJobInput) SetPresignedUrlConfig(v *PresignedUrlConfig) *CreateJobInput {
	s.PresignedUrlConfig = v
	return s
}

// SetSchedulingConfig sets the SchedulingConfig field's value.
func (s *CreateJobInput) SetSchedulingConfig(v *SchedulingConfig) *CreateJobInput {
	s.SchedulingConfig = v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateJobInput) SetTags(v []*Tag) *CreateJobInput {
	s.Tags = v
	return s
}

// SetTargetSelection sets the TargetSelection field's value.
func (s *CreateJobInput) SetTargetSelection(v string) *CreateJobInput {
	s.TargetSelection = &v
	return s
}

// SetTargets sets the Targets field's value.
func (s *CreateJobInput) SetTargets(v []*string) *CreateJobInput {
	s.Targets = v
	return s
}

// SetTimeoutConfig sets the TimeoutConfig field's value.
func (s *CreateJobInput) SetTimeoutConfig(v *TimeoutConfig) *CreateJobInput {
	s.TimeoutConfig = v
	return s
}

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

	// The job description.
	Description *string `locationName:"description" type:"string"`

	// The job ARN.
	JobArn *string `locationName:"jobArn" type:"string"`

	// The unique identifier you assigned to this job.
	JobId *string `locationName:"jobId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateJobOutput) GoString() string {
	return s.String()
}

// SetDescription sets the Description field's value.
func (s *CreateJobOutput) SetDescription(v string) *CreateJobOutput {
	s.Description = &v
	return s
}

// SetJobArn sets the JobArn field's value.
func (s *CreateJobOutput) SetJobArn(v string) *CreateJobOutput {
	s.JobArn = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *CreateJobOutput) SetJobId(v string) *CreateJobOutput {
	s.JobId = &v
	return s
}

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

	// The criteria that determine when and how a job abort takes place.
	AbortConfig *AbortConfig `locationName:"abortConfig" type:"structure"`

	// A description of the job document.
	//
	// Description is a required field
	Description *string `locationName:"description" type:"string" required:"true"`

	// The package version Amazon Resource Names (ARNs) that are installed on the
	// device when the job successfully completes. The package version must be in
	// either the Published or Deprecated state when the job deploys. For more information,
	// see Package version lifecycle (https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#package-version-lifecycle).
	//
	// Note:The following Length Constraints relates to a single ARN. Up to 25 package
	// version ARNs are allowed.
	DestinationPackageVersions []*string `locationName:"destinationPackageVersions" type:"list"`

	// The job document. Required if you don't specify a value for documentSource.
	Document *string `locationName:"document" type:"string"`

	// An S3 link, or S3 object URL, to the job document. The link is an Amazon
	// S3 object URL and is required if you don't specify a value for document.
	//
	// For example, --document-source https://s3.region-code.amazonaws.com/example-firmware/device-firmware.1.0
	//
	// For more information, see Methods for accessing a bucket (https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html).
	DocumentSource *string `locationName:"documentSource" min:"1" type:"string"`

	// The ARN of the job to use as the basis for the job template.
	JobArn *string `locationName:"jobArn" type:"string"`

	// Allows you to create the criteria to retry a job.
	JobExecutionsRetryConfig *JobExecutionsRetryConfig `locationName:"jobExecutionsRetryConfig" type:"structure"`

	// Allows you to create a staged rollout of a job.
	JobExecutionsRolloutConfig *JobExecutionsRolloutConfig `locationName:"jobExecutionsRolloutConfig" type:"structure"`

	// A unique identifier for the job template. We recommend using a UUID. Alpha-numeric
	// characters, "-", and "_" are valid for use here.
	//
	// JobTemplateId is a required field
	JobTemplateId *string `location:"uri" locationName:"jobTemplateId" min:"1" type:"string" required:"true"`

	// Allows you to configure an optional maintenance window for the rollout of
	// a job document to all devices in the target group for a job.
	MaintenanceWindows []*MaintenanceWindow `locationName:"maintenanceWindows" type:"list"`

	// Configuration for pre-signed S3 URLs.
	PresignedUrlConfig *PresignedUrlConfig `locationName:"presignedUrlConfig" type:"structure"`

	// Metadata that can be used to manage the job template.
	Tags []*Tag `locationName:"tags" type:"list"`

	// Specifies the amount of time each device has to finish its execution of the
	// job. A timer is started when the job execution status is set to IN_PROGRESS.
	// If the job execution status is not set to another terminal state before the
	// timer expires, it will be automatically set to TIMED_OUT.
	TimeoutConfig *TimeoutConfig `locationName:"timeoutConfig" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateJobTemplateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateJobTemplateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateJobTemplateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateJobTemplateInput"}
	if s.Description == nil {
		invalidParams.Add(request.NewErrParamRequired("Description"))
	}
	if s.DocumentSource != nil && len(*s.DocumentSource) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DocumentSource", 1))
	}
	if s.JobTemplateId == nil {
		invalidParams.Add(request.NewErrParamRequired("JobTemplateId"))
	}
	if s.JobTemplateId != nil && len(*s.JobTemplateId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("JobTemplateId", 1))
	}
	if s.AbortConfig != nil {
		if err := s.AbortConfig.Validate(); err != nil {
			invalidParams.AddNested("AbortConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.JobExecutionsRetryConfig != nil {
		if err := s.JobExecutionsRetryConfig.Validate(); err != nil {
			invalidParams.AddNested("JobExecutionsRetryConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.JobExecutionsRolloutConfig != nil {
		if err := s.JobExecutionsRolloutConfig.Validate(); err != nil {
			invalidParams.AddNested("JobExecutionsRolloutConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.MaintenanceWindows != nil {
		for i, v := range s.MaintenanceWindows {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "MaintenanceWindows", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.PresignedUrlConfig != nil {
		if err := s.PresignedUrlConfig.Validate(); err != nil {
			invalidParams.AddNested("PresignedUrlConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetAbortConfig sets the AbortConfig field's value.
func (s *CreateJobTemplateInput) SetAbortConfig(v *AbortConfig) *CreateJobTemplateInput {
	s.AbortConfig = v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreateJobTemplateInput) SetDescription(v string) *CreateJobTemplateInput {
	s.Description = &v
	return s
}

// SetDestinationPackageVersions sets the DestinationPackageVersions field's value.
func (s *CreateJobTemplateInput) SetDestinationPackageVersions(v []*string) *CreateJobTemplateInput {
	s.DestinationPackageVersions = v
	return s
}

// SetDocument sets the Document field's value.
func (s *CreateJobTemplateInput) SetDocument(v string) *CreateJobTemplateInput {
	s.Document = &v
	return s
}

// SetDocumentSource sets the DocumentSource field's value.
func (s *CreateJobTemplateInput) SetDocumentSource(v string) *CreateJobTemplateInput {
	s.DocumentSource = &v
	return s
}

// SetJobArn sets the JobArn field's value.
func (s *CreateJobTemplateInput) SetJobArn(v string) *CreateJobTemplateInput {
	s.JobArn = &v
	return s
}

// SetJobExecutionsRetryConfig sets the JobExecutionsRetryConfig field's value.
func (s *CreateJobTemplateInput) SetJobExecutionsRetryConfig(v *JobExecutionsRetryConfig) *CreateJobTemplateInput {
	s.JobExecutionsRetryConfig = v
	return s
}

// SetJobExecutionsRolloutConfig sets the JobExecutionsRolloutConfig field's value.
func (s *CreateJobTemplateInput) SetJobExecutionsRolloutConfig(v *JobExecutionsRolloutConfig) *CreateJobTemplateInput {
	s.JobExecutionsRolloutConfig = v
	return s
}

// SetJobTemplateId sets the JobTemplateId field's value.
func (s *CreateJobTemplateInput) SetJobTemplateId(v string) *CreateJobTemplateInput {
	s.JobTemplateId = &v
	return s
}

// SetMaintenanceWindows sets the MaintenanceWindows field's value.
func (s *CreateJobTemplateInput) SetMaintenanceWindows(v []*MaintenanceWindow) *CreateJobTemplateInput {
	s.MaintenanceWindows = v
	return s
}

// SetPresignedUrlConfig sets the PresignedUrlConfig field's value.
func (s *CreateJobTemplateInput) SetPresignedUrlConfig(v *PresignedUrlConfig) *CreateJobTemplateInput {
	s.PresignedUrlConfig = v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateJobTemplateInput) SetTags(v []*Tag) *CreateJobTemplateInput {
	s.Tags = v
	return s
}

// SetTimeoutConfig sets the TimeoutConfig field's value.
func (s *CreateJobTemplateInput) SetTimeoutConfig(v *TimeoutConfig) *CreateJobTemplateInput {
	s.TimeoutConfig = v
	return s
}

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

	// The ARN of the job template.
	JobTemplateArn *string `locationName:"jobTemplateArn" min:"1" type:"string"`

	// The unique identifier of the job template.
	JobTemplateId *string `locationName:"jobTemplateId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateJobTemplateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateJobTemplateOutput) GoString() string {
	return s.String()
}

// SetJobTemplateArn sets the JobTemplateArn field's value.
func (s *CreateJobTemplateOutput) SetJobTemplateArn(v string) *CreateJobTemplateOutput {
	s.JobTemplateArn = &v
	return s
}

// SetJobTemplateId sets the JobTemplateId field's value.
func (s *CreateJobTemplateOutput) SetJobTemplateId(v string) *CreateJobTemplateOutput {
	s.JobTemplateId = &v
	return s
}

// The input for the CreateKeysAndCertificate operation.
//
// Requires permission to access the CreateKeysAndCertificateRequest (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions)
// action.
type CreateKeysAndCertificateInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Specifies whether the certificate is active.
	SetAsActive *bool `location:"querystring" locationName:"setAsActive" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateKeysAndCertificateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateKeysAndCertificateInput) GoString() string {
	return s.String()
}

// SetSetAsActive sets the SetAsActive field's value.
func (s *CreateKeysAndCertificateInput) SetSetAsActive(v bool) *CreateKeysAndCertificateInput {
	s.SetAsActive = &v
	return s
}

// The output of the CreateKeysAndCertificate operation.
type CreateKeysAndCertificateOutput struct {
	_ struct{} `type:"structure"`

	// The ARN of the certificate.
	CertificateArn *string `locationName:"certificateArn" type:"string"`

	// The ID of the certificate. IoT issues a default subject name for the certificate
	// (for example, IoT Certificate).
	CertificateId *string `locationName:"certificateId" min:"64" type:"string"`

	// The certificate data, in PEM format.
	CertificatePem *string `locationName:"certificatePem" min:"1" type:"string"`

	// The generated key pair.
	KeyPair *KeyPair `locationName:"keyPair" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateKeysAndCertificateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateKeysAndCertificateOutput) GoString() string {
	return s.String()
}

// SetCertificateArn sets the CertificateArn field's value.
func (s *CreateKeysAndCertificateOutput) SetCertificateArn(v string) *CreateKeysAndCertificateOutput {
	s.CertificateArn = &v
	return s
}

// SetCertificateId sets the CertificateId field's value.
func (s *CreateKeysAndCertificateOutput) SetCertificateId(v string) *CreateKeysAndCertificateOutput {
	s.CertificateId = &v
	return s
}

// SetCertificatePem sets the CertificatePem field's value.
func (s *CreateKeysAndCertificateOutput) SetCertificatePem(v string) *CreateKeysAndCertificateOutput {
	s.CertificatePem = &v
	return s
}

// SetKeyPair sets the KeyPair field's value.
func (s *CreateKeysAndCertificateOutput) SetKeyPair(v *KeyPair) *CreateKeysAndCertificateOutput {
	s.KeyPair = v
	return s
}

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

	// A friendly name for the action. Choose a friendly name that accurately describes
	// the action (for example, EnableLoggingAction).
	//
	// ActionName is a required field
	ActionName *string `location:"uri" locationName:"actionName" type:"string" required:"true"`

	// Defines the type of action and the parameters for that action.
	//
	// ActionParams is a required field
	ActionParams *MitigationActionParams `locationName:"actionParams" type:"structure" required:"true"`

	// The ARN of the IAM role that is used to apply the mitigation action.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" min:"20" type:"string" required:"true"`

	// Metadata that can be used to manage the mitigation action.
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateMitigationActionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateMitigationActionInput) GoString() string {
	return s.String()
}

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

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

// SetActionName sets the ActionName field's value.
func (s *CreateMitigationActionInput) SetActionName(v string) *CreateMitigationActionInput {
	s.ActionName = &v
	return s
}

// SetActionParams sets the ActionParams field's value.
func (s *CreateMitigationActionInput) SetActionParams(v *MitigationActionParams) *CreateMitigationActionInput {
	s.ActionParams = v
	return s
}

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

// SetTags sets the Tags field's value.
func (s *CreateMitigationActionInput) SetTags(v []*Tag) *CreateMitigationActionInput {
	s.Tags = v
	return s
}

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

	// The ARN for the new mitigation action.
	ActionArn *string `locationName:"actionArn" type:"string"`

	// A unique identifier for the new mitigation action.
	ActionId *string `locationName:"actionId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateMitigationActionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateMitigationActionOutput) GoString() string {
	return s.String()
}

// SetActionArn sets the ActionArn field's value.
func (s *CreateMitigationActionOutput) SetActionArn(v string) *CreateMitigationActionOutput {
	s.ActionArn = &v
	return s
}

// SetActionId sets the ActionId field's value.
func (s *CreateMitigationActionOutput) SetActionId(v string) *CreateMitigationActionOutput {
	s.ActionId = &v
	return s
}

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

	// A list of additional OTA update parameters, which are name-value pairs. They
	// won't be sent to devices as a part of the Job document.
	AdditionalParameters map[string]*string `locationName:"additionalParameters" type:"map"`

	// The criteria that determine when and how a job abort takes place.
	AwsJobAbortConfig *AwsJobAbortConfig `locationName:"awsJobAbortConfig" type:"structure"`

	// Configuration for the rollout of OTA updates.
	AwsJobExecutionsRolloutConfig *AwsJobExecutionsRolloutConfig `locationName:"awsJobExecutionsRolloutConfig" type:"structure"`

	// Configuration information for pre-signed URLs.
	AwsJobPresignedUrlConfig *AwsJobPresignedUrlConfig `locationName:"awsJobPresignedUrlConfig" type:"structure"`

	// Specifies the amount of time each device has to finish its execution of the
	// job. A timer is started when the job execution status is set to IN_PROGRESS.
	// If the job execution status is not set to another terminal state before the
	// timer expires, it will be automatically set to TIMED_OUT.
	AwsJobTimeoutConfig *AwsJobTimeoutConfig `locationName:"awsJobTimeoutConfig" type:"structure"`

	// The description of the OTA update.
	Description *string `locationName:"description" type:"string"`

	// The files to be streamed by the OTA update.
	//
	// Files is a required field
	Files []*OTAUpdateFile `locationName:"files" min:"1" type:"list" required:"true"`

	// The ID of the OTA update to be created.
	//
	// OtaUpdateId is a required field
	OtaUpdateId *string `location:"uri" locationName:"otaUpdateId" min:"1" type:"string" required:"true"`

	// The protocol used to transfer the OTA update image. Valid values are [HTTP],
	// [MQTT], [HTTP, MQTT]. When both HTTP and MQTT are specified, the target device
	// can choose the protocol.
	Protocols []*string `locationName:"protocols" min:"1" type:"list" enum:"Protocol"`

	// The IAM role that grants Amazon Web Services IoT Core access to the Amazon
	// S3, IoT jobs and Amazon Web Services Code Signing resources to create an
	// OTA update job.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" min:"20" type:"string" required:"true"`

	// Metadata which can be used to manage updates.
	Tags []*Tag `locationName:"tags" type:"list"`

	// Specifies whether the update will continue to run (CONTINUOUS), or will be
	// complete after all the things specified as targets have completed the update
	// (SNAPSHOT). If continuous, the update may also be run on a thing when a change
	// is detected in a target. For example, an update will run on a thing when
	// the thing is added to a target group, even after the update was completed
	// by all things originally in the group. Valid values: CONTINUOUS | SNAPSHOT.
	TargetSelection *string `locationName:"targetSelection" type:"string" enum:"TargetSelection"`

	// The devices targeted to receive OTA updates.
	//
	// Targets is a required field
	Targets []*string `locationName:"targets" min:"1" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateOTAUpdateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateOTAUpdateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateOTAUpdateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateOTAUpdateInput"}
	if s.Files == nil {
		invalidParams.Add(request.NewErrParamRequired("Files"))
	}
	if s.Files != nil && len(s.Files) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Files", 1))
	}
	if s.OtaUpdateId == nil {
		invalidParams.Add(request.NewErrParamRequired("OtaUpdateId"))
	}
	if s.OtaUpdateId != nil && len(*s.OtaUpdateId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("OtaUpdateId", 1))
	}
	if s.Protocols != nil && len(s.Protocols) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Protocols", 1))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.RoleArn != nil && len(*s.RoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20))
	}
	if s.Targets == nil {
		invalidParams.Add(request.NewErrParamRequired("Targets"))
	}
	if s.Targets != nil && len(s.Targets) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Targets", 1))
	}
	if s.AwsJobAbortConfig != nil {
		if err := s.AwsJobAbortConfig.Validate(); err != nil {
			invalidParams.AddNested("AwsJobAbortConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.AwsJobExecutionsRolloutConfig != nil {
		if err := s.AwsJobExecutionsRolloutConfig.Validate(); err != nil {
			invalidParams.AddNested("AwsJobExecutionsRolloutConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.Files != nil {
		for i, v := range s.Files {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Files", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetAdditionalParameters sets the AdditionalParameters field's value.
func (s *CreateOTAUpdateInput) SetAdditionalParameters(v map[string]*string) *CreateOTAUpdateInput {
	s.AdditionalParameters = v
	return s
}

// SetAwsJobAbortConfig sets the AwsJobAbortConfig field's value.
func (s *CreateOTAUpdateInput) SetAwsJobAbortConfig(v *AwsJobAbortConfig) *CreateOTAUpdateInput {
	s.AwsJobAbortConfig = v
	return s
}

// SetAwsJobExecutionsRolloutConfig sets the AwsJobExecutionsRolloutConfig field's value.
func (s *CreateOTAUpdateInput) SetAwsJobExecutionsRolloutConfig(v *AwsJobExecutionsRolloutConfig) *CreateOTAUpdateInput {
	s.AwsJobExecutionsRolloutConfig = v
	return s
}

// SetAwsJobPresignedUrlConfig sets the AwsJobPresignedUrlConfig field's value.
func (s *CreateOTAUpdateInput) SetAwsJobPresignedUrlConfig(v *AwsJobPresignedUrlConfig) *CreateOTAUpdateInput {
	s.AwsJobPresignedUrlConfig = v
	return s
}

// SetAwsJobTimeoutConfig sets the AwsJobTimeoutConfig field's value.
func (s *CreateOTAUpdateInput) SetAwsJobTimeoutConfig(v *AwsJobTimeoutConfig) *CreateOTAUpdateInput {
	s.AwsJobTimeoutConfig = v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreateOTAUpdateInput) SetDescription(v string) *CreateOTAUpdateInput {
	s.Description = &v
	return s
}

// SetFiles sets the Files field's value.
func (s *CreateOTAUpdateInput) SetFiles(v []*OTAUpdateFile) *CreateOTAUpdateInput {
	s.Files = v
	return s
}

// SetOtaUpdateId sets the OtaUpdateId field's value.
func (s *CreateOTAUpdateInput) SetOtaUpdateId(v string) *CreateOTAUpdateInput {
	s.OtaUpdateId = &v
	return s
}

// SetProtocols sets the Protocols field's value.
func (s *CreateOTAUpdateInput) SetProtocols(v []*string) *CreateOTAUpdateInput {
	s.Protocols = v
	return s
}

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

// SetTags sets the Tags field's value.
func (s *CreateOTAUpdateInput) SetTags(v []*Tag) *CreateOTAUpdateInput {
	s.Tags = v
	return s
}

// SetTargetSelection sets the TargetSelection field's value.
func (s *CreateOTAUpdateInput) SetTargetSelection(v string) *CreateOTAUpdateInput {
	s.TargetSelection = &v
	return s
}

// SetTargets sets the Targets field's value.
func (s *CreateOTAUpdateInput) SetTargets(v []*string) *CreateOTAUpdateInput {
	s.Targets = v
	return s
}

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

	// The IoT job ARN associated with the OTA update.
	AwsIotJobArn *string `locationName:"awsIotJobArn" type:"string"`

	// The IoT job ID associated with the OTA update.
	AwsIotJobId *string `locationName:"awsIotJobId" type:"string"`

	// The OTA update ARN.
	OtaUpdateArn *string `locationName:"otaUpdateArn" type:"string"`

	// The OTA update ID.
	OtaUpdateId *string `locationName:"otaUpdateId" min:"1" type:"string"`

	// The OTA update status.
	OtaUpdateStatus *string `locationName:"otaUpdateStatus" type:"string" enum:"OTAUpdateStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateOTAUpdateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateOTAUpdateOutput) GoString() string {
	return s.String()
}

// SetAwsIotJobArn sets the AwsIotJobArn field's value.
func (s *CreateOTAUpdateOutput) SetAwsIotJobArn(v string) *CreateOTAUpdateOutput {
	s.AwsIotJobArn = &v
	return s
}

// SetAwsIotJobId sets the AwsIotJobId field's value.
func (s *CreateOTAUpdateOutput) SetAwsIotJobId(v string) *CreateOTAUpdateOutput {
	s.AwsIotJobId = &v
	return s
}

// SetOtaUpdateArn sets the OtaUpdateArn field's value.
func (s *CreateOTAUpdateOutput) SetOtaUpdateArn(v string) *CreateOTAUpdateOutput {
	s.OtaUpdateArn = &v
	return s
}

// SetOtaUpdateId sets the OtaUpdateId field's value.
func (s *CreateOTAUpdateOutput) SetOtaUpdateId(v string) *CreateOTAUpdateOutput {
	s.OtaUpdateId = &v
	return s
}

// SetOtaUpdateStatus sets the OtaUpdateStatus field's value.
func (s *CreateOTAUpdateOutput) SetOtaUpdateStatus(v string) *CreateOTAUpdateOutput {
	s.OtaUpdateStatus = &v
	return s
}

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

	// A unique case-sensitive identifier that you can provide to ensure the idempotency
	// of the request. Don't reuse this client token if a new idempotent request
	// is required.
	ClientToken *string `location:"querystring" locationName:"clientToken" min:"36" type:"string" idempotencyToken:"true"`

	// A summary of the package being created. This can be used to outline the package's
	// contents or purpose.
	//
	// Description is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreatePackageInput's
	// String and GoString methods.
	Description *string `locationName:"description" type:"string" sensitive:"true"`

	// The name of the new software package.
	//
	// PackageName is a required field
	PackageName *string `location:"uri" locationName:"packageName" min:"1" type:"string" required:"true"`

	// Metadata that can be used to manage the package.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePackageInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePackageInput) GoString() string {
	return s.String()
}

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

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

// SetClientToken sets the ClientToken field's value.
func (s *CreatePackageInput) SetClientToken(v string) *CreatePackageInput {
	s.ClientToken = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreatePackageInput) SetDescription(v string) *CreatePackageInput {
	s.Description = &v
	return s
}

// SetPackageName sets the PackageName field's value.
func (s *CreatePackageInput) SetPackageName(v string) *CreatePackageInput {
	s.PackageName = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreatePackageInput) SetTags(v map[string]*string) *CreatePackageInput {
	s.Tags = v
	return s
}

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

	// The package description.
	//
	// Description is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreatePackageOutput's
	// String and GoString methods.
	Description *string `locationName:"description" type:"string" sensitive:"true"`

	// The Amazon Resource Name (ARN) for the package.
	PackageArn *string `locationName:"packageArn" type:"string"`

	// The name of the software package.
	PackageName *string `locationName:"packageName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePackageOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePackageOutput) GoString() string {
	return s.String()
}

// SetDescription sets the Description field's value.
func (s *CreatePackageOutput) SetDescription(v string) *CreatePackageOutput {
	s.Description = &v
	return s
}

// SetPackageArn sets the PackageArn field's value.
func (s *CreatePackageOutput) SetPackageArn(v string) *CreatePackageOutput {
	s.PackageArn = &v
	return s
}

// SetPackageName sets the PackageName field's value.
func (s *CreatePackageOutput) SetPackageName(v string) *CreatePackageOutput {
	s.PackageName = &v
	return s
}

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

	// Metadata that can be used to define a package version’s configuration.
	// For example, the S3 file location, configuration options that are being sent
	// to the device or fleet.
	//
	// The combined size of all the attributes on a package version is limited to
	// 3KB.
	//
	// Attributes is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreatePackageVersionInput's
	// String and GoString methods.
	Attributes map[string]*string `locationName:"attributes" type:"map" sensitive:"true"`

	// A unique case-sensitive identifier that you can provide to ensure the idempotency
	// of the request. Don't reuse this client token if a new idempotent request
	// is required.
	ClientToken *string `location:"querystring" locationName:"clientToken" min:"36" type:"string" idempotencyToken:"true"`

	// A summary of the package version being created. This can be used to outline
	// the package's contents or purpose.
	//
	// Description is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreatePackageVersionInput's
	// String and GoString methods.
	Description *string `locationName:"description" type:"string" sensitive:"true"`

	// The name of the associated software package.
	//
	// PackageName is a required field
	PackageName *string `location:"uri" locationName:"packageName" min:"1" type:"string" required:"true"`

	// Metadata that can be used to manage the package version.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`

	// The name of the new package version.
	//
	// VersionName is a required field
	VersionName *string `location:"uri" locationName:"versionName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePackageVersionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePackageVersionInput) GoString() string {
	return s.String()
}

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

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

// SetAttributes sets the Attributes field's value.
func (s *CreatePackageVersionInput) SetAttributes(v map[string]*string) *CreatePackageVersionInput {
	s.Attributes = v
	return s
}

// SetClientToken sets the ClientToken field's value.
func (s *CreatePackageVersionInput) SetClientToken(v string) *CreatePackageVersionInput {
	s.ClientToken = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreatePackageVersionInput) SetDescription(v string) *CreatePackageVersionInput {
	s.Description = &v
	return s
}

// SetPackageName sets the PackageName field's value.
func (s *CreatePackageVersionInput) SetPackageName(v string) *CreatePackageVersionInput {
	s.PackageName = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreatePackageVersionInput) SetTags(v map[string]*string) *CreatePackageVersionInput {
	s.Tags = v
	return s
}

// SetVersionName sets the VersionName field's value.
func (s *CreatePackageVersionInput) SetVersionName(v string) *CreatePackageVersionInput {
	s.VersionName = &v
	return s
}

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

	// Metadata that were added to the package version that can be used to define
	// a package version’s configuration.
	//
	// Attributes is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreatePackageVersionOutput's
	// String and GoString methods.
	Attributes map[string]*string `locationName:"attributes" type:"map" sensitive:"true"`

	// The package version description.
	//
	// Description is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreatePackageVersionOutput's
	// String and GoString methods.
	Description *string `locationName:"description" type:"string" sensitive:"true"`

	// Error reason for a package version failure during creation or update.
	ErrorReason *string `locationName:"errorReason" type:"string"`

	// The name of the associated software package.
	PackageName *string `locationName:"packageName" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) for the package.
	PackageVersionArn *string `locationName:"packageVersionArn" min:"1" type:"string"`

	// The status of the package version. For more information, see Package version
	// lifecycle (https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#package-version-lifecycle).
	Status *string `locationName:"status" type:"string" enum:"PackageVersionStatus"`

	// The name of the new package version.
	VersionName *string `locationName:"versionName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePackageVersionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePackageVersionOutput) GoString() string {
	return s.String()
}

// SetAttributes sets the Attributes field's value.
func (s *CreatePackageVersionOutput) SetAttributes(v map[string]*string) *CreatePackageVersionOutput {
	s.Attributes = v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreatePackageVersionOutput) SetDescription(v string) *CreatePackageVersionOutput {
	s.Description = &v
	return s
}

// SetErrorReason sets the ErrorReason field's value.
func (s *CreatePackageVersionOutput) SetErrorReason(v string) *CreatePackageVersionOutput {
	s.ErrorReason = &v
	return s
}

// SetPackageName sets the PackageName field's value.
func (s *CreatePackageVersionOutput) SetPackageName(v string) *CreatePackageVersionOutput {
	s.PackageName = &v
	return s
}

// SetPackageVersionArn sets the PackageVersionArn field's value.
func (s *CreatePackageVersionOutput) SetPackageVersionArn(v string) *CreatePackageVersionOutput {
	s.PackageVersionArn = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *CreatePackageVersionOutput) SetStatus(v string) *CreatePackageVersionOutput {
	s.Status = &v
	return s
}

// SetVersionName sets the VersionName field's value.
func (s *CreatePackageVersionOutput) SetVersionName(v string) *CreatePackageVersionOutput {
	s.VersionName = &v
	return s
}

// The input for the CreatePolicy operation.
type CreatePolicyInput struct {
	_ struct{} `type:"structure"`

	// The JSON document that describes the policy. policyDocument must have a minimum
	// length of 1, with a maximum length of 2048, excluding whitespace.
	//
	// PolicyDocument is a required field
	PolicyDocument *string `locationName:"policyDocument" type:"string" required:"true"`

	// The policy name.
	//
	// PolicyName is a required field
	PolicyName *string `location:"uri" locationName:"policyName" min:"1" type:"string" required:"true"`

	// Metadata which can be used to manage the policy.
	//
	// For URI Request parameters use format: ...key1=value1&key2=value2...
	//
	// For the CLI command-line parameter use format: &&tags "key1=value1&key2=value2..."
	//
	// For the cli-input-json file use format: "tags": "key1=value1&key2=value2..."
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePolicyInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePolicyInput) GoString() string {
	return s.String()
}

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

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

// SetPolicyDocument sets the PolicyDocument field's value.
func (s *CreatePolicyInput) SetPolicyDocument(v string) *CreatePolicyInput {
	s.PolicyDocument = &v
	return s
}

// SetPolicyName sets the PolicyName field's value.
func (s *CreatePolicyInput) SetPolicyName(v string) *CreatePolicyInput {
	s.PolicyName = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreatePolicyInput) SetTags(v []*Tag) *CreatePolicyInput {
	s.Tags = v
	return s
}

// The output from the CreatePolicy operation.
type CreatePolicyOutput struct {
	_ struct{} `type:"structure"`

	// The policy ARN.
	PolicyArn *string `locationName:"policyArn" type:"string"`

	// The JSON document that describes the policy.
	PolicyDocument *string `locationName:"policyDocument" type:"string"`

	// The policy name.
	PolicyName *string `locationName:"policyName" min:"1" type:"string"`

	// The policy version ID.
	PolicyVersionId *string `locationName:"policyVersionId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePolicyOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePolicyOutput) GoString() string {
	return s.String()
}

// SetPolicyArn sets the PolicyArn field's value.
func (s *CreatePolicyOutput) SetPolicyArn(v string) *CreatePolicyOutput {
	s.PolicyArn = &v
	return s
}

// SetPolicyDocument sets the PolicyDocument field's value.
func (s *CreatePolicyOutput) SetPolicyDocument(v string) *CreatePolicyOutput {
	s.PolicyDocument = &v
	return s
}

// SetPolicyName sets the PolicyName field's value.
func (s *CreatePolicyOutput) SetPolicyName(v string) *CreatePolicyOutput {
	s.PolicyName = &v
	return s
}

// SetPolicyVersionId sets the PolicyVersionId field's value.
func (s *CreatePolicyOutput) SetPolicyVersionId(v string) *CreatePolicyOutput {
	s.PolicyVersionId = &v
	return s
}

// The input for the CreatePolicyVersion operation.
type CreatePolicyVersionInput struct {
	_ struct{} `type:"structure"`

	// The JSON document that describes the policy. Minimum length of 1. Maximum
	// length of 2048, excluding whitespace.
	//
	// PolicyDocument is a required field
	PolicyDocument *string `locationName:"policyDocument" type:"string" required:"true"`

	// The policy name.
	//
	// PolicyName is a required field
	PolicyName *string `location:"uri" locationName:"policyName" min:"1" type:"string" required:"true"`

	// Specifies whether the policy version is set as the default. When this parameter
	// is true, the new policy version becomes the operative version (that is, the
	// version that is in effect for the certificates to which the policy is attached).
	SetAsDefault *bool `location:"querystring" locationName:"setAsDefault" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePolicyVersionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePolicyVersionInput) GoString() string {
	return s.String()
}

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

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

// SetPolicyDocument sets the PolicyDocument field's value.
func (s *CreatePolicyVersionInput) SetPolicyDocument(v string) *CreatePolicyVersionInput {
	s.PolicyDocument = &v
	return s
}

// SetPolicyName sets the PolicyName field's value.
func (s *CreatePolicyVersionInput) SetPolicyName(v string) *CreatePolicyVersionInput {
	s.PolicyName = &v
	return s
}

// SetSetAsDefault sets the SetAsDefault field's value.
func (s *CreatePolicyVersionInput) SetSetAsDefault(v bool) *CreatePolicyVersionInput {
	s.SetAsDefault = &v
	return s
}

// The output of the CreatePolicyVersion operation.
type CreatePolicyVersionOutput struct {
	_ struct{} `type:"structure"`

	// Specifies whether the policy version is the default.
	IsDefaultVersion *bool `locationName:"isDefaultVersion" type:"boolean"`

	// The policy ARN.
	PolicyArn *string `locationName:"policyArn" type:"string"`

	// The JSON document that describes the policy.
	PolicyDocument *string `locationName:"policyDocument" type:"string"`

	// The policy version ID.
	PolicyVersionId *string `locationName:"policyVersionId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePolicyVersionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreatePolicyVersionOutput) GoString() string {
	return s.String()
}

// SetIsDefaultVersion sets the IsDefaultVersion field's value.
func (s *CreatePolicyVersionOutput) SetIsDefaultVersion(v bool) *CreatePolicyVersionOutput {
	s.IsDefaultVersion = &v
	return s
}

// SetPolicyArn sets the PolicyArn field's value.
func (s *CreatePolicyVersionOutput) SetPolicyArn(v string) *CreatePolicyVersionOutput {
	s.PolicyArn = &v
	return s
}

// SetPolicyDocument sets the PolicyDocument field's value.
func (s *CreatePolicyVersionOutput) SetPolicyDocument(v string) *CreatePolicyVersionOutput {
	s.PolicyDocument = &v
	return s
}

// SetPolicyVersionId sets the PolicyVersionId field's value.
func (s *CreatePolicyVersionOutput) SetPolicyVersionId(v string) *CreatePolicyVersionOutput {
	s.PolicyVersionId = &v
	return s
}

type CreateProvisioningClaimInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the provisioning template to use.
	//
	// TemplateName is a required field
	TemplateName *string `location:"uri" locationName:"templateName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateProvisioningClaimInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateProvisioningClaimInput) GoString() string {
	return s.String()
}

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

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

// SetTemplateName sets the TemplateName field's value.
func (s *CreateProvisioningClaimInput) SetTemplateName(v string) *CreateProvisioningClaimInput {
	s.TemplateName = &v
	return s
}

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

	// The ID of the certificate.
	CertificateId *string `locationName:"certificateId" min:"64" type:"string"`

	// The provisioning claim certificate.
	CertificatePem *string `locationName:"certificatePem" min:"1" type:"string"`

	// The provisioning claim expiration time.
	Expiration *time.Time `locationName:"expiration" type:"timestamp"`

	// The provisioning claim key pair.
	KeyPair *KeyPair `locationName:"keyPair" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateProvisioningClaimOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateProvisioningClaimOutput) GoString() string {
	return s.String()
}

// SetCertificateId sets the CertificateId field's value.
func (s *CreateProvisioningClaimOutput) SetCertificateId(v string) *CreateProvisioningClaimOutput {
	s.CertificateId = &v
	return s
}

// SetCertificatePem sets the CertificatePem field's value.
func (s *CreateProvisioningClaimOutput) SetCertificatePem(v string) *CreateProvisioningClaimOutput {
	s.CertificatePem = &v
	return s
}

// SetExpiration sets the Expiration field's value.
func (s *CreateProvisioningClaimOutput) SetExpiration(v time.Time) *CreateProvisioningClaimOutput {
	s.Expiration = &v
	return s
}

// SetKeyPair sets the KeyPair field's value.
func (s *CreateProvisioningClaimOutput) SetKeyPair(v *KeyPair) *CreateProvisioningClaimOutput {
	s.KeyPair = v
	return s
}

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

	// The description of the provisioning template.
	Description *string `locationName:"description" type:"string"`

	// True to enable the provisioning template, otherwise false.
	Enabled *bool `locationName:"enabled" type:"boolean"`

	// Creates a pre-provisioning hook template. Only supports template of type
	// FLEET_PROVISIONING. For more information about provisioning template types,
	// see type (https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html#iot-CreateProvisioningTemplate-request-type).
	PreProvisioningHook *ProvisioningHook `locationName:"preProvisioningHook" type:"structure"`

	// The role ARN for the role associated with the provisioning template. This
	// IoT role grants permission to provision a device.
	//
	// ProvisioningRoleArn is a required field
	ProvisioningRoleArn *string `locationName:"provisioningRoleArn" min:"20" type:"string" required:"true"`

	// Metadata which can be used to manage the provisioning template.
	//
	// For URI Request parameters use format: ...key1=value1&key2=value2...
	//
	// For the CLI command-line parameter use format: &&tags "key1=value1&key2=value2..."
	//
	// For the cli-input-json file use format: "tags": "key1=value1&key2=value2..."
	Tags []*Tag `locationName:"tags" type:"list"`

	// The JSON formatted contents of the provisioning template.
	//
	// TemplateBody is a required field
	TemplateBody *string `locationName:"templateBody" type:"string" required:"true"`

	// The name of the provisioning template.
	//
	// TemplateName is a required field
	TemplateName *string `locationName:"templateName" min:"1" type:"string" required:"true"`

	// The type you define in a provisioning template. You can create a template
	// with only one type. You can't change the template type after its creation.
	// The default value is FLEET_PROVISIONING. For more information about provisioning
	// template, see: Provisioning template (https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html).
	Type *string `locationName:"type" type:"string" enum:"TemplateType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateProvisioningTemplateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateProvisioningTemplateInput) GoString() string {
	return s.String()
}

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

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

// SetDescription sets the Description field's value.
func (s *CreateProvisioningTemplateInput) SetDescription(v string) *CreateProvisioningTemplateInput {
	s.Description = &v
	return s
}

// SetEnabled sets the Enabled field's value.
func (s *CreateProvisioningTemplateInput) SetEnabled(v bool) *CreateProvisioningTemplateInput {
	s.Enabled = &v
	return s
}

// SetPreProvisioningHook sets the PreProvisioningHook field's value.
func (s *CreateProvisioningTemplateInput) SetPreProvisioningHook(v *ProvisioningHook) *CreateProvisioningTemplateInput {
	s.PreProvisioningHook = v
	return s
}

// SetProvisioningRoleArn sets the ProvisioningRoleArn field's value.
func (s *CreateProvisioningTemplateInput) SetProvisioningRoleArn(v string) *CreateProvisioningTemplateInput {
	s.ProvisioningRoleArn = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateProvisioningTemplateInput) SetTags(v []*Tag) *CreateProvisioningTemplateInput {
	s.Tags = v
	return s
}

// SetTemplateBody sets the TemplateBody field's value.
func (s *CreateProvisioningTemplateInput) SetTemplateBody(v string) *CreateProvisioningTemplateInput {
	s.TemplateBody = &v
	return s
}

// SetTemplateName sets the TemplateName field's value.
func (s *CreateProvisioningTemplateInput) SetTemplateName(v string) *CreateProvisioningTemplateInput {
	s.TemplateName = &v
	return s
}

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

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

	// The default version of the provisioning template.
	DefaultVersionId *int64 `locationName:"defaultVersionId" type:"integer"`

	// The ARN that identifies the provisioning template.
	TemplateArn *string `locationName:"templateArn" type:"string"`

	// The name of the provisioning template.
	TemplateName *string `locationName:"templateName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateProvisioningTemplateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateProvisioningTemplateOutput) GoString() string {
	return s.String()
}

// SetDefaultVersionId sets the DefaultVersionId field's value.
func (s *CreateProvisioningTemplateOutput) SetDefaultVersionId(v int64) *CreateProvisioningTemplateOutput {
	s.DefaultVersionId = &v
	return s
}

// SetTemplateArn sets the TemplateArn field's value.
func (s *CreateProvisioningTemplateOutput) SetTemplateArn(v string) *CreateProvisioningTemplateOutput {
	s.TemplateArn = &v
	return s
}

// SetTemplateName sets the TemplateName field's value.
func (s *CreateProvisioningTemplateOutput) SetTemplateName(v string) *CreateProvisioningTemplateOutput {
	s.TemplateName = &v
	return s
}

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

	// Sets a fleet provision template version as the default version.
	SetAsDefault *bool `location:"querystring" locationName:"setAsDefault" type:"boolean"`

	// The JSON formatted contents of the provisioning template.
	//
	// TemplateBody is a required field
	TemplateBody *string `locationName:"templateBody" type:"string" required:"true"`

	// The name of the provisioning template.
	//
	// TemplateName is a required field
	TemplateName *string `location:"uri" locationName:"templateName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateProvisioningTemplateVersionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateProvisioningTemplateVersionInput) GoString() string {
	return s.String()
}

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

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

// SetSetAsDefault sets the SetAsDefault field's value.
func (s *CreateProvisioningTemplateVersionInput) SetSetAsDefault(v bool) *CreateProvisioningTemplateVersionInput {
	s.SetAsDefault = &v
	return s
}

// SetTemplateBody sets the TemplateBody field's value.
func (s *CreateProvisioningTemplateVersionInput) SetTemplateBody(v string) *CreateProvisioningTemplateVersionInput {
	s.TemplateBody = &v
	return s
}

// SetTemplateName sets the TemplateName field's value.
func (s *CreateProvisioningTemplateVersionInput) SetTemplateName(v string) *CreateProvisioningTemplateVersionInput {
	s.TemplateName = &v
	return s
}

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

	// True if the provisioning template version is the default version, otherwise
	// false.
	IsDefaultVersion *bool `locationName:"isDefaultVersion" type:"boolean"`

	// The ARN that identifies the provisioning template.
	TemplateArn *string `locationName:"templateArn" type:"string"`

	// The name of the provisioning template.
	TemplateName *string `locationName:"templateName" min:"1" type:"string"`

	// The version of the provisioning template.
	VersionId *int64 `locationName:"versionId" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateProvisioningTemplateVersionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateProvisioningTemplateVersionOutput) GoString() string {
	return s.String()
}

// SetIsDefaultVersion sets the IsDefaultVersion field's value.
func (s *CreateProvisioningTemplateVersionOutput) SetIsDefaultVersion(v bool) *CreateProvisioningTemplateVersionOutput {
	s.IsDefaultVersion = &v
	return s
}

// SetTemplateArn sets the TemplateArn field's value.
func (s *CreateProvisioningTemplateVersionOutput) SetTemplateArn(v string) *CreateProvisioningTemplateVersionOutput {
	s.TemplateArn = &v
	return s
}

// SetTemplateName sets the TemplateName field's value.
func (s *CreateProvisioningTemplateVersionOutput) SetTemplateName(v string) *CreateProvisioningTemplateVersionOutput {
	s.TemplateName = &v
	return s
}

// SetVersionId sets the VersionId field's value.
func (s *CreateProvisioningTemplateVersionOutput) SetVersionId(v int64) *CreateProvisioningTemplateVersionOutput {
	s.VersionId = &v
	return s
}

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

	// How long (in seconds) the credentials will be valid. The default value is
	// 3,600 seconds.
	//
	// This value must be less than or equal to the maximum session duration of
	// the IAM role that the role alias references.
	CredentialDurationSeconds *int64 `locationName:"credentialDurationSeconds" min:"900" type:"integer"`

	// The role alias that points to a role ARN. This allows you to change the role
	// without having to update the device.
	//
	// RoleAlias is a required field
	RoleAlias *string `location:"uri" locationName:"roleAlias" min:"1" type:"string" required:"true"`

	// The role ARN.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" min:"20" type:"string" required:"true"`

	// Metadata which can be used to manage the role alias.
	//
	// For URI Request parameters use format: ...key1=value1&key2=value2...
	//
	// For the CLI command-line parameter use format: &&tags "key1=value1&key2=value2..."
	//
	// For the cli-input-json file use format: "tags": "key1=value1&key2=value2..."
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateRoleAliasInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateRoleAliasInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateRoleAliasInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateRoleAliasInput"}
	if s.CredentialDurationSeconds != nil && *s.CredentialDurationSeconds < 900 {
		invalidParams.Add(request.NewErrParamMinValue("CredentialDurationSeconds", 900))
	}
	if s.RoleAlias == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleAlias"))
	}
	if s.RoleAlias != nil && len(*s.RoleAlias) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RoleAlias", 1))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.RoleArn != nil && len(*s.RoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20))
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetCredentialDurationSeconds sets the CredentialDurationSeconds field's value.
func (s *CreateRoleAliasInput) SetCredentialDurationSeconds(v int64) *CreateRoleAliasInput {
	s.CredentialDurationSeconds = &v
	return s
}

// SetRoleAlias sets the RoleAlias field's value.
func (s *CreateRoleAliasInput) SetRoleAlias(v string) *CreateRoleAliasInput {
	s.RoleAlias = &v
	return s
}

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

// SetTags sets the Tags field's value.
func (s *CreateRoleAliasInput) SetTags(v []*Tag) *CreateRoleAliasInput {
	s.Tags = v
	return s
}

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

	// The role alias.
	RoleAlias *string `locationName:"roleAlias" min:"1" type:"string"`

	// The role alias ARN.
	RoleAliasArn *string `locationName:"roleAliasArn" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateRoleAliasOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateRoleAliasOutput) GoString() string {
	return s.String()
}

// SetRoleAlias sets the RoleAlias field's value.
func (s *CreateRoleAliasOutput) SetRoleAlias(v string) *CreateRoleAliasOutput {
	s.RoleAlias = &v
	return s
}

// SetRoleAliasArn sets the RoleAliasArn field's value.
func (s *CreateRoleAliasOutput) SetRoleAliasArn(v string) *CreateRoleAliasOutput {
	s.RoleAliasArn = &v
	return s
}

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

	// The day of the month on which the scheduled audit takes place. This can be
	// "1" through "31" or "LAST". This field is required if the "frequency" parameter
	// is set to MONTHLY. If days 29 to 31 are specified, and the month doesn't
	// have that many days, the audit takes place on the LAST day of the month.
	DayOfMonth *string `locationName:"dayOfMonth" type:"string"`

	// The day of the week on which the scheduled audit takes place, either SUN,
	// MON, TUE, WED, THU, FRI, or SAT. This field is required if the frequency
	// parameter is set to WEEKLY or BIWEEKLY.
	DayOfWeek *string `locationName:"dayOfWeek" type:"string" enum:"DayOfWeek"`

	// How often the scheduled audit takes place, either DAILY, WEEKLY, BIWEEKLY
	// or MONTHLY. The start time of each audit is determined by the system.
	//
	// Frequency is a required field
	Frequency *string `locationName:"frequency" type:"string" required:"true" enum:"AuditFrequency"`

	// The name you want to give to the scheduled audit. (Max. 128 chars)
	//
	// ScheduledAuditName is a required field
	ScheduledAuditName *string `location:"uri" locationName:"scheduledAuditName" min:"1" type:"string" required:"true"`

	// Metadata that can be used to manage the scheduled audit.
	Tags []*Tag `locationName:"tags" type:"list"`

	// Which checks are performed during the scheduled audit. Checks must be enabled
	// for your account. (Use DescribeAccountAuditConfiguration to see the list
	// of all checks, including those that are enabled or use UpdateAccountAuditConfiguration
	// to select which checks are enabled.)
	//
	// TargetCheckNames is a required field
	TargetCheckNames []*string `locationName:"targetCheckNames" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateScheduledAuditInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateScheduledAuditInput) GoString() string {
	return s.String()
}

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

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

// SetDayOfMonth sets the DayOfMonth field's value.
func (s *CreateScheduledAuditInput) SetDayOfMonth(v string) *CreateScheduledAuditInput {
	s.DayOfMonth = &v
	return s
}

// SetDayOfWeek sets the DayOfWeek field's value.
func (s *CreateScheduledAuditInput) SetDayOfWeek(v string) *CreateScheduledAuditInput {
	s.DayOfWeek = &v
	return s
}

// SetFrequency sets the Frequency field's value.
func (s *CreateScheduledAuditInput) SetFrequency(v string) *CreateScheduledAuditInput {
	s.Frequency = &v
	return s
}

// SetScheduledAuditName sets the ScheduledAuditName field's value.
func (s *CreateScheduledAuditInput) SetScheduledAuditName(v string) *CreateScheduledAuditInput {
	s.ScheduledAuditName = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateScheduledAuditInput) SetTags(v []*Tag) *CreateScheduledAuditInput {
	s.Tags = v
	return s
}

// SetTargetCheckNames sets the TargetCheckNames field's value.
func (s *CreateScheduledAuditInput) SetTargetCheckNames(v []*string) *CreateScheduledAuditInput {
	s.TargetCheckNames = v
	return s
}

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

	// The ARN of the scheduled audit.
	ScheduledAuditArn *string `locationName:"scheduledAuditArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateScheduledAuditOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateScheduledAuditOutput) GoString() string {
	return s.String()
}

// SetScheduledAuditArn sets the ScheduledAuditArn field's value.
func (s *CreateScheduledAuditOutput) SetScheduledAuditArn(v string) *CreateScheduledAuditOutput {
	s.ScheduledAuditArn = &v
	return s
}

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

	// Please use CreateSecurityProfileRequest$additionalMetricsToRetainV2 instead.
	//
	// A list of metrics whose data is retained (stored). By default, data is retained
	// for any metric used in the profile's behaviors, but it is also retained for
	// any metric specified here. Can be used with custom metrics; cannot be used
	// with dimensions.
	//
	// Deprecated: Use additionalMetricsToRetainV2.
	AdditionalMetricsToRetain []*string `locationName:"additionalMetricsToRetain" deprecated:"true" type:"list"`

	// A list of metrics whose data is retained (stored). By default, data is retained
	// for any metric used in the profile's behaviors, but it is also retained for
	// any metric specified here. Can be used with custom metrics; cannot be used
	// with dimensions.
	AdditionalMetricsToRetainV2 []*MetricToRetain `locationName:"additionalMetricsToRetainV2" type:"list"`

	// Specifies the destinations to which alerts are sent. (Alerts are always sent
	// to the console.) Alerts are generated when a device (thing) violates a behavior.
	AlertTargets map[string]*AlertTarget `locationName:"alertTargets" type:"map"`

	// Specifies the behaviors that, when violated by a device (thing), cause an
	// alert.
	Behaviors []*Behavior `locationName:"behaviors" type:"list"`

	// Specifies the MQTT topic and role ARN required for metric export.
	MetricsExportConfig *MetricsExportConfig `locationName:"metricsExportConfig" type:"structure"`

	// A description of the security profile.
	SecurityProfileDescription *string `locationName:"securityProfileDescription" type:"string"`

	// The name you are giving to the security profile.
	//
	// SecurityProfileName is a required field
	SecurityProfileName *string `location:"uri" locationName:"securityProfileName" min:"1" type:"string" required:"true"`

	// Metadata that can be used to manage the security profile.
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateSecurityProfileInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateSecurityProfileInput) GoString() string {
	return s.String()
}

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

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

// SetAdditionalMetricsToRetain sets the AdditionalMetricsToRetain field's value.
func (s *CreateSecurityProfileInput) SetAdditionalMetricsToRetain(v []*string) *CreateSecurityProfileInput {
	s.AdditionalMetricsToRetain = v
	return s
}

// SetAdditionalMetricsToRetainV2 sets the AdditionalMetricsToRetainV2 field's value.
func (s *CreateSecurityProfileInput) SetAdditionalMetricsToRetainV2(v []*MetricToRetain) *CreateSecurityProfileInput {
	s.AdditionalMetricsToRetainV2 = v
	return s
}

// SetAlertTargets sets the AlertTargets field's value.
func (s *CreateSecurityProfileInput) SetAlertTargets(v map[string]*AlertTarget) *CreateSecurityProfileInput {
	s.AlertTargets = v
	return s
}

// SetBehaviors sets the Behaviors field's value.
func (s *CreateSecurityProfileInput) SetBehaviors(v []*Behavior) *CreateSecurityProfileInput {
	s.Behaviors = v
	return s
}

// SetMetricsExportConfig sets the MetricsExportConfig field's value.
func (s *CreateSecurityProfileInput) SetMetricsExportConfig(v *MetricsExportConfig) *CreateSecurityProfileInput {
	s.MetricsExportConfig = v
	return s
}

// SetSecurityProfileDescription sets the SecurityProfileDescription field's value.
func (s *CreateSecurityProfileInput) SetSecurityProfileDescription(v string) *CreateSecurityProfileInput {
	s.SecurityProfileDescription = &v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *CreateSecurityProfileInput) SetSecurityProfileName(v string) *CreateSecurityProfileInput {
	s.SecurityProfileName = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateSecurityProfileInput) SetTags(v []*Tag) *CreateSecurityProfileInput {
	s.Tags = v
	return s
}

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

	// The ARN of the security profile.
	SecurityProfileArn *string `locationName:"securityProfileArn" type:"string"`

	// The name you gave to the security profile.
	SecurityProfileName *string `locationName:"securityProfileName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateSecurityProfileOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateSecurityProfileOutput) GoString() string {
	return s.String()
}

// SetSecurityProfileArn sets the SecurityProfileArn field's value.
func (s *CreateSecurityProfileOutput) SetSecurityProfileArn(v string) *CreateSecurityProfileOutput {
	s.SecurityProfileArn = &v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *CreateSecurityProfileOutput) SetSecurityProfileName(v string) *CreateSecurityProfileOutput {
	s.SecurityProfileName = &v
	return s
}

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

	// A description of the stream.
	Description *string `locationName:"description" type:"string"`

	// The files to stream.
	//
	// Files is a required field
	Files []*StreamFile `locationName:"files" min:"1" type:"list" required:"true"`

	// An IAM role that allows the IoT service principal to access your S3 files.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" min:"20" type:"string" required:"true"`

	// The stream ID.
	//
	// StreamId is a required field
	StreamId *string `location:"uri" locationName:"streamId" min:"1" type:"string" required:"true"`

	// Metadata which can be used to manage streams.
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateStreamInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateStreamInput) GoString() string {
	return s.String()
}

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

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

// SetDescription sets the Description field's value.
func (s *CreateStreamInput) SetDescription(v string) *CreateStreamInput {
	s.Description = &v
	return s
}

// SetFiles sets the Files field's value.
func (s *CreateStreamInput) SetFiles(v []*StreamFile) *CreateStreamInput {
	s.Files = v
	return s
}

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

// SetStreamId sets the StreamId field's value.
func (s *CreateStreamInput) SetStreamId(v string) *CreateStreamInput {
	s.StreamId = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateStreamInput) SetTags(v []*Tag) *CreateStreamInput {
	s.Tags = v
	return s
}

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

	// A description of the stream.
	Description *string `locationName:"description" type:"string"`

	// The stream ARN.
	StreamArn *string `locationName:"streamArn" type:"string"`

	// The stream ID.
	StreamId *string `locationName:"streamId" min:"1" type:"string"`

	// The version of the stream.
	StreamVersion *int64 `locationName:"streamVersion" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateStreamOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateStreamOutput) GoString() string {
	return s.String()
}

// SetDescription sets the Description field's value.
func (s *CreateStreamOutput) SetDescription(v string) *CreateStreamOutput {
	s.Description = &v
	return s
}

// SetStreamArn sets the StreamArn field's value.
func (s *CreateStreamOutput) SetStreamArn(v string) *CreateStreamOutput {
	s.StreamArn = &v
	return s
}

// SetStreamId sets the StreamId field's value.
func (s *CreateStreamOutput) SetStreamId(v string) *CreateStreamOutput {
	s.StreamId = &v
	return s
}

// SetStreamVersion sets the StreamVersion field's value.
func (s *CreateStreamOutput) SetStreamVersion(v int64) *CreateStreamOutput {
	s.StreamVersion = &v
	return s
}

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

	// The name of the parent thing group.
	ParentGroupName *string `locationName:"parentGroupName" min:"1" type:"string"`

	// Metadata which can be used to manage the thing group.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The thing group name to create.
	//
	// ThingGroupName is a required field
	ThingGroupName *string `location:"uri" locationName:"thingGroupName" min:"1" type:"string" required:"true"`

	// The thing group properties.
	ThingGroupProperties *ThingGroupProperties `locationName:"thingGroupProperties" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateThingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateThingGroupInput) GoString() string {
	return s.String()
}

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

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

// SetParentGroupName sets the ParentGroupName field's value.
func (s *CreateThingGroupInput) SetParentGroupName(v string) *CreateThingGroupInput {
	s.ParentGroupName = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateThingGroupInput) SetTags(v []*Tag) *CreateThingGroupInput {
	s.Tags = v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *CreateThingGroupInput) SetThingGroupName(v string) *CreateThingGroupInput {
	s.ThingGroupName = &v
	return s
}

// SetThingGroupProperties sets the ThingGroupProperties field's value.
func (s *CreateThingGroupInput) SetThingGroupProperties(v *ThingGroupProperties) *CreateThingGroupInput {
	s.ThingGroupProperties = v
	return s
}

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

	// The thing group ARN.
	ThingGroupArn *string `locationName:"thingGroupArn" type:"string"`

	// The thing group ID.
	ThingGroupId *string `locationName:"thingGroupId" min:"1" type:"string"`

	// The thing group name.
	ThingGroupName *string `locationName:"thingGroupName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateThingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateThingGroupOutput) GoString() string {
	return s.String()
}

// SetThingGroupArn sets the ThingGroupArn field's value.
func (s *CreateThingGroupOutput) SetThingGroupArn(v string) *CreateThingGroupOutput {
	s.ThingGroupArn = &v
	return s
}

// SetThingGroupId sets the ThingGroupId field's value.
func (s *CreateThingGroupOutput) SetThingGroupId(v string) *CreateThingGroupOutput {
	s.ThingGroupId = &v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *CreateThingGroupOutput) SetThingGroupName(v string) *CreateThingGroupOutput {
	s.ThingGroupName = &v
	return s
}

// The input for the CreateThing operation.
type CreateThingInput struct {
	_ struct{} `type:"structure"`

	// The attribute payload, which consists of up to three name/value pairs in
	// a JSON document. For example:
	//
	// {\"attributes\":{\"string1\":\"string2\"}}
	AttributePayload *AttributePayload `locationName:"attributePayload" type:"structure"`

	// The name of the billing group the thing will be added to.
	BillingGroupName *string `locationName:"billingGroupName" min:"1" type:"string"`

	// The name of the thing to create.
	//
	// You can't change a thing's name after you create it. To change a thing's
	// name, you must create a new thing, give it the new name, and then delete
	// the old thing.
	//
	// ThingName is a required field
	ThingName *string `location:"uri" locationName:"thingName" min:"1" type:"string" required:"true"`

	// The name of the thing type associated with the new thing.
	ThingTypeName *string `locationName:"thingTypeName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateThingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateThingInput) GoString() string {
	return s.String()
}

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

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

// SetAttributePayload sets the AttributePayload field's value.
func (s *CreateThingInput) SetAttributePayload(v *AttributePayload) *CreateThingInput {
	s.AttributePayload = v
	return s
}

// SetBillingGroupName sets the BillingGroupName field's value.
func (s *CreateThingInput) SetBillingGroupName(v string) *CreateThingInput {
	s.BillingGroupName = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *CreateThingInput) SetThingName(v string) *CreateThingInput {
	s.ThingName = &v
	return s
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *CreateThingInput) SetThingTypeName(v string) *CreateThingInput {
	s.ThingTypeName = &v
	return s
}

// The output of the CreateThing operation.
type CreateThingOutput struct {
	_ struct{} `type:"structure"`

	// The ARN of the new thing.
	ThingArn *string `locationName:"thingArn" type:"string"`

	// The thing ID.
	ThingId *string `locationName:"thingId" type:"string"`

	// The name of the new thing.
	ThingName *string `locationName:"thingName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateThingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateThingOutput) GoString() string {
	return s.String()
}

// SetThingArn sets the ThingArn field's value.
func (s *CreateThingOutput) SetThingArn(v string) *CreateThingOutput {
	s.ThingArn = &v
	return s
}

// SetThingId sets the ThingId field's value.
func (s *CreateThingOutput) SetThingId(v string) *CreateThingOutput {
	s.ThingId = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *CreateThingOutput) SetThingName(v string) *CreateThingOutput {
	s.ThingName = &v
	return s
}

// The input for the CreateThingType operation.
type CreateThingTypeInput struct {
	_ struct{} `type:"structure"`

	// Metadata which can be used to manage the thing type.
	Tags []*Tag `locationName:"tags" type:"list"`

	// The name of the thing type.
	//
	// ThingTypeName is a required field
	ThingTypeName *string `location:"uri" locationName:"thingTypeName" min:"1" type:"string" required:"true"`

	// The ThingTypeProperties for the thing type to create. It contains information
	// about the new thing type including a description, and a list of searchable
	// thing attribute names.
	ThingTypeProperties *ThingTypeProperties `locationName:"thingTypeProperties" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateThingTypeInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateThingTypeInput) GoString() string {
	return s.String()
}

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

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTags sets the Tags field's value.
func (s *CreateThingTypeInput) SetTags(v []*Tag) *CreateThingTypeInput {
	s.Tags = v
	return s
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *CreateThingTypeInput) SetThingTypeName(v string) *CreateThingTypeInput {
	s.ThingTypeName = &v
	return s
}

// SetThingTypeProperties sets the ThingTypeProperties field's value.
func (s *CreateThingTypeInput) SetThingTypeProperties(v *ThingTypeProperties) *CreateThingTypeInput {
	s.ThingTypeProperties = v
	return s
}

// The output of the CreateThingType operation.
type CreateThingTypeOutput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the thing type.
	ThingTypeArn *string `locationName:"thingTypeArn" type:"string"`

	// The thing type ID.
	ThingTypeId *string `locationName:"thingTypeId" type:"string"`

	// The name of the thing type.
	ThingTypeName *string `locationName:"thingTypeName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateThingTypeOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateThingTypeOutput) GoString() string {
	return s.String()
}

// SetThingTypeArn sets the ThingTypeArn field's value.
func (s *CreateThingTypeOutput) SetThingTypeArn(v string) *CreateThingTypeOutput {
	s.ThingTypeArn = &v
	return s
}

// SetThingTypeId sets the ThingTypeId field's value.
func (s *CreateThingTypeOutput) SetThingTypeId(v string) *CreateThingTypeOutput {
	s.ThingTypeId = &v
	return s
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *CreateThingTypeOutput) SetThingTypeName(v string) *CreateThingTypeOutput {
	s.ThingTypeName = &v
	return s
}

type CreateTopicRuleDestinationInput struct {
	_ struct{} `type:"structure"`

	// The topic rule destination configuration.
	//
	// DestinationConfiguration is a required field
	DestinationConfiguration *TopicRuleDestinationConfiguration `locationName:"destinationConfiguration" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateTopicRuleDestinationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateTopicRuleDestinationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateTopicRuleDestinationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateTopicRuleDestinationInput"}
	if s.DestinationConfiguration == nil {
		invalidParams.Add(request.NewErrParamRequired("DestinationConfiguration"))
	}
	if s.DestinationConfiguration != nil {
		if err := s.DestinationConfiguration.Validate(); err != nil {
			invalidParams.AddNested("DestinationConfiguration", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDestinationConfiguration sets the DestinationConfiguration field's value.
func (s *CreateTopicRuleDestinationInput) SetDestinationConfiguration(v *TopicRuleDestinationConfiguration) *CreateTopicRuleDestinationInput {
	s.DestinationConfiguration = v
	return s
}

type CreateTopicRuleDestinationOutput struct {
	_ struct{} `type:"structure"`

	// The topic rule destination.
	TopicRuleDestination *TopicRuleDestination `locationName:"topicRuleDestination" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateTopicRuleDestinationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateTopicRuleDestinationOutput) GoString() string {
	return s.String()
}

// SetTopicRuleDestination sets the TopicRuleDestination field's value.
func (s *CreateTopicRuleDestinationOutput) SetTopicRuleDestination(v *TopicRuleDestination) *CreateTopicRuleDestinationOutput {
	s.TopicRuleDestination = v
	return s
}

// The input for the CreateTopicRule operation.
type CreateTopicRuleInput struct {
	_ struct{} `type:"structure" payload:"TopicRulePayload"`

	// The name of the rule.
	//
	// RuleName is a required field
	RuleName *string `location:"uri" locationName:"ruleName" min:"1" type:"string" required:"true"`

	// Metadata which can be used to manage the topic rule.
	//
	// For URI Request parameters use format: ...key1=value1&key2=value2...
	//
	// For the CLI command-line parameter use format: --tags "key1=value1&key2=value2..."
	//
	// For the cli-input-json file use format: "tags": "key1=value1&key2=value2..."
	Tags *string `location:"header" locationName:"x-amz-tagging" type:"string"`

	// The rule payload.
	//
	// TopicRulePayload is a required field
	TopicRulePayload *TopicRulePayload `locationName:"topicRulePayload" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateTopicRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateTopicRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateTopicRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateTopicRuleInput"}
	if s.RuleName == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleName"))
	}
	if s.RuleName != nil && len(*s.RuleName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleName", 1))
	}
	if s.TopicRulePayload == nil {
		invalidParams.Add(request.NewErrParamRequired("TopicRulePayload"))
	}
	if s.TopicRulePayload != nil {
		if err := s.TopicRulePayload.Validate(); err != nil {
			invalidParams.AddNested("TopicRulePayload", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRuleName sets the RuleName field's value.
func (s *CreateTopicRuleInput) SetRuleName(v string) *CreateTopicRuleInput {
	s.RuleName = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateTopicRuleInput) SetTags(v string) *CreateTopicRuleInput {
	s.Tags = &v
	return s
}

// SetTopicRulePayload sets the TopicRulePayload field's value.
func (s *CreateTopicRuleInput) SetTopicRulePayload(v *TopicRulePayload) *CreateTopicRuleInput {
	s.TopicRulePayload = v
	return s
}

type CreateTopicRuleOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateTopicRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CreateTopicRuleOutput) GoString() string {
	return s.String()
}

// Describes a custom method used to code sign a file.
type CustomCodeSigning struct {
	_ struct{} `type:"structure"`

	// The certificate chain.
	CertificateChain *CodeSigningCertificateChain `locationName:"certificateChain" type:"structure"`

	// The hash algorithm used to code sign the file. You can use a string as the
	// algorithm name if the target over-the-air (OTA) update devices are able to
	// verify the signature that was generated using the same signature algorithm.
	// For example, FreeRTOS uses SHA256 or SHA1, so you can pass either of them
	// based on which was used for generating the signature.
	HashAlgorithm *string `locationName:"hashAlgorithm" type:"string"`

	// The signature for the file.
	Signature *CodeSigningSignature `locationName:"signature" type:"structure"`

	// The signature algorithm used to code sign the file. You can use a string
	// as the algorithm name if the target over-the-air (OTA) update devices are
	// able to verify the signature that was generated using the same signature
	// algorithm. For example, FreeRTOS uses ECDSA or RSA, so you can pass either
	// of them based on which was used for generating the signature.
	SignatureAlgorithm *string `locationName:"signatureAlgorithm" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CustomCodeSigning) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CustomCodeSigning) GoString() string {
	return s.String()
}

// SetCertificateChain sets the CertificateChain field's value.
func (s *CustomCodeSigning) SetCertificateChain(v *CodeSigningCertificateChain) *CustomCodeSigning {
	s.CertificateChain = v
	return s
}

// SetHashAlgorithm sets the HashAlgorithm field's value.
func (s *CustomCodeSigning) SetHashAlgorithm(v string) *CustomCodeSigning {
	s.HashAlgorithm = &v
	return s
}

// SetSignature sets the Signature field's value.
func (s *CustomCodeSigning) SetSignature(v *CodeSigningSignature) *CustomCodeSigning {
	s.Signature = v
	return s
}

// SetSignatureAlgorithm sets the SignatureAlgorithm field's value.
func (s *CustomCodeSigning) SetSignatureAlgorithm(v string) *CustomCodeSigning {
	s.SignatureAlgorithm = &v
	return s
}

type DeleteAccountAuditConfigurationInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// If true, all scheduled audits are deleted.
	DeleteScheduledAudits *bool `location:"querystring" locationName:"deleteScheduledAudits" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAccountAuditConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAccountAuditConfigurationInput) GoString() string {
	return s.String()
}

// SetDeleteScheduledAudits sets the DeleteScheduledAudits field's value.
func (s *DeleteAccountAuditConfigurationInput) SetDeleteScheduledAudits(v bool) *DeleteAccountAuditConfigurationInput {
	s.DeleteScheduledAudits = &v
	return s
}

type DeleteAccountAuditConfigurationOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAccountAuditConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAccountAuditConfigurationOutput) GoString() string {
	return s.String()
}

type DeleteAuditSuppressionInput struct {
	_ struct{} `type:"structure"`

	// An audit check name. Checks must be enabled for your account. (Use DescribeAccountAuditConfiguration
	// to see the list of all checks, including those that are enabled or use UpdateAccountAuditConfiguration
	// to select which checks are enabled.)
	//
	// CheckName is a required field
	CheckName *string `locationName:"checkName" type:"string" required:"true"`

	// Information that identifies the noncompliant resource.
	//
	// ResourceIdentifier is a required field
	ResourceIdentifier *ResourceIdentifier `locationName:"resourceIdentifier" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAuditSuppressionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAuditSuppressionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteAuditSuppressionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteAuditSuppressionInput"}
	if s.CheckName == nil {
		invalidParams.Add(request.NewErrParamRequired("CheckName"))
	}
	if s.ResourceIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceIdentifier"))
	}
	if s.ResourceIdentifier != nil {
		if err := s.ResourceIdentifier.Validate(); err != nil {
			invalidParams.AddNested("ResourceIdentifier", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCheckName sets the CheckName field's value.
func (s *DeleteAuditSuppressionInput) SetCheckName(v string) *DeleteAuditSuppressionInput {
	s.CheckName = &v
	return s
}

// SetResourceIdentifier sets the ResourceIdentifier field's value.
func (s *DeleteAuditSuppressionInput) SetResourceIdentifier(v *ResourceIdentifier) *DeleteAuditSuppressionInput {
	s.ResourceIdentifier = v
	return s
}

type DeleteAuditSuppressionOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAuditSuppressionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAuditSuppressionOutput) GoString() string {
	return s.String()
}

type DeleteAuthorizerInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the authorizer to delete.
	//
	// AuthorizerName is a required field
	AuthorizerName *string `location:"uri" locationName:"authorizerName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAuthorizerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAuthorizerInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteAuthorizerInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteAuthorizerInput"}
	if s.AuthorizerName == nil {
		invalidParams.Add(request.NewErrParamRequired("AuthorizerName"))
	}
	if s.AuthorizerName != nil && len(*s.AuthorizerName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AuthorizerName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuthorizerName sets the AuthorizerName field's value.
func (s *DeleteAuthorizerInput) SetAuthorizerName(v string) *DeleteAuthorizerInput {
	s.AuthorizerName = &v
	return s
}

type DeleteAuthorizerOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAuthorizerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteAuthorizerOutput) GoString() string {
	return s.String()
}

type DeleteBillingGroupInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the billing group.
	//
	// BillingGroupName is a required field
	BillingGroupName *string `location:"uri" locationName:"billingGroupName" min:"1" type:"string" required:"true"`

	// The expected version of the billing group. If the version of the billing
	// group does not match the expected version specified in the request, the DeleteBillingGroup
	// request is rejected with a VersionConflictException.
	ExpectedVersion *int64 `location:"querystring" locationName:"expectedVersion" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteBillingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteBillingGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteBillingGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteBillingGroupInput"}
	if s.BillingGroupName == nil {
		invalidParams.Add(request.NewErrParamRequired("BillingGroupName"))
	}
	if s.BillingGroupName != nil && len(*s.BillingGroupName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("BillingGroupName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBillingGroupName sets the BillingGroupName field's value.
func (s *DeleteBillingGroupInput) SetBillingGroupName(v string) *DeleteBillingGroupInput {
	s.BillingGroupName = &v
	return s
}

// SetExpectedVersion sets the ExpectedVersion field's value.
func (s *DeleteBillingGroupInput) SetExpectedVersion(v int64) *DeleteBillingGroupInput {
	s.ExpectedVersion = &v
	return s
}

type DeleteBillingGroupOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteBillingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteBillingGroupOutput) GoString() string {
	return s.String()
}

// Input for the DeleteCACertificate operation.
type DeleteCACertificateInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The ID of the certificate to delete. (The last part of the certificate ARN
	// contains the certificate ID.)
	//
	// CertificateId is a required field
	CertificateId *string `location:"uri" locationName:"caCertificateId" min:"64" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCACertificateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCACertificateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteCACertificateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteCACertificateInput"}
	if s.CertificateId == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificateId"))
	}
	if s.CertificateId != nil && len(*s.CertificateId) < 64 {
		invalidParams.Add(request.NewErrParamMinLen("CertificateId", 64))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCertificateId sets the CertificateId field's value.
func (s *DeleteCACertificateInput) SetCertificateId(v string) *DeleteCACertificateInput {
	s.CertificateId = &v
	return s
}

// The output for the DeleteCACertificate operation.
type DeleteCACertificateOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCACertificateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCACertificateOutput) GoString() string {
	return s.String()
}

// The input for the DeleteCertificate operation.
type DeleteCertificateInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The ID of the certificate. (The last part of the certificate ARN contains
	// the certificate ID.)
	//
	// CertificateId is a required field
	CertificateId *string `location:"uri" locationName:"certificateId" min:"64" type:"string" required:"true"`

	// Forces the deletion of a certificate if it is inactive and is not attached
	// to an IoT thing.
	ForceDelete *bool `location:"querystring" locationName:"forceDelete" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCertificateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCertificateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteCertificateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteCertificateInput"}
	if s.CertificateId == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificateId"))
	}
	if s.CertificateId != nil && len(*s.CertificateId) < 64 {
		invalidParams.Add(request.NewErrParamMinLen("CertificateId", 64))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCertificateId sets the CertificateId field's value.
func (s *DeleteCertificateInput) SetCertificateId(v string) *DeleteCertificateInput {
	s.CertificateId = &v
	return s
}

// SetForceDelete sets the ForceDelete field's value.
func (s *DeleteCertificateInput) SetForceDelete(v bool) *DeleteCertificateInput {
	s.ForceDelete = &v
	return s
}

type DeleteCertificateOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCertificateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCertificateOutput) GoString() string {
	return s.String()
}

type DeleteCertificateProviderInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the certificate provider.
	//
	// CertificateProviderName is a required field
	CertificateProviderName *string `location:"uri" locationName:"certificateProviderName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCertificateProviderInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCertificateProviderInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteCertificateProviderInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteCertificateProviderInput"}
	if s.CertificateProviderName == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificateProviderName"))
	}
	if s.CertificateProviderName != nil && len(*s.CertificateProviderName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("CertificateProviderName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCertificateProviderName sets the CertificateProviderName field's value.
func (s *DeleteCertificateProviderInput) SetCertificateProviderName(v string) *DeleteCertificateProviderInput {
	s.CertificateProviderName = &v
	return s
}

type DeleteCertificateProviderOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCertificateProviderOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCertificateProviderOutput) GoString() string {
	return s.String()
}

// You can't delete the resource because it is attached to one or more resources.
type DeleteConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteConflictException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteConflictException) GoString() string {
	return s.String()
}

func newErrorDeleteConflictException(v protocol.ResponseMetadata) error {
	return &DeleteConflictException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *DeleteConflictException) Code() string {
	return "DeleteConflictException"
}

// Message returns the exception's message.
func (s *DeleteConflictException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *DeleteConflictException) OrigErr() error {
	return nil
}

func (s *DeleteConflictException) 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 *DeleteConflictException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *DeleteConflictException) RequestID() string {
	return s.RespMetadata.RequestID
}

type DeleteCustomMetricInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the custom metric.
	//
	// MetricName is a required field
	MetricName *string `location:"uri" locationName:"metricName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCustomMetricInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCustomMetricInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteCustomMetricInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteCustomMetricInput"}
	if s.MetricName == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricName"))
	}
	if s.MetricName != nil && len(*s.MetricName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("MetricName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMetricName sets the MetricName field's value.
func (s *DeleteCustomMetricInput) SetMetricName(v string) *DeleteCustomMetricInput {
	s.MetricName = &v
	return s
}

type DeleteCustomMetricOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCustomMetricOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteCustomMetricOutput) GoString() string {
	return s.String()
}

type DeleteDimensionInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique identifier for the dimension that you want to delete.
	//
	// Name is a required field
	Name *string `location:"uri" locationName:"name" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteDimensionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteDimensionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteDimensionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteDimensionInput"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetName sets the Name field's value.
func (s *DeleteDimensionInput) SetName(v string) *DeleteDimensionInput {
	s.Name = &v
	return s
}

type DeleteDimensionOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteDimensionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteDimensionOutput) GoString() string {
	return s.String()
}

type DeleteDomainConfigurationInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the domain configuration to be deleted.
	//
	// DomainConfigurationName is a required field
	DomainConfigurationName *string `location:"uri" locationName:"domainConfigurationName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteDomainConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteDomainConfigurationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteDomainConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteDomainConfigurationInput"}
	if s.DomainConfigurationName == nil {
		invalidParams.Add(request.NewErrParamRequired("DomainConfigurationName"))
	}
	if s.DomainConfigurationName != nil && len(*s.DomainConfigurationName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DomainConfigurationName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDomainConfigurationName sets the DomainConfigurationName field's value.
func (s *DeleteDomainConfigurationInput) SetDomainConfigurationName(v string) *DeleteDomainConfigurationInput {
	s.DomainConfigurationName = &v
	return s
}

type DeleteDomainConfigurationOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteDomainConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteDomainConfigurationOutput) GoString() string {
	return s.String()
}

type DeleteDynamicThingGroupInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The expected version of the dynamic thing group to delete.
	ExpectedVersion *int64 `location:"querystring" locationName:"expectedVersion" type:"long"`

	// The name of the dynamic thing group to delete.
	//
	// ThingGroupName is a required field
	ThingGroupName *string `location:"uri" locationName:"thingGroupName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteDynamicThingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteDynamicThingGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteDynamicThingGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteDynamicThingGroupInput"}
	if s.ThingGroupName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingGroupName"))
	}
	if s.ThingGroupName != nil && len(*s.ThingGroupName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingGroupName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExpectedVersion sets the ExpectedVersion field's value.
func (s *DeleteDynamicThingGroupInput) SetExpectedVersion(v int64) *DeleteDynamicThingGroupInput {
	s.ExpectedVersion = &v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *DeleteDynamicThingGroupInput) SetThingGroupName(v string) *DeleteDynamicThingGroupInput {
	s.ThingGroupName = &v
	return s
}

type DeleteDynamicThingGroupOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteDynamicThingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteDynamicThingGroupOutput) GoString() string {
	return s.String()
}

type DeleteFleetMetricInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The expected version of the fleet metric to delete.
	ExpectedVersion *int64 `location:"querystring" locationName:"expectedVersion" type:"long"`

	// The name of the fleet metric to delete.
	//
	// MetricName is a required field
	MetricName *string `location:"uri" locationName:"metricName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteFleetMetricInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteFleetMetricInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteFleetMetricInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteFleetMetricInput"}
	if s.MetricName == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricName"))
	}
	if s.MetricName != nil && len(*s.MetricName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("MetricName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExpectedVersion sets the ExpectedVersion field's value.
func (s *DeleteFleetMetricInput) SetExpectedVersion(v int64) *DeleteFleetMetricInput {
	s.ExpectedVersion = &v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *DeleteFleetMetricInput) SetMetricName(v string) *DeleteFleetMetricInput {
	s.MetricName = &v
	return s
}

type DeleteFleetMetricOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteFleetMetricOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteFleetMetricOutput) GoString() string {
	return s.String()
}

type DeleteJobExecutionInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The ID of the job execution to be deleted. The executionNumber refers to
	// the execution of a particular job on a particular device.
	//
	// Note that once a job execution is deleted, the executionNumber may be reused
	// by IoT, so be sure you get and use the correct value here.
	//
	// ExecutionNumber is a required field
	ExecutionNumber *int64 `location:"uri" locationName:"executionNumber" type:"long" required:"true"`

	// (Optional) When true, you can delete a job execution which is "IN_PROGRESS".
	// Otherwise, you can only delete a job execution which is in a terminal state
	// ("SUCCEEDED", "FAILED", "REJECTED", "REMOVED" or "CANCELED") or an exception
	// will occur. The default is false.
	//
	// Deleting a job execution which is "IN_PROGRESS", will cause the device to
	// be unable to access job information or update the job execution status. Use
	// caution and ensure that the device is able to recover to a valid state.
	Force *bool `location:"querystring" locationName:"force" type:"boolean"`

	// The ID of the job whose execution on a particular device will be deleted.
	//
	// JobId is a required field
	JobId *string `location:"uri" locationName:"jobId" min:"1" type:"string" required:"true"`

	// The namespace used to indicate that a job is a customer-managed job.
	//
	// When you specify a value for this parameter, Amazon Web Services IoT Core
	// sends jobs notifications to MQTT topics that contain the value in the following
	// format.
	//
	// $aws/things/THING_NAME/jobs/JOB_ID/notify-namespace-NAMESPACE_ID/
	//
	// The namespaceId feature is only supported by IoT Greengrass at this time.
	// For more information, see Setting up IoT Greengrass core devices. (https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html)
	NamespaceId *string `location:"querystring" locationName:"namespaceId" type:"string"`

	// The name of the thing whose job execution will be deleted.
	//
	// ThingName is a required field
	ThingName *string `location:"uri" locationName:"thingName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteJobExecutionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteJobExecutionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteJobExecutionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteJobExecutionInput"}
	if s.ExecutionNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("ExecutionNumber"))
	}
	if s.JobId == nil {
		invalidParams.Add(request.NewErrParamRequired("JobId"))
	}
	if s.JobId != nil && len(*s.JobId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("JobId", 1))
	}
	if s.ThingName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingName"))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExecutionNumber sets the ExecutionNumber field's value.
func (s *DeleteJobExecutionInput) SetExecutionNumber(v int64) *DeleteJobExecutionInput {
	s.ExecutionNumber = &v
	return s
}

// SetForce sets the Force field's value.
func (s *DeleteJobExecutionInput) SetForce(v bool) *DeleteJobExecutionInput {
	s.Force = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *DeleteJobExecutionInput) SetJobId(v string) *DeleteJobExecutionInput {
	s.JobId = &v
	return s
}

// SetNamespaceId sets the NamespaceId field's value.
func (s *DeleteJobExecutionInput) SetNamespaceId(v string) *DeleteJobExecutionInput {
	s.NamespaceId = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *DeleteJobExecutionInput) SetThingName(v string) *DeleteJobExecutionInput {
	s.ThingName = &v
	return s
}

type DeleteJobExecutionOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteJobExecutionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteJobExecutionOutput) GoString() string {
	return s.String()
}

type DeleteJobInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// (Optional) When true, you can delete a job which is "IN_PROGRESS". Otherwise,
	// you can only delete a job which is in a terminal state ("COMPLETED" or "CANCELED")
	// or an exception will occur. The default is false.
	//
	// Deleting a job which is "IN_PROGRESS", will cause a device which is executing
	// the job to be unable to access job information or update the job execution
	// status. Use caution and ensure that each device executing a job which is
	// deleted is able to recover to a valid state.
	Force *bool `location:"querystring" locationName:"force" type:"boolean"`

	// The ID of the job to be deleted.
	//
	// After a job deletion is completed, you may reuse this jobId when you create
	// a new job. However, this is not recommended, and you must ensure that your
	// devices are not using the jobId to refer to the deleted job.
	//
	// JobId is a required field
	JobId *string `location:"uri" locationName:"jobId" min:"1" type:"string" required:"true"`

	// The namespace used to indicate that a job is a customer-managed job.
	//
	// When you specify a value for this parameter, Amazon Web Services IoT Core
	// sends jobs notifications to MQTT topics that contain the value in the following
	// format.
	//
	// $aws/things/THING_NAME/jobs/JOB_ID/notify-namespace-NAMESPACE_ID/
	//
	// The namespaceId feature is only supported by IoT Greengrass at this time.
	// For more information, see Setting up IoT Greengrass core devices. (https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html)
	NamespaceId *string `location:"querystring" locationName:"namespaceId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteJobInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteJobInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteJobInput"}
	if s.JobId == nil {
		invalidParams.Add(request.NewErrParamRequired("JobId"))
	}
	if s.JobId != nil && len(*s.JobId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("JobId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetForce sets the Force field's value.
func (s *DeleteJobInput) SetForce(v bool) *DeleteJobInput {
	s.Force = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *DeleteJobInput) SetJobId(v string) *DeleteJobInput {
	s.JobId = &v
	return s
}

// SetNamespaceId sets the NamespaceId field's value.
func (s *DeleteJobInput) SetNamespaceId(v string) *DeleteJobInput {
	s.NamespaceId = &v
	return s
}

type DeleteJobOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteJobOutput) GoString() string {
	return s.String()
}

type DeleteJobTemplateInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique identifier of the job template to delete.
	//
	// JobTemplateId is a required field
	JobTemplateId *string `location:"uri" locationName:"jobTemplateId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteJobTemplateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteJobTemplateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteJobTemplateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteJobTemplateInput"}
	if s.JobTemplateId == nil {
		invalidParams.Add(request.NewErrParamRequired("JobTemplateId"))
	}
	if s.JobTemplateId != nil && len(*s.JobTemplateId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("JobTemplateId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetJobTemplateId sets the JobTemplateId field's value.
func (s *DeleteJobTemplateInput) SetJobTemplateId(v string) *DeleteJobTemplateInput {
	s.JobTemplateId = &v
	return s
}

type DeleteJobTemplateOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteJobTemplateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteJobTemplateOutput) GoString() string {
	return s.String()
}

type DeleteMitigationActionInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the mitigation action that you want to delete.
	//
	// ActionName is a required field
	ActionName *string `location:"uri" locationName:"actionName" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteMitigationActionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteMitigationActionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteMitigationActionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteMitigationActionInput"}
	if s.ActionName == nil {
		invalidParams.Add(request.NewErrParamRequired("ActionName"))
	}
	if s.ActionName != nil && len(*s.ActionName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ActionName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetActionName sets the ActionName field's value.
func (s *DeleteMitigationActionInput) SetActionName(v string) *DeleteMitigationActionInput {
	s.ActionName = &v
	return s
}

type DeleteMitigationActionOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteMitigationActionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteMitigationActionOutput) GoString() string {
	return s.String()
}

type DeleteOTAUpdateInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// When true, the stream created by the OTAUpdate process is deleted when the
	// OTA update is deleted. Ignored if the stream specified in the OTAUpdate is
	// supplied by the user.
	DeleteStream *bool `location:"querystring" locationName:"deleteStream" type:"boolean"`

	// When true, deletes the IoT job created by the OTAUpdate process even if it
	// is "IN_PROGRESS". Otherwise, if the job is not in a terminal state ("COMPLETED"
	// or "CANCELED") an exception will occur. The default is false.
	ForceDeleteAWSJob *bool `location:"querystring" locationName:"forceDeleteAWSJob" type:"boolean"`

	// The ID of the OTA update to delete.
	//
	// OtaUpdateId is a required field
	OtaUpdateId *string `location:"uri" locationName:"otaUpdateId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteOTAUpdateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteOTAUpdateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteOTAUpdateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteOTAUpdateInput"}
	if s.OtaUpdateId == nil {
		invalidParams.Add(request.NewErrParamRequired("OtaUpdateId"))
	}
	if s.OtaUpdateId != nil && len(*s.OtaUpdateId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("OtaUpdateId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDeleteStream sets the DeleteStream field's value.
func (s *DeleteOTAUpdateInput) SetDeleteStream(v bool) *DeleteOTAUpdateInput {
	s.DeleteStream = &v
	return s
}

// SetForceDeleteAWSJob sets the ForceDeleteAWSJob field's value.
func (s *DeleteOTAUpdateInput) SetForceDeleteAWSJob(v bool) *DeleteOTAUpdateInput {
	s.ForceDeleteAWSJob = &v
	return s
}

// SetOtaUpdateId sets the OtaUpdateId field's value.
func (s *DeleteOTAUpdateInput) SetOtaUpdateId(v string) *DeleteOTAUpdateInput {
	s.OtaUpdateId = &v
	return s
}

type DeleteOTAUpdateOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteOTAUpdateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteOTAUpdateOutput) GoString() string {
	return s.String()
}

type DeletePackageInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// A unique case-sensitive identifier that you can provide to ensure the idempotency
	// of the request. Don't reuse this client token if a new idempotent request
	// is required.
	ClientToken *string `location:"querystring" locationName:"clientToken" min:"36" type:"string" idempotencyToken:"true"`

	// The name of the target software package.
	//
	// PackageName is a required field
	PackageName *string `location:"uri" locationName:"packageName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePackageInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePackageInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeletePackageInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeletePackageInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 36 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 36))
	}
	if s.PackageName == nil {
		invalidParams.Add(request.NewErrParamRequired("PackageName"))
	}
	if s.PackageName != nil && len(*s.PackageName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PackageName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetClientToken sets the ClientToken field's value.
func (s *DeletePackageInput) SetClientToken(v string) *DeletePackageInput {
	s.ClientToken = &v
	return s
}

// SetPackageName sets the PackageName field's value.
func (s *DeletePackageInput) SetPackageName(v string) *DeletePackageInput {
	s.PackageName = &v
	return s
}

type DeletePackageOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePackageOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePackageOutput) GoString() string {
	return s.String()
}

type DeletePackageVersionInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// A unique case-sensitive identifier that you can provide to ensure the idempotency
	// of the request. Don't reuse this client token if a new idempotent request
	// is required.
	ClientToken *string `location:"querystring" locationName:"clientToken" min:"36" type:"string" idempotencyToken:"true"`

	// The name of the associated software package.
	//
	// PackageName is a required field
	PackageName *string `location:"uri" locationName:"packageName" min:"1" type:"string" required:"true"`

	// The name of the target package version.
	//
	// VersionName is a required field
	VersionName *string `location:"uri" locationName:"versionName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePackageVersionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePackageVersionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeletePackageVersionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeletePackageVersionInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 36 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 36))
	}
	if s.PackageName == nil {
		invalidParams.Add(request.NewErrParamRequired("PackageName"))
	}
	if s.PackageName != nil && len(*s.PackageName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PackageName", 1))
	}
	if s.VersionName == nil {
		invalidParams.Add(request.NewErrParamRequired("VersionName"))
	}
	if s.VersionName != nil && len(*s.VersionName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("VersionName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetClientToken sets the ClientToken field's value.
func (s *DeletePackageVersionInput) SetClientToken(v string) *DeletePackageVersionInput {
	s.ClientToken = &v
	return s
}

// SetPackageName sets the PackageName field's value.
func (s *DeletePackageVersionInput) SetPackageName(v string) *DeletePackageVersionInput {
	s.PackageName = &v
	return s
}

// SetVersionName sets the VersionName field's value.
func (s *DeletePackageVersionInput) SetVersionName(v string) *DeletePackageVersionInput {
	s.VersionName = &v
	return s
}

type DeletePackageVersionOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePackageVersionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePackageVersionOutput) GoString() string {
	return s.String()
}

// The input for the DeletePolicy operation.
type DeletePolicyInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the policy to delete.
	//
	// PolicyName is a required field
	PolicyName *string `location:"uri" locationName:"policyName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePolicyInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePolicyInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeletePolicyInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeletePolicyInput"}
	if s.PolicyName == nil {
		invalidParams.Add(request.NewErrParamRequired("PolicyName"))
	}
	if s.PolicyName != nil && len(*s.PolicyName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPolicyName sets the PolicyName field's value.
func (s *DeletePolicyInput) SetPolicyName(v string) *DeletePolicyInput {
	s.PolicyName = &v
	return s
}

type DeletePolicyOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePolicyOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePolicyOutput) GoString() string {
	return s.String()
}

// The input for the DeletePolicyVersion operation.
type DeletePolicyVersionInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the policy.
	//
	// PolicyName is a required field
	PolicyName *string `location:"uri" locationName:"policyName" min:"1" type:"string" required:"true"`

	// The policy version ID.
	//
	// PolicyVersionId is a required field
	PolicyVersionId *string `location:"uri" locationName:"policyVersionId" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePolicyVersionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePolicyVersionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeletePolicyVersionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeletePolicyVersionInput"}
	if s.PolicyName == nil {
		invalidParams.Add(request.NewErrParamRequired("PolicyName"))
	}
	if s.PolicyName != nil && len(*s.PolicyName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyName", 1))
	}
	if s.PolicyVersionId == nil {
		invalidParams.Add(request.NewErrParamRequired("PolicyVersionId"))
	}
	if s.PolicyVersionId != nil && len(*s.PolicyVersionId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyVersionId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPolicyName sets the PolicyName field's value.
func (s *DeletePolicyVersionInput) SetPolicyName(v string) *DeletePolicyVersionInput {
	s.PolicyName = &v
	return s
}

// SetPolicyVersionId sets the PolicyVersionId field's value.
func (s *DeletePolicyVersionInput) SetPolicyVersionId(v string) *DeletePolicyVersionInput {
	s.PolicyVersionId = &v
	return s
}

type DeletePolicyVersionOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePolicyVersionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeletePolicyVersionOutput) GoString() string {
	return s.String()
}

type DeleteProvisioningTemplateInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the fleet provision template to delete.
	//
	// TemplateName is a required field
	TemplateName *string `location:"uri" locationName:"templateName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteProvisioningTemplateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteProvisioningTemplateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteProvisioningTemplateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteProvisioningTemplateInput"}
	if s.TemplateName == nil {
		invalidParams.Add(request.NewErrParamRequired("TemplateName"))
	}
	if s.TemplateName != nil && len(*s.TemplateName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TemplateName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTemplateName sets the TemplateName field's value.
func (s *DeleteProvisioningTemplateInput) SetTemplateName(v string) *DeleteProvisioningTemplateInput {
	s.TemplateName = &v
	return s
}

type DeleteProvisioningTemplateOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteProvisioningTemplateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteProvisioningTemplateOutput) GoString() string {
	return s.String()
}

type DeleteProvisioningTemplateVersionInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the provisioning template version to delete.
	//
	// TemplateName is a required field
	TemplateName *string `location:"uri" locationName:"templateName" min:"1" type:"string" required:"true"`

	// The provisioning template version ID to delete.
	//
	// VersionId is a required field
	VersionId *int64 `location:"uri" locationName:"versionId" type:"integer" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteProvisioningTemplateVersionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteProvisioningTemplateVersionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteProvisioningTemplateVersionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteProvisioningTemplateVersionInput"}
	if s.TemplateName == nil {
		invalidParams.Add(request.NewErrParamRequired("TemplateName"))
	}
	if s.TemplateName != nil && len(*s.TemplateName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TemplateName", 1))
	}
	if s.VersionId == nil {
		invalidParams.Add(request.NewErrParamRequired("VersionId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTemplateName sets the TemplateName field's value.
func (s *DeleteProvisioningTemplateVersionInput) SetTemplateName(v string) *DeleteProvisioningTemplateVersionInput {
	s.TemplateName = &v
	return s
}

// SetVersionId sets the VersionId field's value.
func (s *DeleteProvisioningTemplateVersionInput) SetVersionId(v int64) *DeleteProvisioningTemplateVersionInput {
	s.VersionId = &v
	return s
}

type DeleteProvisioningTemplateVersionOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteProvisioningTemplateVersionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteProvisioningTemplateVersionOutput) GoString() string {
	return s.String()
}

// The input for the DeleteRegistrationCode operation.
type DeleteRegistrationCodeInput struct {
	_ struct{} `type:"structure" nopayload:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteRegistrationCodeInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteRegistrationCodeInput) GoString() string {
	return s.String()
}

// The output for the DeleteRegistrationCode operation.
type DeleteRegistrationCodeOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteRegistrationCodeOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteRegistrationCodeOutput) GoString() string {
	return s.String()
}

type DeleteRoleAliasInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The role alias to delete.
	//
	// RoleAlias is a required field
	RoleAlias *string `location:"uri" locationName:"roleAlias" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteRoleAliasInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteRoleAliasInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteRoleAliasInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteRoleAliasInput"}
	if s.RoleAlias == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleAlias"))
	}
	if s.RoleAlias != nil && len(*s.RoleAlias) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RoleAlias", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRoleAlias sets the RoleAlias field's value.
func (s *DeleteRoleAliasInput) SetRoleAlias(v string) *DeleteRoleAliasInput {
	s.RoleAlias = &v
	return s
}

type DeleteRoleAliasOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteRoleAliasOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteRoleAliasOutput) GoString() string {
	return s.String()
}

type DeleteScheduledAuditInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the scheduled audit you want to delete.
	//
	// ScheduledAuditName is a required field
	ScheduledAuditName *string `location:"uri" locationName:"scheduledAuditName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteScheduledAuditInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteScheduledAuditInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteScheduledAuditInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteScheduledAuditInput"}
	if s.ScheduledAuditName == nil {
		invalidParams.Add(request.NewErrParamRequired("ScheduledAuditName"))
	}
	if s.ScheduledAuditName != nil && len(*s.ScheduledAuditName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ScheduledAuditName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetScheduledAuditName sets the ScheduledAuditName field's value.
func (s *DeleteScheduledAuditInput) SetScheduledAuditName(v string) *DeleteScheduledAuditInput {
	s.ScheduledAuditName = &v
	return s
}

type DeleteScheduledAuditOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteScheduledAuditOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteScheduledAuditOutput) GoString() string {
	return s.String()
}

type DeleteSecurityProfileInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The expected version of the security profile. A new version is generated
	// whenever the security profile is updated. If you specify a value that is
	// different from the actual version, a VersionConflictException is thrown.
	ExpectedVersion *int64 `location:"querystring" locationName:"expectedVersion" type:"long"`

	// The name of the security profile to be deleted.
	//
	// SecurityProfileName is a required field
	SecurityProfileName *string `location:"uri" locationName:"securityProfileName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteSecurityProfileInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteSecurityProfileInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteSecurityProfileInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteSecurityProfileInput"}
	if s.SecurityProfileName == nil {
		invalidParams.Add(request.NewErrParamRequired("SecurityProfileName"))
	}
	if s.SecurityProfileName != nil && len(*s.SecurityProfileName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SecurityProfileName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExpectedVersion sets the ExpectedVersion field's value.
func (s *DeleteSecurityProfileInput) SetExpectedVersion(v int64) *DeleteSecurityProfileInput {
	s.ExpectedVersion = &v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *DeleteSecurityProfileInput) SetSecurityProfileName(v string) *DeleteSecurityProfileInput {
	s.SecurityProfileName = &v
	return s
}

type DeleteSecurityProfileOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteSecurityProfileOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteSecurityProfileOutput) GoString() string {
	return s.String()
}

type DeleteStreamInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The stream ID.
	//
	// StreamId is a required field
	StreamId *string `location:"uri" locationName:"streamId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteStreamInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteStreamInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteStreamInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteStreamInput"}
	if s.StreamId == nil {
		invalidParams.Add(request.NewErrParamRequired("StreamId"))
	}
	if s.StreamId != nil && len(*s.StreamId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("StreamId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetStreamId sets the StreamId field's value.
func (s *DeleteStreamInput) SetStreamId(v string) *DeleteStreamInput {
	s.StreamId = &v
	return s
}

type DeleteStreamOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteStreamOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteStreamOutput) GoString() string {
	return s.String()
}

type DeleteThingGroupInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The expected version of the thing group to delete.
	ExpectedVersion *int64 `location:"querystring" locationName:"expectedVersion" type:"long"`

	// The name of the thing group to delete.
	//
	// ThingGroupName is a required field
	ThingGroupName *string `location:"uri" locationName:"thingGroupName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteThingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteThingGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteThingGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteThingGroupInput"}
	if s.ThingGroupName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingGroupName"))
	}
	if s.ThingGroupName != nil && len(*s.ThingGroupName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingGroupName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExpectedVersion sets the ExpectedVersion field's value.
func (s *DeleteThingGroupInput) SetExpectedVersion(v int64) *DeleteThingGroupInput {
	s.ExpectedVersion = &v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *DeleteThingGroupInput) SetThingGroupName(v string) *DeleteThingGroupInput {
	s.ThingGroupName = &v
	return s
}

type DeleteThingGroupOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteThingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteThingGroupOutput) GoString() string {
	return s.String()
}

// The input for the DeleteThing operation.
type DeleteThingInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The expected version of the thing record in the registry. If the version
	// of the record in the registry does not match the expected version specified
	// in the request, the DeleteThing request is rejected with a VersionConflictException.
	ExpectedVersion *int64 `location:"querystring" locationName:"expectedVersion" type:"long"`

	// The name of the thing to delete.
	//
	// ThingName is a required field
	ThingName *string `location:"uri" locationName:"thingName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteThingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteThingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteThingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteThingInput"}
	if s.ThingName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingName"))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExpectedVersion sets the ExpectedVersion field's value.
func (s *DeleteThingInput) SetExpectedVersion(v int64) *DeleteThingInput {
	s.ExpectedVersion = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *DeleteThingInput) SetThingName(v string) *DeleteThingInput {
	s.ThingName = &v
	return s
}

// The output of the DeleteThing operation.
type DeleteThingOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteThingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteThingOutput) GoString() string {
	return s.String()
}

// The input for the DeleteThingType operation.
type DeleteThingTypeInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the thing type.
	//
	// ThingTypeName is a required field
	ThingTypeName *string `location:"uri" locationName:"thingTypeName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteThingTypeInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteThingTypeInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteThingTypeInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteThingTypeInput"}
	if s.ThingTypeName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingTypeName"))
	}
	if s.ThingTypeName != nil && len(*s.ThingTypeName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingTypeName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *DeleteThingTypeInput) SetThingTypeName(v string) *DeleteThingTypeInput {
	s.ThingTypeName = &v
	return s
}

// The output for the DeleteThingType operation.
type DeleteThingTypeOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteThingTypeOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteThingTypeOutput) GoString() string {
	return s.String()
}

type DeleteTopicRuleDestinationInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The ARN of the topic rule destination to delete.
	//
	// Arn is a required field
	Arn *string `location:"uri" locationName:"arn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTopicRuleDestinationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTopicRuleDestinationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteTopicRuleDestinationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteTopicRuleDestinationInput"}
	if s.Arn == nil {
		invalidParams.Add(request.NewErrParamRequired("Arn"))
	}
	if s.Arn != nil && len(*s.Arn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Arn", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetArn sets the Arn field's value.
func (s *DeleteTopicRuleDestinationInput) SetArn(v string) *DeleteTopicRuleDestinationInput {
	s.Arn = &v
	return s
}

type DeleteTopicRuleDestinationOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTopicRuleDestinationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTopicRuleDestinationOutput) GoString() string {
	return s.String()
}

// The input for the DeleteTopicRule operation.
type DeleteTopicRuleInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the rule.
	//
	// RuleName is a required field
	RuleName *string `location:"uri" locationName:"ruleName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTopicRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTopicRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteTopicRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteTopicRuleInput"}
	if s.RuleName == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleName"))
	}
	if s.RuleName != nil && len(*s.RuleName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRuleName sets the RuleName field's value.
func (s *DeleteTopicRuleInput) SetRuleName(v string) *DeleteTopicRuleInput {
	s.RuleName = &v
	return s
}

type DeleteTopicRuleOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTopicRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteTopicRuleOutput) GoString() string {
	return s.String()
}

type DeleteV2LoggingLevelInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the resource for which you are configuring logging.
	//
	// TargetName is a required field
	TargetName *string `location:"querystring" locationName:"targetName" type:"string" required:"true"`

	// The type of resource for which you are configuring logging. Must be THING_Group.
	//
	// TargetType is a required field
	TargetType *string `location:"querystring" locationName:"targetType" type:"string" required:"true" enum:"LogTargetType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteV2LoggingLevelInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteV2LoggingLevelInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteV2LoggingLevelInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteV2LoggingLevelInput"}
	if s.TargetName == nil {
		invalidParams.Add(request.NewErrParamRequired("TargetName"))
	}
	if s.TargetType == nil {
		invalidParams.Add(request.NewErrParamRequired("TargetType"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTargetName sets the TargetName field's value.
func (s *DeleteV2LoggingLevelInput) SetTargetName(v string) *DeleteV2LoggingLevelInput {
	s.TargetName = &v
	return s
}

// SetTargetType sets the TargetType field's value.
func (s *DeleteV2LoggingLevelInput) SetTargetType(v string) *DeleteV2LoggingLevelInput {
	s.TargetType = &v
	return s
}

type DeleteV2LoggingLevelOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteV2LoggingLevelOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteV2LoggingLevelOutput) GoString() string {
	return s.String()
}

// Contains information that denied the authorization.
type Denied struct {
	_ struct{} `type:"structure"`

	// Information that explicitly denies the authorization.
	ExplicitDeny *ExplicitDeny `locationName:"explicitDeny" type:"structure"`

	// Information that implicitly denies the authorization. When a policy doesn't
	// explicitly deny or allow an action on a resource it is considered an implicit
	// deny.
	ImplicitDeny *ImplicitDeny `locationName:"implicitDeny" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Denied) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Denied) GoString() string {
	return s.String()
}

// SetExplicitDeny sets the ExplicitDeny field's value.
func (s *Denied) SetExplicitDeny(v *ExplicitDeny) *Denied {
	s.ExplicitDeny = v
	return s
}

// SetImplicitDeny sets the ImplicitDeny field's value.
func (s *Denied) SetImplicitDeny(v *ImplicitDeny) *Denied {
	s.ImplicitDeny = v
	return s
}

// The input for the DeprecateThingType operation.
type DeprecateThingTypeInput struct {
	_ struct{} `type:"structure"`

	// The name of the thing type to deprecate.
	//
	// ThingTypeName is a required field
	ThingTypeName *string `location:"uri" locationName:"thingTypeName" min:"1" type:"string" required:"true"`

	// Whether to undeprecate a deprecated thing type. If true, the thing type will
	// not be deprecated anymore and you can associate it with things.
	UndoDeprecate *bool `locationName:"undoDeprecate" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeprecateThingTypeInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeprecateThingTypeInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeprecateThingTypeInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeprecateThingTypeInput"}
	if s.ThingTypeName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingTypeName"))
	}
	if s.ThingTypeName != nil && len(*s.ThingTypeName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingTypeName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *DeprecateThingTypeInput) SetThingTypeName(v string) *DeprecateThingTypeInput {
	s.ThingTypeName = &v
	return s
}

// SetUndoDeprecate sets the UndoDeprecate field's value.
func (s *DeprecateThingTypeInput) SetUndoDeprecate(v bool) *DeprecateThingTypeInput {
	s.UndoDeprecate = &v
	return s
}

// The output for the DeprecateThingType operation.
type DeprecateThingTypeOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeprecateThingTypeOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeprecateThingTypeOutput) GoString() string {
	return s.String()
}

type DescribeAccountAuditConfigurationInput struct {
	_ struct{} `type:"structure" nopayload:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAccountAuditConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAccountAuditConfigurationInput) GoString() string {
	return s.String()
}

type DescribeAccountAuditConfigurationOutput struct {
	_ struct{} `type:"structure"`

	// Which audit checks are enabled and disabled for this account.
	AuditCheckConfigurations map[string]*AuditCheckConfiguration `locationName:"auditCheckConfigurations" type:"map"`

	// Information about the targets to which audit notifications are sent for this
	// account.
	AuditNotificationTargetConfigurations map[string]*AuditNotificationTarget `locationName:"auditNotificationTargetConfigurations" type:"map"`

	// The ARN of the role that grants permission to IoT to access information about
	// your devices, policies, certificates, and other items as required when performing
	// an audit.
	//
	// On the first call to UpdateAccountAuditConfiguration, this parameter is required.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAccountAuditConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAccountAuditConfigurationOutput) GoString() string {
	return s.String()
}

// SetAuditCheckConfigurations sets the AuditCheckConfigurations field's value.
func (s *DescribeAccountAuditConfigurationOutput) SetAuditCheckConfigurations(v map[string]*AuditCheckConfiguration) *DescribeAccountAuditConfigurationOutput {
	s.AuditCheckConfigurations = v
	return s
}

// SetAuditNotificationTargetConfigurations sets the AuditNotificationTargetConfigurations field's value.
func (s *DescribeAccountAuditConfigurationOutput) SetAuditNotificationTargetConfigurations(v map[string]*AuditNotificationTarget) *DescribeAccountAuditConfigurationOutput {
	s.AuditNotificationTargetConfigurations = v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *DescribeAccountAuditConfigurationOutput) SetRoleArn(v string) *DescribeAccountAuditConfigurationOutput {
	s.RoleArn = &v
	return s
}

type DescribeAuditFindingInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// A unique identifier for a single audit finding. You can use this identifier
	// to apply mitigation actions to the finding.
	//
	// FindingId is a required field
	FindingId *string `location:"uri" locationName:"findingId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditFindingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditFindingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeAuditFindingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeAuditFindingInput"}
	if s.FindingId == nil {
		invalidParams.Add(request.NewErrParamRequired("FindingId"))
	}
	if s.FindingId != nil && len(*s.FindingId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("FindingId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetFindingId sets the FindingId field's value.
func (s *DescribeAuditFindingInput) SetFindingId(v string) *DescribeAuditFindingInput {
	s.FindingId = &v
	return s
}

type DescribeAuditFindingOutput struct {
	_ struct{} `type:"structure"`

	// The findings (results) of the audit.
	Finding *AuditFinding `locationName:"finding" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditFindingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditFindingOutput) GoString() string {
	return s.String()
}

// SetFinding sets the Finding field's value.
func (s *DescribeAuditFindingOutput) SetFinding(v *AuditFinding) *DescribeAuditFindingOutput {
	s.Finding = v
	return s
}

type DescribeAuditMitigationActionsTaskInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique identifier for the audit mitigation task.
	//
	// TaskId is a required field
	TaskId *string `location:"uri" locationName:"taskId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditMitigationActionsTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditMitigationActionsTaskInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeAuditMitigationActionsTaskInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeAuditMitigationActionsTaskInput"}
	if s.TaskId == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskId"))
	}
	if s.TaskId != nil && len(*s.TaskId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TaskId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTaskId sets the TaskId field's value.
func (s *DescribeAuditMitigationActionsTaskInput) SetTaskId(v string) *DescribeAuditMitigationActionsTaskInput {
	s.TaskId = &v
	return s
}

type DescribeAuditMitigationActionsTaskOutput struct {
	_ struct{} `type:"structure"`

	// Specifies the mitigation actions and their parameters that are applied as
	// part of this task.
	ActionsDefinition []*MitigationAction `locationName:"actionsDefinition" type:"list"`

	// Specifies the mitigation actions that should be applied to specific audit
	// checks.
	AuditCheckToActionsMapping map[string][]*string `locationName:"auditCheckToActionsMapping" type:"map"`

	// The date and time when the task was completed or canceled.
	EndTime *time.Time `locationName:"endTime" type:"timestamp"`

	// The date and time when the task was started.
	StartTime *time.Time `locationName:"startTime" type:"timestamp"`

	// Identifies the findings to which the mitigation actions are applied. This
	// can be by audit checks, by audit task, or a set of findings.
	Target *AuditMitigationActionsTaskTarget `locationName:"target" type:"structure"`

	// Aggregate counts of the results when the mitigation tasks were applied to
	// the findings for this audit mitigation actions task.
	TaskStatistics map[string]*TaskStatisticsForAuditCheck `locationName:"taskStatistics" type:"map"`

	// The current status of the task.
	TaskStatus *string `locationName:"taskStatus" type:"string" enum:"AuditMitigationActionsTaskStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditMitigationActionsTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditMitigationActionsTaskOutput) GoString() string {
	return s.String()
}

// SetActionsDefinition sets the ActionsDefinition field's value.
func (s *DescribeAuditMitigationActionsTaskOutput) SetActionsDefinition(v []*MitigationAction) *DescribeAuditMitigationActionsTaskOutput {
	s.ActionsDefinition = v
	return s
}

// SetAuditCheckToActionsMapping sets the AuditCheckToActionsMapping field's value.
func (s *DescribeAuditMitigationActionsTaskOutput) SetAuditCheckToActionsMapping(v map[string][]*string) *DescribeAuditMitigationActionsTaskOutput {
	s.AuditCheckToActionsMapping = v
	return s
}

// SetEndTime sets the EndTime field's value.
func (s *DescribeAuditMitigationActionsTaskOutput) SetEndTime(v time.Time) *DescribeAuditMitigationActionsTaskOutput {
	s.EndTime = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *DescribeAuditMitigationActionsTaskOutput) SetStartTime(v time.Time) *DescribeAuditMitigationActionsTaskOutput {
	s.StartTime = &v
	return s
}

// SetTarget sets the Target field's value.
func (s *DescribeAuditMitigationActionsTaskOutput) SetTarget(v *AuditMitigationActionsTaskTarget) *DescribeAuditMitigationActionsTaskOutput {
	s.Target = v
	return s
}

// SetTaskStatistics sets the TaskStatistics field's value.
func (s *DescribeAuditMitigationActionsTaskOutput) SetTaskStatistics(v map[string]*TaskStatisticsForAuditCheck) *DescribeAuditMitigationActionsTaskOutput {
	s.TaskStatistics = v
	return s
}

// SetTaskStatus sets the TaskStatus field's value.
func (s *DescribeAuditMitigationActionsTaskOutput) SetTaskStatus(v string) *DescribeAuditMitigationActionsTaskOutput {
	s.TaskStatus = &v
	return s
}

type DescribeAuditSuppressionInput struct {
	_ struct{} `type:"structure"`

	// An audit check name. Checks must be enabled for your account. (Use DescribeAccountAuditConfiguration
	// to see the list of all checks, including those that are enabled or use UpdateAccountAuditConfiguration
	// to select which checks are enabled.)
	//
	// CheckName is a required field
	CheckName *string `locationName:"checkName" type:"string" required:"true"`

	// Information that identifies the noncompliant resource.
	//
	// ResourceIdentifier is a required field
	ResourceIdentifier *ResourceIdentifier `locationName:"resourceIdentifier" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditSuppressionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditSuppressionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeAuditSuppressionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeAuditSuppressionInput"}
	if s.CheckName == nil {
		invalidParams.Add(request.NewErrParamRequired("CheckName"))
	}
	if s.ResourceIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceIdentifier"))
	}
	if s.ResourceIdentifier != nil {
		if err := s.ResourceIdentifier.Validate(); err != nil {
			invalidParams.AddNested("ResourceIdentifier", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCheckName sets the CheckName field's value.
func (s *DescribeAuditSuppressionInput) SetCheckName(v string) *DescribeAuditSuppressionInput {
	s.CheckName = &v
	return s
}

// SetResourceIdentifier sets the ResourceIdentifier field's value.
func (s *DescribeAuditSuppressionInput) SetResourceIdentifier(v *ResourceIdentifier) *DescribeAuditSuppressionInput {
	s.ResourceIdentifier = v
	return s
}

type DescribeAuditSuppressionOutput struct {
	_ struct{} `type:"structure"`

	// An audit check name. Checks must be enabled for your account. (Use DescribeAccountAuditConfiguration
	// to see the list of all checks, including those that are enabled or use UpdateAccountAuditConfiguration
	// to select which checks are enabled.)
	CheckName *string `locationName:"checkName" type:"string"`

	// The description of the audit suppression.
	Description *string `locationName:"description" type:"string"`

	// The epoch timestamp in seconds at which this suppression expires.
	ExpirationDate *time.Time `locationName:"expirationDate" type:"timestamp"`

	// Information that identifies the noncompliant resource.
	ResourceIdentifier *ResourceIdentifier `locationName:"resourceIdentifier" type:"structure"`

	// Indicates whether a suppression should exist indefinitely or not.
	SuppressIndefinitely *bool `locationName:"suppressIndefinitely" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditSuppressionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditSuppressionOutput) GoString() string {
	return s.String()
}

// SetCheckName sets the CheckName field's value.
func (s *DescribeAuditSuppressionOutput) SetCheckName(v string) *DescribeAuditSuppressionOutput {
	s.CheckName = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *DescribeAuditSuppressionOutput) SetDescription(v string) *DescribeAuditSuppressionOutput {
	s.Description = &v
	return s
}

// SetExpirationDate sets the ExpirationDate field's value.
func (s *DescribeAuditSuppressionOutput) SetExpirationDate(v time.Time) *DescribeAuditSuppressionOutput {
	s.ExpirationDate = &v
	return s
}

// SetResourceIdentifier sets the ResourceIdentifier field's value.
func (s *DescribeAuditSuppressionOutput) SetResourceIdentifier(v *ResourceIdentifier) *DescribeAuditSuppressionOutput {
	s.ResourceIdentifier = v
	return s
}

// SetSuppressIndefinitely sets the SuppressIndefinitely field's value.
func (s *DescribeAuditSuppressionOutput) SetSuppressIndefinitely(v bool) *DescribeAuditSuppressionOutput {
	s.SuppressIndefinitely = &v
	return s
}

type DescribeAuditTaskInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The ID of the audit whose information you want to get.
	//
	// TaskId is a required field
	TaskId *string `location:"uri" locationName:"taskId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditTaskInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeAuditTaskInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeAuditTaskInput"}
	if s.TaskId == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskId"))
	}
	if s.TaskId != nil && len(*s.TaskId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TaskId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTaskId sets the TaskId field's value.
func (s *DescribeAuditTaskInput) SetTaskId(v string) *DescribeAuditTaskInput {
	s.TaskId = &v
	return s
}

type DescribeAuditTaskOutput struct {
	_ struct{} `type:"structure"`

	// Detailed information about each check performed during this audit.
	AuditDetails map[string]*AuditCheckDetails `locationName:"auditDetails" type:"map"`

	// The name of the scheduled audit (only if the audit was a scheduled audit).
	ScheduledAuditName *string `locationName:"scheduledAuditName" min:"1" type:"string"`

	// The time the audit started.
	TaskStartTime *time.Time `locationName:"taskStartTime" type:"timestamp"`

	// Statistical information about the audit.
	TaskStatistics *TaskStatistics `locationName:"taskStatistics" type:"structure"`

	// The status of the audit: one of "IN_PROGRESS", "COMPLETED", "FAILED", or
	// "CANCELED".
	TaskStatus *string `locationName:"taskStatus" type:"string" enum:"AuditTaskStatus"`

	// The type of audit: "ON_DEMAND_AUDIT_TASK" or "SCHEDULED_AUDIT_TASK".
	TaskType *string `locationName:"taskType" type:"string" enum:"AuditTaskType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuditTaskOutput) GoString() string {
	return s.String()
}

// SetAuditDetails sets the AuditDetails field's value.
func (s *DescribeAuditTaskOutput) SetAuditDetails(v map[string]*AuditCheckDetails) *DescribeAuditTaskOutput {
	s.AuditDetails = v
	return s
}

// SetScheduledAuditName sets the ScheduledAuditName field's value.
func (s *DescribeAuditTaskOutput) SetScheduledAuditName(v string) *DescribeAuditTaskOutput {
	s.ScheduledAuditName = &v
	return s
}

// SetTaskStartTime sets the TaskStartTime field's value.
func (s *DescribeAuditTaskOutput) SetTaskStartTime(v time.Time) *DescribeAuditTaskOutput {
	s.TaskStartTime = &v
	return s
}

// SetTaskStatistics sets the TaskStatistics field's value.
func (s *DescribeAuditTaskOutput) SetTaskStatistics(v *TaskStatistics) *DescribeAuditTaskOutput {
	s.TaskStatistics = v
	return s
}

// SetTaskStatus sets the TaskStatus field's value.
func (s *DescribeAuditTaskOutput) SetTaskStatus(v string) *DescribeAuditTaskOutput {
	s.TaskStatus = &v
	return s
}

// SetTaskType sets the TaskType field's value.
func (s *DescribeAuditTaskOutput) SetTaskType(v string) *DescribeAuditTaskOutput {
	s.TaskType = &v
	return s
}

type DescribeAuthorizerInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the authorizer to describe.
	//
	// AuthorizerName is a required field
	AuthorizerName *string `location:"uri" locationName:"authorizerName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuthorizerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuthorizerInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeAuthorizerInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeAuthorizerInput"}
	if s.AuthorizerName == nil {
		invalidParams.Add(request.NewErrParamRequired("AuthorizerName"))
	}
	if s.AuthorizerName != nil && len(*s.AuthorizerName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AuthorizerName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuthorizerName sets the AuthorizerName field's value.
func (s *DescribeAuthorizerInput) SetAuthorizerName(v string) *DescribeAuthorizerInput {
	s.AuthorizerName = &v
	return s
}

type DescribeAuthorizerOutput struct {
	_ struct{} `type:"structure"`

	// The authorizer description.
	AuthorizerDescription *AuthorizerDescription `locationName:"authorizerDescription" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuthorizerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeAuthorizerOutput) GoString() string {
	return s.String()
}

// SetAuthorizerDescription sets the AuthorizerDescription field's value.
func (s *DescribeAuthorizerOutput) SetAuthorizerDescription(v *AuthorizerDescription) *DescribeAuthorizerOutput {
	s.AuthorizerDescription = v
	return s
}

type DescribeBillingGroupInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the billing group.
	//
	// BillingGroupName is a required field
	BillingGroupName *string `location:"uri" locationName:"billingGroupName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeBillingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeBillingGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeBillingGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeBillingGroupInput"}
	if s.BillingGroupName == nil {
		invalidParams.Add(request.NewErrParamRequired("BillingGroupName"))
	}
	if s.BillingGroupName != nil && len(*s.BillingGroupName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("BillingGroupName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBillingGroupName sets the BillingGroupName field's value.
func (s *DescribeBillingGroupInput) SetBillingGroupName(v string) *DescribeBillingGroupInput {
	s.BillingGroupName = &v
	return s
}

type DescribeBillingGroupOutput struct {
	_ struct{} `type:"structure"`

	// The ARN of the billing group.
	BillingGroupArn *string `locationName:"billingGroupArn" type:"string"`

	// The ID of the billing group.
	BillingGroupId *string `locationName:"billingGroupId" min:"1" type:"string"`

	// Additional information about the billing group.
	BillingGroupMetadata *BillingGroupMetadata `locationName:"billingGroupMetadata" type:"structure"`

	// The name of the billing group.
	BillingGroupName *string `locationName:"billingGroupName" min:"1" type:"string"`

	// The properties of the billing group.
	BillingGroupProperties *BillingGroupProperties `locationName:"billingGroupProperties" type:"structure"`

	// The version of the billing group.
	Version *int64 `locationName:"version" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeBillingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeBillingGroupOutput) GoString() string {
	return s.String()
}

// SetBillingGroupArn sets the BillingGroupArn field's value.
func (s *DescribeBillingGroupOutput) SetBillingGroupArn(v string) *DescribeBillingGroupOutput {
	s.BillingGroupArn = &v
	return s
}

// SetBillingGroupId sets the BillingGroupId field's value.
func (s *DescribeBillingGroupOutput) SetBillingGroupId(v string) *DescribeBillingGroupOutput {
	s.BillingGroupId = &v
	return s
}

// SetBillingGroupMetadata sets the BillingGroupMetadata field's value.
func (s *DescribeBillingGroupOutput) SetBillingGroupMetadata(v *BillingGroupMetadata) *DescribeBillingGroupOutput {
	s.BillingGroupMetadata = v
	return s
}

// SetBillingGroupName sets the BillingGroupName field's value.
func (s *DescribeBillingGroupOutput) SetBillingGroupName(v string) *DescribeBillingGroupOutput {
	s.BillingGroupName = &v
	return s
}

// SetBillingGroupProperties sets the BillingGroupProperties field's value.
func (s *DescribeBillingGroupOutput) SetBillingGroupProperties(v *BillingGroupProperties) *DescribeBillingGroupOutput {
	s.BillingGroupProperties = v
	return s
}

// SetVersion sets the Version field's value.
func (s *DescribeBillingGroupOutput) SetVersion(v int64) *DescribeBillingGroupOutput {
	s.Version = &v
	return s
}

// The input for the DescribeCACertificate operation.
type DescribeCACertificateInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The CA certificate identifier.
	//
	// CertificateId is a required field
	CertificateId *string `location:"uri" locationName:"caCertificateId" min:"64" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCACertificateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCACertificateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeCACertificateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeCACertificateInput"}
	if s.CertificateId == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificateId"))
	}
	if s.CertificateId != nil && len(*s.CertificateId) < 64 {
		invalidParams.Add(request.NewErrParamMinLen("CertificateId", 64))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCertificateId sets the CertificateId field's value.
func (s *DescribeCACertificateInput) SetCertificateId(v string) *DescribeCACertificateInput {
	s.CertificateId = &v
	return s
}

// The output from the DescribeCACertificate operation.
type DescribeCACertificateOutput struct {
	_ struct{} `type:"structure"`

	// The CA certificate description.
	CertificateDescription *CACertificateDescription `locationName:"certificateDescription" type:"structure"`

	// Information about the registration configuration.
	RegistrationConfig *RegistrationConfig `locationName:"registrationConfig" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCACertificateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCACertificateOutput) GoString() string {
	return s.String()
}

// SetCertificateDescription sets the CertificateDescription field's value.
func (s *DescribeCACertificateOutput) SetCertificateDescription(v *CACertificateDescription) *DescribeCACertificateOutput {
	s.CertificateDescription = v
	return s
}

// SetRegistrationConfig sets the RegistrationConfig field's value.
func (s *DescribeCACertificateOutput) SetRegistrationConfig(v *RegistrationConfig) *DescribeCACertificateOutput {
	s.RegistrationConfig = v
	return s
}

// The input for the DescribeCertificate operation.
type DescribeCertificateInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The ID of the certificate. (The last part of the certificate ARN contains
	// the certificate ID.)
	//
	// CertificateId is a required field
	CertificateId *string `location:"uri" locationName:"certificateId" min:"64" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCertificateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCertificateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeCertificateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeCertificateInput"}
	if s.CertificateId == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificateId"))
	}
	if s.CertificateId != nil && len(*s.CertificateId) < 64 {
		invalidParams.Add(request.NewErrParamMinLen("CertificateId", 64))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCertificateId sets the CertificateId field's value.
func (s *DescribeCertificateInput) SetCertificateId(v string) *DescribeCertificateInput {
	s.CertificateId = &v
	return s
}

// The output of the DescribeCertificate operation.
type DescribeCertificateOutput struct {
	_ struct{} `type:"structure"`

	// The description of the certificate.
	CertificateDescription *CertificateDescription `locationName:"certificateDescription" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCertificateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCertificateOutput) GoString() string {
	return s.String()
}

// SetCertificateDescription sets the CertificateDescription field's value.
func (s *DescribeCertificateOutput) SetCertificateDescription(v *CertificateDescription) *DescribeCertificateOutput {
	s.CertificateDescription = v
	return s
}

type DescribeCertificateProviderInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the certificate provider.
	//
	// CertificateProviderName is a required field
	CertificateProviderName *string `location:"uri" locationName:"certificateProviderName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCertificateProviderInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCertificateProviderInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeCertificateProviderInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeCertificateProviderInput"}
	if s.CertificateProviderName == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificateProviderName"))
	}
	if s.CertificateProviderName != nil && len(*s.CertificateProviderName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("CertificateProviderName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCertificateProviderName sets the CertificateProviderName field's value.
func (s *DescribeCertificateProviderInput) SetCertificateProviderName(v string) *DescribeCertificateProviderInput {
	s.CertificateProviderName = &v
	return s
}

type DescribeCertificateProviderOutput struct {
	_ struct{} `type:"structure"`

	// A list of the operations that the certificate provider will use to generate
	// certificates. Valid value: CreateCertificateFromCsr.
	AccountDefaultForOperations []*string `locationName:"accountDefaultForOperations" min:"1" type:"list" enum:"CertificateProviderOperation"`

	// The ARN of the certificate provider.
	CertificateProviderArn *string `locationName:"certificateProviderArn" type:"string"`

	// The name of the certificate provider.
	CertificateProviderName *string `locationName:"certificateProviderName" min:"1" type:"string"`

	// The date-time string that indicates when the certificate provider was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The Lambda function ARN that's associated with the certificate provider.
	LambdaFunctionArn *string `locationName:"lambdaFunctionArn" type:"string"`

	// The date-time string that indicates when the certificate provider was last
	// updated.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCertificateProviderOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCertificateProviderOutput) GoString() string {
	return s.String()
}

// SetAccountDefaultForOperations sets the AccountDefaultForOperations field's value.
func (s *DescribeCertificateProviderOutput) SetAccountDefaultForOperations(v []*string) *DescribeCertificateProviderOutput {
	s.AccountDefaultForOperations = v
	return s
}

// SetCertificateProviderArn sets the CertificateProviderArn field's value.
func (s *DescribeCertificateProviderOutput) SetCertificateProviderArn(v string) *DescribeCertificateProviderOutput {
	s.CertificateProviderArn = &v
	return s
}

// SetCertificateProviderName sets the CertificateProviderName field's value.
func (s *DescribeCertificateProviderOutput) SetCertificateProviderName(v string) *DescribeCertificateProviderOutput {
	s.CertificateProviderName = &v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *DescribeCertificateProviderOutput) SetCreationDate(v time.Time) *DescribeCertificateProviderOutput {
	s.CreationDate = &v
	return s
}

// SetLambdaFunctionArn sets the LambdaFunctionArn field's value.
func (s *DescribeCertificateProviderOutput) SetLambdaFunctionArn(v string) *DescribeCertificateProviderOutput {
	s.LambdaFunctionArn = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *DescribeCertificateProviderOutput) SetLastModifiedDate(v time.Time) *DescribeCertificateProviderOutput {
	s.LastModifiedDate = &v
	return s
}

type DescribeCustomMetricInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the custom metric.
	//
	// MetricName is a required field
	MetricName *string `location:"uri" locationName:"metricName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCustomMetricInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCustomMetricInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeCustomMetricInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeCustomMetricInput"}
	if s.MetricName == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricName"))
	}
	if s.MetricName != nil && len(*s.MetricName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("MetricName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMetricName sets the MetricName field's value.
func (s *DescribeCustomMetricInput) SetMetricName(v string) *DescribeCustomMetricInput {
	s.MetricName = &v
	return s
}

type DescribeCustomMetricOutput struct {
	_ struct{} `type:"structure"`

	// The creation date of the custom metric in milliseconds since epoch.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// Field represents a friendly name in the console for the custom metric; doesn't
	// have to be unique. Don't use this name as the metric identifier in the device
	// metric report. Can be updated.
	DisplayName *string `locationName:"displayName" type:"string"`

	// The time the custom metric was last modified in milliseconds since epoch.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The Amazon Resource Number (ARN) of the custom metric.
	MetricArn *string `locationName:"metricArn" type:"string"`

	// The name of the custom metric.
	MetricName *string `locationName:"metricName" min:"1" type:"string"`

	// The type of the custom metric.
	//
	// The type number only takes a single metric value as an input, but while submitting
	// the metrics value in the DeviceMetrics report, it must be passed as an array
	// with a single value.
	MetricType *string `locationName:"metricType" type:"string" enum:"CustomMetricType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCustomMetricOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeCustomMetricOutput) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *DescribeCustomMetricOutput) SetCreationDate(v time.Time) *DescribeCustomMetricOutput {
	s.CreationDate = &v
	return s
}

// SetDisplayName sets the DisplayName field's value.
func (s *DescribeCustomMetricOutput) SetDisplayName(v string) *DescribeCustomMetricOutput {
	s.DisplayName = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *DescribeCustomMetricOutput) SetLastModifiedDate(v time.Time) *DescribeCustomMetricOutput {
	s.LastModifiedDate = &v
	return s
}

// SetMetricArn sets the MetricArn field's value.
func (s *DescribeCustomMetricOutput) SetMetricArn(v string) *DescribeCustomMetricOutput {
	s.MetricArn = &v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *DescribeCustomMetricOutput) SetMetricName(v string) *DescribeCustomMetricOutput {
	s.MetricName = &v
	return s
}

// SetMetricType sets the MetricType field's value.
func (s *DescribeCustomMetricOutput) SetMetricType(v string) *DescribeCustomMetricOutput {
	s.MetricType = &v
	return s
}

type DescribeDefaultAuthorizerInput struct {
	_ struct{} `type:"structure" nopayload:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDefaultAuthorizerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDefaultAuthorizerInput) GoString() string {
	return s.String()
}

type DescribeDefaultAuthorizerOutput struct {
	_ struct{} `type:"structure"`

	// The default authorizer's description.
	AuthorizerDescription *AuthorizerDescription `locationName:"authorizerDescription" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDefaultAuthorizerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDefaultAuthorizerOutput) GoString() string {
	return s.String()
}

// SetAuthorizerDescription sets the AuthorizerDescription field's value.
func (s *DescribeDefaultAuthorizerOutput) SetAuthorizerDescription(v *AuthorizerDescription) *DescribeDefaultAuthorizerOutput {
	s.AuthorizerDescription = v
	return s
}

type DescribeDetectMitigationActionsTaskInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique identifier of the task.
	//
	// TaskId is a required field
	TaskId *string `location:"uri" locationName:"taskId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDetectMitigationActionsTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDetectMitigationActionsTaskInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeDetectMitigationActionsTaskInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeDetectMitigationActionsTaskInput"}
	if s.TaskId == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskId"))
	}
	if s.TaskId != nil && len(*s.TaskId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TaskId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTaskId sets the TaskId field's value.
func (s *DescribeDetectMitigationActionsTaskInput) SetTaskId(v string) *DescribeDetectMitigationActionsTaskInput {
	s.TaskId = &v
	return s
}

type DescribeDetectMitigationActionsTaskOutput struct {
	_ struct{} `type:"structure"`

	// The description of a task.
	TaskSummary *DetectMitigationActionsTaskSummary `locationName:"taskSummary" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDetectMitigationActionsTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDetectMitigationActionsTaskOutput) GoString() string {
	return s.String()
}

// SetTaskSummary sets the TaskSummary field's value.
func (s *DescribeDetectMitigationActionsTaskOutput) SetTaskSummary(v *DetectMitigationActionsTaskSummary) *DescribeDetectMitigationActionsTaskOutput {
	s.TaskSummary = v
	return s
}

type DescribeDimensionInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique identifier for the dimension.
	//
	// Name is a required field
	Name *string `location:"uri" locationName:"name" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDimensionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDimensionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeDimensionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeDimensionInput"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetName sets the Name field's value.
func (s *DescribeDimensionInput) SetName(v string) *DescribeDimensionInput {
	s.Name = &v
	return s
}

type DescribeDimensionOutput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) for the dimension.
	Arn *string `locationName:"arn" type:"string"`

	// The date the dimension was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The date the dimension was last modified.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The unique identifier for the dimension.
	Name *string `locationName:"name" min:"1" type:"string"`

	// The value or list of values used to scope the dimension. For example, for
	// topic filters, this is the pattern used to match the MQTT topic name.
	StringValues []*string `locationName:"stringValues" min:"1" type:"list"`

	// The type of the dimension.
	Type *string `locationName:"type" type:"string" enum:"DimensionType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDimensionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDimensionOutput) GoString() string {
	return s.String()
}

// SetArn sets the Arn field's value.
func (s *DescribeDimensionOutput) SetArn(v string) *DescribeDimensionOutput {
	s.Arn = &v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *DescribeDimensionOutput) SetCreationDate(v time.Time) *DescribeDimensionOutput {
	s.CreationDate = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *DescribeDimensionOutput) SetLastModifiedDate(v time.Time) *DescribeDimensionOutput {
	s.LastModifiedDate = &v
	return s
}

// SetName sets the Name field's value.
func (s *DescribeDimensionOutput) SetName(v string) *DescribeDimensionOutput {
	s.Name = &v
	return s
}

// SetStringValues sets the StringValues field's value.
func (s *DescribeDimensionOutput) SetStringValues(v []*string) *DescribeDimensionOutput {
	s.StringValues = v
	return s
}

// SetType sets the Type field's value.
func (s *DescribeDimensionOutput) SetType(v string) *DescribeDimensionOutput {
	s.Type = &v
	return s
}

type DescribeDomainConfigurationInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the domain configuration.
	//
	// DomainConfigurationName is a required field
	DomainConfigurationName *string `location:"uri" locationName:"domainConfigurationName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDomainConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDomainConfigurationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeDomainConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeDomainConfigurationInput"}
	if s.DomainConfigurationName == nil {
		invalidParams.Add(request.NewErrParamRequired("DomainConfigurationName"))
	}
	if s.DomainConfigurationName != nil && len(*s.DomainConfigurationName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DomainConfigurationName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDomainConfigurationName sets the DomainConfigurationName field's value.
func (s *DescribeDomainConfigurationInput) SetDomainConfigurationName(v string) *DescribeDomainConfigurationInput {
	s.DomainConfigurationName = &v
	return s
}

type DescribeDomainConfigurationOutput struct {
	_ struct{} `type:"structure"`

	// An object that specifies the authorization service for a domain.
	AuthorizerConfig *AuthorizerConfig `locationName:"authorizerConfig" type:"structure"`

	// The ARN of the domain configuration.
	DomainConfigurationArn *string `locationName:"domainConfigurationArn" type:"string"`

	// The name of the domain configuration.
	DomainConfigurationName *string `locationName:"domainConfigurationName" min:"1" type:"string"`

	// A Boolean value that specifies the current state of the domain configuration.
	DomainConfigurationStatus *string `locationName:"domainConfigurationStatus" type:"string" enum:"DomainConfigurationStatus"`

	// The name of the domain.
	DomainName *string `locationName:"domainName" min:"1" type:"string"`

	// The type of the domain.
	DomainType *string `locationName:"domainType" type:"string" enum:"DomainType"`

	// The date and time the domain configuration's status was last changed.
	LastStatusChangeDate *time.Time `locationName:"lastStatusChangeDate" type:"timestamp"`

	// The server certificate configuration.
	ServerCertificateConfig *ServerCertificateConfig `locationName:"serverCertificateConfig" type:"structure"`

	// A list containing summary information about the server certificate included
	// in the domain configuration.
	ServerCertificates []*ServerCertificateSummary `locationName:"serverCertificates" type:"list"`

	// The type of service delivered by the endpoint.
	ServiceType *string `locationName:"serviceType" type:"string" enum:"ServiceType"`

	// An object that specifies the TLS configuration for a domain.
	TlsConfig *TlsConfig `locationName:"tlsConfig" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDomainConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeDomainConfigurationOutput) GoString() string {
	return s.String()
}

// SetAuthorizerConfig sets the AuthorizerConfig field's value.
func (s *DescribeDomainConfigurationOutput) SetAuthorizerConfig(v *AuthorizerConfig) *DescribeDomainConfigurationOutput {
	s.AuthorizerConfig = v
	return s
}

// SetDomainConfigurationArn sets the DomainConfigurationArn field's value.
func (s *DescribeDomainConfigurationOutput) SetDomainConfigurationArn(v string) *DescribeDomainConfigurationOutput {
	s.DomainConfigurationArn = &v
	return s
}

// SetDomainConfigurationName sets the DomainConfigurationName field's value.
func (s *DescribeDomainConfigurationOutput) SetDomainConfigurationName(v string) *DescribeDomainConfigurationOutput {
	s.DomainConfigurationName = &v
	return s
}

// SetDomainConfigurationStatus sets the DomainConfigurationStatus field's value.
func (s *DescribeDomainConfigurationOutput) SetDomainConfigurationStatus(v string) *DescribeDomainConfigurationOutput {
	s.DomainConfigurationStatus = &v
	return s
}

// SetDomainName sets the DomainName field's value.
func (s *DescribeDomainConfigurationOutput) SetDomainName(v string) *DescribeDomainConfigurationOutput {
	s.DomainName = &v
	return s
}

// SetDomainType sets the DomainType field's value.
func (s *DescribeDomainConfigurationOutput) SetDomainType(v string) *DescribeDomainConfigurationOutput {
	s.DomainType = &v
	return s
}

// SetLastStatusChangeDate sets the LastStatusChangeDate field's value.
func (s *DescribeDomainConfigurationOutput) SetLastStatusChangeDate(v time.Time) *DescribeDomainConfigurationOutput {
	s.LastStatusChangeDate = &v
	return s
}

// SetServerCertificateConfig sets the ServerCertificateConfig field's value.
func (s *DescribeDomainConfigurationOutput) SetServerCertificateConfig(v *ServerCertificateConfig) *DescribeDomainConfigurationOutput {
	s.ServerCertificateConfig = v
	return s
}

// SetServerCertificates sets the ServerCertificates field's value.
func (s *DescribeDomainConfigurationOutput) SetServerCertificates(v []*ServerCertificateSummary) *DescribeDomainConfigurationOutput {
	s.ServerCertificates = v
	return s
}

// SetServiceType sets the ServiceType field's value.
func (s *DescribeDomainConfigurationOutput) SetServiceType(v string) *DescribeDomainConfigurationOutput {
	s.ServiceType = &v
	return s
}

// SetTlsConfig sets the TlsConfig field's value.
func (s *DescribeDomainConfigurationOutput) SetTlsConfig(v *TlsConfig) *DescribeDomainConfigurationOutput {
	s.TlsConfig = v
	return s
}

// The input for the DescribeEndpoint operation.
type DescribeEndpointInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The endpoint type. Valid endpoint types include:
	//
	//    * iot:Data - Returns a VeriSign signed data endpoint.
	//
	//    * iot:Data-ATS - Returns an ATS signed data endpoint.
	//
	//    * iot:CredentialProvider - Returns an IoT credentials provider API endpoint.
	//
	//    * iot:Jobs - Returns an IoT device management Jobs API endpoint.
	//
	// We strongly recommend that customers use the newer iot:Data-ATS endpoint
	// type to avoid issues related to the widespread distrust of Symantec certificate
	// authorities. ATS Signed Certificates are more secure and are trusted by most
	// popular browsers.
	EndpointType *string `location:"querystring" locationName:"endpointType" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeEndpointInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeEndpointInput) GoString() string {
	return s.String()
}

// SetEndpointType sets the EndpointType field's value.
func (s *DescribeEndpointInput) SetEndpointType(v string) *DescribeEndpointInput {
	s.EndpointType = &v
	return s
}

// The output from the DescribeEndpoint operation.
type DescribeEndpointOutput struct {
	_ struct{} `type:"structure"`

	// The endpoint. The format of the endpoint is as follows: identifier.iot.region.amazonaws.com.
	EndpointAddress *string `locationName:"endpointAddress" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeEndpointOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeEndpointOutput) GoString() string {
	return s.String()
}

// SetEndpointAddress sets the EndpointAddress field's value.
func (s *DescribeEndpointOutput) SetEndpointAddress(v string) *DescribeEndpointOutput {
	s.EndpointAddress = &v
	return s
}

type DescribeEventConfigurationsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeEventConfigurationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeEventConfigurationsInput) GoString() string {
	return s.String()
}

type DescribeEventConfigurationsOutput struct {
	_ struct{} `type:"structure"`

	// The creation date of the event configuration.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The event configurations.
	EventConfigurations map[string]*Configuration `locationName:"eventConfigurations" type:"map"`

	// The date the event configurations were last modified.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeEventConfigurationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeEventConfigurationsOutput) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *DescribeEventConfigurationsOutput) SetCreationDate(v time.Time) *DescribeEventConfigurationsOutput {
	s.CreationDate = &v
	return s
}

// SetEventConfigurations sets the EventConfigurations field's value.
func (s *DescribeEventConfigurationsOutput) SetEventConfigurations(v map[string]*Configuration) *DescribeEventConfigurationsOutput {
	s.EventConfigurations = v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *DescribeEventConfigurationsOutput) SetLastModifiedDate(v time.Time) *DescribeEventConfigurationsOutput {
	s.LastModifiedDate = &v
	return s
}

type DescribeFleetMetricInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the fleet metric to describe.
	//
	// MetricName is a required field
	MetricName *string `location:"uri" locationName:"metricName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeFleetMetricInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeFleetMetricInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeFleetMetricInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeFleetMetricInput"}
	if s.MetricName == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricName"))
	}
	if s.MetricName != nil && len(*s.MetricName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("MetricName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMetricName sets the MetricName field's value.
func (s *DescribeFleetMetricInput) SetMetricName(v string) *DescribeFleetMetricInput {
	s.MetricName = &v
	return s
}

type DescribeFleetMetricOutput struct {
	_ struct{} `type:"structure"`

	// The field to aggregate.
	AggregationField *string `locationName:"aggregationField" min:"1" type:"string"`

	// The type of the aggregation query.
	AggregationType *AggregationType `locationName:"aggregationType" type:"structure"`

	// The date when the fleet metric is created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The fleet metric description.
	Description *string `locationName:"description" type:"string"`

	// The name of the index to search.
	IndexName *string `locationName:"indexName" min:"1" type:"string"`

	// The date when the fleet metric is last modified.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The ARN of the fleet metric to describe.
	MetricArn *string `locationName:"metricArn" type:"string"`

	// The name of the fleet metric to describe.
	MetricName *string `locationName:"metricName" min:"1" type:"string"`

	// The time in seconds between fleet metric emissions. Range [60(1 min), 86400(1
	// day)] and must be multiple of 60.
	Period *int64 `locationName:"period" min:"60" type:"integer"`

	// The search query string.
	QueryString *string `locationName:"queryString" min:"1" type:"string"`

	// The query version.
	QueryVersion *string `locationName:"queryVersion" type:"string"`

	// Used to support unit transformation such as milliseconds to seconds. The
	// unit must be supported by CW metric (https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html).
	Unit *string `locationName:"unit" type:"string" enum:"FleetMetricUnit"`

	// The version of the fleet metric.
	Version *int64 `locationName:"version" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeFleetMetricOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeFleetMetricOutput) GoString() string {
	return s.String()
}

// SetAggregationField sets the AggregationField field's value.
func (s *DescribeFleetMetricOutput) SetAggregationField(v string) *DescribeFleetMetricOutput {
	s.AggregationField = &v
	return s
}

// SetAggregationType sets the AggregationType field's value.
func (s *DescribeFleetMetricOutput) SetAggregationType(v *AggregationType) *DescribeFleetMetricOutput {
	s.AggregationType = v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *DescribeFleetMetricOutput) SetCreationDate(v time.Time) *DescribeFleetMetricOutput {
	s.CreationDate = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *DescribeFleetMetricOutput) SetDescription(v string) *DescribeFleetMetricOutput {
	s.Description = &v
	return s
}

// SetIndexName sets the IndexName field's value.
func (s *DescribeFleetMetricOutput) SetIndexName(v string) *DescribeFleetMetricOutput {
	s.IndexName = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *DescribeFleetMetricOutput) SetLastModifiedDate(v time.Time) *DescribeFleetMetricOutput {
	s.LastModifiedDate = &v
	return s
}

// SetMetricArn sets the MetricArn field's value.
func (s *DescribeFleetMetricOutput) SetMetricArn(v string) *DescribeFleetMetricOutput {
	s.MetricArn = &v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *DescribeFleetMetricOutput) SetMetricName(v string) *DescribeFleetMetricOutput {
	s.MetricName = &v
	return s
}

// SetPeriod sets the Period field's value.
func (s *DescribeFleetMetricOutput) SetPeriod(v int64) *DescribeFleetMetricOutput {
	s.Period = &v
	return s
}

// SetQueryString sets the QueryString field's value.
func (s *DescribeFleetMetricOutput) SetQueryString(v string) *DescribeFleetMetricOutput {
	s.QueryString = &v
	return s
}

// SetQueryVersion sets the QueryVersion field's value.
func (s *DescribeFleetMetricOutput) SetQueryVersion(v string) *DescribeFleetMetricOutput {
	s.QueryVersion = &v
	return s
}

// SetUnit sets the Unit field's value.
func (s *DescribeFleetMetricOutput) SetUnit(v string) *DescribeFleetMetricOutput {
	s.Unit = &v
	return s
}

// SetVersion sets the Version field's value.
func (s *DescribeFleetMetricOutput) SetVersion(v int64) *DescribeFleetMetricOutput {
	s.Version = &v
	return s
}

type DescribeIndexInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The index name.
	//
	// IndexName is a required field
	IndexName *string `location:"uri" locationName:"indexName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeIndexInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeIndexInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeIndexInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeIndexInput"}
	if s.IndexName == nil {
		invalidParams.Add(request.NewErrParamRequired("IndexName"))
	}
	if s.IndexName != nil && len(*s.IndexName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("IndexName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetIndexName sets the IndexName field's value.
func (s *DescribeIndexInput) SetIndexName(v string) *DescribeIndexInput {
	s.IndexName = &v
	return s
}

type DescribeIndexOutput struct {
	_ struct{} `type:"structure"`

	// The index name.
	IndexName *string `locationName:"indexName" min:"1" type:"string"`

	// The index status.
	IndexStatus *string `locationName:"indexStatus" type:"string" enum:"IndexStatus"`

	// Contains a value that specifies the type of indexing performed. Valid values
	// are:
	//
	//    * REGISTRY – Your thing index contains only registry data.
	//
	//    * REGISTRY_AND_SHADOW - Your thing index contains registry data and shadow
	//    data.
	//
	//    * REGISTRY_AND_CONNECTIVITY_STATUS - Your thing index contains registry
	//    data and thing connectivity status data.
	//
	//    * REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS - Your thing index contains
	//    registry data, shadow data, and thing connectivity status data.
	//
	//    * MULTI_INDEXING_MODE - Your thing index contains multiple data sources.
	//    For more information, see GetIndexingConfiguration (https://docs.aws.amazon.com/iot/latest/apireference/API_GetIndexingConfiguration.html).
	Schema *string `locationName:"schema" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeIndexOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeIndexOutput) GoString() string {
	return s.String()
}

// SetIndexName sets the IndexName field's value.
func (s *DescribeIndexOutput) SetIndexName(v string) *DescribeIndexOutput {
	s.IndexName = &v
	return s
}

// SetIndexStatus sets the IndexStatus field's value.
func (s *DescribeIndexOutput) SetIndexStatus(v string) *DescribeIndexOutput {
	s.IndexStatus = &v
	return s
}

// SetSchema sets the Schema field's value.
func (s *DescribeIndexOutput) SetSchema(v string) *DescribeIndexOutput {
	s.Schema = &v
	return s
}

type DescribeJobExecutionInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// A string (consisting of the digits "0" through "9" which is used to specify
	// a particular job execution on a particular device.
	ExecutionNumber *int64 `location:"querystring" locationName:"executionNumber" type:"long"`

	// The unique identifier you assigned to this job when it was created.
	//
	// JobId is a required field
	JobId *string `location:"uri" locationName:"jobId" min:"1" type:"string" required:"true"`

	// The name of the thing on which the job execution is running.
	//
	// ThingName is a required field
	ThingName *string `location:"uri" locationName:"thingName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeJobExecutionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeJobExecutionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeJobExecutionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeJobExecutionInput"}
	if s.JobId == nil {
		invalidParams.Add(request.NewErrParamRequired("JobId"))
	}
	if s.JobId != nil && len(*s.JobId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("JobId", 1))
	}
	if s.ThingName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingName"))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExecutionNumber sets the ExecutionNumber field's value.
func (s *DescribeJobExecutionInput) SetExecutionNumber(v int64) *DescribeJobExecutionInput {
	s.ExecutionNumber = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *DescribeJobExecutionInput) SetJobId(v string) *DescribeJobExecutionInput {
	s.JobId = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *DescribeJobExecutionInput) SetThingName(v string) *DescribeJobExecutionInput {
	s.ThingName = &v
	return s
}

type DescribeJobExecutionOutput struct {
	_ struct{} `type:"structure"`

	// Information about the job execution.
	Execution *JobExecution `locationName:"execution" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeJobExecutionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeJobExecutionOutput) GoString() string {
	return s.String()
}

// SetExecution sets the Execution field's value.
func (s *DescribeJobExecutionOutput) SetExecution(v *JobExecution) *DescribeJobExecutionOutput {
	s.Execution = v
	return s
}

type DescribeJobInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique identifier you assigned to this job when it was created.
	//
	// JobId is a required field
	JobId *string `location:"uri" locationName:"jobId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeJobInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeJobInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeJobInput"}
	if s.JobId == nil {
		invalidParams.Add(request.NewErrParamRequired("JobId"))
	}
	if s.JobId != nil && len(*s.JobId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("JobId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetJobId sets the JobId field's value.
func (s *DescribeJobInput) SetJobId(v string) *DescribeJobInput {
	s.JobId = &v
	return s
}

type DescribeJobOutput struct {
	_ struct{} `type:"structure"`

	// An S3 link to the job document.
	DocumentSource *string `locationName:"documentSource" min:"1" type:"string"`

	// Information about the job.
	Job *Job `locationName:"job" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeJobOutput) GoString() string {
	return s.String()
}

// SetDocumentSource sets the DocumentSource field's value.
func (s *DescribeJobOutput) SetDocumentSource(v string) *DescribeJobOutput {
	s.DocumentSource = &v
	return s
}

// SetJob sets the Job field's value.
func (s *DescribeJobOutput) SetJob(v *Job) *DescribeJobOutput {
	s.Job = v
	return s
}

type DescribeJobTemplateInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique identifier of the job template.
	//
	// JobTemplateId is a required field
	JobTemplateId *string `location:"uri" locationName:"jobTemplateId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeJobTemplateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeJobTemplateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeJobTemplateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeJobTemplateInput"}
	if s.JobTemplateId == nil {
		invalidParams.Add(request.NewErrParamRequired("JobTemplateId"))
	}
	if s.JobTemplateId != nil && len(*s.JobTemplateId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("JobTemplateId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetJobTemplateId sets the JobTemplateId field's value.
func (s *DescribeJobTemplateInput) SetJobTemplateId(v string) *DescribeJobTemplateInput {
	s.JobTemplateId = &v
	return s
}

type DescribeJobTemplateOutput struct {
	_ struct{} `type:"structure"`

	// The criteria that determine when and how a job abort takes place.
	AbortConfig *AbortConfig `locationName:"abortConfig" type:"structure"`

	// The time, in seconds since the epoch, when the job template was created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// A description of the job template.
	Description *string `locationName:"description" type:"string"`

	// The package version Amazon Resource Names (ARNs) that are installed on the
	// device when the job successfully completes. The package version must be in
	// either the Published or Deprecated state when the job deploys. For more information,
	// see Package version lifecycle (https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#package-version-lifecycle).
	//
	// Note:The following Length Constraints relates to a single ARN. Up to 25 package
	// version ARNs are allowed.
	DestinationPackageVersions []*string `locationName:"destinationPackageVersions" type:"list"`

	// The job document.
	Document *string `locationName:"document" type:"string"`

	// An S3 link to the job document.
	DocumentSource *string `locationName:"documentSource" min:"1" type:"string"`

	// The configuration that determines how many retries are allowed for each failure
	// type for a job.
	JobExecutionsRetryConfig *JobExecutionsRetryConfig `locationName:"jobExecutionsRetryConfig" type:"structure"`

	// Allows you to create a staged rollout of a job.
	JobExecutionsRolloutConfig *JobExecutionsRolloutConfig `locationName:"jobExecutionsRolloutConfig" type:"structure"`

	// The ARN of the job template.
	JobTemplateArn *string `locationName:"jobTemplateArn" min:"1" type:"string"`

	// The unique identifier of the job template.
	JobTemplateId *string `locationName:"jobTemplateId" min:"1" type:"string"`

	// Allows you to configure an optional maintenance window for the rollout of
	// a job document to all devices in the target group for a job.
	MaintenanceWindows []*MaintenanceWindow `locationName:"maintenanceWindows" type:"list"`

	// Configuration for pre-signed S3 URLs.
	PresignedUrlConfig *PresignedUrlConfig `locationName:"presignedUrlConfig" type:"structure"`

	// Specifies the amount of time each device has to finish its execution of the
	// job. A timer is started when the job execution status is set to IN_PROGRESS.
	// If the job execution status is not set to another terminal state before the
	// timer expires, it will be automatically set to TIMED_OUT.
	TimeoutConfig *TimeoutConfig `locationName:"timeoutConfig" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeJobTemplateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeJobTemplateOutput) GoString() string {
	return s.String()
}

// SetAbortConfig sets the AbortConfig field's value.
func (s *DescribeJobTemplateOutput) SetAbortConfig(v *AbortConfig) *DescribeJobTemplateOutput {
	s.AbortConfig = v
	return s
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *DescribeJobTemplateOutput) SetCreatedAt(v time.Time) *DescribeJobTemplateOutput {
	s.CreatedAt = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *DescribeJobTemplateOutput) SetDescription(v string) *DescribeJobTemplateOutput {
	s.Description = &v
	return s
}

// SetDestinationPackageVersions sets the DestinationPackageVersions field's value.
func (s *DescribeJobTemplateOutput) SetDestinationPackageVersions(v []*string) *DescribeJobTemplateOutput {
	s.DestinationPackageVersions = v
	return s
}

// SetDocument sets the Document field's value.
func (s *DescribeJobTemplateOutput) SetDocument(v string) *DescribeJobTemplateOutput {
	s.Document = &v
	return s
}

// SetDocumentSource sets the DocumentSource field's value.
func (s *DescribeJobTemplateOutput) SetDocumentSource(v string) *DescribeJobTemplateOutput {
	s.DocumentSource = &v
	return s
}

// SetJobExecutionsRetryConfig sets the JobExecutionsRetryConfig field's value.
func (s *DescribeJobTemplateOutput) SetJobExecutionsRetryConfig(v *JobExecutionsRetryConfig) *DescribeJobTemplateOutput {
	s.JobExecutionsRetryConfig = v
	return s
}

// SetJobExecutionsRolloutConfig sets the JobExecutionsRolloutConfig field's value.
func (s *DescribeJobTemplateOutput) SetJobExecutionsRolloutConfig(v *JobExecutionsRolloutConfig) *DescribeJobTemplateOutput {
	s.JobExecutionsRolloutConfig = v
	return s
}

// SetJobTemplateArn sets the JobTemplateArn field's value.
func (s *DescribeJobTemplateOutput) SetJobTemplateArn(v string) *DescribeJobTemplateOutput {
	s.JobTemplateArn = &v
	return s
}

// SetJobTemplateId sets the JobTemplateId field's value.
func (s *DescribeJobTemplateOutput) SetJobTemplateId(v string) *DescribeJobTemplateOutput {
	s.JobTemplateId = &v
	return s
}

// SetMaintenanceWindows sets the MaintenanceWindows field's value.
func (s *DescribeJobTemplateOutput) SetMaintenanceWindows(v []*MaintenanceWindow) *DescribeJobTemplateOutput {
	s.MaintenanceWindows = v
	return s
}

// SetPresignedUrlConfig sets the PresignedUrlConfig field's value.
func (s *DescribeJobTemplateOutput) SetPresignedUrlConfig(v *PresignedUrlConfig) *DescribeJobTemplateOutput {
	s.PresignedUrlConfig = v
	return s
}

// SetTimeoutConfig sets the TimeoutConfig field's value.
func (s *DescribeJobTemplateOutput) SetTimeoutConfig(v *TimeoutConfig) *DescribeJobTemplateOutput {
	s.TimeoutConfig = v
	return s
}

type DescribeManagedJobTemplateInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique name of a managed job template, which is required.
	//
	// TemplateName is a required field
	TemplateName *string `location:"uri" locationName:"templateName" min:"1" type:"string" required:"true"`

	// An optional parameter to specify version of a managed template. If not specified,
	// the pre-defined default version is returned.
	TemplateVersion *string `location:"querystring" locationName:"templateVersion" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeManagedJobTemplateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeManagedJobTemplateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeManagedJobTemplateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeManagedJobTemplateInput"}
	if s.TemplateName == nil {
		invalidParams.Add(request.NewErrParamRequired("TemplateName"))
	}
	if s.TemplateName != nil && len(*s.TemplateName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TemplateName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTemplateName sets the TemplateName field's value.
func (s *DescribeManagedJobTemplateInput) SetTemplateName(v string) *DescribeManagedJobTemplateInput {
	s.TemplateName = &v
	return s
}

// SetTemplateVersion sets the TemplateVersion field's value.
func (s *DescribeManagedJobTemplateInput) SetTemplateVersion(v string) *DescribeManagedJobTemplateInput {
	s.TemplateVersion = &v
	return s
}

type DescribeManagedJobTemplateOutput struct {
	_ struct{} `type:"structure"`

	// The unique description of a managed template.
	Description *string `locationName:"description" type:"string"`

	// The document schema for a managed job template.
	Document *string `locationName:"document" type:"string"`

	// A map of key-value pairs that you can use as guidance to specify the inputs
	// for creating a job from a managed template.
	//
	// documentParameters can only be used when creating jobs from Amazon Web Services
	// managed templates. This parameter can't be used with custom job templates
	// or to create jobs from them.
	DocumentParameters []*DocumentParameter `locationName:"documentParameters" type:"list"`

	// A list of environments that are supported with the managed job template.
	Environments []*string `locationName:"environments" type:"list"`

	// The unique Amazon Resource Name (ARN) of the managed template.
	TemplateArn *string `locationName:"templateArn" min:"1" type:"string"`

	// The unique name of a managed template, such as AWS-Reboot.
	TemplateName *string `locationName:"templateName" min:"1" type:"string"`

	// The version for a managed template.
	TemplateVersion *string `locationName:"templateVersion" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeManagedJobTemplateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeManagedJobTemplateOutput) GoString() string {
	return s.String()
}

// SetDescription sets the Description field's value.
func (s *DescribeManagedJobTemplateOutput) SetDescription(v string) *DescribeManagedJobTemplateOutput {
	s.Description = &v
	return s
}

// SetDocument sets the Document field's value.
func (s *DescribeManagedJobTemplateOutput) SetDocument(v string) *DescribeManagedJobTemplateOutput {
	s.Document = &v
	return s
}

// SetDocumentParameters sets the DocumentParameters field's value.
func (s *DescribeManagedJobTemplateOutput) SetDocumentParameters(v []*DocumentParameter) *DescribeManagedJobTemplateOutput {
	s.DocumentParameters = v
	return s
}

// SetEnvironments sets the Environments field's value.
func (s *DescribeManagedJobTemplateOutput) SetEnvironments(v []*string) *DescribeManagedJobTemplateOutput {
	s.Environments = v
	return s
}

// SetTemplateArn sets the TemplateArn field's value.
func (s *DescribeManagedJobTemplateOutput) SetTemplateArn(v string) *DescribeManagedJobTemplateOutput {
	s.TemplateArn = &v
	return s
}

// SetTemplateName sets the TemplateName field's value.
func (s *DescribeManagedJobTemplateOutput) SetTemplateName(v string) *DescribeManagedJobTemplateOutput {
	s.TemplateName = &v
	return s
}

// SetTemplateVersion sets the TemplateVersion field's value.
func (s *DescribeManagedJobTemplateOutput) SetTemplateVersion(v string) *DescribeManagedJobTemplateOutput {
	s.TemplateVersion = &v
	return s
}

type DescribeMitigationActionInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The friendly name that uniquely identifies the mitigation action.
	//
	// ActionName is a required field
	ActionName *string `location:"uri" locationName:"actionName" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeMitigationActionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeMitigationActionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeMitigationActionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeMitigationActionInput"}
	if s.ActionName == nil {
		invalidParams.Add(request.NewErrParamRequired("ActionName"))
	}
	if s.ActionName != nil && len(*s.ActionName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ActionName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetActionName sets the ActionName field's value.
func (s *DescribeMitigationActionInput) SetActionName(v string) *DescribeMitigationActionInput {
	s.ActionName = &v
	return s
}

type DescribeMitigationActionOutput struct {
	_ struct{} `type:"structure"`

	// The ARN that identifies this migration action.
	ActionArn *string `locationName:"actionArn" type:"string"`

	// A unique identifier for this action.
	ActionId *string `locationName:"actionId" type:"string"`

	// The friendly name that uniquely identifies the mitigation action.
	ActionName *string `locationName:"actionName" type:"string"`

	// Parameters that control how the mitigation action is applied, specific to
	// the type of mitigation action.
	ActionParams *MitigationActionParams `locationName:"actionParams" type:"structure"`

	// The type of mitigation action.
	ActionType *string `locationName:"actionType" type:"string" enum:"MitigationActionType"`

	// The date and time when the mitigation action was added to your Amazon Web
	// Services accounts.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The date and time when the mitigation action was last changed.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The ARN of the IAM role used to apply this action.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeMitigationActionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeMitigationActionOutput) GoString() string {
	return s.String()
}

// SetActionArn sets the ActionArn field's value.
func (s *DescribeMitigationActionOutput) SetActionArn(v string) *DescribeMitigationActionOutput {
	s.ActionArn = &v
	return s
}

// SetActionId sets the ActionId field's value.
func (s *DescribeMitigationActionOutput) SetActionId(v string) *DescribeMitigationActionOutput {
	s.ActionId = &v
	return s
}

// SetActionName sets the ActionName field's value.
func (s *DescribeMitigationActionOutput) SetActionName(v string) *DescribeMitigationActionOutput {
	s.ActionName = &v
	return s
}

// SetActionParams sets the ActionParams field's value.
func (s *DescribeMitigationActionOutput) SetActionParams(v *MitigationActionParams) *DescribeMitigationActionOutput {
	s.ActionParams = v
	return s
}

// SetActionType sets the ActionType field's value.
func (s *DescribeMitigationActionOutput) SetActionType(v string) *DescribeMitigationActionOutput {
	s.ActionType = &v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *DescribeMitigationActionOutput) SetCreationDate(v time.Time) *DescribeMitigationActionOutput {
	s.CreationDate = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *DescribeMitigationActionOutput) SetLastModifiedDate(v time.Time) *DescribeMitigationActionOutput {
	s.LastModifiedDate = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *DescribeMitigationActionOutput) SetRoleArn(v string) *DescribeMitigationActionOutput {
	s.RoleArn = &v
	return s
}

type DescribeProvisioningTemplateInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the provisioning template.
	//
	// TemplateName is a required field
	TemplateName *string `location:"uri" locationName:"templateName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeProvisioningTemplateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeProvisioningTemplateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeProvisioningTemplateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeProvisioningTemplateInput"}
	if s.TemplateName == nil {
		invalidParams.Add(request.NewErrParamRequired("TemplateName"))
	}
	if s.TemplateName != nil && len(*s.TemplateName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TemplateName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTemplateName sets the TemplateName field's value.
func (s *DescribeProvisioningTemplateInput) SetTemplateName(v string) *DescribeProvisioningTemplateInput {
	s.TemplateName = &v
	return s
}

type DescribeProvisioningTemplateOutput struct {
	_ struct{} `type:"structure"`

	// The date when the provisioning template was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The default fleet template version ID.
	DefaultVersionId *int64 `locationName:"defaultVersionId" type:"integer"`

	// The description of the provisioning template.
	Description *string `locationName:"description" type:"string"`

	// True if the provisioning template is enabled, otherwise false.
	Enabled *bool `locationName:"enabled" type:"boolean"`

	// The date when the provisioning template was last modified.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// Gets information about a pre-provisioned hook.
	PreProvisioningHook *ProvisioningHook `locationName:"preProvisioningHook" type:"structure"`

	// The ARN of the role associated with the provisioning template. This IoT role
	// grants permission to provision a device.
	ProvisioningRoleArn *string `locationName:"provisioningRoleArn" min:"20" type:"string"`

	// The ARN of the provisioning template.
	TemplateArn *string `locationName:"templateArn" type:"string"`

	// The JSON formatted contents of the provisioning template.
	TemplateBody *string `locationName:"templateBody" type:"string"`

	// The name of the provisioning template.
	TemplateName *string `locationName:"templateName" min:"1" type:"string"`

	// The type you define in a provisioning template. You can create a template
	// with only one type. You can't change the template type after its creation.
	// The default value is FLEET_PROVISIONING. For more information about provisioning
	// template, see: Provisioning template (https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html).
	Type *string `locationName:"type" type:"string" enum:"TemplateType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeProvisioningTemplateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeProvisioningTemplateOutput) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *DescribeProvisioningTemplateOutput) SetCreationDate(v time.Time) *DescribeProvisioningTemplateOutput {
	s.CreationDate = &v
	return s
}

// SetDefaultVersionId sets the DefaultVersionId field's value.
func (s *DescribeProvisioningTemplateOutput) SetDefaultVersionId(v int64) *DescribeProvisioningTemplateOutput {
	s.DefaultVersionId = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *DescribeProvisioningTemplateOutput) SetDescription(v string) *DescribeProvisioningTemplateOutput {
	s.Description = &v
	return s
}

// SetEnabled sets the Enabled field's value.
func (s *DescribeProvisioningTemplateOutput) SetEnabled(v bool) *DescribeProvisioningTemplateOutput {
	s.Enabled = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *DescribeProvisioningTemplateOutput) SetLastModifiedDate(v time.Time) *DescribeProvisioningTemplateOutput {
	s.LastModifiedDate = &v
	return s
}

// SetPreProvisioningHook sets the PreProvisioningHook field's value.
func (s *DescribeProvisioningTemplateOutput) SetPreProvisioningHook(v *ProvisioningHook) *DescribeProvisioningTemplateOutput {
	s.PreProvisioningHook = v
	return s
}

// SetProvisioningRoleArn sets the ProvisioningRoleArn field's value.
func (s *DescribeProvisioningTemplateOutput) SetProvisioningRoleArn(v string) *DescribeProvisioningTemplateOutput {
	s.ProvisioningRoleArn = &v
	return s
}

// SetTemplateArn sets the TemplateArn field's value.
func (s *DescribeProvisioningTemplateOutput) SetTemplateArn(v string) *DescribeProvisioningTemplateOutput {
	s.TemplateArn = &v
	return s
}

// SetTemplateBody sets the TemplateBody field's value.
func (s *DescribeProvisioningTemplateOutput) SetTemplateBody(v string) *DescribeProvisioningTemplateOutput {
	s.TemplateBody = &v
	return s
}

// SetTemplateName sets the TemplateName field's value.
func (s *DescribeProvisioningTemplateOutput) SetTemplateName(v string) *DescribeProvisioningTemplateOutput {
	s.TemplateName = &v
	return s
}

// SetType sets the Type field's value.
func (s *DescribeProvisioningTemplateOutput) SetType(v string) *DescribeProvisioningTemplateOutput {
	s.Type = &v
	return s
}

type DescribeProvisioningTemplateVersionInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The template name.
	//
	// TemplateName is a required field
	TemplateName *string `location:"uri" locationName:"templateName" min:"1" type:"string" required:"true"`

	// The provisioning template version ID.
	//
	// VersionId is a required field
	VersionId *int64 `location:"uri" locationName:"versionId" type:"integer" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeProvisioningTemplateVersionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeProvisioningTemplateVersionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeProvisioningTemplateVersionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeProvisioningTemplateVersionInput"}
	if s.TemplateName == nil {
		invalidParams.Add(request.NewErrParamRequired("TemplateName"))
	}
	if s.TemplateName != nil && len(*s.TemplateName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TemplateName", 1))
	}
	if s.VersionId == nil {
		invalidParams.Add(request.NewErrParamRequired("VersionId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTemplateName sets the TemplateName field's value.
func (s *DescribeProvisioningTemplateVersionInput) SetTemplateName(v string) *DescribeProvisioningTemplateVersionInput {
	s.TemplateName = &v
	return s
}

// SetVersionId sets the VersionId field's value.
func (s *DescribeProvisioningTemplateVersionInput) SetVersionId(v int64) *DescribeProvisioningTemplateVersionInput {
	s.VersionId = &v
	return s
}

type DescribeProvisioningTemplateVersionOutput struct {
	_ struct{} `type:"structure"`

	// The date when the provisioning template version was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// True if the provisioning template version is the default version.
	IsDefaultVersion *bool `locationName:"isDefaultVersion" type:"boolean"`

	// The JSON formatted contents of the provisioning template version.
	TemplateBody *string `locationName:"templateBody" type:"string"`

	// The provisioning template version ID.
	VersionId *int64 `locationName:"versionId" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeProvisioningTemplateVersionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeProvisioningTemplateVersionOutput) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *DescribeProvisioningTemplateVersionOutput) SetCreationDate(v time.Time) *DescribeProvisioningTemplateVersionOutput {
	s.CreationDate = &v
	return s
}

// SetIsDefaultVersion sets the IsDefaultVersion field's value.
func (s *DescribeProvisioningTemplateVersionOutput) SetIsDefaultVersion(v bool) *DescribeProvisioningTemplateVersionOutput {
	s.IsDefaultVersion = &v
	return s
}

// SetTemplateBody sets the TemplateBody field's value.
func (s *DescribeProvisioningTemplateVersionOutput) SetTemplateBody(v string) *DescribeProvisioningTemplateVersionOutput {
	s.TemplateBody = &v
	return s
}

// SetVersionId sets the VersionId field's value.
func (s *DescribeProvisioningTemplateVersionOutput) SetVersionId(v int64) *DescribeProvisioningTemplateVersionOutput {
	s.VersionId = &v
	return s
}

type DescribeRoleAliasInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The role alias to describe.
	//
	// RoleAlias is a required field
	RoleAlias *string `location:"uri" locationName:"roleAlias" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeRoleAliasInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeRoleAliasInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeRoleAliasInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeRoleAliasInput"}
	if s.RoleAlias == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleAlias"))
	}
	if s.RoleAlias != nil && len(*s.RoleAlias) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RoleAlias", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRoleAlias sets the RoleAlias field's value.
func (s *DescribeRoleAliasInput) SetRoleAlias(v string) *DescribeRoleAliasInput {
	s.RoleAlias = &v
	return s
}

type DescribeRoleAliasOutput struct {
	_ struct{} `type:"structure"`

	// The role alias description.
	RoleAliasDescription *RoleAliasDescription `locationName:"roleAliasDescription" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeRoleAliasOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeRoleAliasOutput) GoString() string {
	return s.String()
}

// SetRoleAliasDescription sets the RoleAliasDescription field's value.
func (s *DescribeRoleAliasOutput) SetRoleAliasDescription(v *RoleAliasDescription) *DescribeRoleAliasOutput {
	s.RoleAliasDescription = v
	return s
}

type DescribeScheduledAuditInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the scheduled audit whose information you want to get.
	//
	// ScheduledAuditName is a required field
	ScheduledAuditName *string `location:"uri" locationName:"scheduledAuditName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeScheduledAuditInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeScheduledAuditInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeScheduledAuditInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeScheduledAuditInput"}
	if s.ScheduledAuditName == nil {
		invalidParams.Add(request.NewErrParamRequired("ScheduledAuditName"))
	}
	if s.ScheduledAuditName != nil && len(*s.ScheduledAuditName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ScheduledAuditName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetScheduledAuditName sets the ScheduledAuditName field's value.
func (s *DescribeScheduledAuditInput) SetScheduledAuditName(v string) *DescribeScheduledAuditInput {
	s.ScheduledAuditName = &v
	return s
}

type DescribeScheduledAuditOutput struct {
	_ struct{} `type:"structure"`

	// The day of the month on which the scheduled audit takes place. This is will
	// be 1 through 31 or LAST. If days 29-31 are specified, and the month does
	// not have that many days, the audit takes place on the LAST day of the month.
	DayOfMonth *string `locationName:"dayOfMonth" type:"string"`

	// The day of the week on which the scheduled audit takes place, either one
	// of SUN, MON, TUE, WED, THU, FRI, or SAT.
	DayOfWeek *string `locationName:"dayOfWeek" type:"string" enum:"DayOfWeek"`

	// How often the scheduled audit takes place, either one of DAILY, WEEKLY, BIWEEKLY,
	// or MONTHLY. The start time of each audit is determined by the system.
	Frequency *string `locationName:"frequency" type:"string" enum:"AuditFrequency"`

	// The ARN of the scheduled audit.
	ScheduledAuditArn *string `locationName:"scheduledAuditArn" type:"string"`

	// The name of the scheduled audit.
	ScheduledAuditName *string `locationName:"scheduledAuditName" min:"1" type:"string"`

	// Which checks are performed during the scheduled audit. Checks must be enabled
	// for your account. (Use DescribeAccountAuditConfiguration to see the list
	// of all checks, including those that are enabled or use UpdateAccountAuditConfiguration
	// to select which checks are enabled.)
	TargetCheckNames []*string `locationName:"targetCheckNames" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeScheduledAuditOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeScheduledAuditOutput) GoString() string {
	return s.String()
}

// SetDayOfMonth sets the DayOfMonth field's value.
func (s *DescribeScheduledAuditOutput) SetDayOfMonth(v string) *DescribeScheduledAuditOutput {
	s.DayOfMonth = &v
	return s
}

// SetDayOfWeek sets the DayOfWeek field's value.
func (s *DescribeScheduledAuditOutput) SetDayOfWeek(v string) *DescribeScheduledAuditOutput {
	s.DayOfWeek = &v
	return s
}

// SetFrequency sets the Frequency field's value.
func (s *DescribeScheduledAuditOutput) SetFrequency(v string) *DescribeScheduledAuditOutput {
	s.Frequency = &v
	return s
}

// SetScheduledAuditArn sets the ScheduledAuditArn field's value.
func (s *DescribeScheduledAuditOutput) SetScheduledAuditArn(v string) *DescribeScheduledAuditOutput {
	s.ScheduledAuditArn = &v
	return s
}

// SetScheduledAuditName sets the ScheduledAuditName field's value.
func (s *DescribeScheduledAuditOutput) SetScheduledAuditName(v string) *DescribeScheduledAuditOutput {
	s.ScheduledAuditName = &v
	return s
}

// SetTargetCheckNames sets the TargetCheckNames field's value.
func (s *DescribeScheduledAuditOutput) SetTargetCheckNames(v []*string) *DescribeScheduledAuditOutput {
	s.TargetCheckNames = v
	return s
}

type DescribeSecurityProfileInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the security profile whose information you want to get.
	//
	// SecurityProfileName is a required field
	SecurityProfileName *string `location:"uri" locationName:"securityProfileName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeSecurityProfileInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeSecurityProfileInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeSecurityProfileInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeSecurityProfileInput"}
	if s.SecurityProfileName == nil {
		invalidParams.Add(request.NewErrParamRequired("SecurityProfileName"))
	}
	if s.SecurityProfileName != nil && len(*s.SecurityProfileName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SecurityProfileName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *DescribeSecurityProfileInput) SetSecurityProfileName(v string) *DescribeSecurityProfileInput {
	s.SecurityProfileName = &v
	return s
}

type DescribeSecurityProfileOutput struct {
	_ struct{} `type:"structure"`

	// Please use DescribeSecurityProfileResponse$additionalMetricsToRetainV2 instead.
	//
	// A list of metrics whose data is retained (stored). By default, data is retained
	// for any metric used in the profile's behaviors, but it is also retained for
	// any metric specified here.
	//
	// Deprecated: Use additionalMetricsToRetainV2.
	AdditionalMetricsToRetain []*string `locationName:"additionalMetricsToRetain" deprecated:"true" type:"list"`

	// A list of metrics whose data is retained (stored). By default, data is retained
	// for any metric used in the profile's behaviors, but it is also retained for
	// any metric specified here.
	AdditionalMetricsToRetainV2 []*MetricToRetain `locationName:"additionalMetricsToRetainV2" type:"list"`

	// Where the alerts are sent. (Alerts are always sent to the console.)
	AlertTargets map[string]*AlertTarget `locationName:"alertTargets" type:"map"`

	// Specifies the behaviors that, when violated by a device (thing), cause an
	// alert.
	Behaviors []*Behavior `locationName:"behaviors" type:"list"`

	// The time the security profile was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The time the security profile was last modified.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// Specifies the MQTT topic and role ARN required for metric export.
	MetricsExportConfig *MetricsExportConfig `locationName:"metricsExportConfig" type:"structure"`

	// The ARN of the security profile.
	SecurityProfileArn *string `locationName:"securityProfileArn" type:"string"`

	// A description of the security profile (associated with the security profile
	// when it was created or updated).
	SecurityProfileDescription *string `locationName:"securityProfileDescription" type:"string"`

	// The name of the security profile.
	SecurityProfileName *string `locationName:"securityProfileName" min:"1" type:"string"`

	// The version of the security profile. A new version is generated whenever
	// the security profile is updated.
	Version *int64 `locationName:"version" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeSecurityProfileOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeSecurityProfileOutput) GoString() string {
	return s.String()
}

// SetAdditionalMetricsToRetain sets the AdditionalMetricsToRetain field's value.
func (s *DescribeSecurityProfileOutput) SetAdditionalMetricsToRetain(v []*string) *DescribeSecurityProfileOutput {
	s.AdditionalMetricsToRetain = v
	return s
}

// SetAdditionalMetricsToRetainV2 sets the AdditionalMetricsToRetainV2 field's value.
func (s *DescribeSecurityProfileOutput) SetAdditionalMetricsToRetainV2(v []*MetricToRetain) *DescribeSecurityProfileOutput {
	s.AdditionalMetricsToRetainV2 = v
	return s
}

// SetAlertTargets sets the AlertTargets field's value.
func (s *DescribeSecurityProfileOutput) SetAlertTargets(v map[string]*AlertTarget) *DescribeSecurityProfileOutput {
	s.AlertTargets = v
	return s
}

// SetBehaviors sets the Behaviors field's value.
func (s *DescribeSecurityProfileOutput) SetBehaviors(v []*Behavior) *DescribeSecurityProfileOutput {
	s.Behaviors = v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *DescribeSecurityProfileOutput) SetCreationDate(v time.Time) *DescribeSecurityProfileOutput {
	s.CreationDate = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *DescribeSecurityProfileOutput) SetLastModifiedDate(v time.Time) *DescribeSecurityProfileOutput {
	s.LastModifiedDate = &v
	return s
}

// SetMetricsExportConfig sets the MetricsExportConfig field's value.
func (s *DescribeSecurityProfileOutput) SetMetricsExportConfig(v *MetricsExportConfig) *DescribeSecurityProfileOutput {
	s.MetricsExportConfig = v
	return s
}

// SetSecurityProfileArn sets the SecurityProfileArn field's value.
func (s *DescribeSecurityProfileOutput) SetSecurityProfileArn(v string) *DescribeSecurityProfileOutput {
	s.SecurityProfileArn = &v
	return s
}

// SetSecurityProfileDescription sets the SecurityProfileDescription field's value.
func (s *DescribeSecurityProfileOutput) SetSecurityProfileDescription(v string) *DescribeSecurityProfileOutput {
	s.SecurityProfileDescription = &v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *DescribeSecurityProfileOutput) SetSecurityProfileName(v string) *DescribeSecurityProfileOutput {
	s.SecurityProfileName = &v
	return s
}

// SetVersion sets the Version field's value.
func (s *DescribeSecurityProfileOutput) SetVersion(v int64) *DescribeSecurityProfileOutput {
	s.Version = &v
	return s
}

type DescribeStreamInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The stream ID.
	//
	// StreamId is a required field
	StreamId *string `location:"uri" locationName:"streamId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeStreamInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeStreamInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeStreamInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeStreamInput"}
	if s.StreamId == nil {
		invalidParams.Add(request.NewErrParamRequired("StreamId"))
	}
	if s.StreamId != nil && len(*s.StreamId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("StreamId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetStreamId sets the StreamId field's value.
func (s *DescribeStreamInput) SetStreamId(v string) *DescribeStreamInput {
	s.StreamId = &v
	return s
}

type DescribeStreamOutput struct {
	_ struct{} `type:"structure"`

	// Information about the stream.
	StreamInfo *StreamInfo `locationName:"streamInfo" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeStreamOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeStreamOutput) GoString() string {
	return s.String()
}

// SetStreamInfo sets the StreamInfo field's value.
func (s *DescribeStreamOutput) SetStreamInfo(v *StreamInfo) *DescribeStreamOutput {
	s.StreamInfo = v
	return s
}

type DescribeThingGroupInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the thing group.
	//
	// ThingGroupName is a required field
	ThingGroupName *string `location:"uri" locationName:"thingGroupName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeThingGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeThingGroupInput"}
	if s.ThingGroupName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingGroupName"))
	}
	if s.ThingGroupName != nil && len(*s.ThingGroupName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingGroupName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *DescribeThingGroupInput) SetThingGroupName(v string) *DescribeThingGroupInput {
	s.ThingGroupName = &v
	return s
}

type DescribeThingGroupOutput struct {
	_ struct{} `type:"structure"`

	// The dynamic thing group index name.
	IndexName *string `locationName:"indexName" min:"1" type:"string"`

	// The dynamic thing group search query string.
	QueryString *string `locationName:"queryString" min:"1" type:"string"`

	// The dynamic thing group query version.
	QueryVersion *string `locationName:"queryVersion" type:"string"`

	// The dynamic thing group status.
	Status *string `locationName:"status" type:"string" enum:"DynamicGroupStatus"`

	// The thing group ARN.
	ThingGroupArn *string `locationName:"thingGroupArn" type:"string"`

	// The thing group ID.
	ThingGroupId *string `locationName:"thingGroupId" min:"1" type:"string"`

	// Thing group metadata.
	ThingGroupMetadata *ThingGroupMetadata `locationName:"thingGroupMetadata" type:"structure"`

	// The name of the thing group.
	ThingGroupName *string `locationName:"thingGroupName" min:"1" type:"string"`

	// The thing group properties.
	ThingGroupProperties *ThingGroupProperties `locationName:"thingGroupProperties" type:"structure"`

	// The version of the thing group.
	Version *int64 `locationName:"version" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingGroupOutput) GoString() string {
	return s.String()
}

// SetIndexName sets the IndexName field's value.
func (s *DescribeThingGroupOutput) SetIndexName(v string) *DescribeThingGroupOutput {
	s.IndexName = &v
	return s
}

// SetQueryString sets the QueryString field's value.
func (s *DescribeThingGroupOutput) SetQueryString(v string) *DescribeThingGroupOutput {
	s.QueryString = &v
	return s
}

// SetQueryVersion sets the QueryVersion field's value.
func (s *DescribeThingGroupOutput) SetQueryVersion(v string) *DescribeThingGroupOutput {
	s.QueryVersion = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *DescribeThingGroupOutput) SetStatus(v string) *DescribeThingGroupOutput {
	s.Status = &v
	return s
}

// SetThingGroupArn sets the ThingGroupArn field's value.
func (s *DescribeThingGroupOutput) SetThingGroupArn(v string) *DescribeThingGroupOutput {
	s.ThingGroupArn = &v
	return s
}

// SetThingGroupId sets the ThingGroupId field's value.
func (s *DescribeThingGroupOutput) SetThingGroupId(v string) *DescribeThingGroupOutput {
	s.ThingGroupId = &v
	return s
}

// SetThingGroupMetadata sets the ThingGroupMetadata field's value.
func (s *DescribeThingGroupOutput) SetThingGroupMetadata(v *ThingGroupMetadata) *DescribeThingGroupOutput {
	s.ThingGroupMetadata = v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *DescribeThingGroupOutput) SetThingGroupName(v string) *DescribeThingGroupOutput {
	s.ThingGroupName = &v
	return s
}

// SetThingGroupProperties sets the ThingGroupProperties field's value.
func (s *DescribeThingGroupOutput) SetThingGroupProperties(v *ThingGroupProperties) *DescribeThingGroupOutput {
	s.ThingGroupProperties = v
	return s
}

// SetVersion sets the Version field's value.
func (s *DescribeThingGroupOutput) SetVersion(v int64) *DescribeThingGroupOutput {
	s.Version = &v
	return s
}

// The input for the DescribeThing operation.
type DescribeThingInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the thing.
	//
	// ThingName is a required field
	ThingName *string `location:"uri" locationName:"thingName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeThingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeThingInput"}
	if s.ThingName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingName"))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetThingName sets the ThingName field's value.
func (s *DescribeThingInput) SetThingName(v string) *DescribeThingInput {
	s.ThingName = &v
	return s
}

// The output from the DescribeThing operation.
type DescribeThingOutput struct {
	_ struct{} `type:"structure"`

	// The thing attributes.
	Attributes map[string]*string `locationName:"attributes" type:"map"`

	// The name of the billing group the thing belongs to.
	BillingGroupName *string `locationName:"billingGroupName" min:"1" type:"string"`

	// The default MQTT client ID. For a typical device, the thing name is also
	// used as the default MQTT client ID. Although we don’t require a mapping
	// between a thing's registry name and its use of MQTT client IDs, certificates,
	// or shadow state, we recommend that you choose a thing name and use it as
	// the MQTT client ID for the registry and the Device Shadow service.
	//
	// This lets you better organize your IoT fleet without removing the flexibility
	// of the underlying device certificate model or shadows.
	DefaultClientId *string `locationName:"defaultClientId" type:"string"`

	// The ARN of the thing to describe.
	ThingArn *string `locationName:"thingArn" type:"string"`

	// The ID of the thing to describe.
	ThingId *string `locationName:"thingId" type:"string"`

	// The name of the thing.
	ThingName *string `locationName:"thingName" min:"1" type:"string"`

	// The thing type name.
	ThingTypeName *string `locationName:"thingTypeName" min:"1" type:"string"`

	// The current version of the thing record in the registry.
	//
	// To avoid unintentional changes to the information in the registry, you can
	// pass the version information in the expectedVersion parameter of the UpdateThing
	// and DeleteThing calls.
	Version *int64 `locationName:"version" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingOutput) GoString() string {
	return s.String()
}

// SetAttributes sets the Attributes field's value.
func (s *DescribeThingOutput) SetAttributes(v map[string]*string) *DescribeThingOutput {
	s.Attributes = v
	return s
}

// SetBillingGroupName sets the BillingGroupName field's value.
func (s *DescribeThingOutput) SetBillingGroupName(v string) *DescribeThingOutput {
	s.BillingGroupName = &v
	return s
}

// SetDefaultClientId sets the DefaultClientId field's value.
func (s *DescribeThingOutput) SetDefaultClientId(v string) *DescribeThingOutput {
	s.DefaultClientId = &v
	return s
}

// SetThingArn sets the ThingArn field's value.
func (s *DescribeThingOutput) SetThingArn(v string) *DescribeThingOutput {
	s.ThingArn = &v
	return s
}

// SetThingId sets the ThingId field's value.
func (s *DescribeThingOutput) SetThingId(v string) *DescribeThingOutput {
	s.ThingId = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *DescribeThingOutput) SetThingName(v string) *DescribeThingOutput {
	s.ThingName = &v
	return s
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *DescribeThingOutput) SetThingTypeName(v string) *DescribeThingOutput {
	s.ThingTypeName = &v
	return s
}

// SetVersion sets the Version field's value.
func (s *DescribeThingOutput) SetVersion(v int64) *DescribeThingOutput {
	s.Version = &v
	return s
}

type DescribeThingRegistrationTaskInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The task ID.
	//
	// TaskId is a required field
	TaskId *string `location:"uri" locationName:"taskId" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingRegistrationTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingRegistrationTaskInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeThingRegistrationTaskInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeThingRegistrationTaskInput"}
	if s.TaskId == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskId"))
	}
	if s.TaskId != nil && len(*s.TaskId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TaskId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTaskId sets the TaskId field's value.
func (s *DescribeThingRegistrationTaskInput) SetTaskId(v string) *DescribeThingRegistrationTaskInput {
	s.TaskId = &v
	return s
}

type DescribeThingRegistrationTaskOutput struct {
	_ struct{} `type:"structure"`

	// The task creation date.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The number of things that failed to be provisioned.
	FailureCount *int64 `locationName:"failureCount" type:"integer"`

	// The S3 bucket that contains the input file.
	InputFileBucket *string `locationName:"inputFileBucket" min:"3" type:"string"`

	// The input file key.
	InputFileKey *string `locationName:"inputFileKey" min:"1" type:"string"`

	// The date when the task was last modified.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The message.
	Message *string `locationName:"message" type:"string"`

	// The progress of the bulk provisioning task expressed as a percentage.
	PercentageProgress *int64 `locationName:"percentageProgress" type:"integer"`

	// The role ARN that grants access to the input file bucket.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`

	// The status of the bulk thing provisioning task.
	Status *string `locationName:"status" type:"string" enum:"Status"`

	// The number of things successfully provisioned.
	SuccessCount *int64 `locationName:"successCount" type:"integer"`

	// The task ID.
	TaskId *string `locationName:"taskId" type:"string"`

	// The task's template.
	TemplateBody *string `locationName:"templateBody" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingRegistrationTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingRegistrationTaskOutput) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *DescribeThingRegistrationTaskOutput) SetCreationDate(v time.Time) *DescribeThingRegistrationTaskOutput {
	s.CreationDate = &v
	return s
}

// SetFailureCount sets the FailureCount field's value.
func (s *DescribeThingRegistrationTaskOutput) SetFailureCount(v int64) *DescribeThingRegistrationTaskOutput {
	s.FailureCount = &v
	return s
}

// SetInputFileBucket sets the InputFileBucket field's value.
func (s *DescribeThingRegistrationTaskOutput) SetInputFileBucket(v string) *DescribeThingRegistrationTaskOutput {
	s.InputFileBucket = &v
	return s
}

// SetInputFileKey sets the InputFileKey field's value.
func (s *DescribeThingRegistrationTaskOutput) SetInputFileKey(v string) *DescribeThingRegistrationTaskOutput {
	s.InputFileKey = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *DescribeThingRegistrationTaskOutput) SetLastModifiedDate(v time.Time) *DescribeThingRegistrationTaskOutput {
	s.LastModifiedDate = &v
	return s
}

// SetMessage sets the Message field's value.
func (s *DescribeThingRegistrationTaskOutput) SetMessage(v string) *DescribeThingRegistrationTaskOutput {
	s.Message = &v
	return s
}

// SetPercentageProgress sets the PercentageProgress field's value.
func (s *DescribeThingRegistrationTaskOutput) SetPercentageProgress(v int64) *DescribeThingRegistrationTaskOutput {
	s.PercentageProgress = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *DescribeThingRegistrationTaskOutput) SetRoleArn(v string) *DescribeThingRegistrationTaskOutput {
	s.RoleArn = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *DescribeThingRegistrationTaskOutput) SetStatus(v string) *DescribeThingRegistrationTaskOutput {
	s.Status = &v
	return s
}

// SetSuccessCount sets the SuccessCount field's value.
func (s *DescribeThingRegistrationTaskOutput) SetSuccessCount(v int64) *DescribeThingRegistrationTaskOutput {
	s.SuccessCount = &v
	return s
}

// SetTaskId sets the TaskId field's value.
func (s *DescribeThingRegistrationTaskOutput) SetTaskId(v string) *DescribeThingRegistrationTaskOutput {
	s.TaskId = &v
	return s
}

// SetTemplateBody sets the TemplateBody field's value.
func (s *DescribeThingRegistrationTaskOutput) SetTemplateBody(v string) *DescribeThingRegistrationTaskOutput {
	s.TemplateBody = &v
	return s
}

// The input for the DescribeThingType operation.
type DescribeThingTypeInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the thing type.
	//
	// ThingTypeName is a required field
	ThingTypeName *string `location:"uri" locationName:"thingTypeName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingTypeInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingTypeInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeThingTypeInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeThingTypeInput"}
	if s.ThingTypeName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingTypeName"))
	}
	if s.ThingTypeName != nil && len(*s.ThingTypeName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingTypeName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *DescribeThingTypeInput) SetThingTypeName(v string) *DescribeThingTypeInput {
	s.ThingTypeName = &v
	return s
}

// The output for the DescribeThingType operation.
type DescribeThingTypeOutput struct {
	_ struct{} `type:"structure"`

	// The thing type ARN.
	ThingTypeArn *string `locationName:"thingTypeArn" type:"string"`

	// The thing type ID.
	ThingTypeId *string `locationName:"thingTypeId" type:"string"`

	// The ThingTypeMetadata contains additional information about the thing type
	// including: creation date and time, a value indicating whether the thing type
	// is deprecated, and a date and time when it was deprecated.
	ThingTypeMetadata *ThingTypeMetadata `locationName:"thingTypeMetadata" type:"structure"`

	// The name of the thing type.
	ThingTypeName *string `locationName:"thingTypeName" min:"1" type:"string"`

	// The ThingTypeProperties contains information about the thing type including
	// description, and a list of searchable thing attribute names.
	ThingTypeProperties *ThingTypeProperties `locationName:"thingTypeProperties" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingTypeOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeThingTypeOutput) GoString() string {
	return s.String()
}

// SetThingTypeArn sets the ThingTypeArn field's value.
func (s *DescribeThingTypeOutput) SetThingTypeArn(v string) *DescribeThingTypeOutput {
	s.ThingTypeArn = &v
	return s
}

// SetThingTypeId sets the ThingTypeId field's value.
func (s *DescribeThingTypeOutput) SetThingTypeId(v string) *DescribeThingTypeOutput {
	s.ThingTypeId = &v
	return s
}

// SetThingTypeMetadata sets the ThingTypeMetadata field's value.
func (s *DescribeThingTypeOutput) SetThingTypeMetadata(v *ThingTypeMetadata) *DescribeThingTypeOutput {
	s.ThingTypeMetadata = v
	return s
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *DescribeThingTypeOutput) SetThingTypeName(v string) *DescribeThingTypeOutput {
	s.ThingTypeName = &v
	return s
}

// SetThingTypeProperties sets the ThingTypeProperties field's value.
func (s *DescribeThingTypeOutput) SetThingTypeProperties(v *ThingTypeProperties) *DescribeThingTypeOutput {
	s.ThingTypeProperties = v
	return s
}

// Describes the location of the updated firmware.
type Destination struct {
	_ struct{} `type:"structure"`

	// Describes the location in S3 of the updated firmware.
	S3Destination *S3Destination `locationName:"s3Destination" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Destination) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Destination) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Destination) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Destination"}
	if s.S3Destination != nil {
		if err := s.S3Destination.Validate(); err != nil {
			invalidParams.AddNested("S3Destination", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetS3Destination sets the S3Destination field's value.
func (s *Destination) SetS3Destination(v *S3Destination) *Destination {
	s.S3Destination = v
	return s
}

type DetachPolicyInput struct {
	_ struct{} `type:"structure"`

	// The policy to detach.
	//
	// PolicyName is a required field
	PolicyName *string `location:"uri" locationName:"policyName" min:"1" type:"string" required:"true"`

	// The target from which the policy will be detached.
	//
	// Target is a required field
	Target *string `locationName:"target" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachPolicyInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachPolicyInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DetachPolicyInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DetachPolicyInput"}
	if s.PolicyName == nil {
		invalidParams.Add(request.NewErrParamRequired("PolicyName"))
	}
	if s.PolicyName != nil && len(*s.PolicyName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyName", 1))
	}
	if s.Target == nil {
		invalidParams.Add(request.NewErrParamRequired("Target"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPolicyName sets the PolicyName field's value.
func (s *DetachPolicyInput) SetPolicyName(v string) *DetachPolicyInput {
	s.PolicyName = &v
	return s
}

// SetTarget sets the Target field's value.
func (s *DetachPolicyInput) SetTarget(v string) *DetachPolicyInput {
	s.Target = &v
	return s
}

type DetachPolicyOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachPolicyOutput) GoString() string {
	return s.String()
}

// The input for the DetachPrincipalPolicy operation.
type DetachPrincipalPolicyInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the policy to detach.
	//
	// PolicyName is a required field
	PolicyName *string `location:"uri" locationName:"policyName" min:"1" type:"string" required:"true"`

	// The principal.
	//
	// Valid principals are CertificateArn (arn:aws:iot:region:accountId:cert/certificateId),
	// thingGroupArn (arn:aws:iot:region:accountId:thinggroup/groupName) and CognitoId
	// (region:id).
	//
	// Principal is a required field
	Principal *string `location:"header" locationName:"x-amzn-iot-principal" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachPrincipalPolicyInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachPrincipalPolicyInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DetachPrincipalPolicyInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DetachPrincipalPolicyInput"}
	if s.PolicyName == nil {
		invalidParams.Add(request.NewErrParamRequired("PolicyName"))
	}
	if s.PolicyName != nil && len(*s.PolicyName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyName", 1))
	}
	if s.Principal == nil {
		invalidParams.Add(request.NewErrParamRequired("Principal"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPolicyName sets the PolicyName field's value.
func (s *DetachPrincipalPolicyInput) SetPolicyName(v string) *DetachPrincipalPolicyInput {
	s.PolicyName = &v
	return s
}

// SetPrincipal sets the Principal field's value.
func (s *DetachPrincipalPolicyInput) SetPrincipal(v string) *DetachPrincipalPolicyInput {
	s.Principal = &v
	return s
}

type DetachPrincipalPolicyOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachPrincipalPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachPrincipalPolicyOutput) GoString() string {
	return s.String()
}

type DetachSecurityProfileInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The security profile that is detached.
	//
	// SecurityProfileName is a required field
	SecurityProfileName *string `location:"uri" locationName:"securityProfileName" min:"1" type:"string" required:"true"`

	// The ARN of the thing group from which the security profile is detached.
	//
	// SecurityProfileTargetArn is a required field
	SecurityProfileTargetArn *string `location:"querystring" locationName:"securityProfileTargetArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachSecurityProfileInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachSecurityProfileInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DetachSecurityProfileInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DetachSecurityProfileInput"}
	if s.SecurityProfileName == nil {
		invalidParams.Add(request.NewErrParamRequired("SecurityProfileName"))
	}
	if s.SecurityProfileName != nil && len(*s.SecurityProfileName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SecurityProfileName", 1))
	}
	if s.SecurityProfileTargetArn == nil {
		invalidParams.Add(request.NewErrParamRequired("SecurityProfileTargetArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *DetachSecurityProfileInput) SetSecurityProfileName(v string) *DetachSecurityProfileInput {
	s.SecurityProfileName = &v
	return s
}

// SetSecurityProfileTargetArn sets the SecurityProfileTargetArn field's value.
func (s *DetachSecurityProfileInput) SetSecurityProfileTargetArn(v string) *DetachSecurityProfileInput {
	s.SecurityProfileTargetArn = &v
	return s
}

type DetachSecurityProfileOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachSecurityProfileOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachSecurityProfileOutput) GoString() string {
	return s.String()
}

// The input for the DetachThingPrincipal operation.
type DetachThingPrincipalInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// If the principal is a certificate, this value must be ARN of the certificate.
	// If the principal is an Amazon Cognito identity, this value must be the ID
	// of the Amazon Cognito identity.
	//
	// Principal is a required field
	Principal *string `location:"header" locationName:"x-amzn-principal" type:"string" required:"true"`

	// The name of the thing.
	//
	// ThingName is a required field
	ThingName *string `location:"uri" locationName:"thingName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachThingPrincipalInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachThingPrincipalInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DetachThingPrincipalInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DetachThingPrincipalInput"}
	if s.Principal == nil {
		invalidParams.Add(request.NewErrParamRequired("Principal"))
	}
	if s.ThingName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingName"))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPrincipal sets the Principal field's value.
func (s *DetachThingPrincipalInput) SetPrincipal(v string) *DetachThingPrincipalInput {
	s.Principal = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *DetachThingPrincipalInput) SetThingName(v string) *DetachThingPrincipalInput {
	s.ThingName = &v
	return s
}

// The output from the DetachThingPrincipal operation.
type DetachThingPrincipalOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachThingPrincipalOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetachThingPrincipalOutput) GoString() string {
	return s.String()
}

// Describes which mitigation actions should be executed.
type DetectMitigationActionExecution struct {
	_ struct{} `type:"structure"`

	// The friendly name that uniquely identifies the mitigation action.
	ActionName *string `locationName:"actionName" type:"string"`

	// The error code of a mitigation action.
	ErrorCode *string `locationName:"errorCode" type:"string"`

	// The date a mitigation action ended.
	ExecutionEndDate *time.Time `locationName:"executionEndDate" type:"timestamp"`

	// The date a mitigation action was started.
	ExecutionStartDate *time.Time `locationName:"executionStartDate" type:"timestamp"`

	// The message of a mitigation action.
	Message *string `locationName:"message" type:"string"`

	// The status of a mitigation action.
	Status *string `locationName:"status" type:"string" enum:"DetectMitigationActionExecutionStatus"`

	// The unique identifier of the task.
	TaskId *string `locationName:"taskId" min:"1" type:"string"`

	// The name of the thing.
	ThingName *string `locationName:"thingName" min:"1" type:"string"`

	// The unique identifier of the violation.
	ViolationId *string `locationName:"violationId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetectMitigationActionExecution) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetectMitigationActionExecution) GoString() string {
	return s.String()
}

// SetActionName sets the ActionName field's value.
func (s *DetectMitigationActionExecution) SetActionName(v string) *DetectMitigationActionExecution {
	s.ActionName = &v
	return s
}

// SetErrorCode sets the ErrorCode field's value.
func (s *DetectMitigationActionExecution) SetErrorCode(v string) *DetectMitigationActionExecution {
	s.ErrorCode = &v
	return s
}

// SetExecutionEndDate sets the ExecutionEndDate field's value.
func (s *DetectMitigationActionExecution) SetExecutionEndDate(v time.Time) *DetectMitigationActionExecution {
	s.ExecutionEndDate = &v
	return s
}

// SetExecutionStartDate sets the ExecutionStartDate field's value.
func (s *DetectMitigationActionExecution) SetExecutionStartDate(v time.Time) *DetectMitigationActionExecution {
	s.ExecutionStartDate = &v
	return s
}

// SetMessage sets the Message field's value.
func (s *DetectMitigationActionExecution) SetMessage(v string) *DetectMitigationActionExecution {
	s.Message = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *DetectMitigationActionExecution) SetStatus(v string) *DetectMitigationActionExecution {
	s.Status = &v
	return s
}

// SetTaskId sets the TaskId field's value.
func (s *DetectMitigationActionExecution) SetTaskId(v string) *DetectMitigationActionExecution {
	s.TaskId = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *DetectMitigationActionExecution) SetThingName(v string) *DetectMitigationActionExecution {
	s.ThingName = &v
	return s
}

// SetViolationId sets the ViolationId field's value.
func (s *DetectMitigationActionExecution) SetViolationId(v string) *DetectMitigationActionExecution {
	s.ViolationId = &v
	return s
}

// The statistics of a mitigation action task.
type DetectMitigationActionsTaskStatistics struct {
	_ struct{} `type:"structure"`

	// The actions that were performed.
	ActionsExecuted *int64 `locationName:"actionsExecuted" type:"long"`

	// The actions that failed.
	ActionsFailed *int64 `locationName:"actionsFailed" type:"long"`

	// The actions that were skipped.
	ActionsSkipped *int64 `locationName:"actionsSkipped" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetectMitigationActionsTaskStatistics) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetectMitigationActionsTaskStatistics) GoString() string {
	return s.String()
}

// SetActionsExecuted sets the ActionsExecuted field's value.
func (s *DetectMitigationActionsTaskStatistics) SetActionsExecuted(v int64) *DetectMitigationActionsTaskStatistics {
	s.ActionsExecuted = &v
	return s
}

// SetActionsFailed sets the ActionsFailed field's value.
func (s *DetectMitigationActionsTaskStatistics) SetActionsFailed(v int64) *DetectMitigationActionsTaskStatistics {
	s.ActionsFailed = &v
	return s
}

// SetActionsSkipped sets the ActionsSkipped field's value.
func (s *DetectMitigationActionsTaskStatistics) SetActionsSkipped(v int64) *DetectMitigationActionsTaskStatistics {
	s.ActionsSkipped = &v
	return s
}

// The summary of the mitigation action tasks.
type DetectMitigationActionsTaskSummary struct {
	_ struct{} `type:"structure"`

	// The definition of the actions.
	ActionsDefinition []*MitigationAction `locationName:"actionsDefinition" type:"list"`

	// Includes only active violations.
	OnlyActiveViolationsIncluded *bool `locationName:"onlyActiveViolationsIncluded" type:"boolean"`

	// Includes suppressed alerts.
	SuppressedAlertsIncluded *bool `locationName:"suppressedAlertsIncluded" type:"boolean"`

	// Specifies the ML Detect findings to which the mitigation actions are applied.
	Target *DetectMitigationActionsTaskTarget `locationName:"target" type:"structure"`

	// The date the task ended.
	TaskEndTime *time.Time `locationName:"taskEndTime" type:"timestamp"`

	// The unique identifier of the task.
	TaskId *string `locationName:"taskId" min:"1" type:"string"`

	// The date the task started.
	TaskStartTime *time.Time `locationName:"taskStartTime" type:"timestamp"`

	// The statistics of a mitigation action task.
	TaskStatistics *DetectMitigationActionsTaskStatistics `locationName:"taskStatistics" type:"structure"`

	// The status of the task.
	TaskStatus *string `locationName:"taskStatus" type:"string" enum:"DetectMitigationActionsTaskStatus"`

	// Specifies the time period of which violation events occurred between.
	ViolationEventOccurrenceRange *ViolationEventOccurrenceRange `locationName:"violationEventOccurrenceRange" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetectMitigationActionsTaskSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetectMitigationActionsTaskSummary) GoString() string {
	return s.String()
}

// SetActionsDefinition sets the ActionsDefinition field's value.
func (s *DetectMitigationActionsTaskSummary) SetActionsDefinition(v []*MitigationAction) *DetectMitigationActionsTaskSummary {
	s.ActionsDefinition = v
	return s
}

// SetOnlyActiveViolationsIncluded sets the OnlyActiveViolationsIncluded field's value.
func (s *DetectMitigationActionsTaskSummary) SetOnlyActiveViolationsIncluded(v bool) *DetectMitigationActionsTaskSummary {
	s.OnlyActiveViolationsIncluded = &v
	return s
}

// SetSuppressedAlertsIncluded sets the SuppressedAlertsIncluded field's value.
func (s *DetectMitigationActionsTaskSummary) SetSuppressedAlertsIncluded(v bool) *DetectMitigationActionsTaskSummary {
	s.SuppressedAlertsIncluded = &v
	return s
}

// SetTarget sets the Target field's value.
func (s *DetectMitigationActionsTaskSummary) SetTarget(v *DetectMitigationActionsTaskTarget) *DetectMitigationActionsTaskSummary {
	s.Target = v
	return s
}

// SetTaskEndTime sets the TaskEndTime field's value.
func (s *DetectMitigationActionsTaskSummary) SetTaskEndTime(v time.Time) *DetectMitigationActionsTaskSummary {
	s.TaskEndTime = &v
	return s
}

// SetTaskId sets the TaskId field's value.
func (s *DetectMitigationActionsTaskSummary) SetTaskId(v string) *DetectMitigationActionsTaskSummary {
	s.TaskId = &v
	return s
}

// SetTaskStartTime sets the TaskStartTime field's value.
func (s *DetectMitigationActionsTaskSummary) SetTaskStartTime(v time.Time) *DetectMitigationActionsTaskSummary {
	s.TaskStartTime = &v
	return s
}

// SetTaskStatistics sets the TaskStatistics field's value.
func (s *DetectMitigationActionsTaskSummary) SetTaskStatistics(v *DetectMitigationActionsTaskStatistics) *DetectMitigationActionsTaskSummary {
	s.TaskStatistics = v
	return s
}

// SetTaskStatus sets the TaskStatus field's value.
func (s *DetectMitigationActionsTaskSummary) SetTaskStatus(v string) *DetectMitigationActionsTaskSummary {
	s.TaskStatus = &v
	return s
}

// SetViolationEventOccurrenceRange sets the ViolationEventOccurrenceRange field's value.
func (s *DetectMitigationActionsTaskSummary) SetViolationEventOccurrenceRange(v *ViolationEventOccurrenceRange) *DetectMitigationActionsTaskSummary {
	s.ViolationEventOccurrenceRange = v
	return s
}

// The target of a mitigation action task.
type DetectMitigationActionsTaskTarget struct {
	_ struct{} `type:"structure"`

	// The name of the behavior.
	BehaviorName *string `locationName:"behaviorName" min:"1" type:"string"`

	// The name of the security profile.
	SecurityProfileName *string `locationName:"securityProfileName" min:"1" type:"string"`

	// The unique identifiers of the violations.
	ViolationIds []*string `locationName:"violationIds" min:"1" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetectMitigationActionsTaskTarget) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DetectMitigationActionsTaskTarget) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DetectMitigationActionsTaskTarget) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DetectMitigationActionsTaskTarget"}
	if s.BehaviorName != nil && len(*s.BehaviorName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("BehaviorName", 1))
	}
	if s.SecurityProfileName != nil && len(*s.SecurityProfileName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SecurityProfileName", 1))
	}
	if s.ViolationIds != nil && len(s.ViolationIds) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ViolationIds", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBehaviorName sets the BehaviorName field's value.
func (s *DetectMitigationActionsTaskTarget) SetBehaviorName(v string) *DetectMitigationActionsTaskTarget {
	s.BehaviorName = &v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *DetectMitigationActionsTaskTarget) SetSecurityProfileName(v string) *DetectMitigationActionsTaskTarget {
	s.SecurityProfileName = &v
	return s
}

// SetViolationIds sets the ViolationIds field's value.
func (s *DetectMitigationActionsTaskTarget) SetViolationIds(v []*string) *DetectMitigationActionsTaskTarget {
	s.ViolationIds = v
	return s
}

// The input for the DisableTopicRuleRequest operation.
type DisableTopicRuleInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the rule to disable.
	//
	// RuleName is a required field
	RuleName *string `location:"uri" locationName:"ruleName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DisableTopicRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DisableTopicRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DisableTopicRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DisableTopicRuleInput"}
	if s.RuleName == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleName"))
	}
	if s.RuleName != nil && len(*s.RuleName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRuleName sets the RuleName field's value.
func (s *DisableTopicRuleInput) SetRuleName(v string) *DisableTopicRuleInput {
	s.RuleName = &v
	return s
}

type DisableTopicRuleOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DisableTopicRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DisableTopicRuleOutput) GoString() string {
	return s.String()
}

// A map of key-value pairs containing the patterns that need to be replaced
// in a managed template job document schema. You can use the description of
// each key as a guidance to specify the inputs during runtime when creating
// a job.
//
// documentParameters can only be used when creating jobs from Amazon Web Services
// managed templates. This parameter can't be used with custom job templates
// or to create jobs from them.
type DocumentParameter struct {
	_ struct{} `type:"structure"`

	// Description of the map field containing the patterns that need to be replaced
	// in a managed template job document schema.
	Description *string `locationName:"description" type:"string"`

	// An example illustrating a pattern that need to be replaced in a managed template
	// job document schema.
	Example *string `locationName:"example" type:"string"`

	// Key of the map field containing the patterns that need to be replaced in
	// a managed template job document schema.
	Key *string `locationName:"key" min:"1" type:"string"`

	// Specifies whether a pattern that needs to be replaced in a managed template
	// job document schema is optional or required.
	Optional *bool `locationName:"optional" type:"boolean"`

	// A regular expression of the patterns that need to be replaced in a managed
	// template job document schema.
	Regex *string `locationName:"regex" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DocumentParameter) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DocumentParameter) GoString() string {
	return s.String()
}

// SetDescription sets the Description field's value.
func (s *DocumentParameter) SetDescription(v string) *DocumentParameter {
	s.Description = &v
	return s
}

// SetExample sets the Example field's value.
func (s *DocumentParameter) SetExample(v string) *DocumentParameter {
	s.Example = &v
	return s
}

// SetKey sets the Key field's value.
func (s *DocumentParameter) SetKey(v string) *DocumentParameter {
	s.Key = &v
	return s
}

// SetOptional sets the Optional field's value.
func (s *DocumentParameter) SetOptional(v bool) *DocumentParameter {
	s.Optional = &v
	return s
}

// SetRegex sets the Regex field's value.
func (s *DocumentParameter) SetRegex(v string) *DocumentParameter {
	s.Regex = &v
	return s
}

// The summary of a domain configuration. A domain configuration specifies custom
// IoT-specific information about a domain. A domain configuration can be associated
// with an Amazon Web Services-managed domain (for example, dbc123defghijk.iot.us-west-2.amazonaws.com),
// a customer managed domain, or a default endpoint.
//
//   - Data
//
//   - Jobs
//
//   - CredentialProvider
type DomainConfigurationSummary struct {
	_ struct{} `type:"structure"`

	// The ARN of the domain configuration.
	DomainConfigurationArn *string `locationName:"domainConfigurationArn" type:"string"`

	// The name of the domain configuration. This value must be unique to a region.
	DomainConfigurationName *string `locationName:"domainConfigurationName" min:"1" type:"string"`

	// The type of service delivered by the endpoint.
	ServiceType *string `locationName:"serviceType" type:"string" enum:"ServiceType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DomainConfigurationSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DomainConfigurationSummary) GoString() string {
	return s.String()
}

// SetDomainConfigurationArn sets the DomainConfigurationArn field's value.
func (s *DomainConfigurationSummary) SetDomainConfigurationArn(v string) *DomainConfigurationSummary {
	s.DomainConfigurationArn = &v
	return s
}

// SetDomainConfigurationName sets the DomainConfigurationName field's value.
func (s *DomainConfigurationSummary) SetDomainConfigurationName(v string) *DomainConfigurationSummary {
	s.DomainConfigurationName = &v
	return s
}

// SetServiceType sets the ServiceType field's value.
func (s *DomainConfigurationSummary) SetServiceType(v string) *DomainConfigurationSummary {
	s.ServiceType = &v
	return s
}

// Describes an action to write to a DynamoDB table.
//
// The tableName, hashKeyField, and rangeKeyField values must match the values
// used when you created the table.
//
// The hashKeyValue and rangeKeyvalue fields use a substitution template syntax.
// These templates provide data at runtime. The syntax is as follows: ${sql-expression}.
//
// You can specify any valid expression in a WHERE or SELECT clause, including
// JSON properties, comparisons, calculations, and functions. For example, the
// following field uses the third level of the topic:
//
// "hashKeyValue": "${topic(3)}"
//
// The following field uses the timestamp:
//
// "rangeKeyValue": "${timestamp()}"
type DynamoDBAction struct {
	_ struct{} `type:"structure"`

	// The hash key name.
	//
	// HashKeyField is a required field
	HashKeyField *string `locationName:"hashKeyField" type:"string" required:"true"`

	// The hash key type. Valid values are "STRING" or "NUMBER"
	HashKeyType *string `locationName:"hashKeyType" type:"string" enum:"DynamoKeyType"`

	// The hash key value.
	//
	// HashKeyValue is a required field
	HashKeyValue *string `locationName:"hashKeyValue" type:"string" required:"true"`

	// The type of operation to be performed. This follows the substitution template,
	// so it can be ${operation}, but the substitution must result in one of the
	// following: INSERT, UPDATE, or DELETE.
	Operation *string `locationName:"operation" type:"string"`

	// The action payload. This name can be customized.
	PayloadField *string `locationName:"payloadField" type:"string"`

	// The range key name.
	RangeKeyField *string `locationName:"rangeKeyField" type:"string"`

	// The range key type. Valid values are "STRING" or "NUMBER"
	RangeKeyType *string `locationName:"rangeKeyType" type:"string" enum:"DynamoKeyType"`

	// The range key value.
	RangeKeyValue *string `locationName:"rangeKeyValue" type:"string"`

	// The ARN of the IAM role that grants access to the DynamoDB table.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// The name of the DynamoDB table.
	//
	// TableName is a required field
	TableName *string `locationName:"tableName" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DynamoDBAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DynamoDBAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DynamoDBAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DynamoDBAction"}
	if s.HashKeyField == nil {
		invalidParams.Add(request.NewErrParamRequired("HashKeyField"))
	}
	if s.HashKeyValue == nil {
		invalidParams.Add(request.NewErrParamRequired("HashKeyValue"))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.TableName == nil {
		invalidParams.Add(request.NewErrParamRequired("TableName"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetHashKeyField sets the HashKeyField field's value.
func (s *DynamoDBAction) SetHashKeyField(v string) *DynamoDBAction {
	s.HashKeyField = &v
	return s
}

// SetHashKeyType sets the HashKeyType field's value.
func (s *DynamoDBAction) SetHashKeyType(v string) *DynamoDBAction {
	s.HashKeyType = &v
	return s
}

// SetHashKeyValue sets the HashKeyValue field's value.
func (s *DynamoDBAction) SetHashKeyValue(v string) *DynamoDBAction {
	s.HashKeyValue = &v
	return s
}

// SetOperation sets the Operation field's value.
func (s *DynamoDBAction) SetOperation(v string) *DynamoDBAction {
	s.Operation = &v
	return s
}

// SetPayloadField sets the PayloadField field's value.
func (s *DynamoDBAction) SetPayloadField(v string) *DynamoDBAction {
	s.PayloadField = &v
	return s
}

// SetRangeKeyField sets the RangeKeyField field's value.
func (s *DynamoDBAction) SetRangeKeyField(v string) *DynamoDBAction {
	s.RangeKeyField = &v
	return s
}

// SetRangeKeyType sets the RangeKeyType field's value.
func (s *DynamoDBAction) SetRangeKeyType(v string) *DynamoDBAction {
	s.RangeKeyType = &v
	return s
}

// SetRangeKeyValue sets the RangeKeyValue field's value.
func (s *DynamoDBAction) SetRangeKeyValue(v string) *DynamoDBAction {
	s.RangeKeyValue = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *DynamoDBAction) SetRoleArn(v string) *DynamoDBAction {
	s.RoleArn = &v
	return s
}

// SetTableName sets the TableName field's value.
func (s *DynamoDBAction) SetTableName(v string) *DynamoDBAction {
	s.TableName = &v
	return s
}

// Describes an action to write to a DynamoDB table.
//
// This DynamoDB action writes each attribute in the message payload into it's
// own column in the DynamoDB table.
type DynamoDBv2Action struct {
	_ struct{} `type:"structure"`

	// Specifies the DynamoDB table to which the message data will be written. For
	// example:
	//
	// { "dynamoDBv2": { "roleArn": "aws:iam:12341251:my-role" "putItem": { "tableName":
	// "my-table" } } }
	//
	// Each attribute in the message payload will be written to a separate column
	// in the DynamoDB database.
	//
	// PutItem is a required field
	PutItem *PutItemInput `locationName:"putItem" type:"structure" required:"true"`

	// The ARN of the IAM role that grants access to the DynamoDB table.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DynamoDBv2Action) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DynamoDBv2Action) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DynamoDBv2Action) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DynamoDBv2Action"}
	if s.PutItem == nil {
		invalidParams.Add(request.NewErrParamRequired("PutItem"))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.PutItem != nil {
		if err := s.PutItem.Validate(); err != nil {
			invalidParams.AddNested("PutItem", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPutItem sets the PutItem field's value.
func (s *DynamoDBv2Action) SetPutItem(v *PutItemInput) *DynamoDBv2Action {
	s.PutItem = v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *DynamoDBv2Action) SetRoleArn(v string) *DynamoDBv2Action {
	s.RoleArn = &v
	return s
}

// The policy that has the effect on the authorization results.
type EffectivePolicy struct {
	_ struct{} `type:"structure"`

	// The policy ARN.
	PolicyArn *string `locationName:"policyArn" type:"string"`

	// The IAM policy document.
	PolicyDocument *string `locationName:"policyDocument" type:"string"`

	// The policy name.
	PolicyName *string `locationName:"policyName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EffectivePolicy) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EffectivePolicy) GoString() string {
	return s.String()
}

// SetPolicyArn sets the PolicyArn field's value.
func (s *EffectivePolicy) SetPolicyArn(v string) *EffectivePolicy {
	s.PolicyArn = &v
	return s
}

// SetPolicyDocument sets the PolicyDocument field's value.
func (s *EffectivePolicy) SetPolicyDocument(v string) *EffectivePolicy {
	s.PolicyDocument = &v
	return s
}

// SetPolicyName sets the PolicyName field's value.
func (s *EffectivePolicy) SetPolicyName(v string) *EffectivePolicy {
	s.PolicyName = &v
	return s
}

// Describes an action that writes data to an Amazon OpenSearch Service domain.
//
// The Elasticsearch action can only be used by existing rule actions. To create
// a new rule action or to update an existing rule action, use the OpenSearch
// rule action instead. For more information, see OpenSearchAction (https://docs.aws.amazon.com/iot/latest/apireference/API_OpenSearchAction.html).
type ElasticsearchAction struct {
	_ struct{} `type:"structure"`

	// The endpoint of your OpenSearch domain.
	//
	// Endpoint is a required field
	Endpoint *string `locationName:"endpoint" type:"string" required:"true"`

	// The unique identifier for the document you are storing.
	//
	// Id is a required field
	Id *string `locationName:"id" type:"string" required:"true"`

	// The index where you want to store your data.
	//
	// Index is a required field
	Index *string `locationName:"index" type:"string" required:"true"`

	// The IAM role ARN that has access to OpenSearch.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// The type of document you are storing.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ElasticsearchAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ElasticsearchAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ElasticsearchAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ElasticsearchAction"}
	if s.Endpoint == nil {
		invalidParams.Add(request.NewErrParamRequired("Endpoint"))
	}
	if s.Id == nil {
		invalidParams.Add(request.NewErrParamRequired("Id"))
	}
	if s.Index == nil {
		invalidParams.Add(request.NewErrParamRequired("Index"))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEndpoint sets the Endpoint field's value.
func (s *ElasticsearchAction) SetEndpoint(v string) *ElasticsearchAction {
	s.Endpoint = &v
	return s
}

// SetId sets the Id field's value.
func (s *ElasticsearchAction) SetId(v string) *ElasticsearchAction {
	s.Id = &v
	return s
}

// SetIndex sets the Index field's value.
func (s *ElasticsearchAction) SetIndex(v string) *ElasticsearchAction {
	s.Index = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *ElasticsearchAction) SetRoleArn(v string) *ElasticsearchAction {
	s.RoleArn = &v
	return s
}

// SetType sets the Type field's value.
func (s *ElasticsearchAction) SetType(v string) *ElasticsearchAction {
	s.Type = &v
	return s
}

// Parameters used when defining a mitigation action that enable Amazon Web
// Services IoT Core logging.
type EnableIoTLoggingParams struct {
	_ struct{} `type:"structure"`

	// Specifies the type of information to be logged.
	//
	// LogLevel is a required field
	LogLevel *string `locationName:"logLevel" type:"string" required:"true" enum:"LogLevel"`

	// The Amazon Resource Name (ARN) of the IAM role used for logging.
	//
	// RoleArnForLogging is a required field
	RoleArnForLogging *string `locationName:"roleArnForLogging" min:"20" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EnableIoTLoggingParams) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EnableIoTLoggingParams) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *EnableIoTLoggingParams) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "EnableIoTLoggingParams"}
	if s.LogLevel == nil {
		invalidParams.Add(request.NewErrParamRequired("LogLevel"))
	}
	if s.RoleArnForLogging == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArnForLogging"))
	}
	if s.RoleArnForLogging != nil && len(*s.RoleArnForLogging) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArnForLogging", 20))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLogLevel sets the LogLevel field's value.
func (s *EnableIoTLoggingParams) SetLogLevel(v string) *EnableIoTLoggingParams {
	s.LogLevel = &v
	return s
}

// SetRoleArnForLogging sets the RoleArnForLogging field's value.
func (s *EnableIoTLoggingParams) SetRoleArnForLogging(v string) *EnableIoTLoggingParams {
	s.RoleArnForLogging = &v
	return s
}

// The input for the EnableTopicRuleRequest operation.
type EnableTopicRuleInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the topic rule to enable.
	//
	// RuleName is a required field
	RuleName *string `location:"uri" locationName:"ruleName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EnableTopicRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EnableTopicRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *EnableTopicRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "EnableTopicRuleInput"}
	if s.RuleName == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleName"))
	}
	if s.RuleName != nil && len(*s.RuleName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRuleName sets the RuleName field's value.
func (s *EnableTopicRuleInput) SetRuleName(v string) *EnableTopicRuleInput {
	s.RuleName = &v
	return s
}

type EnableTopicRuleOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EnableTopicRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EnableTopicRuleOutput) GoString() string {
	return s.String()
}

// Error information.
type ErrorInfo struct {
	_ struct{} `type:"structure"`

	// The error code.
	Code *string `locationName:"code" type:"string"`

	// The error message.
	Message *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ErrorInfo) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ErrorInfo) GoString() string {
	return s.String()
}

// SetCode sets the Code field's value.
func (s *ErrorInfo) SetCode(v string) *ErrorInfo {
	s.Code = &v
	return s
}

// SetMessage sets the Message field's value.
func (s *ErrorInfo) SetMessage(v string) *ErrorInfo {
	s.Message = &v
	return s
}

// Information that explicitly denies authorization.
type ExplicitDeny struct {
	_ struct{} `type:"structure"`

	// The policies that denied the authorization.
	Policies []*Policy `locationName:"policies" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExplicitDeny) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExplicitDeny) GoString() string {
	return s.String()
}

// SetPolicies sets the Policies field's value.
func (s *ExplicitDeny) SetPolicies(v []*Policy) *ExplicitDeny {
	s.Policies = v
	return s
}

// Allows you to create an exponential rate of rollout for a job.
type ExponentialRolloutRate struct {
	_ struct{} `type:"structure"`

	// The minimum number of things that will be notified of a pending job, per
	// minute at the start of job rollout. This parameter allows you to define the
	// initial rate of rollout.
	//
	// BaseRatePerMinute is a required field
	BaseRatePerMinute *int64 `locationName:"baseRatePerMinute" min:"1" type:"integer" required:"true"`

	// The exponential factor to increase the rate of rollout for a job.
	//
	// Amazon Web Services IoT Core supports up to one digit after the decimal (for
	// example, 1.5, but not 1.55).
	//
	// IncrementFactor is a required field
	IncrementFactor *float64 `locationName:"incrementFactor" min:"1.1" type:"double" required:"true"`

	// The criteria to initiate the increase in rate of rollout for a job.
	//
	// RateIncreaseCriteria is a required field
	RateIncreaseCriteria *RateIncreaseCriteria `locationName:"rateIncreaseCriteria" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExponentialRolloutRate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExponentialRolloutRate) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ExponentialRolloutRate) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ExponentialRolloutRate"}
	if s.BaseRatePerMinute == nil {
		invalidParams.Add(request.NewErrParamRequired("BaseRatePerMinute"))
	}
	if s.BaseRatePerMinute != nil && *s.BaseRatePerMinute < 1 {
		invalidParams.Add(request.NewErrParamMinValue("BaseRatePerMinute", 1))
	}
	if s.IncrementFactor == nil {
		invalidParams.Add(request.NewErrParamRequired("IncrementFactor"))
	}
	if s.IncrementFactor != nil && *s.IncrementFactor < 1.1 {
		invalidParams.Add(request.NewErrParamMinValue("IncrementFactor", 1.1))
	}
	if s.RateIncreaseCriteria == nil {
		invalidParams.Add(request.NewErrParamRequired("RateIncreaseCriteria"))
	}
	if s.RateIncreaseCriteria != nil {
		if err := s.RateIncreaseCriteria.Validate(); err != nil {
			invalidParams.AddNested("RateIncreaseCriteria", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBaseRatePerMinute sets the BaseRatePerMinute field's value.
func (s *ExponentialRolloutRate) SetBaseRatePerMinute(v int64) *ExponentialRolloutRate {
	s.BaseRatePerMinute = &v
	return s
}

// SetIncrementFactor sets the IncrementFactor field's value.
func (s *ExponentialRolloutRate) SetIncrementFactor(v float64) *ExponentialRolloutRate {
	s.IncrementFactor = &v
	return s
}

// SetRateIncreaseCriteria sets the RateIncreaseCriteria field's value.
func (s *ExponentialRolloutRate) SetRateIncreaseCriteria(v *RateIncreaseCriteria) *ExponentialRolloutRate {
	s.RateIncreaseCriteria = v
	return s
}

// Describes the name and data type at a field.
type Field struct {
	_ struct{} `type:"structure"`

	// The name of the field.
	Name *string `locationName:"name" type:"string"`

	// The data type of the field.
	Type *string `locationName:"type" type:"string" enum:"FieldType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Field) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Field) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *Field) SetName(v string) *Field {
	s.Name = &v
	return s
}

// SetType sets the Type field's value.
func (s *Field) SetType(v string) *Field {
	s.Type = &v
	return s
}

// The location of the OTA update.
type FileLocation struct {
	_ struct{} `type:"structure"`

	// The location of the updated firmware in S3.
	S3Location *S3Location `locationName:"s3Location" type:"structure"`

	// The stream that contains the OTA update.
	Stream *Stream `locationName:"stream" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s FileLocation) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s FileLocation) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *FileLocation) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "FileLocation"}
	if s.S3Location != nil {
		if err := s.S3Location.Validate(); err != nil {
			invalidParams.AddNested("S3Location", err.(request.ErrInvalidParams))
		}
	}
	if s.Stream != nil {
		if err := s.Stream.Validate(); err != nil {
			invalidParams.AddNested("Stream", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetS3Location sets the S3Location field's value.
func (s *FileLocation) SetS3Location(v *S3Location) *FileLocation {
	s.S3Location = v
	return s
}

// SetStream sets the Stream field's value.
func (s *FileLocation) SetStream(v *Stream) *FileLocation {
	s.Stream = v
	return s
}

// Describes an action that writes data to an Amazon Kinesis Firehose stream.
type FirehoseAction struct {
	_ struct{} `type:"structure"`

	// Whether to deliver the Kinesis Data Firehose stream as a batch by using PutRecordBatch
	// (https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecordBatch.html).
	// The default value is false.
	//
	// When batchMode is true and the rule's SQL statement evaluates to an Array,
	// each Array element forms one record in the PutRecordBatch (https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecordBatch.html)
	// request. The resulting array can't have more than 500 records.
	BatchMode *bool `locationName:"batchMode" type:"boolean"`

	// The delivery stream name.
	//
	// DeliveryStreamName is a required field
	DeliveryStreamName *string `locationName:"deliveryStreamName" type:"string" required:"true"`

	// The IAM role that grants access to the Amazon Kinesis Firehose stream.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// A character separator that will be used to separate records written to the
	// Firehose stream. Valid values are: '\n' (newline), '\t' (tab), '\r\n' (Windows
	// newline), ',' (comma).
	Separator *string `locationName:"separator" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s FirehoseAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s FirehoseAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *FirehoseAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "FirehoseAction"}
	if s.DeliveryStreamName == nil {
		invalidParams.Add(request.NewErrParamRequired("DeliveryStreamName"))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBatchMode sets the BatchMode field's value.
func (s *FirehoseAction) SetBatchMode(v bool) *FirehoseAction {
	s.BatchMode = &v
	return s
}

// SetDeliveryStreamName sets the DeliveryStreamName field's value.
func (s *FirehoseAction) SetDeliveryStreamName(v string) *FirehoseAction {
	s.DeliveryStreamName = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *FirehoseAction) SetRoleArn(v string) *FirehoseAction {
	s.RoleArn = &v
	return s
}

// SetSeparator sets the Separator field's value.
func (s *FirehoseAction) SetSeparator(v string) *FirehoseAction {
	s.Separator = &v
	return s
}

// The name and ARN of a fleet metric.
type FleetMetricNameAndArn struct {
	_ struct{} `type:"structure"`

	// The fleet metric ARN.
	MetricArn *string `locationName:"metricArn" type:"string"`

	// The fleet metric name.
	MetricName *string `locationName:"metricName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s FleetMetricNameAndArn) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s FleetMetricNameAndArn) GoString() string {
	return s.String()
}

// SetMetricArn sets the MetricArn field's value.
func (s *FleetMetricNameAndArn) SetMetricArn(v string) *FleetMetricNameAndArn {
	s.MetricArn = &v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *FleetMetricNameAndArn) SetMetricName(v string) *FleetMetricNameAndArn {
	s.MetricName = &v
	return s
}

// A geolocation target that you select to index. Each geolocation target contains
// a name and order key-value pair that specifies the geolocation target fields.
type GeoLocationTarget struct {
	_ struct{} `type:"structure"`

	// The name of the geolocation target field. If the target field is part of
	// a named shadow, you must select the named shadow using the namedShadow filter.
	Name *string `locationName:"name" type:"string"`

	// The order of the geolocation target field. This field is optional. The default
	// value is LatLon.
	Order *string `locationName:"order" type:"string" enum:"TargetFieldOrder"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GeoLocationTarget) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GeoLocationTarget) GoString() string {
	return s.String()
}

// SetName sets the Name field's value.
func (s *GeoLocationTarget) SetName(v string) *GeoLocationTarget {
	s.Name = &v
	return s
}

// SetOrder sets the Order field's value.
func (s *GeoLocationTarget) SetOrder(v string) *GeoLocationTarget {
	s.Order = &v
	return s
}

type GetBehaviorModelTrainingSummariesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time. The default is 10.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The name of the security profile.
	SecurityProfileName *string `location:"querystring" locationName:"securityProfileName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetBehaviorModelTrainingSummariesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetBehaviorModelTrainingSummariesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetBehaviorModelTrainingSummariesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetBehaviorModelTrainingSummariesInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.SecurityProfileName != nil && len(*s.SecurityProfileName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SecurityProfileName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *GetBehaviorModelTrainingSummariesInput) SetMaxResults(v int64) *GetBehaviorModelTrainingSummariesInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *GetBehaviorModelTrainingSummariesInput) SetNextToken(v string) *GetBehaviorModelTrainingSummariesInput {
	s.NextToken = &v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *GetBehaviorModelTrainingSummariesInput) SetSecurityProfileName(v string) *GetBehaviorModelTrainingSummariesInput {
	s.SecurityProfileName = &v
	return s
}

type GetBehaviorModelTrainingSummariesOutput struct {
	_ struct{} `type:"structure"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// A list of all ML Detect behaviors and their model status for a given Security
	// Profile.
	Summaries []*BehaviorModelTrainingSummary `locationName:"summaries" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetBehaviorModelTrainingSummariesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetBehaviorModelTrainingSummariesOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *GetBehaviorModelTrainingSummariesOutput) SetNextToken(v string) *GetBehaviorModelTrainingSummariesOutput {
	s.NextToken = &v
	return s
}

// SetSummaries sets the Summaries field's value.
func (s *GetBehaviorModelTrainingSummariesOutput) SetSummaries(v []*BehaviorModelTrainingSummary) *GetBehaviorModelTrainingSummariesOutput {
	s.Summaries = v
	return s
}

type GetBucketsAggregationInput struct {
	_ struct{} `type:"structure"`

	// The aggregation field.
	//
	// AggregationField is a required field
	AggregationField *string `locationName:"aggregationField" min:"1" type:"string" required:"true"`

	// The basic control of the response shape and the bucket aggregation type to
	// perform.
	//
	// BucketsAggregationType is a required field
	BucketsAggregationType *BucketsAggregationType `locationName:"bucketsAggregationType" type:"structure" required:"true"`

	// The name of the index to search.
	IndexName *string `locationName:"indexName" min:"1" type:"string"`

	// The search query string.
	//
	// QueryString is a required field
	QueryString *string `locationName:"queryString" min:"1" type:"string" required:"true"`

	// The version of the query.
	QueryVersion *string `locationName:"queryVersion" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetBucketsAggregationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetBucketsAggregationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetBucketsAggregationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetBucketsAggregationInput"}
	if s.AggregationField == nil {
		invalidParams.Add(request.NewErrParamRequired("AggregationField"))
	}
	if s.AggregationField != nil && len(*s.AggregationField) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AggregationField", 1))
	}
	if s.BucketsAggregationType == nil {
		invalidParams.Add(request.NewErrParamRequired("BucketsAggregationType"))
	}
	if s.IndexName != nil && len(*s.IndexName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("IndexName", 1))
	}
	if s.QueryString == nil {
		invalidParams.Add(request.NewErrParamRequired("QueryString"))
	}
	if s.QueryString != nil && len(*s.QueryString) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("QueryString", 1))
	}
	if s.BucketsAggregationType != nil {
		if err := s.BucketsAggregationType.Validate(); err != nil {
			invalidParams.AddNested("BucketsAggregationType", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAggregationField sets the AggregationField field's value.
func (s *GetBucketsAggregationInput) SetAggregationField(v string) *GetBucketsAggregationInput {
	s.AggregationField = &v
	return s
}

// SetBucketsAggregationType sets the BucketsAggregationType field's value.
func (s *GetBucketsAggregationInput) SetBucketsAggregationType(v *BucketsAggregationType) *GetBucketsAggregationInput {
	s.BucketsAggregationType = v
	return s
}

// SetIndexName sets the IndexName field's value.
func (s *GetBucketsAggregationInput) SetIndexName(v string) *GetBucketsAggregationInput {
	s.IndexName = &v
	return s
}

// SetQueryString sets the QueryString field's value.
func (s *GetBucketsAggregationInput) SetQueryString(v string) *GetBucketsAggregationInput {
	s.QueryString = &v
	return s
}

// SetQueryVersion sets the QueryVersion field's value.
func (s *GetBucketsAggregationInput) SetQueryVersion(v string) *GetBucketsAggregationInput {
	s.QueryVersion = &v
	return s
}

type GetBucketsAggregationOutput struct {
	_ struct{} `type:"structure"`

	// The main part of the response with a list of buckets. Each bucket contains
	// a keyValue and a count.
	//
	// keyValue: The aggregation field value counted for the particular bucket.
	//
	// count: The number of documents that have that value.
	Buckets []*Bucket `locationName:"buckets" type:"list"`

	// The total number of things that fit the query string criteria.
	TotalCount *int64 `locationName:"totalCount" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetBucketsAggregationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetBucketsAggregationOutput) GoString() string {
	return s.String()
}

// SetBuckets sets the Buckets field's value.
func (s *GetBucketsAggregationOutput) SetBuckets(v []*Bucket) *GetBucketsAggregationOutput {
	s.Buckets = v
	return s
}

// SetTotalCount sets the TotalCount field's value.
func (s *GetBucketsAggregationOutput) SetTotalCount(v int64) *GetBucketsAggregationOutput {
	s.TotalCount = &v
	return s
}

type GetCardinalityInput struct {
	_ struct{} `type:"structure"`

	// The field to aggregate.
	AggregationField *string `locationName:"aggregationField" min:"1" type:"string"`

	// The name of the index to search.
	IndexName *string `locationName:"indexName" min:"1" type:"string"`

	// The search query string.
	//
	// QueryString is a required field
	QueryString *string `locationName:"queryString" min:"1" type:"string" required:"true"`

	// The query version.
	QueryVersion *string `locationName:"queryVersion" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetCardinalityInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetCardinalityInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetCardinalityInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetCardinalityInput"}
	if s.AggregationField != nil && len(*s.AggregationField) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AggregationField", 1))
	}
	if s.IndexName != nil && len(*s.IndexName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("IndexName", 1))
	}
	if s.QueryString == nil {
		invalidParams.Add(request.NewErrParamRequired("QueryString"))
	}
	if s.QueryString != nil && len(*s.QueryString) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("QueryString", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAggregationField sets the AggregationField field's value.
func (s *GetCardinalityInput) SetAggregationField(v string) *GetCardinalityInput {
	s.AggregationField = &v
	return s
}

// SetIndexName sets the IndexName field's value.
func (s *GetCardinalityInput) SetIndexName(v string) *GetCardinalityInput {
	s.IndexName = &v
	return s
}

// SetQueryString sets the QueryString field's value.
func (s *GetCardinalityInput) SetQueryString(v string) *GetCardinalityInput {
	s.QueryString = &v
	return s
}

// SetQueryVersion sets the QueryVersion field's value.
func (s *GetCardinalityInput) SetQueryVersion(v string) *GetCardinalityInput {
	s.QueryVersion = &v
	return s
}

type GetCardinalityOutput struct {
	_ struct{} `type:"structure"`

	// The approximate count of unique values that match the query.
	Cardinality *int64 `locationName:"cardinality" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetCardinalityOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetCardinalityOutput) GoString() string {
	return s.String()
}

// SetCardinality sets the Cardinality field's value.
func (s *GetCardinalityOutput) SetCardinality(v int64) *GetCardinalityOutput {
	s.Cardinality = &v
	return s
}

type GetEffectivePoliciesInput struct {
	_ struct{} `type:"structure"`

	// The Cognito identity pool ID.
	CognitoIdentityPoolId *string `locationName:"cognitoIdentityPoolId" type:"string"`

	// The principal. Valid principals are CertificateArn (arn:aws:iot:region:accountId:cert/certificateId),
	// thingGroupArn (arn:aws:iot:region:accountId:thinggroup/groupName) and CognitoId
	// (region:id).
	Principal *string `locationName:"principal" type:"string"`

	// The thing name.
	ThingName *string `location:"querystring" locationName:"thingName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEffectivePoliciesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEffectivePoliciesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetEffectivePoliciesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetEffectivePoliciesInput"}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCognitoIdentityPoolId sets the CognitoIdentityPoolId field's value.
func (s *GetEffectivePoliciesInput) SetCognitoIdentityPoolId(v string) *GetEffectivePoliciesInput {
	s.CognitoIdentityPoolId = &v
	return s
}

// SetPrincipal sets the Principal field's value.
func (s *GetEffectivePoliciesInput) SetPrincipal(v string) *GetEffectivePoliciesInput {
	s.Principal = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *GetEffectivePoliciesInput) SetThingName(v string) *GetEffectivePoliciesInput {
	s.ThingName = &v
	return s
}

type GetEffectivePoliciesOutput struct {
	_ struct{} `type:"structure"`

	// The effective policies.
	EffectivePolicies []*EffectivePolicy `locationName:"effectivePolicies" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEffectivePoliciesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEffectivePoliciesOutput) GoString() string {
	return s.String()
}

// SetEffectivePolicies sets the EffectivePolicies field's value.
func (s *GetEffectivePoliciesOutput) SetEffectivePolicies(v []*EffectivePolicy) *GetEffectivePoliciesOutput {
	s.EffectivePolicies = v
	return s
}

type GetIndexingConfigurationInput struct {
	_ struct{} `type:"structure" nopayload:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetIndexingConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetIndexingConfigurationInput) GoString() string {
	return s.String()
}

type GetIndexingConfigurationOutput struct {
	_ struct{} `type:"structure"`

	// The index configuration.
	ThingGroupIndexingConfiguration *ThingGroupIndexingConfiguration `locationName:"thingGroupIndexingConfiguration" type:"structure"`

	// Thing indexing configuration.
	ThingIndexingConfiguration *ThingIndexingConfiguration `locationName:"thingIndexingConfiguration" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetIndexingConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetIndexingConfigurationOutput) GoString() string {
	return s.String()
}

// SetThingGroupIndexingConfiguration sets the ThingGroupIndexingConfiguration field's value.
func (s *GetIndexingConfigurationOutput) SetThingGroupIndexingConfiguration(v *ThingGroupIndexingConfiguration) *GetIndexingConfigurationOutput {
	s.ThingGroupIndexingConfiguration = v
	return s
}

// SetThingIndexingConfiguration sets the ThingIndexingConfiguration field's value.
func (s *GetIndexingConfigurationOutput) SetThingIndexingConfiguration(v *ThingIndexingConfiguration) *GetIndexingConfigurationOutput {
	s.ThingIndexingConfiguration = v
	return s
}

type GetJobDocumentInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique identifier you assigned to this job when it was created.
	//
	// JobId is a required field
	JobId *string `location:"uri" locationName:"jobId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetJobDocumentInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetJobDocumentInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetJobDocumentInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetJobDocumentInput"}
	if s.JobId == nil {
		invalidParams.Add(request.NewErrParamRequired("JobId"))
	}
	if s.JobId != nil && len(*s.JobId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("JobId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetJobId sets the JobId field's value.
func (s *GetJobDocumentInput) SetJobId(v string) *GetJobDocumentInput {
	s.JobId = &v
	return s
}

type GetJobDocumentOutput struct {
	_ struct{} `type:"structure"`

	// The job document content.
	Document *string `locationName:"document" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetJobDocumentOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetJobDocumentOutput) GoString() string {
	return s.String()
}

// SetDocument sets the Document field's value.
func (s *GetJobDocumentOutput) SetDocument(v string) *GetJobDocumentOutput {
	s.Document = &v
	return s
}

// The input for the GetLoggingOptions operation.
type GetLoggingOptionsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetLoggingOptionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetLoggingOptionsInput) GoString() string {
	return s.String()
}

// The output from the GetLoggingOptions operation.
type GetLoggingOptionsOutput struct {
	_ struct{} `type:"structure"`

	// The logging level.
	LogLevel *string `locationName:"logLevel" type:"string" enum:"LogLevel"`

	// The ARN of the IAM role that grants access.
	RoleArn *string `locationName:"roleArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetLoggingOptionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetLoggingOptionsOutput) GoString() string {
	return s.String()
}

// SetLogLevel sets the LogLevel field's value.
func (s *GetLoggingOptionsOutput) SetLogLevel(v string) *GetLoggingOptionsOutput {
	s.LogLevel = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *GetLoggingOptionsOutput) SetRoleArn(v string) *GetLoggingOptionsOutput {
	s.RoleArn = &v
	return s
}

type GetOTAUpdateInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The OTA update ID.
	//
	// OtaUpdateId is a required field
	OtaUpdateId *string `location:"uri" locationName:"otaUpdateId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetOTAUpdateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetOTAUpdateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetOTAUpdateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetOTAUpdateInput"}
	if s.OtaUpdateId == nil {
		invalidParams.Add(request.NewErrParamRequired("OtaUpdateId"))
	}
	if s.OtaUpdateId != nil && len(*s.OtaUpdateId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("OtaUpdateId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetOtaUpdateId sets the OtaUpdateId field's value.
func (s *GetOTAUpdateInput) SetOtaUpdateId(v string) *GetOTAUpdateInput {
	s.OtaUpdateId = &v
	return s
}

type GetOTAUpdateOutput struct {
	_ struct{} `type:"structure"`

	// The OTA update info.
	OtaUpdateInfo *OTAUpdateInfo `locationName:"otaUpdateInfo" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetOTAUpdateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetOTAUpdateOutput) GoString() string {
	return s.String()
}

// SetOtaUpdateInfo sets the OtaUpdateInfo field's value.
func (s *GetOTAUpdateOutput) SetOtaUpdateInfo(v *OTAUpdateInfo) *GetOTAUpdateOutput {
	s.OtaUpdateInfo = v
	return s
}

type GetPackageConfigurationInput struct {
	_ struct{} `type:"structure" nopayload:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPackageConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPackageConfigurationInput) GoString() string {
	return s.String()
}

type GetPackageConfigurationOutput struct {
	_ struct{} `type:"structure"`

	// The version that is associated to a specific job.
	VersionUpdateByJobsConfig *VersionUpdateByJobsConfig `locationName:"versionUpdateByJobsConfig" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPackageConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPackageConfigurationOutput) GoString() string {
	return s.String()
}

// SetVersionUpdateByJobsConfig sets the VersionUpdateByJobsConfig field's value.
func (s *GetPackageConfigurationOutput) SetVersionUpdateByJobsConfig(v *VersionUpdateByJobsConfig) *GetPackageConfigurationOutput {
	s.VersionUpdateByJobsConfig = v
	return s
}

type GetPackageInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the target software package.
	//
	// PackageName is a required field
	PackageName *string `location:"uri" locationName:"packageName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPackageInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPackageInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetPackageInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetPackageInput"}
	if s.PackageName == nil {
		invalidParams.Add(request.NewErrParamRequired("PackageName"))
	}
	if s.PackageName != nil && len(*s.PackageName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PackageName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPackageName sets the PackageName field's value.
func (s *GetPackageInput) SetPackageName(v string) *GetPackageInput {
	s.PackageName = &v
	return s
}

type GetPackageOutput struct {
	_ struct{} `type:"structure"`

	// The date the package was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The name of the default package version.
	DefaultVersionName *string `locationName:"defaultVersionName" min:"1" type:"string"`

	// The package description.
	//
	// Description is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by GetPackageOutput's
	// String and GoString methods.
	Description *string `locationName:"description" type:"string" sensitive:"true"`

	// The date when the package was last updated.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The ARN for the package.
	PackageArn *string `locationName:"packageArn" type:"string"`

	// The name of the software package.
	PackageName *string `locationName:"packageName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPackageOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPackageOutput) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *GetPackageOutput) SetCreationDate(v time.Time) *GetPackageOutput {
	s.CreationDate = &v
	return s
}

// SetDefaultVersionName sets the DefaultVersionName field's value.
func (s *GetPackageOutput) SetDefaultVersionName(v string) *GetPackageOutput {
	s.DefaultVersionName = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *GetPackageOutput) SetDescription(v string) *GetPackageOutput {
	s.Description = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *GetPackageOutput) SetLastModifiedDate(v time.Time) *GetPackageOutput {
	s.LastModifiedDate = &v
	return s
}

// SetPackageArn sets the PackageArn field's value.
func (s *GetPackageOutput) SetPackageArn(v string) *GetPackageOutput {
	s.PackageArn = &v
	return s
}

// SetPackageName sets the PackageName field's value.
func (s *GetPackageOutput) SetPackageName(v string) *GetPackageOutput {
	s.PackageName = &v
	return s
}

type GetPackageVersionInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the associated package.
	//
	// PackageName is a required field
	PackageName *string `location:"uri" locationName:"packageName" min:"1" type:"string" required:"true"`

	// The name of the target package version.
	//
	// VersionName is a required field
	VersionName *string `location:"uri" locationName:"versionName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPackageVersionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPackageVersionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetPackageVersionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetPackageVersionInput"}
	if s.PackageName == nil {
		invalidParams.Add(request.NewErrParamRequired("PackageName"))
	}
	if s.PackageName != nil && len(*s.PackageName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PackageName", 1))
	}
	if s.VersionName == nil {
		invalidParams.Add(request.NewErrParamRequired("VersionName"))
	}
	if s.VersionName != nil && len(*s.VersionName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("VersionName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPackageName sets the PackageName field's value.
func (s *GetPackageVersionInput) SetPackageName(v string) *GetPackageVersionInput {
	s.PackageName = &v
	return s
}

// SetVersionName sets the VersionName field's value.
func (s *GetPackageVersionInput) SetVersionName(v string) *GetPackageVersionInput {
	s.VersionName = &v
	return s
}

type GetPackageVersionOutput struct {
	_ struct{} `type:"structure"`

	// Metadata that were added to the package version that can be used to define
	// a package version’s configuration.
	//
	// Attributes is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by GetPackageVersionOutput's
	// String and GoString methods.
	Attributes map[string]*string `locationName:"attributes" type:"map" sensitive:"true"`

	// The date when the package version was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The package version description.
	//
	// Description is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by GetPackageVersionOutput's
	// String and GoString methods.
	Description *string `locationName:"description" type:"string" sensitive:"true"`

	// Error reason for a package version failure during creation or update.
	ErrorReason *string `locationName:"errorReason" type:"string"`

	// The date when the package version was last updated.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The name of the software package.
	PackageName *string `locationName:"packageName" min:"1" type:"string"`

	// The ARN for the package version.
	PackageVersionArn *string `locationName:"packageVersionArn" min:"1" type:"string"`

	// The status associated to the package version. For more information, see Package
	// version lifecycle (https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#package-version-lifecycle).
	Status *string `locationName:"status" type:"string" enum:"PackageVersionStatus"`

	// The name of the package version.
	VersionName *string `locationName:"versionName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPackageVersionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPackageVersionOutput) GoString() string {
	return s.String()
}

// SetAttributes sets the Attributes field's value.
func (s *GetPackageVersionOutput) SetAttributes(v map[string]*string) *GetPackageVersionOutput {
	s.Attributes = v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *GetPackageVersionOutput) SetCreationDate(v time.Time) *GetPackageVersionOutput {
	s.CreationDate = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *GetPackageVersionOutput) SetDescription(v string) *GetPackageVersionOutput {
	s.Description = &v
	return s
}

// SetErrorReason sets the ErrorReason field's value.
func (s *GetPackageVersionOutput) SetErrorReason(v string) *GetPackageVersionOutput {
	s.ErrorReason = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *GetPackageVersionOutput) SetLastModifiedDate(v time.Time) *GetPackageVersionOutput {
	s.LastModifiedDate = &v
	return s
}

// SetPackageName sets the PackageName field's value.
func (s *GetPackageVersionOutput) SetPackageName(v string) *GetPackageVersionOutput {
	s.PackageName = &v
	return s
}

// SetPackageVersionArn sets the PackageVersionArn field's value.
func (s *GetPackageVersionOutput) SetPackageVersionArn(v string) *GetPackageVersionOutput {
	s.PackageVersionArn = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *GetPackageVersionOutput) SetStatus(v string) *GetPackageVersionOutput {
	s.Status = &v
	return s
}

// SetVersionName sets the VersionName field's value.
func (s *GetPackageVersionOutput) SetVersionName(v string) *GetPackageVersionOutput {
	s.VersionName = &v
	return s
}

type GetPercentilesInput struct {
	_ struct{} `type:"structure"`

	// The field to aggregate.
	AggregationField *string `locationName:"aggregationField" min:"1" type:"string"`

	// The name of the index to search.
	IndexName *string `locationName:"indexName" min:"1" type:"string"`

	// The percentile groups returned.
	Percents []*float64 `locationName:"percents" type:"list"`

	// The search query string.
	//
	// QueryString is a required field
	QueryString *string `locationName:"queryString" min:"1" type:"string" required:"true"`

	// The query version.
	QueryVersion *string `locationName:"queryVersion" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPercentilesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPercentilesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetPercentilesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetPercentilesInput"}
	if s.AggregationField != nil && len(*s.AggregationField) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AggregationField", 1))
	}
	if s.IndexName != nil && len(*s.IndexName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("IndexName", 1))
	}
	if s.QueryString == nil {
		invalidParams.Add(request.NewErrParamRequired("QueryString"))
	}
	if s.QueryString != nil && len(*s.QueryString) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("QueryString", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAggregationField sets the AggregationField field's value.
func (s *GetPercentilesInput) SetAggregationField(v string) *GetPercentilesInput {
	s.AggregationField = &v
	return s
}

// SetIndexName sets the IndexName field's value.
func (s *GetPercentilesInput) SetIndexName(v string) *GetPercentilesInput {
	s.IndexName = &v
	return s
}

// SetPercents sets the Percents field's value.
func (s *GetPercentilesInput) SetPercents(v []*float64) *GetPercentilesInput {
	s.Percents = v
	return s
}

// SetQueryString sets the QueryString field's value.
func (s *GetPercentilesInput) SetQueryString(v string) *GetPercentilesInput {
	s.QueryString = &v
	return s
}

// SetQueryVersion sets the QueryVersion field's value.
func (s *GetPercentilesInput) SetQueryVersion(v string) *GetPercentilesInput {
	s.QueryVersion = &v
	return s
}

type GetPercentilesOutput struct {
	_ struct{} `type:"structure"`

	// The percentile values of the aggregated fields.
	Percentiles []*PercentPair `locationName:"percentiles" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPercentilesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPercentilesOutput) GoString() string {
	return s.String()
}

// SetPercentiles sets the Percentiles field's value.
func (s *GetPercentilesOutput) SetPercentiles(v []*PercentPair) *GetPercentilesOutput {
	s.Percentiles = v
	return s
}

// The input for the GetPolicy operation.
type GetPolicyInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the policy.
	//
	// PolicyName is a required field
	PolicyName *string `location:"uri" locationName:"policyName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPolicyInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPolicyInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetPolicyInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetPolicyInput"}
	if s.PolicyName == nil {
		invalidParams.Add(request.NewErrParamRequired("PolicyName"))
	}
	if s.PolicyName != nil && len(*s.PolicyName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPolicyName sets the PolicyName field's value.
func (s *GetPolicyInput) SetPolicyName(v string) *GetPolicyInput {
	s.PolicyName = &v
	return s
}

// The output from the GetPolicy operation.
type GetPolicyOutput struct {
	_ struct{} `type:"structure"`

	// The date the policy was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The default policy version ID.
	DefaultVersionId *string `locationName:"defaultVersionId" type:"string"`

	// The generation ID of the policy.
	GenerationId *string `locationName:"generationId" type:"string"`

	// The date the policy was last modified.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The policy ARN.
	PolicyArn *string `locationName:"policyArn" type:"string"`

	// The JSON document that describes the policy.
	PolicyDocument *string `locationName:"policyDocument" type:"string"`

	// The policy name.
	PolicyName *string `locationName:"policyName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPolicyOutput) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *GetPolicyOutput) SetCreationDate(v time.Time) *GetPolicyOutput {
	s.CreationDate = &v
	return s
}

// SetDefaultVersionId sets the DefaultVersionId field's value.
func (s *GetPolicyOutput) SetDefaultVersionId(v string) *GetPolicyOutput {
	s.DefaultVersionId = &v
	return s
}

// SetGenerationId sets the GenerationId field's value.
func (s *GetPolicyOutput) SetGenerationId(v string) *GetPolicyOutput {
	s.GenerationId = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *GetPolicyOutput) SetLastModifiedDate(v time.Time) *GetPolicyOutput {
	s.LastModifiedDate = &v
	return s
}

// SetPolicyArn sets the PolicyArn field's value.
func (s *GetPolicyOutput) SetPolicyArn(v string) *GetPolicyOutput {
	s.PolicyArn = &v
	return s
}

// SetPolicyDocument sets the PolicyDocument field's value.
func (s *GetPolicyOutput) SetPolicyDocument(v string) *GetPolicyOutput {
	s.PolicyDocument = &v
	return s
}

// SetPolicyName sets the PolicyName field's value.
func (s *GetPolicyOutput) SetPolicyName(v string) *GetPolicyOutput {
	s.PolicyName = &v
	return s
}

// The input for the GetPolicyVersion operation.
type GetPolicyVersionInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the policy.
	//
	// PolicyName is a required field
	PolicyName *string `location:"uri" locationName:"policyName" min:"1" type:"string" required:"true"`

	// The policy version ID.
	//
	// PolicyVersionId is a required field
	PolicyVersionId *string `location:"uri" locationName:"policyVersionId" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPolicyVersionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPolicyVersionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetPolicyVersionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetPolicyVersionInput"}
	if s.PolicyName == nil {
		invalidParams.Add(request.NewErrParamRequired("PolicyName"))
	}
	if s.PolicyName != nil && len(*s.PolicyName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyName", 1))
	}
	if s.PolicyVersionId == nil {
		invalidParams.Add(request.NewErrParamRequired("PolicyVersionId"))
	}
	if s.PolicyVersionId != nil && len(*s.PolicyVersionId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyVersionId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPolicyName sets the PolicyName field's value.
func (s *GetPolicyVersionInput) SetPolicyName(v string) *GetPolicyVersionInput {
	s.PolicyName = &v
	return s
}

// SetPolicyVersionId sets the PolicyVersionId field's value.
func (s *GetPolicyVersionInput) SetPolicyVersionId(v string) *GetPolicyVersionInput {
	s.PolicyVersionId = &v
	return s
}

// The output from the GetPolicyVersion operation.
type GetPolicyVersionOutput struct {
	_ struct{} `type:"structure"`

	// The date the policy was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The generation ID of the policy version.
	GenerationId *string `locationName:"generationId" type:"string"`

	// Specifies whether the policy version is the default.
	IsDefaultVersion *bool `locationName:"isDefaultVersion" type:"boolean"`

	// The date the policy was last modified.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The policy ARN.
	PolicyArn *string `locationName:"policyArn" type:"string"`

	// The JSON document that describes the policy.
	PolicyDocument *string `locationName:"policyDocument" type:"string"`

	// The policy name.
	PolicyName *string `locationName:"policyName" min:"1" type:"string"`

	// The policy version ID.
	PolicyVersionId *string `locationName:"policyVersionId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPolicyVersionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetPolicyVersionOutput) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *GetPolicyVersionOutput) SetCreationDate(v time.Time) *GetPolicyVersionOutput {
	s.CreationDate = &v
	return s
}

// SetGenerationId sets the GenerationId field's value.
func (s *GetPolicyVersionOutput) SetGenerationId(v string) *GetPolicyVersionOutput {
	s.GenerationId = &v
	return s
}

// SetIsDefaultVersion sets the IsDefaultVersion field's value.
func (s *GetPolicyVersionOutput) SetIsDefaultVersion(v bool) *GetPolicyVersionOutput {
	s.IsDefaultVersion = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *GetPolicyVersionOutput) SetLastModifiedDate(v time.Time) *GetPolicyVersionOutput {
	s.LastModifiedDate = &v
	return s
}

// SetPolicyArn sets the PolicyArn field's value.
func (s *GetPolicyVersionOutput) SetPolicyArn(v string) *GetPolicyVersionOutput {
	s.PolicyArn = &v
	return s
}

// SetPolicyDocument sets the PolicyDocument field's value.
func (s *GetPolicyVersionOutput) SetPolicyDocument(v string) *GetPolicyVersionOutput {
	s.PolicyDocument = &v
	return s
}

// SetPolicyName sets the PolicyName field's value.
func (s *GetPolicyVersionOutput) SetPolicyName(v string) *GetPolicyVersionOutput {
	s.PolicyName = &v
	return s
}

// SetPolicyVersionId sets the PolicyVersionId field's value.
func (s *GetPolicyVersionOutput) SetPolicyVersionId(v string) *GetPolicyVersionOutput {
	s.PolicyVersionId = &v
	return s
}

// The input to the GetRegistrationCode operation.
type GetRegistrationCodeInput struct {
	_ struct{} `type:"structure" nopayload:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRegistrationCodeInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRegistrationCodeInput) GoString() string {
	return s.String()
}

// The output from the GetRegistrationCode operation.
type GetRegistrationCodeOutput struct {
	_ struct{} `type:"structure"`

	// The CA certificate registration code.
	RegistrationCode *string `locationName:"registrationCode" min:"64" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRegistrationCodeOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRegistrationCodeOutput) GoString() string {
	return s.String()
}

// SetRegistrationCode sets the RegistrationCode field's value.
func (s *GetRegistrationCodeOutput) SetRegistrationCode(v string) *GetRegistrationCodeOutput {
	s.RegistrationCode = &v
	return s
}

type GetStatisticsInput struct {
	_ struct{} `type:"structure"`

	// The aggregation field name.
	AggregationField *string `locationName:"aggregationField" min:"1" type:"string"`

	// The name of the index to search. The default value is AWS_Things.
	IndexName *string `locationName:"indexName" min:"1" type:"string"`

	// The query used to search. You can specify "*" for the query string to get
	// the count of all indexed things in your Amazon Web Services account.
	//
	// QueryString is a required field
	QueryString *string `locationName:"queryString" min:"1" type:"string" required:"true"`

	// The version of the query used to search.
	QueryVersion *string `locationName:"queryVersion" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetStatisticsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetStatisticsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetStatisticsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetStatisticsInput"}
	if s.AggregationField != nil && len(*s.AggregationField) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AggregationField", 1))
	}
	if s.IndexName != nil && len(*s.IndexName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("IndexName", 1))
	}
	if s.QueryString == nil {
		invalidParams.Add(request.NewErrParamRequired("QueryString"))
	}
	if s.QueryString != nil && len(*s.QueryString) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("QueryString", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAggregationField sets the AggregationField field's value.
func (s *GetStatisticsInput) SetAggregationField(v string) *GetStatisticsInput {
	s.AggregationField = &v
	return s
}

// SetIndexName sets the IndexName field's value.
func (s *GetStatisticsInput) SetIndexName(v string) *GetStatisticsInput {
	s.IndexName = &v
	return s
}

// SetQueryString sets the QueryString field's value.
func (s *GetStatisticsInput) SetQueryString(v string) *GetStatisticsInput {
	s.QueryString = &v
	return s
}

// SetQueryVersion sets the QueryVersion field's value.
func (s *GetStatisticsInput) SetQueryVersion(v string) *GetStatisticsInput {
	s.QueryVersion = &v
	return s
}

type GetStatisticsOutput struct {
	_ struct{} `type:"structure"`

	// The statistics returned by the Fleet Indexing service based on the query
	// and aggregation field.
	Statistics *Statistics `locationName:"statistics" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetStatisticsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetStatisticsOutput) GoString() string {
	return s.String()
}

// SetStatistics sets the Statistics field's value.
func (s *GetStatisticsOutput) SetStatistics(v *Statistics) *GetStatisticsOutput {
	s.Statistics = v
	return s
}

type GetTopicRuleDestinationInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The ARN of the topic rule destination.
	//
	// Arn is a required field
	Arn *string `location:"uri" locationName:"arn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetTopicRuleDestinationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetTopicRuleDestinationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetTopicRuleDestinationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetTopicRuleDestinationInput"}
	if s.Arn == nil {
		invalidParams.Add(request.NewErrParamRequired("Arn"))
	}
	if s.Arn != nil && len(*s.Arn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Arn", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetArn sets the Arn field's value.
func (s *GetTopicRuleDestinationInput) SetArn(v string) *GetTopicRuleDestinationInput {
	s.Arn = &v
	return s
}

type GetTopicRuleDestinationOutput struct {
	_ struct{} `type:"structure"`

	// The topic rule destination.
	TopicRuleDestination *TopicRuleDestination `locationName:"topicRuleDestination" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetTopicRuleDestinationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetTopicRuleDestinationOutput) GoString() string {
	return s.String()
}

// SetTopicRuleDestination sets the TopicRuleDestination field's value.
func (s *GetTopicRuleDestinationOutput) SetTopicRuleDestination(v *TopicRuleDestination) *GetTopicRuleDestinationOutput {
	s.TopicRuleDestination = v
	return s
}

// The input for the GetTopicRule operation.
type GetTopicRuleInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the rule.
	//
	// RuleName is a required field
	RuleName *string `location:"uri" locationName:"ruleName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetTopicRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetTopicRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetTopicRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetTopicRuleInput"}
	if s.RuleName == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleName"))
	}
	if s.RuleName != nil && len(*s.RuleName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRuleName sets the RuleName field's value.
func (s *GetTopicRuleInput) SetRuleName(v string) *GetTopicRuleInput {
	s.RuleName = &v
	return s
}

// The output from the GetTopicRule operation.
type GetTopicRuleOutput struct {
	_ struct{} `type:"structure"`

	// The rule.
	Rule *TopicRule `locationName:"rule" type:"structure"`

	// The rule ARN.
	RuleArn *string `locationName:"ruleArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetTopicRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetTopicRuleOutput) GoString() string {
	return s.String()
}

// SetRule sets the Rule field's value.
func (s *GetTopicRuleOutput) SetRule(v *TopicRule) *GetTopicRuleOutput {
	s.Rule = v
	return s
}

// SetRuleArn sets the RuleArn field's value.
func (s *GetTopicRuleOutput) SetRuleArn(v string) *GetTopicRuleOutput {
	s.RuleArn = &v
	return s
}

type GetV2LoggingOptionsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetV2LoggingOptionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetV2LoggingOptionsInput) GoString() string {
	return s.String()
}

type GetV2LoggingOptionsOutput struct {
	_ struct{} `type:"structure"`

	// The default log level.
	DefaultLogLevel *string `locationName:"defaultLogLevel" type:"string" enum:"LogLevel"`

	// Disables all logs.
	DisableAllLogs *bool `locationName:"disableAllLogs" type:"boolean"`

	// The IAM role ARN IoT uses to write to your CloudWatch logs.
	RoleArn *string `locationName:"roleArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetV2LoggingOptionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetV2LoggingOptionsOutput) GoString() string {
	return s.String()
}

// SetDefaultLogLevel sets the DefaultLogLevel field's value.
func (s *GetV2LoggingOptionsOutput) SetDefaultLogLevel(v string) *GetV2LoggingOptionsOutput {
	s.DefaultLogLevel = &v
	return s
}

// SetDisableAllLogs sets the DisableAllLogs field's value.
func (s *GetV2LoggingOptionsOutput) SetDisableAllLogs(v bool) *GetV2LoggingOptionsOutput {
	s.DisableAllLogs = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *GetV2LoggingOptionsOutput) SetRoleArn(v string) *GetV2LoggingOptionsOutput {
	s.RoleArn = &v
	return s
}

// The name and ARN of a group.
type GroupNameAndArn struct {
	_ struct{} `type:"structure"`

	// The group ARN.
	GroupArn *string `locationName:"groupArn" type:"string"`

	// The group name.
	GroupName *string `locationName:"groupName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GroupNameAndArn) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GroupNameAndArn) GoString() string {
	return s.String()
}

// SetGroupArn sets the GroupArn field's value.
func (s *GroupNameAndArn) SetGroupArn(v string) *GroupNameAndArn {
	s.GroupArn = &v
	return s
}

// SetGroupName sets the GroupName field's value.
func (s *GroupNameAndArn) SetGroupName(v string) *GroupNameAndArn {
	s.GroupName = &v
	return s
}

// Send data to an HTTPS endpoint.
type HttpAction struct {
	_ struct{} `type:"structure"`

	// The authentication method to use when sending data to an HTTPS endpoint.
	Auth *HttpAuthorization `locationName:"auth" type:"structure"`

	// The URL to which IoT sends a confirmation message. The value of the confirmation
	// URL must be a prefix of the endpoint URL. If you do not specify a confirmation
	// URL IoT uses the endpoint URL as the confirmation URL. If you use substitution
	// templates in the confirmationUrl, you must create and enable topic rule destinations
	// that match each possible value of the substitution template before traffic
	// is allowed to your endpoint URL.
	ConfirmationUrl *string `locationName:"confirmationUrl" type:"string"`

	// The HTTP headers to send with the message data.
	Headers []*HttpActionHeader `locationName:"headers" type:"list"`

	// The endpoint URL. If substitution templates are used in the URL, you must
	// also specify a confirmationUrl. If this is a new destination, a new TopicRuleDestination
	// is created if possible.
	//
	// Url is a required field
	Url *string `locationName:"url" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *HttpAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "HttpAction"}
	if s.Url == nil {
		invalidParams.Add(request.NewErrParamRequired("Url"))
	}
	if s.Auth != nil {
		if err := s.Auth.Validate(); err != nil {
			invalidParams.AddNested("Auth", err.(request.ErrInvalidParams))
		}
	}
	if s.Headers != nil {
		for i, v := range s.Headers {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Headers", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuth sets the Auth field's value.
func (s *HttpAction) SetAuth(v *HttpAuthorization) *HttpAction {
	s.Auth = v
	return s
}

// SetConfirmationUrl sets the ConfirmationUrl field's value.
func (s *HttpAction) SetConfirmationUrl(v string) *HttpAction {
	s.ConfirmationUrl = &v
	return s
}

// SetHeaders sets the Headers field's value.
func (s *HttpAction) SetHeaders(v []*HttpActionHeader) *HttpAction {
	s.Headers = v
	return s
}

// SetUrl sets the Url field's value.
func (s *HttpAction) SetUrl(v string) *HttpAction {
	s.Url = &v
	return s
}

// The HTTP action header.
type HttpActionHeader struct {
	_ struct{} `type:"structure"`

	// The HTTP header key.
	//
	// Key is a required field
	Key *string `locationName:"key" min:"1" type:"string" required:"true"`

	// The HTTP header value. Substitution templates are supported.
	//
	// Value is a required field
	Value *string `locationName:"value" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpActionHeader) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpActionHeader) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *HttpActionHeader) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "HttpActionHeader"}
	if s.Key == nil {
		invalidParams.Add(request.NewErrParamRequired("Key"))
	}
	if s.Key != nil && len(*s.Key) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Key", 1))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetKey sets the Key field's value.
func (s *HttpActionHeader) SetKey(v string) *HttpActionHeader {
	s.Key = &v
	return s
}

// SetValue sets the Value field's value.
func (s *HttpActionHeader) SetValue(v string) *HttpActionHeader {
	s.Value = &v
	return s
}

// The authorization method used to send messages.
type HttpAuthorization struct {
	_ struct{} `type:"structure"`

	// Use Sig V4 authorization. For more information, see Signature Version 4 Signing
	// Process (https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html).
	Sigv4 *SigV4Authorization `locationName:"sigv4" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpAuthorization) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpAuthorization) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *HttpAuthorization) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "HttpAuthorization"}
	if s.Sigv4 != nil {
		if err := s.Sigv4.Validate(); err != nil {
			invalidParams.AddNested("Sigv4", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetSigv4 sets the Sigv4 field's value.
func (s *HttpAuthorization) SetSigv4(v *SigV4Authorization) *HttpAuthorization {
	s.Sigv4 = v
	return s
}

// Specifies the HTTP context to use for the test authorizer request.
type HttpContext struct {
	_ struct{} `type:"structure"`

	// The header keys and values in an HTTP authorization request.
	Headers map[string]*string `locationName:"headers" type:"map"`

	// The query string keys and values in an HTTP authorization request.
	QueryString *string `locationName:"queryString" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpContext) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpContext) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *HttpContext) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "HttpContext"}
	if s.QueryString != nil && len(*s.QueryString) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("QueryString", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetHeaders sets the Headers field's value.
func (s *HttpContext) SetHeaders(v map[string]*string) *HttpContext {
	s.Headers = v
	return s
}

// SetQueryString sets the QueryString field's value.
func (s *HttpContext) SetQueryString(v string) *HttpContext {
	s.QueryString = &v
	return s
}

// HTTP URL destination configuration used by the topic rule's HTTP action.
type HttpUrlDestinationConfiguration struct {
	_ struct{} `type:"structure"`

	// The URL IoT uses to confirm ownership of or access to the topic rule destination
	// URL.
	//
	// ConfirmationUrl is a required field
	ConfirmationUrl *string `locationName:"confirmationUrl" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpUrlDestinationConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpUrlDestinationConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *HttpUrlDestinationConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "HttpUrlDestinationConfiguration"}
	if s.ConfirmationUrl == nil {
		invalidParams.Add(request.NewErrParamRequired("ConfirmationUrl"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetConfirmationUrl sets the ConfirmationUrl field's value.
func (s *HttpUrlDestinationConfiguration) SetConfirmationUrl(v string) *HttpUrlDestinationConfiguration {
	s.ConfirmationUrl = &v
	return s
}

// HTTP URL destination properties.
type HttpUrlDestinationProperties struct {
	_ struct{} `type:"structure"`

	// The URL used to confirm the HTTP topic rule destination URL.
	ConfirmationUrl *string `locationName:"confirmationUrl" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpUrlDestinationProperties) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpUrlDestinationProperties) GoString() string {
	return s.String()
}

// SetConfirmationUrl sets the ConfirmationUrl field's value.
func (s *HttpUrlDestinationProperties) SetConfirmationUrl(v string) *HttpUrlDestinationProperties {
	s.ConfirmationUrl = &v
	return s
}

// Information about an HTTP URL destination.
type HttpUrlDestinationSummary struct {
	_ struct{} `type:"structure"`

	// The URL used to confirm ownership of or access to the HTTP topic rule destination
	// URL.
	ConfirmationUrl *string `locationName:"confirmationUrl" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpUrlDestinationSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s HttpUrlDestinationSummary) GoString() string {
	return s.String()
}

// SetConfirmationUrl sets the ConfirmationUrl field's value.
func (s *HttpUrlDestinationSummary) SetConfirmationUrl(v string) *HttpUrlDestinationSummary {
	s.ConfirmationUrl = &v
	return s
}

// Information that implicitly denies authorization. When policy doesn't explicitly
// deny or allow an action on a resource it is considered an implicit deny.
type ImplicitDeny struct {
	_ struct{} `type:"structure"`

	// Policies that don't contain a matching allow or deny statement for the specified
	// action on the specified resource.
	Policies []*Policy `locationName:"policies" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ImplicitDeny) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ImplicitDeny) GoString() string {
	return s.String()
}

// SetPolicies sets the Policies field's value.
func (s *ImplicitDeny) SetPolicies(v []*Policy) *ImplicitDeny {
	s.Policies = v
	return s
}

// The index is not ready.
type IndexNotReadyException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s IndexNotReadyException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s IndexNotReadyException) GoString() string {
	return s.String()
}

func newErrorIndexNotReadyException(v protocol.ResponseMetadata) error {
	return &IndexNotReadyException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *IndexNotReadyException) Code() string {
	return "IndexNotReadyException"
}

// Message returns the exception's message.
func (s *IndexNotReadyException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *IndexNotReadyException) OrigErr() error {
	return nil
}

func (s *IndexNotReadyException) 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 *IndexNotReadyException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *IndexNotReadyException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Provides additional selections for named shadows and geolocation data.
//
// To add named shadows to your fleet indexing configuration, set namedShadowIndexingMode
// to be ON and specify your shadow names in namedShadowNames filter.
//
// To add geolocation data to your fleet indexing configuration:
//
//   - If you store geolocation data in a class/unnamed shadow, set thingIndexingMode
//     to be REGISTRY_AND_SHADOW and specify your geolocation data in geoLocations
//     filter.
//
//   - If you store geolocation data in a named shadow, set namedShadowIndexingMode
//     to be ON, add the shadow name in namedShadowNames filter, and specify
//     your geolocation data in geoLocations filter. For more information, see
//     Managing fleet indexing (https://docs.aws.amazon.com/iot/latest/developerguide/managing-fleet-index.html).
type IndexingFilter struct {
	_ struct{} `type:"structure"`

	// The list of geolocation targets that you select to index. The default maximum
	// number of geolocation targets for indexing is 1. To increase the limit, see
	// Amazon Web Services IoT Device Management Quotas (https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#fleet-indexing-limits)
	// in the Amazon Web Services General Reference.
	GeoLocations []*GeoLocationTarget `locationName:"geoLocations" type:"list"`

	// The shadow names that you select to index. The default maximum number of
	// shadow names for indexing is 10. To increase the limit, see Amazon Web Services
	// IoT Device Management Quotas (https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#fleet-indexing-limits)
	// in the Amazon Web Services General Reference.
	NamedShadowNames []*string `locationName:"namedShadowNames" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s IndexingFilter) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s IndexingFilter) GoString() string {
	return s.String()
}

// SetGeoLocations sets the GeoLocations field's value.
func (s *IndexingFilter) SetGeoLocations(v []*GeoLocationTarget) *IndexingFilter {
	s.GeoLocations = v
	return s
}

// SetNamedShadowNames sets the NamedShadowNames field's value.
func (s *IndexingFilter) SetNamedShadowNames(v []*string) *IndexingFilter {
	s.NamedShadowNames = v
	return s
}

// An unexpected error has occurred.
type InternalException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InternalException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InternalException) GoString() string {
	return s.String()
}

func newErrorInternalException(v protocol.ResponseMetadata) error {
	return &InternalException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InternalException) Code() string {
	return "InternalException"
}

// Message returns the exception's message.
func (s *InternalException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InternalException) OrigErr() error {
	return nil
}

func (s *InternalException) 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 *InternalException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InternalException) RequestID() string {
	return s.RespMetadata.RequestID
}

// An unexpected error has occurred.
type InternalFailureException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InternalFailureException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InternalFailureException) GoString() string {
	return s.String()
}

func newErrorInternalFailureException(v protocol.ResponseMetadata) error {
	return &InternalFailureException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InternalFailureException) Code() string {
	return "InternalFailureException"
}

// Message returns the exception's message.
func (s *InternalFailureException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InternalFailureException) OrigErr() error {
	return nil
}

func (s *InternalFailureException) 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 *InternalFailureException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InternalFailureException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Internal error from the service that indicates an unexpected error or that
// the service is unavailable.
type InternalServerException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InternalServerException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InternalServerException) GoString() string {
	return s.String()
}

func newErrorInternalServerException(v protocol.ResponseMetadata) error {
	return &InternalServerException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InternalServerException) Code() string {
	return "InternalServerException"
}

// Message returns the exception's message.
func (s *InternalServerException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InternalServerException) OrigErr() error {
	return nil
}

func (s *InternalServerException) 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 *InternalServerException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InternalServerException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The aggregation is invalid.
type InvalidAggregationException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidAggregationException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidAggregationException) GoString() string {
	return s.String()
}

func newErrorInvalidAggregationException(v protocol.ResponseMetadata) error {
	return &InvalidAggregationException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InvalidAggregationException) Code() string {
	return "InvalidAggregationException"
}

// Message returns the exception's message.
func (s *InvalidAggregationException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InvalidAggregationException) OrigErr() error {
	return nil
}

func (s *InvalidAggregationException) 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 *InvalidAggregationException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InvalidAggregationException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The query is invalid.
type InvalidQueryException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidQueryException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidQueryException) GoString() string {
	return s.String()
}

func newErrorInvalidQueryException(v protocol.ResponseMetadata) error {
	return &InvalidQueryException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InvalidQueryException) Code() string {
	return "InvalidQueryException"
}

// Message returns the exception's message.
func (s *InvalidQueryException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InvalidQueryException) OrigErr() error {
	return nil
}

func (s *InvalidQueryException) 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 *InvalidQueryException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InvalidQueryException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The request is not valid.
type InvalidRequestException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidRequestException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidRequestException) GoString() string {
	return s.String()
}

func newErrorInvalidRequestException(v protocol.ResponseMetadata) error {
	return &InvalidRequestException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InvalidRequestException) Code() string {
	return "InvalidRequestException"
}

// Message returns the exception's message.
func (s *InvalidRequestException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InvalidRequestException) OrigErr() error {
	return nil
}

func (s *InvalidRequestException) 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 *InvalidRequestException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InvalidRequestException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The response is invalid.
type InvalidResponseException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidResponseException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidResponseException) GoString() string {
	return s.String()
}

func newErrorInvalidResponseException(v protocol.ResponseMetadata) error {
	return &InvalidResponseException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InvalidResponseException) Code() string {
	return "InvalidResponseException"
}

// Message returns the exception's message.
func (s *InvalidResponseException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InvalidResponseException) OrigErr() error {
	return nil
}

func (s *InvalidResponseException) 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 *InvalidResponseException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InvalidResponseException) RequestID() string {
	return s.RespMetadata.RequestID
}

// An attempt was made to change to an invalid state, for example by deleting
// a job or a job execution which is "IN_PROGRESS" without setting the force
// parameter.
type InvalidStateTransitionException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidStateTransitionException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidStateTransitionException) GoString() string {
	return s.String()
}

func newErrorInvalidStateTransitionException(v protocol.ResponseMetadata) error {
	return &InvalidStateTransitionException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InvalidStateTransitionException) Code() string {
	return "InvalidStateTransitionException"
}

// Message returns the exception's message.
func (s *InvalidStateTransitionException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InvalidStateTransitionException) OrigErr() error {
	return nil
}

func (s *InvalidStateTransitionException) 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 *InvalidStateTransitionException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InvalidStateTransitionException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Sends message data to an IoT Analytics channel.
type IotAnalyticsAction struct {
	_ struct{} `type:"structure"`

	// Whether to process the action as a batch. The default value is false.
	//
	// When batchMode is true and the rule SQL statement evaluates to an Array,
	// each Array element is delivered as a separate message when passed by BatchPutMessage
	// (https://docs.aws.amazon.com/iotanalytics/latest/APIReference/API_BatchPutMessage.html)
	// to the IoT Analytics channel. The resulting array can't have more than 100
	// messages.
	BatchMode *bool `locationName:"batchMode" type:"boolean"`

	// (deprecated) The ARN of the IoT Analytics channel to which message data will
	// be sent.
	ChannelArn *string `locationName:"channelArn" type:"string"`

	// The name of the IoT Analytics channel to which message data will be sent.
	ChannelName *string `locationName:"channelName" type:"string"`

	// The ARN of the role which has a policy that grants IoT Analytics permission
	// to send message data via IoT Analytics (iotanalytics:BatchPutMessage).
	RoleArn *string `locationName:"roleArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s IotAnalyticsAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s IotAnalyticsAction) GoString() string {
	return s.String()
}

// SetBatchMode sets the BatchMode field's value.
func (s *IotAnalyticsAction) SetBatchMode(v bool) *IotAnalyticsAction {
	s.BatchMode = &v
	return s
}

// SetChannelArn sets the ChannelArn field's value.
func (s *IotAnalyticsAction) SetChannelArn(v string) *IotAnalyticsAction {
	s.ChannelArn = &v
	return s
}

// SetChannelName sets the ChannelName field's value.
func (s *IotAnalyticsAction) SetChannelName(v string) *IotAnalyticsAction {
	s.ChannelName = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *IotAnalyticsAction) SetRoleArn(v string) *IotAnalyticsAction {
	s.RoleArn = &v
	return s
}

// Sends an input to an IoT Events detector.
type IotEventsAction struct {
	_ struct{} `type:"structure"`

	// Whether to process the event actions as a batch. The default value is false.
	//
	// When batchMode is true, you can't specify a messageId.
	//
	// When batchMode is true and the rule SQL statement evaluates to an Array,
	// each Array element is treated as a separate message when it's sent to IoT
	// Events by calling BatchPutMessage (https://docs.aws.amazon.com/iotevents/latest/apireference/API_iotevents-data_BatchPutMessage.html).
	// The resulting array can't have more than 10 messages.
	BatchMode *bool `locationName:"batchMode" type:"boolean"`

	// The name of the IoT Events input.
	//
	// InputName is a required field
	InputName *string `locationName:"inputName" min:"1" type:"string" required:"true"`

	// The ID of the message. The default messageId is a new UUID value.
	//
	// When batchMode is true, you can't specify a messageId--a new UUID value will
	// be assigned.
	//
	// Assign a value to this property to ensure that only one input (message) with
	// a given messageId will be processed by an IoT Events detector.
	MessageId *string `locationName:"messageId" type:"string"`

	// The ARN of the role that grants IoT permission to send an input to an IoT
	// Events detector. ("Action":"iotevents:BatchPutMessage").
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s IotEventsAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s IotEventsAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *IotEventsAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "IotEventsAction"}
	if s.InputName == nil {
		invalidParams.Add(request.NewErrParamRequired("InputName"))
	}
	if s.InputName != nil && len(*s.InputName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("InputName", 1))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBatchMode sets the BatchMode field's value.
func (s *IotEventsAction) SetBatchMode(v bool) *IotEventsAction {
	s.BatchMode = &v
	return s
}

// SetInputName sets the InputName field's value.
func (s *IotEventsAction) SetInputName(v string) *IotEventsAction {
	s.InputName = &v
	return s
}

// SetMessageId sets the MessageId field's value.
func (s *IotEventsAction) SetMessageId(v string) *IotEventsAction {
	s.MessageId = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *IotEventsAction) SetRoleArn(v string) *IotEventsAction {
	s.RoleArn = &v
	return s
}

// Describes an action to send data from an MQTT message that triggered the
// rule to IoT SiteWise asset properties.
type IotSiteWiseAction struct {
	_ struct{} `type:"structure"`

	// A list of asset property value entries.
	//
	// PutAssetPropertyValueEntries is a required field
	PutAssetPropertyValueEntries []*PutAssetPropertyValueEntry `locationName:"putAssetPropertyValueEntries" min:"1" type:"list" required:"true"`

	// The ARN of the role that grants IoT permission to send an asset property
	// value to IoT SiteWise. ("Action": "iotsitewise:BatchPutAssetPropertyValue").
	// The trust policy can restrict access to specific asset hierarchy paths.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s IotSiteWiseAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s IotSiteWiseAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *IotSiteWiseAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "IotSiteWiseAction"}
	if s.PutAssetPropertyValueEntries == nil {
		invalidParams.Add(request.NewErrParamRequired("PutAssetPropertyValueEntries"))
	}
	if s.PutAssetPropertyValueEntries != nil && len(s.PutAssetPropertyValueEntries) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PutAssetPropertyValueEntries", 1))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.PutAssetPropertyValueEntries != nil {
		for i, v := range s.PutAssetPropertyValueEntries {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PutAssetPropertyValueEntries", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPutAssetPropertyValueEntries sets the PutAssetPropertyValueEntries field's value.
func (s *IotSiteWiseAction) SetPutAssetPropertyValueEntries(v []*PutAssetPropertyValueEntry) *IotSiteWiseAction {
	s.PutAssetPropertyValueEntries = v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *IotSiteWiseAction) SetRoleArn(v string) *IotSiteWiseAction {
	s.RoleArn = &v
	return s
}

// The certificate issuer indentifier.
type IssuerCertificateIdentifier struct {
	_ struct{} `type:"structure"`

	// The issuer certificate serial number.
	IssuerCertificateSerialNumber *string `locationName:"issuerCertificateSerialNumber" type:"string"`

	// The subject of the issuer certificate.
	IssuerCertificateSubject *string `locationName:"issuerCertificateSubject" type:"string"`

	// The issuer ID.
	IssuerId *string `locationName:"issuerId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s IssuerCertificateIdentifier) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s IssuerCertificateIdentifier) GoString() string {
	return s.String()
}

// SetIssuerCertificateSerialNumber sets the IssuerCertificateSerialNumber field's value.
func (s *IssuerCertificateIdentifier) SetIssuerCertificateSerialNumber(v string) *IssuerCertificateIdentifier {
	s.IssuerCertificateSerialNumber = &v
	return s
}

// SetIssuerCertificateSubject sets the IssuerCertificateSubject field's value.
func (s *IssuerCertificateIdentifier) SetIssuerCertificateSubject(v string) *IssuerCertificateIdentifier {
	s.IssuerCertificateSubject = &v
	return s
}

// SetIssuerId sets the IssuerId field's value.
func (s *IssuerCertificateIdentifier) SetIssuerId(v string) *IssuerCertificateIdentifier {
	s.IssuerId = &v
	return s
}

// The Job object contains details about a job.
type Job struct {
	_ struct{} `type:"structure"`

	// Configuration for criteria to abort the job.
	AbortConfig *AbortConfig `locationName:"abortConfig" type:"structure"`

	// If the job was updated, describes the reason for the update.
	Comment *string `locationName:"comment" type:"string"`

	// The time, in seconds since the epoch, when the job was completed.
	CompletedAt *time.Time `locationName:"completedAt" type:"timestamp"`

	// The time, in seconds since the epoch, when the job was created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// A short text description of the job.
	Description *string `locationName:"description" type:"string"`

	// The package version Amazon Resource Names (ARNs) that are installed on the
	// device when the job successfully completes. The package version must be in
	// either the Published or Deprecated state when the job deploys. For more information,
	// see Package version lifecycle (https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#package-version-lifecycle).The
	// package version must be in either the Published or Deprecated state when
	// the job deploys. For more information, see Package version lifecycle (https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#package-version-lifecycle).
	//
	// Note:The following Length Constraints relates to a single ARN. Up to 25 package
	// version ARNs are allowed.
	DestinationPackageVersions []*string `locationName:"destinationPackageVersions" type:"list"`

	// A key-value map that pairs the patterns that need to be replaced in a managed
	// template job document schema. You can use the description of each key as
	// a guidance to specify the inputs during runtime when creating a job.
	//
	// documentParameters can only be used when creating jobs from Amazon Web Services
	// managed templates. This parameter can't be used with custom job templates
	// or to create jobs from them.
	DocumentParameters map[string]*string `locationName:"documentParameters" type:"map"`

	// Will be true if the job was canceled with the optional force parameter set
	// to true.
	ForceCanceled *bool `locationName:"forceCanceled" type:"boolean"`

	// Indicates whether a job is concurrent. Will be true when a job is rolling
	// out new job executions or canceling previously created executions, otherwise
	// false.
	IsConcurrent *bool `locationName:"isConcurrent" type:"boolean"`

	// An ARN identifying the job with format "arn:aws:iot:region:account:job/jobId".
	JobArn *string `locationName:"jobArn" type:"string"`

	// The configuration for the criteria to retry the job.
	JobExecutionsRetryConfig *JobExecutionsRetryConfig `locationName:"jobExecutionsRetryConfig" type:"structure"`

	// Allows you to create a staged rollout of a job.
	JobExecutionsRolloutConfig *JobExecutionsRolloutConfig `locationName:"jobExecutionsRolloutConfig" type:"structure"`

	// The unique identifier you assigned to this job when it was created.
	JobId *string `locationName:"jobId" min:"1" type:"string"`

	// Details about the job process.
	JobProcessDetails *JobProcessDetails `locationName:"jobProcessDetails" type:"structure"`

	// The ARN of the job template used to create the job.
	JobTemplateArn *string `locationName:"jobTemplateArn" min:"1" type:"string"`

	// The time, in seconds since the epoch, when the job was last updated.
	LastUpdatedAt *time.Time `locationName:"lastUpdatedAt" type:"timestamp"`

	// The namespace used to indicate that a job is a customer-managed job.
	//
	// When you specify a value for this parameter, Amazon Web Services IoT Core
	// sends jobs notifications to MQTT topics that contain the value in the following
	// format.
	//
	// $aws/things/THING_NAME/jobs/JOB_ID/notify-namespace-NAMESPACE_ID/
	//
	// The namespaceId feature is only supported by IoT Greengrass at this time.
	// For more information, see Setting up IoT Greengrass core devices. (https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html)
	NamespaceId *string `locationName:"namespaceId" type:"string"`

	// Configuration for pre-signed S3 URLs.
	PresignedUrlConfig *PresignedUrlConfig `locationName:"presignedUrlConfig" type:"structure"`

	// If the job was updated, provides the reason code for the update.
	ReasonCode *string `locationName:"reasonCode" type:"string"`

	// Displays the next seven maintenance window occurrences and their start times.
	ScheduledJobRollouts []*ScheduledJobRollout `locationName:"scheduledJobRollouts" type:"list"`

	// The configuration that allows you to schedule a job for a future date and
	// time in addition to specifying the end behavior for each job execution.
	SchedulingConfig *SchedulingConfig `locationName:"schedulingConfig" type:"structure"`

	// The status of the job, one of IN_PROGRESS, CANCELED, DELETION_IN_PROGRESS
	// or COMPLETED.
	Status *string `locationName:"status" type:"string" enum:"JobStatus"`

	// Specifies whether the job will continue to run (CONTINUOUS), or will be complete
	// after all those things specified as targets have completed the job (SNAPSHOT).
	// If continuous, the job may also be run on a thing when a change is detected
	// in a target. For example, a job will run on a device when the thing representing
	// the device is added to a target group, even after the job was completed by
	// all things originally in the group.
	//
	// We recommend that you use continuous jobs instead of snapshot jobs for dynamic
	// thing group targets. By using continuous jobs, devices that join the group
	// receive the job execution even after the job has been created.
	TargetSelection *string `locationName:"targetSelection" type:"string" enum:"TargetSelection"`

	// A list of IoT things and thing groups to which the job should be sent.
	Targets []*string `locationName:"targets" min:"1" type:"list"`

	// Specifies the amount of time each device has to finish its execution of the
	// job. A timer is started when the job execution status is set to IN_PROGRESS.
	// If the job execution status is not set to another terminal state before the
	// timer expires, it will be automatically set to TIMED_OUT.
	TimeoutConfig *TimeoutConfig `locationName:"timeoutConfig" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Job) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Job) GoString() string {
	return s.String()
}

// SetAbortConfig sets the AbortConfig field's value.
func (s *Job) SetAbortConfig(v *AbortConfig) *Job {
	s.AbortConfig = v
	return s
}

// SetComment sets the Comment field's value.
func (s *Job) SetComment(v string) *Job {
	s.Comment = &v
	return s
}

// SetCompletedAt sets the CompletedAt field's value.
func (s *Job) SetCompletedAt(v time.Time) *Job {
	s.CompletedAt = &v
	return s
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *Job) SetCreatedAt(v time.Time) *Job {
	s.CreatedAt = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *Job) SetDescription(v string) *Job {
	s.Description = &v
	return s
}

// SetDestinationPackageVersions sets the DestinationPackageVersions field's value.
func (s *Job) SetDestinationPackageVersions(v []*string) *Job {
	s.DestinationPackageVersions = v
	return s
}

// SetDocumentParameters sets the DocumentParameters field's value.
func (s *Job) SetDocumentParameters(v map[string]*string) *Job {
	s.DocumentParameters = v
	return s
}

// SetForceCanceled sets the ForceCanceled field's value.
func (s *Job) SetForceCanceled(v bool) *Job {
	s.ForceCanceled = &v
	return s
}

// SetIsConcurrent sets the IsConcurrent field's value.
func (s *Job) SetIsConcurrent(v bool) *Job {
	s.IsConcurrent = &v
	return s
}

// SetJobArn sets the JobArn field's value.
func (s *Job) SetJobArn(v string) *Job {
	s.JobArn = &v
	return s
}

// SetJobExecutionsRetryConfig sets the JobExecutionsRetryConfig field's value.
func (s *Job) SetJobExecutionsRetryConfig(v *JobExecutionsRetryConfig) *Job {
	s.JobExecutionsRetryConfig = v
	return s
}

// SetJobExecutionsRolloutConfig sets the JobExecutionsRolloutConfig field's value.
func (s *Job) SetJobExecutionsRolloutConfig(v *JobExecutionsRolloutConfig) *Job {
	s.JobExecutionsRolloutConfig = v
	return s
}

// SetJobId sets the JobId field's value.
func (s *Job) SetJobId(v string) *Job {
	s.JobId = &v
	return s
}

// SetJobProcessDetails sets the JobProcessDetails field's value.
func (s *Job) SetJobProcessDetails(v *JobProcessDetails) *Job {
	s.JobProcessDetails = v
	return s
}

// SetJobTemplateArn sets the JobTemplateArn field's value.
func (s *Job) SetJobTemplateArn(v string) *Job {
	s.JobTemplateArn = &v
	return s
}

// SetLastUpdatedAt sets the LastUpdatedAt field's value.
func (s *Job) SetLastUpdatedAt(v time.Time) *Job {
	s.LastUpdatedAt = &v
	return s
}

// SetNamespaceId sets the NamespaceId field's value.
func (s *Job) SetNamespaceId(v string) *Job {
	s.NamespaceId = &v
	return s
}

// SetPresignedUrlConfig sets the PresignedUrlConfig field's value.
func (s *Job) SetPresignedUrlConfig(v *PresignedUrlConfig) *Job {
	s.PresignedUrlConfig = v
	return s
}

// SetReasonCode sets the ReasonCode field's value.
func (s *Job) SetReasonCode(v string) *Job {
	s.ReasonCode = &v
	return s
}

// SetScheduledJobRollouts sets the ScheduledJobRollouts field's value.
func (s *Job) SetScheduledJobRollouts(v []*ScheduledJobRollout) *Job {
	s.ScheduledJobRollouts = v
	return s
}

// SetSchedulingConfig sets the SchedulingConfig field's value.
func (s *Job) SetSchedulingConfig(v *SchedulingConfig) *Job {
	s.SchedulingConfig = v
	return s
}

// SetStatus sets the Status field's value.
func (s *Job) SetStatus(v string) *Job {
	s.Status = &v
	return s
}

// SetTargetSelection sets the TargetSelection field's value.
func (s *Job) SetTargetSelection(v string) *Job {
	s.TargetSelection = &v
	return s
}

// SetTargets sets the Targets field's value.
func (s *Job) SetTargets(v []*string) *Job {
	s.Targets = v
	return s
}

// SetTimeoutConfig sets the TimeoutConfig field's value.
func (s *Job) SetTimeoutConfig(v *TimeoutConfig) *Job {
	s.TimeoutConfig = v
	return s
}

// The job execution object represents the execution of a job on a particular
// device.
type JobExecution struct {
	_ struct{} `type:"structure"`

	// The estimated number of seconds that remain before the job execution status
	// will be changed to TIMED_OUT. The timeout interval can be anywhere between
	// 1 minute and 7 days (1 to 10080 minutes). The actual job execution timeout
	// can occur up to 60 seconds later than the estimated duration. This value
	// will not be included if the job execution has reached a terminal status.
	ApproximateSecondsBeforeTimedOut *int64 `locationName:"approximateSecondsBeforeTimedOut" type:"long"`

	// A string (consisting of the digits "0" through "9") which identifies this
	// particular job execution on this particular device. It can be used in commands
	// which return or update job execution information.
	ExecutionNumber *int64 `locationName:"executionNumber" type:"long"`

	// Will be true if the job execution was canceled with the optional force parameter
	// set to true.
	ForceCanceled *bool `locationName:"forceCanceled" type:"boolean"`

	// The unique identifier you assigned to the job when it was created.
	JobId *string `locationName:"jobId" min:"1" type:"string"`

	// The time, in seconds since the epoch, when the job execution was last updated.
	LastUpdatedAt *time.Time `locationName:"lastUpdatedAt" type:"timestamp"`

	// The time, in seconds since the epoch, when the job execution was queued.
	QueuedAt *time.Time `locationName:"queuedAt" type:"timestamp"`

	// The time, in seconds since the epoch, when the job execution started.
	StartedAt *time.Time `locationName:"startedAt" type:"timestamp"`

	// The status of the job execution (IN_PROGRESS, QUEUED, FAILED, SUCCEEDED,
	// TIMED_OUT, CANCELED, or REJECTED).
	Status *string `locationName:"status" type:"string" enum:"JobExecutionStatus"`

	// A collection of name/value pairs that describe the status of the job execution.
	StatusDetails *JobExecutionStatusDetails `locationName:"statusDetails" type:"structure"`

	// The ARN of the thing on which the job execution is running.
	ThingArn *string `locationName:"thingArn" type:"string"`

	// The version of the job execution. Job execution versions are incremented
	// each time they are updated by a device.
	VersionNumber *int64 `locationName:"versionNumber" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecution) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecution) GoString() string {
	return s.String()
}

// SetApproximateSecondsBeforeTimedOut sets the ApproximateSecondsBeforeTimedOut field's value.
func (s *JobExecution) SetApproximateSecondsBeforeTimedOut(v int64) *JobExecution {
	s.ApproximateSecondsBeforeTimedOut = &v
	return s
}

// SetExecutionNumber sets the ExecutionNumber field's value.
func (s *JobExecution) SetExecutionNumber(v int64) *JobExecution {
	s.ExecutionNumber = &v
	return s
}

// SetForceCanceled sets the ForceCanceled field's value.
func (s *JobExecution) SetForceCanceled(v bool) *JobExecution {
	s.ForceCanceled = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *JobExecution) SetJobId(v string) *JobExecution {
	s.JobId = &v
	return s
}

// SetLastUpdatedAt sets the LastUpdatedAt field's value.
func (s *JobExecution) SetLastUpdatedAt(v time.Time) *JobExecution {
	s.LastUpdatedAt = &v
	return s
}

// SetQueuedAt sets the QueuedAt field's value.
func (s *JobExecution) SetQueuedAt(v time.Time) *JobExecution {
	s.QueuedAt = &v
	return s
}

// SetStartedAt sets the StartedAt field's value.
func (s *JobExecution) SetStartedAt(v time.Time) *JobExecution {
	s.StartedAt = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *JobExecution) SetStatus(v string) *JobExecution {
	s.Status = &v
	return s
}

// SetStatusDetails sets the StatusDetails field's value.
func (s *JobExecution) SetStatusDetails(v *JobExecutionStatusDetails) *JobExecution {
	s.StatusDetails = v
	return s
}

// SetThingArn sets the ThingArn field's value.
func (s *JobExecution) SetThingArn(v string) *JobExecution {
	s.ThingArn = &v
	return s
}

// SetVersionNumber sets the VersionNumber field's value.
func (s *JobExecution) SetVersionNumber(v int64) *JobExecution {
	s.VersionNumber = &v
	return s
}

// Details of the job execution status.
type JobExecutionStatusDetails struct {
	_ struct{} `type:"structure"`

	// The job execution status.
	DetailsMap map[string]*string `locationName:"detailsMap" type:"map"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecutionStatusDetails) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecutionStatusDetails) GoString() string {
	return s.String()
}

// SetDetailsMap sets the DetailsMap field's value.
func (s *JobExecutionStatusDetails) SetDetailsMap(v map[string]*string) *JobExecutionStatusDetails {
	s.DetailsMap = v
	return s
}

// The job execution summary.
type JobExecutionSummary struct {
	_ struct{} `type:"structure"`

	// A string (consisting of the digits "0" through "9") which identifies this
	// particular job execution on this particular device. It can be used later
	// in commands which return or update job execution information.
	ExecutionNumber *int64 `locationName:"executionNumber" type:"long"`

	// The time, in seconds since the epoch, when the job execution was last updated.
	LastUpdatedAt *time.Time `locationName:"lastUpdatedAt" type:"timestamp"`

	// The time, in seconds since the epoch, when the job execution was queued.
	QueuedAt *time.Time `locationName:"queuedAt" type:"timestamp"`

	// The number that indicates how many retry attempts have been completed for
	// this job on this device.
	RetryAttempt *int64 `locationName:"retryAttempt" type:"integer"`

	// The time, in seconds since the epoch, when the job execution started.
	StartedAt *time.Time `locationName:"startedAt" type:"timestamp"`

	// The status of the job execution.
	Status *string `locationName:"status" type:"string" enum:"JobExecutionStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecutionSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecutionSummary) GoString() string {
	return s.String()
}

// SetExecutionNumber sets the ExecutionNumber field's value.
func (s *JobExecutionSummary) SetExecutionNumber(v int64) *JobExecutionSummary {
	s.ExecutionNumber = &v
	return s
}

// SetLastUpdatedAt sets the LastUpdatedAt field's value.
func (s *JobExecutionSummary) SetLastUpdatedAt(v time.Time) *JobExecutionSummary {
	s.LastUpdatedAt = &v
	return s
}

// SetQueuedAt sets the QueuedAt field's value.
func (s *JobExecutionSummary) SetQueuedAt(v time.Time) *JobExecutionSummary {
	s.QueuedAt = &v
	return s
}

// SetRetryAttempt sets the RetryAttempt field's value.
func (s *JobExecutionSummary) SetRetryAttempt(v int64) *JobExecutionSummary {
	s.RetryAttempt = &v
	return s
}

// SetStartedAt sets the StartedAt field's value.
func (s *JobExecutionSummary) SetStartedAt(v time.Time) *JobExecutionSummary {
	s.StartedAt = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *JobExecutionSummary) SetStatus(v string) *JobExecutionSummary {
	s.Status = &v
	return s
}

// Contains a summary of information about job executions for a specific job.
type JobExecutionSummaryForJob struct {
	_ struct{} `type:"structure"`

	// Contains a subset of information about a job execution.
	JobExecutionSummary *JobExecutionSummary `locationName:"jobExecutionSummary" type:"structure"`

	// The ARN of the thing on which the job execution is running.
	ThingArn *string `locationName:"thingArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecutionSummaryForJob) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecutionSummaryForJob) GoString() string {
	return s.String()
}

// SetJobExecutionSummary sets the JobExecutionSummary field's value.
func (s *JobExecutionSummaryForJob) SetJobExecutionSummary(v *JobExecutionSummary) *JobExecutionSummaryForJob {
	s.JobExecutionSummary = v
	return s
}

// SetThingArn sets the ThingArn field's value.
func (s *JobExecutionSummaryForJob) SetThingArn(v string) *JobExecutionSummaryForJob {
	s.ThingArn = &v
	return s
}

// The job execution summary for a thing.
type JobExecutionSummaryForThing struct {
	_ struct{} `type:"structure"`

	// Contains a subset of information about a job execution.
	JobExecutionSummary *JobExecutionSummary `locationName:"jobExecutionSummary" type:"structure"`

	// The unique identifier you assigned to this job when it was created.
	JobId *string `locationName:"jobId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecutionSummaryForThing) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecutionSummaryForThing) GoString() string {
	return s.String()
}

// SetJobExecutionSummary sets the JobExecutionSummary field's value.
func (s *JobExecutionSummaryForThing) SetJobExecutionSummary(v *JobExecutionSummary) *JobExecutionSummaryForThing {
	s.JobExecutionSummary = v
	return s
}

// SetJobId sets the JobId field's value.
func (s *JobExecutionSummaryForThing) SetJobId(v string) *JobExecutionSummaryForThing {
	s.JobId = &v
	return s
}

// The configuration that determines how many retries are allowed for each failure
// type for a job.
type JobExecutionsRetryConfig struct {
	_ struct{} `type:"structure"`

	// The list of criteria that determines how many retries are allowed for each
	// failure type for a job.
	//
	// CriteriaList is a required field
	CriteriaList []*RetryCriteria `locationName:"criteriaList" min:"1" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecutionsRetryConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecutionsRetryConfig) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *JobExecutionsRetryConfig) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "JobExecutionsRetryConfig"}
	if s.CriteriaList == nil {
		invalidParams.Add(request.NewErrParamRequired("CriteriaList"))
	}
	if s.CriteriaList != nil && len(s.CriteriaList) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("CriteriaList", 1))
	}
	if s.CriteriaList != nil {
		for i, v := range s.CriteriaList {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "CriteriaList", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCriteriaList sets the CriteriaList field's value.
func (s *JobExecutionsRetryConfig) SetCriteriaList(v []*RetryCriteria) *JobExecutionsRetryConfig {
	s.CriteriaList = v
	return s
}

// Allows you to create a staged rollout of a job.
type JobExecutionsRolloutConfig struct {
	_ struct{} `type:"structure"`

	// The rate of increase for a job rollout. This parameter allows you to define
	// an exponential rate for a job rollout.
	ExponentialRate *ExponentialRolloutRate `locationName:"exponentialRate" type:"structure"`

	// The maximum number of things that will be notified of a pending job, per
	// minute. This parameter allows you to create a staged rollout.
	MaximumPerMinute *int64 `locationName:"maximumPerMinute" min:"1" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecutionsRolloutConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobExecutionsRolloutConfig) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *JobExecutionsRolloutConfig) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "JobExecutionsRolloutConfig"}
	if s.MaximumPerMinute != nil && *s.MaximumPerMinute < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaximumPerMinute", 1))
	}
	if s.ExponentialRate != nil {
		if err := s.ExponentialRate.Validate(); err != nil {
			invalidParams.AddNested("ExponentialRate", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExponentialRate sets the ExponentialRate field's value.
func (s *JobExecutionsRolloutConfig) SetExponentialRate(v *ExponentialRolloutRate) *JobExecutionsRolloutConfig {
	s.ExponentialRate = v
	return s
}

// SetMaximumPerMinute sets the MaximumPerMinute field's value.
func (s *JobExecutionsRolloutConfig) SetMaximumPerMinute(v int64) *JobExecutionsRolloutConfig {
	s.MaximumPerMinute = &v
	return s
}

// The job process details.
type JobProcessDetails struct {
	_ struct{} `type:"structure"`

	// The number of things that cancelled the job.
	NumberOfCanceledThings *int64 `locationName:"numberOfCanceledThings" type:"integer"`

	// The number of things that failed executing the job.
	NumberOfFailedThings *int64 `locationName:"numberOfFailedThings" type:"integer"`

	// The number of things currently executing the job.
	NumberOfInProgressThings *int64 `locationName:"numberOfInProgressThings" type:"integer"`

	// The number of things that are awaiting execution of the job.
	NumberOfQueuedThings *int64 `locationName:"numberOfQueuedThings" type:"integer"`

	// The number of things that rejected the job.
	NumberOfRejectedThings *int64 `locationName:"numberOfRejectedThings" type:"integer"`

	// The number of things that are no longer scheduled to execute the job because
	// they have been deleted or have been removed from the group that was a target
	// of the job.
	NumberOfRemovedThings *int64 `locationName:"numberOfRemovedThings" type:"integer"`

	// The number of things which successfully completed the job.
	NumberOfSucceededThings *int64 `locationName:"numberOfSucceededThings" type:"integer"`

	// The number of things whose job execution status is TIMED_OUT.
	NumberOfTimedOutThings *int64 `locationName:"numberOfTimedOutThings" type:"integer"`

	// The target devices to which the job execution is being rolled out. This value
	// will be null after the job execution has finished rolling out to all the
	// target devices.
	ProcessingTargets []*string `locationName:"processingTargets" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobProcessDetails) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobProcessDetails) GoString() string {
	return s.String()
}

// SetNumberOfCanceledThings sets the NumberOfCanceledThings field's value.
func (s *JobProcessDetails) SetNumberOfCanceledThings(v int64) *JobProcessDetails {
	s.NumberOfCanceledThings = &v
	return s
}

// SetNumberOfFailedThings sets the NumberOfFailedThings field's value.
func (s *JobProcessDetails) SetNumberOfFailedThings(v int64) *JobProcessDetails {
	s.NumberOfFailedThings = &v
	return s
}

// SetNumberOfInProgressThings sets the NumberOfInProgressThings field's value.
func (s *JobProcessDetails) SetNumberOfInProgressThings(v int64) *JobProcessDetails {
	s.NumberOfInProgressThings = &v
	return s
}

// SetNumberOfQueuedThings sets the NumberOfQueuedThings field's value.
func (s *JobProcessDetails) SetNumberOfQueuedThings(v int64) *JobProcessDetails {
	s.NumberOfQueuedThings = &v
	return s
}

// SetNumberOfRejectedThings sets the NumberOfRejectedThings field's value.
func (s *JobProcessDetails) SetNumberOfRejectedThings(v int64) *JobProcessDetails {
	s.NumberOfRejectedThings = &v
	return s
}

// SetNumberOfRemovedThings sets the NumberOfRemovedThings field's value.
func (s *JobProcessDetails) SetNumberOfRemovedThings(v int64) *JobProcessDetails {
	s.NumberOfRemovedThings = &v
	return s
}

// SetNumberOfSucceededThings sets the NumberOfSucceededThings field's value.
func (s *JobProcessDetails) SetNumberOfSucceededThings(v int64) *JobProcessDetails {
	s.NumberOfSucceededThings = &v
	return s
}

// SetNumberOfTimedOutThings sets the NumberOfTimedOutThings field's value.
func (s *JobProcessDetails) SetNumberOfTimedOutThings(v int64) *JobProcessDetails {
	s.NumberOfTimedOutThings = &v
	return s
}

// SetProcessingTargets sets the ProcessingTargets field's value.
func (s *JobProcessDetails) SetProcessingTargets(v []*string) *JobProcessDetails {
	s.ProcessingTargets = v
	return s
}

// The job summary.
type JobSummary struct {
	_ struct{} `type:"structure"`

	// The time, in seconds since the epoch, when the job completed.
	CompletedAt *time.Time `locationName:"completedAt" type:"timestamp"`

	// The time, in seconds since the epoch, when the job was created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// Indicates whether a job is concurrent. Will be true when a job is rolling
	// out new job executions or canceling previously created executions, otherwise
	// false.
	IsConcurrent *bool `locationName:"isConcurrent" type:"boolean"`

	// The job ARN.
	JobArn *string `locationName:"jobArn" type:"string"`

	// The unique identifier you assigned to this job when it was created.
	JobId *string `locationName:"jobId" min:"1" type:"string"`

	// The time, in seconds since the epoch, when the job was last updated.
	LastUpdatedAt *time.Time `locationName:"lastUpdatedAt" type:"timestamp"`

	// The job summary status.
	Status *string `locationName:"status" type:"string" enum:"JobStatus"`

	// Specifies whether the job will continue to run (CONTINUOUS), or will be complete
	// after all those things specified as targets have completed the job (SNAPSHOT).
	// If continuous, the job may also be run on a thing when a change is detected
	// in a target. For example, a job will run on a thing when the thing is added
	// to a target group, even after the job was completed by all things originally
	// in the group.
	//
	// We recommend that you use continuous jobs instead of snapshot jobs for dynamic
	// thing group targets. By using continuous jobs, devices that join the group
	// receive the job execution even after the job has been created.
	TargetSelection *string `locationName:"targetSelection" type:"string" enum:"TargetSelection"`

	// The ID of the thing group.
	ThingGroupId *string `locationName:"thingGroupId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobSummary) GoString() string {
	return s.String()
}

// SetCompletedAt sets the CompletedAt field's value.
func (s *JobSummary) SetCompletedAt(v time.Time) *JobSummary {
	s.CompletedAt = &v
	return s
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *JobSummary) SetCreatedAt(v time.Time) *JobSummary {
	s.CreatedAt = &v
	return s
}

// SetIsConcurrent sets the IsConcurrent field's value.
func (s *JobSummary) SetIsConcurrent(v bool) *JobSummary {
	s.IsConcurrent = &v
	return s
}

// SetJobArn sets the JobArn field's value.
func (s *JobSummary) SetJobArn(v string) *JobSummary {
	s.JobArn = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *JobSummary) SetJobId(v string) *JobSummary {
	s.JobId = &v
	return s
}

// SetLastUpdatedAt sets the LastUpdatedAt field's value.
func (s *JobSummary) SetLastUpdatedAt(v time.Time) *JobSummary {
	s.LastUpdatedAt = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *JobSummary) SetStatus(v string) *JobSummary {
	s.Status = &v
	return s
}

// SetTargetSelection sets the TargetSelection field's value.
func (s *JobSummary) SetTargetSelection(v string) *JobSummary {
	s.TargetSelection = &v
	return s
}

// SetThingGroupId sets the ThingGroupId field's value.
func (s *JobSummary) SetThingGroupId(v string) *JobSummary {
	s.ThingGroupId = &v
	return s
}

// An object that contains information about the job template.
type JobTemplateSummary struct {
	_ struct{} `type:"structure"`

	// The time, in seconds since the epoch, when the job template was created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// A description of the job template.
	Description *string `locationName:"description" type:"string"`

	// The ARN of the job template.
	JobTemplateArn *string `locationName:"jobTemplateArn" min:"1" type:"string"`

	// The unique identifier of the job template.
	JobTemplateId *string `locationName:"jobTemplateId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobTemplateSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobTemplateSummary) GoString() string {
	return s.String()
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *JobTemplateSummary) SetCreatedAt(v time.Time) *JobTemplateSummary {
	s.CreatedAt = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *JobTemplateSummary) SetDescription(v string) *JobTemplateSummary {
	s.Description = &v
	return s
}

// SetJobTemplateArn sets the JobTemplateArn field's value.
func (s *JobTemplateSummary) SetJobTemplateArn(v string) *JobTemplateSummary {
	s.JobTemplateArn = &v
	return s
}

// SetJobTemplateId sets the JobTemplateId field's value.
func (s *JobTemplateSummary) SetJobTemplateId(v string) *JobTemplateSummary {
	s.JobTemplateId = &v
	return s
}

// Send messages to an Amazon Managed Streaming for Apache Kafka (Amazon MSK)
// or self-managed Apache Kafka cluster.
type KafkaAction struct {
	_ struct{} `type:"structure"`

	// Properties of the Apache Kafka producer client.
	//
	// ClientProperties is a required field
	ClientProperties map[string]*string `locationName:"clientProperties" type:"map" required:"true"`

	// The ARN of Kafka action's VPC TopicRuleDestination.
	//
	// DestinationArn is a required field
	DestinationArn *string `locationName:"destinationArn" type:"string" required:"true"`

	// The list of Kafka headers that you specify.
	Headers []*KafkaActionHeader `locationName:"headers" min:"1" type:"list"`

	// The Kafka message key.
	Key *string `locationName:"key" type:"string"`

	// The Kafka message partition.
	Partition *string `locationName:"partition" type:"string"`

	// The Kafka topic for messages to be sent to the Kafka broker.
	//
	// Topic is a required field
	Topic *string `locationName:"topic" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s KafkaAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s KafkaAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *KafkaAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "KafkaAction"}
	if s.ClientProperties == nil {
		invalidParams.Add(request.NewErrParamRequired("ClientProperties"))
	}
	if s.DestinationArn == nil {
		invalidParams.Add(request.NewErrParamRequired("DestinationArn"))
	}
	if s.Headers != nil && len(s.Headers) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Headers", 1))
	}
	if s.Topic == nil {
		invalidParams.Add(request.NewErrParamRequired("Topic"))
	}
	if s.Headers != nil {
		for i, v := range s.Headers {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Headers", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetClientProperties sets the ClientProperties field's value.
func (s *KafkaAction) SetClientProperties(v map[string]*string) *KafkaAction {
	s.ClientProperties = v
	return s
}

// SetDestinationArn sets the DestinationArn field's value.
func (s *KafkaAction) SetDestinationArn(v string) *KafkaAction {
	s.DestinationArn = &v
	return s
}

// SetHeaders sets the Headers field's value.
func (s *KafkaAction) SetHeaders(v []*KafkaActionHeader) *KafkaAction {
	s.Headers = v
	return s
}

// SetKey sets the Key field's value.
func (s *KafkaAction) SetKey(v string) *KafkaAction {
	s.Key = &v
	return s
}

// SetPartition sets the Partition field's value.
func (s *KafkaAction) SetPartition(v string) *KafkaAction {
	s.Partition = &v
	return s
}

// SetTopic sets the Topic field's value.
func (s *KafkaAction) SetTopic(v string) *KafkaAction {
	s.Topic = &v
	return s
}

// Specifies a Kafka header using key-value pairs when you create a Rule’s
// Kafka Action. You can use these headers to route data from IoT clients to
// downstream Kafka clusters without modifying your message payload.
//
// For more information about Rule's Kafka action, see Apache Kafka (https://docs.aws.amazon.com/iot/latest/developerguide/apache-kafka-rule-action.html).
type KafkaActionHeader struct {
	_ struct{} `type:"structure"`

	// The key of the Kafka header.
	//
	// Key is a required field
	Key *string `locationName:"key" type:"string" required:"true"`

	// The value of the Kafka header.
	//
	// Value is a required field
	Value *string `locationName:"value" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s KafkaActionHeader) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s KafkaActionHeader) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *KafkaActionHeader) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "KafkaActionHeader"}
	if s.Key == nil {
		invalidParams.Add(request.NewErrParamRequired("Key"))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetKey sets the Key field's value.
func (s *KafkaActionHeader) SetKey(v string) *KafkaActionHeader {
	s.Key = &v
	return s
}

// SetValue sets the Value field's value.
func (s *KafkaActionHeader) SetValue(v string) *KafkaActionHeader {
	s.Value = &v
	return s
}

// Describes a key pair.
type KeyPair struct {
	_ struct{} `type:"structure"`

	// The private key.
	//
	// PrivateKey is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by KeyPair's
	// String and GoString methods.
	PrivateKey *string `min:"1" type:"string" sensitive:"true"`

	// The public key.
	PublicKey *string `min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s KeyPair) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s KeyPair) GoString() string {
	return s.String()
}

// SetPrivateKey sets the PrivateKey field's value.
func (s *KeyPair) SetPrivateKey(v string) *KeyPair {
	s.PrivateKey = &v
	return s
}

// SetPublicKey sets the PublicKey field's value.
func (s *KeyPair) SetPublicKey(v string) *KeyPair {
	s.PublicKey = &v
	return s
}

// Describes an action to write data to an Amazon Kinesis stream.
type KinesisAction struct {
	_ struct{} `type:"structure"`

	// The partition key.
	PartitionKey *string `locationName:"partitionKey" type:"string"`

	// The ARN of the IAM role that grants access to the Amazon Kinesis stream.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// The name of the Amazon Kinesis stream.
	//
	// StreamName is a required field
	StreamName *string `locationName:"streamName" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s KinesisAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s KinesisAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *KinesisAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "KinesisAction"}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.StreamName == nil {
		invalidParams.Add(request.NewErrParamRequired("StreamName"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPartitionKey sets the PartitionKey field's value.
func (s *KinesisAction) SetPartitionKey(v string) *KinesisAction {
	s.PartitionKey = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *KinesisAction) SetRoleArn(v string) *KinesisAction {
	s.RoleArn = &v
	return s
}

// SetStreamName sets the StreamName field's value.
func (s *KinesisAction) SetStreamName(v string) *KinesisAction {
	s.StreamName = &v
	return s
}

// Describes an action to invoke a Lambda function.
type LambdaAction struct {
	_ struct{} `type:"structure"`

	// The ARN of the Lambda function.
	//
	// FunctionArn is a required field
	FunctionArn *string `locationName:"functionArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *LambdaAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "LambdaAction"}
	if s.FunctionArn == nil {
		invalidParams.Add(request.NewErrParamRequired("FunctionArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetFunctionArn sets the FunctionArn field's value.
func (s *LambdaAction) SetFunctionArn(v string) *LambdaAction {
	s.FunctionArn = &v
	return s
}

// A limit has been exceeded.
type LimitExceededException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LimitExceededException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LimitExceededException) GoString() string {
	return s.String()
}

func newErrorLimitExceededException(v protocol.ResponseMetadata) error {
	return &LimitExceededException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *LimitExceededException) Code() string {
	return "LimitExceededException"
}

// Message returns the exception's message.
func (s *LimitExceededException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *LimitExceededException) OrigErr() error {
	return nil
}

func (s *LimitExceededException) 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 *LimitExceededException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *LimitExceededException) RequestID() string {
	return s.RespMetadata.RequestID
}

type ListActiveViolationsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The criteria for a behavior.
	BehaviorCriteriaType *string `location:"querystring" locationName:"behaviorCriteriaType" type:"string" enum:"BehaviorCriteriaType"`

	// A list of all suppressed alerts.
	ListSuppressedAlerts *bool `location:"querystring" locationName:"listSuppressedAlerts" type:"boolean"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The name of the Device Defender security profile for which violations are
	// listed.
	SecurityProfileName *string `location:"querystring" locationName:"securityProfileName" min:"1" type:"string"`

	// The name of the thing whose active violations are listed.
	ThingName *string `location:"querystring" locationName:"thingName" min:"1" type:"string"`

	// The verification state of the violation (detect alarm).
	VerificationState *string `location:"querystring" locationName:"verificationState" type:"string" enum:"VerificationState"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListActiveViolationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListActiveViolationsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListActiveViolationsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListActiveViolationsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.SecurityProfileName != nil && len(*s.SecurityProfileName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SecurityProfileName", 1))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBehaviorCriteriaType sets the BehaviorCriteriaType field's value.
func (s *ListActiveViolationsInput) SetBehaviorCriteriaType(v string) *ListActiveViolationsInput {
	s.BehaviorCriteriaType = &v
	return s
}

// SetListSuppressedAlerts sets the ListSuppressedAlerts field's value.
func (s *ListActiveViolationsInput) SetListSuppressedAlerts(v bool) *ListActiveViolationsInput {
	s.ListSuppressedAlerts = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListActiveViolationsInput) SetMaxResults(v int64) *ListActiveViolationsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListActiveViolationsInput) SetNextToken(v string) *ListActiveViolationsInput {
	s.NextToken = &v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *ListActiveViolationsInput) SetSecurityProfileName(v string) *ListActiveViolationsInput {
	s.SecurityProfileName = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *ListActiveViolationsInput) SetThingName(v string) *ListActiveViolationsInput {
	s.ThingName = &v
	return s
}

// SetVerificationState sets the VerificationState field's value.
func (s *ListActiveViolationsInput) SetVerificationState(v string) *ListActiveViolationsInput {
	s.VerificationState = &v
	return s
}

type ListActiveViolationsOutput struct {
	_ struct{} `type:"structure"`

	// The list of active violations.
	ActiveViolations []*ActiveViolation `locationName:"activeViolations" type:"list"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListActiveViolationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListActiveViolationsOutput) GoString() string {
	return s.String()
}

// SetActiveViolations sets the ActiveViolations field's value.
func (s *ListActiveViolationsOutput) SetActiveViolations(v []*ActiveViolation) *ListActiveViolationsOutput {
	s.ActiveViolations = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListActiveViolationsOutput) SetNextToken(v string) *ListActiveViolationsOutput {
	s.NextToken = &v
	return s
}

type ListAttachedPoliciesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The token to retrieve the next set of results.
	Marker *string `location:"querystring" locationName:"marker" type:"string"`

	// The maximum number of results to be returned per request.
	PageSize *int64 `location:"querystring" locationName:"pageSize" min:"1" type:"integer"`

	// When true, recursively list attached policies.
	Recursive *bool `location:"querystring" locationName:"recursive" type:"boolean"`

	// The group or principal for which the policies will be listed. Valid principals
	// are CertificateArn (arn:aws:iot:region:accountId:cert/certificateId), thingGroupArn
	// (arn:aws:iot:region:accountId:thinggroup/groupName) and CognitoId (region:id).
	//
	// Target is a required field
	Target *string `location:"uri" locationName:"target" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAttachedPoliciesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAttachedPoliciesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListAttachedPoliciesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListAttachedPoliciesInput"}
	if s.PageSize != nil && *s.PageSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("PageSize", 1))
	}
	if s.Target == nil {
		invalidParams.Add(request.NewErrParamRequired("Target"))
	}
	if s.Target != nil && len(*s.Target) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Target", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMarker sets the Marker field's value.
func (s *ListAttachedPoliciesInput) SetMarker(v string) *ListAttachedPoliciesInput {
	s.Marker = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *ListAttachedPoliciesInput) SetPageSize(v int64) *ListAttachedPoliciesInput {
	s.PageSize = &v
	return s
}

// SetRecursive sets the Recursive field's value.
func (s *ListAttachedPoliciesInput) SetRecursive(v bool) *ListAttachedPoliciesInput {
	s.Recursive = &v
	return s
}

// SetTarget sets the Target field's value.
func (s *ListAttachedPoliciesInput) SetTarget(v string) *ListAttachedPoliciesInput {
	s.Target = &v
	return s
}

type ListAttachedPoliciesOutput struct {
	_ struct{} `type:"structure"`

	// The token to retrieve the next set of results, or ``null`` if there are no
	// more results.
	NextMarker *string `locationName:"nextMarker" type:"string"`

	// The policies.
	Policies []*Policy `locationName:"policies" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAttachedPoliciesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAttachedPoliciesOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListAttachedPoliciesOutput) SetNextMarker(v string) *ListAttachedPoliciesOutput {
	s.NextMarker = &v
	return s
}

// SetPolicies sets the Policies field's value.
func (s *ListAttachedPoliciesOutput) SetPolicies(v []*Policy) *ListAttachedPoliciesOutput {
	s.Policies = v
	return s
}

type ListAuditFindingsInput struct {
	_ struct{} `type:"structure"`

	// A filter to limit results to the findings for the specified audit check.
	CheckName *string `locationName:"checkName" type:"string"`

	// A filter to limit results to those found before the specified time. You must
	// specify either the startTime and endTime or the taskId, but not both.
	EndTime *time.Time `locationName:"endTime" type:"timestamp"`

	// Boolean flag indicating whether only the suppressed findings or the unsuppressed
	// findings should be listed. If this parameter isn't provided, the response
	// will list both suppressed and unsuppressed findings.
	ListSuppressedFindings *bool `locationName:"listSuppressedFindings" type:"boolean"`

	// The maximum number of results to return at one time. The default is 25.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// Information identifying the noncompliant resource.
	ResourceIdentifier *ResourceIdentifier `locationName:"resourceIdentifier" type:"structure"`

	// A filter to limit results to those found after the specified time. You must
	// specify either the startTime and endTime or the taskId, but not both.
	StartTime *time.Time `locationName:"startTime" type:"timestamp"`

	// A filter to limit results to the audit with the specified ID. You must specify
	// either the taskId or the startTime and endTime, but not both.
	TaskId *string `locationName:"taskId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditFindingsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditFindingsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListAuditFindingsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListAuditFindingsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.TaskId != nil && len(*s.TaskId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TaskId", 1))
	}
	if s.ResourceIdentifier != nil {
		if err := s.ResourceIdentifier.Validate(); err != nil {
			invalidParams.AddNested("ResourceIdentifier", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCheckName sets the CheckName field's value.
func (s *ListAuditFindingsInput) SetCheckName(v string) *ListAuditFindingsInput {
	s.CheckName = &v
	return s
}

// SetEndTime sets the EndTime field's value.
func (s *ListAuditFindingsInput) SetEndTime(v time.Time) *ListAuditFindingsInput {
	s.EndTime = &v
	return s
}

// SetListSuppressedFindings sets the ListSuppressedFindings field's value.
func (s *ListAuditFindingsInput) SetListSuppressedFindings(v bool) *ListAuditFindingsInput {
	s.ListSuppressedFindings = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListAuditFindingsInput) SetMaxResults(v int64) *ListAuditFindingsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListAuditFindingsInput) SetNextToken(v string) *ListAuditFindingsInput {
	s.NextToken = &v
	return s
}

// SetResourceIdentifier sets the ResourceIdentifier field's value.
func (s *ListAuditFindingsInput) SetResourceIdentifier(v *ResourceIdentifier) *ListAuditFindingsInput {
	s.ResourceIdentifier = v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *ListAuditFindingsInput) SetStartTime(v time.Time) *ListAuditFindingsInput {
	s.StartTime = &v
	return s
}

// SetTaskId sets the TaskId field's value.
func (s *ListAuditFindingsInput) SetTaskId(v string) *ListAuditFindingsInput {
	s.TaskId = &v
	return s
}

type ListAuditFindingsOutput struct {
	_ struct{} `type:"structure"`

	// The findings (results) of the audit.
	Findings []*AuditFinding `locationName:"findings" type:"list"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditFindingsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditFindingsOutput) GoString() string {
	return s.String()
}

// SetFindings sets the Findings field's value.
func (s *ListAuditFindingsOutput) SetFindings(v []*AuditFinding) *ListAuditFindingsOutput {
	s.Findings = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListAuditFindingsOutput) SetNextToken(v string) *ListAuditFindingsOutput {
	s.NextToken = &v
	return s
}

type ListAuditMitigationActionsExecutionsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Specify this filter to limit results to those with a specific status.
	ActionStatus *string `location:"querystring" locationName:"actionStatus" type:"string" enum:"AuditMitigationActionsExecutionStatus"`

	// Specify this filter to limit results to those that were applied to a specific
	// audit finding.
	//
	// FindingId is a required field
	FindingId *string `location:"querystring" locationName:"findingId" min:"1" type:"string" required:"true"`

	// The maximum number of results to return at one time. The default is 25.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// Specify this filter to limit results to actions for a specific audit mitigation
	// actions task.
	//
	// TaskId is a required field
	TaskId *string `location:"querystring" locationName:"taskId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditMitigationActionsExecutionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditMitigationActionsExecutionsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListAuditMitigationActionsExecutionsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListAuditMitigationActionsExecutionsInput"}
	if s.FindingId == nil {
		invalidParams.Add(request.NewErrParamRequired("FindingId"))
	}
	if s.FindingId != nil && len(*s.FindingId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("FindingId", 1))
	}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.TaskId == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskId"))
	}
	if s.TaskId != nil && len(*s.TaskId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TaskId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetActionStatus sets the ActionStatus field's value.
func (s *ListAuditMitigationActionsExecutionsInput) SetActionStatus(v string) *ListAuditMitigationActionsExecutionsInput {
	s.ActionStatus = &v
	return s
}

// SetFindingId sets the FindingId field's value.
func (s *ListAuditMitigationActionsExecutionsInput) SetFindingId(v string) *ListAuditMitigationActionsExecutionsInput {
	s.FindingId = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListAuditMitigationActionsExecutionsInput) SetMaxResults(v int64) *ListAuditMitigationActionsExecutionsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListAuditMitigationActionsExecutionsInput) SetNextToken(v string) *ListAuditMitigationActionsExecutionsInput {
	s.NextToken = &v
	return s
}

// SetTaskId sets the TaskId field's value.
func (s *ListAuditMitigationActionsExecutionsInput) SetTaskId(v string) *ListAuditMitigationActionsExecutionsInput {
	s.TaskId = &v
	return s
}

type ListAuditMitigationActionsExecutionsOutput struct {
	_ struct{} `type:"structure"`

	// A set of task execution results based on the input parameters. Details include
	// the mitigation action applied, start time, and task status.
	ActionsExecutions []*AuditMitigationActionExecutionMetadata `locationName:"actionsExecutions" type:"list"`

	// The token for the next set of results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditMitigationActionsExecutionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditMitigationActionsExecutionsOutput) GoString() string {
	return s.String()
}

// SetActionsExecutions sets the ActionsExecutions field's value.
func (s *ListAuditMitigationActionsExecutionsOutput) SetActionsExecutions(v []*AuditMitigationActionExecutionMetadata) *ListAuditMitigationActionsExecutionsOutput {
	s.ActionsExecutions = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListAuditMitigationActionsExecutionsOutput) SetNextToken(v string) *ListAuditMitigationActionsExecutionsOutput {
	s.NextToken = &v
	return s
}

type ListAuditMitigationActionsTasksInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Specify this filter to limit results to tasks that were applied to results
	// for a specific audit.
	AuditTaskId *string `location:"querystring" locationName:"auditTaskId" min:"1" type:"string"`

	// Specify this filter to limit results to tasks that were completed or canceled
	// on or before a specific date and time.
	//
	// EndTime is a required field
	EndTime *time.Time `location:"querystring" locationName:"endTime" type:"timestamp" required:"true"`

	// Specify this filter to limit results to tasks that were applied to a specific
	// audit finding.
	FindingId *string `location:"querystring" locationName:"findingId" min:"1" type:"string"`

	// The maximum number of results to return at one time. The default is 25.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// Specify this filter to limit results to tasks that began on or after a specific
	// date and time.
	//
	// StartTime is a required field
	StartTime *time.Time `location:"querystring" locationName:"startTime" type:"timestamp" required:"true"`

	// Specify this filter to limit results to tasks that are in a specific state.
	TaskStatus *string `location:"querystring" locationName:"taskStatus" type:"string" enum:"AuditMitigationActionsTaskStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditMitigationActionsTasksInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditMitigationActionsTasksInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListAuditMitigationActionsTasksInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListAuditMitigationActionsTasksInput"}
	if s.AuditTaskId != nil && len(*s.AuditTaskId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AuditTaskId", 1))
	}
	if s.EndTime == nil {
		invalidParams.Add(request.NewErrParamRequired("EndTime"))
	}
	if s.FindingId != nil && len(*s.FindingId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("FindingId", 1))
	}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.StartTime == nil {
		invalidParams.Add(request.NewErrParamRequired("StartTime"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuditTaskId sets the AuditTaskId field's value.
func (s *ListAuditMitigationActionsTasksInput) SetAuditTaskId(v string) *ListAuditMitigationActionsTasksInput {
	s.AuditTaskId = &v
	return s
}

// SetEndTime sets the EndTime field's value.
func (s *ListAuditMitigationActionsTasksInput) SetEndTime(v time.Time) *ListAuditMitigationActionsTasksInput {
	s.EndTime = &v
	return s
}

// SetFindingId sets the FindingId field's value.
func (s *ListAuditMitigationActionsTasksInput) SetFindingId(v string) *ListAuditMitigationActionsTasksInput {
	s.FindingId = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListAuditMitigationActionsTasksInput) SetMaxResults(v int64) *ListAuditMitigationActionsTasksInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListAuditMitigationActionsTasksInput) SetNextToken(v string) *ListAuditMitigationActionsTasksInput {
	s.NextToken = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *ListAuditMitigationActionsTasksInput) SetStartTime(v time.Time) *ListAuditMitigationActionsTasksInput {
	s.StartTime = &v
	return s
}

// SetTaskStatus sets the TaskStatus field's value.
func (s *ListAuditMitigationActionsTasksInput) SetTaskStatus(v string) *ListAuditMitigationActionsTasksInput {
	s.TaskStatus = &v
	return s
}

type ListAuditMitigationActionsTasksOutput struct {
	_ struct{} `type:"structure"`

	// The token for the next set of results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The collection of audit mitigation tasks that matched the filter criteria.
	Tasks []*AuditMitigationActionsTaskMetadata `locationName:"tasks" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditMitigationActionsTasksOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditMitigationActionsTasksOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListAuditMitigationActionsTasksOutput) SetNextToken(v string) *ListAuditMitigationActionsTasksOutput {
	s.NextToken = &v
	return s
}

// SetTasks sets the Tasks field's value.
func (s *ListAuditMitigationActionsTasksOutput) SetTasks(v []*AuditMitigationActionsTaskMetadata) *ListAuditMitigationActionsTasksOutput {
	s.Tasks = v
	return s
}

type ListAuditSuppressionsInput struct {
	_ struct{} `type:"structure"`

	// Determines whether suppressions are listed in ascending order by expiration
	// date or not. If parameter isn't provided, ascendingOrder=true.
	AscendingOrder *bool `locationName:"ascendingOrder" type:"boolean"`

	// An audit check name. Checks must be enabled for your account. (Use DescribeAccountAuditConfiguration
	// to see the list of all checks, including those that are enabled or use UpdateAccountAuditConfiguration
	// to select which checks are enabled.)
	CheckName *string `locationName:"checkName" type:"string"`

	// The maximum number of results to return at one time. The default is 25.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// Information that identifies the noncompliant resource.
	ResourceIdentifier *ResourceIdentifier `locationName:"resourceIdentifier" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditSuppressionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditSuppressionsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListAuditSuppressionsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListAuditSuppressionsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.ResourceIdentifier != nil {
		if err := s.ResourceIdentifier.Validate(); err != nil {
			invalidParams.AddNested("ResourceIdentifier", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAscendingOrder sets the AscendingOrder field's value.
func (s *ListAuditSuppressionsInput) SetAscendingOrder(v bool) *ListAuditSuppressionsInput {
	s.AscendingOrder = &v
	return s
}

// SetCheckName sets the CheckName field's value.
func (s *ListAuditSuppressionsInput) SetCheckName(v string) *ListAuditSuppressionsInput {
	s.CheckName = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListAuditSuppressionsInput) SetMaxResults(v int64) *ListAuditSuppressionsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListAuditSuppressionsInput) SetNextToken(v string) *ListAuditSuppressionsInput {
	s.NextToken = &v
	return s
}

// SetResourceIdentifier sets the ResourceIdentifier field's value.
func (s *ListAuditSuppressionsInput) SetResourceIdentifier(v *ResourceIdentifier) *ListAuditSuppressionsInput {
	s.ResourceIdentifier = v
	return s
}

type ListAuditSuppressionsOutput struct {
	_ struct{} `type:"structure"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// List of audit suppressions.
	Suppressions []*AuditSuppression `locationName:"suppressions" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditSuppressionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditSuppressionsOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListAuditSuppressionsOutput) SetNextToken(v string) *ListAuditSuppressionsOutput {
	s.NextToken = &v
	return s
}

// SetSuppressions sets the Suppressions field's value.
func (s *ListAuditSuppressionsOutput) SetSuppressions(v []*AuditSuppression) *ListAuditSuppressionsOutput {
	s.Suppressions = v
	return s
}

type ListAuditTasksInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The end of the time period.
	//
	// EndTime is a required field
	EndTime *time.Time `location:"querystring" locationName:"endTime" type:"timestamp" required:"true"`

	// The maximum number of results to return at one time. The default is 25.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The beginning of the time period. Audit information is retained for a limited
	// time (90 days). Requesting a start time prior to what is retained results
	// in an "InvalidRequestException".
	//
	// StartTime is a required field
	StartTime *time.Time `location:"querystring" locationName:"startTime" type:"timestamp" required:"true"`

	// A filter to limit the output to audits with the specified completion status:
	// can be one of "IN_PROGRESS", "COMPLETED", "FAILED", or "CANCELED".
	TaskStatus *string `location:"querystring" locationName:"taskStatus" type:"string" enum:"AuditTaskStatus"`

	// A filter to limit the output to the specified type of audit: can be one of
	// "ON_DEMAND_AUDIT_TASK" or "SCHEDULED__AUDIT_TASK".
	TaskType *string `location:"querystring" locationName:"taskType" type:"string" enum:"AuditTaskType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditTasksInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditTasksInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListAuditTasksInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListAuditTasksInput"}
	if s.EndTime == nil {
		invalidParams.Add(request.NewErrParamRequired("EndTime"))
	}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.StartTime == nil {
		invalidParams.Add(request.NewErrParamRequired("StartTime"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEndTime sets the EndTime field's value.
func (s *ListAuditTasksInput) SetEndTime(v time.Time) *ListAuditTasksInput {
	s.EndTime = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListAuditTasksInput) SetMaxResults(v int64) *ListAuditTasksInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListAuditTasksInput) SetNextToken(v string) *ListAuditTasksInput {
	s.NextToken = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *ListAuditTasksInput) SetStartTime(v time.Time) *ListAuditTasksInput {
	s.StartTime = &v
	return s
}

// SetTaskStatus sets the TaskStatus field's value.
func (s *ListAuditTasksInput) SetTaskStatus(v string) *ListAuditTasksInput {
	s.TaskStatus = &v
	return s
}

// SetTaskType sets the TaskType field's value.
func (s *ListAuditTasksInput) SetTaskType(v string) *ListAuditTasksInput {
	s.TaskType = &v
	return s
}

type ListAuditTasksOutput struct {
	_ struct{} `type:"structure"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The audits that were performed during the specified time period.
	Tasks []*AuditTaskMetadata `locationName:"tasks" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditTasksOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuditTasksOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListAuditTasksOutput) SetNextToken(v string) *ListAuditTasksOutput {
	s.NextToken = &v
	return s
}

// SetTasks sets the Tasks field's value.
func (s *ListAuditTasksOutput) SetTasks(v []*AuditTaskMetadata) *ListAuditTasksOutput {
	s.Tasks = v
	return s
}

type ListAuthorizersInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Return the list of authorizers in ascending alphabetical order.
	AscendingOrder *bool `location:"querystring" locationName:"isAscendingOrder" type:"boolean"`

	// A marker used to get the next set of results.
	Marker *string `location:"querystring" locationName:"marker" type:"string"`

	// The maximum number of results to return at one time.
	PageSize *int64 `location:"querystring" locationName:"pageSize" min:"1" type:"integer"`

	// The status of the list authorizers request.
	Status *string `location:"querystring" locationName:"status" type:"string" enum:"AuthorizerStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuthorizersInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuthorizersInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListAuthorizersInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListAuthorizersInput"}
	if s.PageSize != nil && *s.PageSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("PageSize", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAscendingOrder sets the AscendingOrder field's value.
func (s *ListAuthorizersInput) SetAscendingOrder(v bool) *ListAuthorizersInput {
	s.AscendingOrder = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *ListAuthorizersInput) SetMarker(v string) *ListAuthorizersInput {
	s.Marker = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *ListAuthorizersInput) SetPageSize(v int64) *ListAuthorizersInput {
	s.PageSize = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ListAuthorizersInput) SetStatus(v string) *ListAuthorizersInput {
	s.Status = &v
	return s
}

type ListAuthorizersOutput struct {
	_ struct{} `type:"structure"`

	// The authorizers.
	Authorizers []*AuthorizerSummary `locationName:"authorizers" type:"list"`

	// A marker used to get the next set of results.
	NextMarker *string `locationName:"nextMarker" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuthorizersOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListAuthorizersOutput) GoString() string {
	return s.String()
}

// SetAuthorizers sets the Authorizers field's value.
func (s *ListAuthorizersOutput) SetAuthorizers(v []*AuthorizerSummary) *ListAuthorizersOutput {
	s.Authorizers = v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListAuthorizersOutput) SetNextMarker(v string) *ListAuthorizersOutput {
	s.NextMarker = &v
	return s
}

type ListBillingGroupsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return per request.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// Limit the results to billing groups whose names have the given prefix.
	NamePrefixFilter *string `location:"querystring" locationName:"namePrefixFilter" min:"1" type:"string"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListBillingGroupsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListBillingGroupsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListBillingGroupsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListBillingGroupsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.NamePrefixFilter != nil && len(*s.NamePrefixFilter) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NamePrefixFilter", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListBillingGroupsInput) SetMaxResults(v int64) *ListBillingGroupsInput {
	s.MaxResults = &v
	return s
}

// SetNamePrefixFilter sets the NamePrefixFilter field's value.
func (s *ListBillingGroupsInput) SetNamePrefixFilter(v string) *ListBillingGroupsInput {
	s.NamePrefixFilter = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListBillingGroupsInput) SetNextToken(v string) *ListBillingGroupsInput {
	s.NextToken = &v
	return s
}

type ListBillingGroupsOutput struct {
	_ struct{} `type:"structure"`

	// The list of billing groups.
	BillingGroups []*GroupNameAndArn `locationName:"billingGroups" type:"list"`

	// The token to use to get the next set of results, or null if there are no
	// additional results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListBillingGroupsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListBillingGroupsOutput) GoString() string {
	return s.String()
}

// SetBillingGroups sets the BillingGroups field's value.
func (s *ListBillingGroupsOutput) SetBillingGroups(v []*GroupNameAndArn) *ListBillingGroupsOutput {
	s.BillingGroups = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListBillingGroupsOutput) SetNextToken(v string) *ListBillingGroupsOutput {
	s.NextToken = &v
	return s
}

// Input for the ListCACertificates operation.
type ListCACertificatesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Determines the order of the results.
	AscendingOrder *bool `location:"querystring" locationName:"isAscendingOrder" type:"boolean"`

	// The marker for the next set of results.
	Marker *string `location:"querystring" locationName:"marker" type:"string"`

	// The result page size.
	PageSize *int64 `location:"querystring" locationName:"pageSize" min:"1" type:"integer"`

	// The name of the provisioning template.
	TemplateName *string `location:"querystring" locationName:"templateName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCACertificatesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCACertificatesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListCACertificatesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListCACertificatesInput"}
	if s.PageSize != nil && *s.PageSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("PageSize", 1))
	}
	if s.TemplateName != nil && len(*s.TemplateName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TemplateName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAscendingOrder sets the AscendingOrder field's value.
func (s *ListCACertificatesInput) SetAscendingOrder(v bool) *ListCACertificatesInput {
	s.AscendingOrder = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *ListCACertificatesInput) SetMarker(v string) *ListCACertificatesInput {
	s.Marker = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *ListCACertificatesInput) SetPageSize(v int64) *ListCACertificatesInput {
	s.PageSize = &v
	return s
}

// SetTemplateName sets the TemplateName field's value.
func (s *ListCACertificatesInput) SetTemplateName(v string) *ListCACertificatesInput {
	s.TemplateName = &v
	return s
}

// The output from the ListCACertificates operation.
type ListCACertificatesOutput struct {
	_ struct{} `type:"structure"`

	// The CA certificates registered in your Amazon Web Services account.
	Certificates []*CACertificate `locationName:"certificates" type:"list"`

	// The current position within the list of CA certificates.
	NextMarker *string `locationName:"nextMarker" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCACertificatesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCACertificatesOutput) GoString() string {
	return s.String()
}

// SetCertificates sets the Certificates field's value.
func (s *ListCACertificatesOutput) SetCertificates(v []*CACertificate) *ListCACertificatesOutput {
	s.Certificates = v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListCACertificatesOutput) SetNextMarker(v string) *ListCACertificatesOutput {
	s.NextMarker = &v
	return s
}

type ListCertificateProvidersInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Returns the list of certificate providers in ascending alphabetical order.
	AscendingOrder *bool `location:"querystring" locationName:"isAscendingOrder" type:"boolean"`

	// The token for the next set of results, or null if there are no more results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCertificateProvidersInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCertificateProvidersInput) GoString() string {
	return s.String()
}

// SetAscendingOrder sets the AscendingOrder field's value.
func (s *ListCertificateProvidersInput) SetAscendingOrder(v bool) *ListCertificateProvidersInput {
	s.AscendingOrder = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListCertificateProvidersInput) SetNextToken(v string) *ListCertificateProvidersInput {
	s.NextToken = &v
	return s
}

type ListCertificateProvidersOutput struct {
	_ struct{} `type:"structure"`

	// The list of certificate providers in your Amazon Web Services account.
	CertificateProviders []*CertificateProviderSummary `locationName:"certificateProviders" type:"list"`

	// The token for the next set of results, or null if there are no more results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCertificateProvidersOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCertificateProvidersOutput) GoString() string {
	return s.String()
}

// SetCertificateProviders sets the CertificateProviders field's value.
func (s *ListCertificateProvidersOutput) SetCertificateProviders(v []*CertificateProviderSummary) *ListCertificateProvidersOutput {
	s.CertificateProviders = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListCertificateProvidersOutput) SetNextToken(v string) *ListCertificateProvidersOutput {
	s.NextToken = &v
	return s
}

// The input to the ListCertificatesByCA operation.
type ListCertificatesByCAInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Specifies the order for results. If True, the results are returned in ascending
	// order, based on the creation date.
	AscendingOrder *bool `location:"querystring" locationName:"isAscendingOrder" type:"boolean"`

	// The ID of the CA certificate. This operation will list all registered device
	// certificate that were signed by this CA certificate.
	//
	// CaCertificateId is a required field
	CaCertificateId *string `location:"uri" locationName:"caCertificateId" min:"64" type:"string" required:"true"`

	// The marker for the next set of results.
	Marker *string `location:"querystring" locationName:"marker" type:"string"`

	// The result page size.
	PageSize *int64 `location:"querystring" locationName:"pageSize" min:"1" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCertificatesByCAInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCertificatesByCAInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListCertificatesByCAInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListCertificatesByCAInput"}
	if s.CaCertificateId == nil {
		invalidParams.Add(request.NewErrParamRequired("CaCertificateId"))
	}
	if s.CaCertificateId != nil && len(*s.CaCertificateId) < 64 {
		invalidParams.Add(request.NewErrParamMinLen("CaCertificateId", 64))
	}
	if s.PageSize != nil && *s.PageSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("PageSize", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAscendingOrder sets the AscendingOrder field's value.
func (s *ListCertificatesByCAInput) SetAscendingOrder(v bool) *ListCertificatesByCAInput {
	s.AscendingOrder = &v
	return s
}

// SetCaCertificateId sets the CaCertificateId field's value.
func (s *ListCertificatesByCAInput) SetCaCertificateId(v string) *ListCertificatesByCAInput {
	s.CaCertificateId = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *ListCertificatesByCAInput) SetMarker(v string) *ListCertificatesByCAInput {
	s.Marker = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *ListCertificatesByCAInput) SetPageSize(v int64) *ListCertificatesByCAInput {
	s.PageSize = &v
	return s
}

// The output of the ListCertificatesByCA operation.
type ListCertificatesByCAOutput struct {
	_ struct{} `type:"structure"`

	// The device certificates signed by the specified CA certificate.
	Certificates []*Certificate `locationName:"certificates" type:"list"`

	// The marker for the next set of results, or null if there are no additional
	// results.
	NextMarker *string `locationName:"nextMarker" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCertificatesByCAOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCertificatesByCAOutput) GoString() string {
	return s.String()
}

// SetCertificates sets the Certificates field's value.
func (s *ListCertificatesByCAOutput) SetCertificates(v []*Certificate) *ListCertificatesByCAOutput {
	s.Certificates = v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListCertificatesByCAOutput) SetNextMarker(v string) *ListCertificatesByCAOutput {
	s.NextMarker = &v
	return s
}

// The input for the ListCertificates operation.
type ListCertificatesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Specifies the order for results. If True, the results are returned in ascending
	// order, based on the creation date.
	AscendingOrder *bool `location:"querystring" locationName:"isAscendingOrder" type:"boolean"`

	// The marker for the next set of results.
	Marker *string `location:"querystring" locationName:"marker" type:"string"`

	// The result page size.
	PageSize *int64 `location:"querystring" locationName:"pageSize" min:"1" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCertificatesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCertificatesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListCertificatesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListCertificatesInput"}
	if s.PageSize != nil && *s.PageSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("PageSize", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAscendingOrder sets the AscendingOrder field's value.
func (s *ListCertificatesInput) SetAscendingOrder(v bool) *ListCertificatesInput {
	s.AscendingOrder = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *ListCertificatesInput) SetMarker(v string) *ListCertificatesInput {
	s.Marker = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *ListCertificatesInput) SetPageSize(v int64) *ListCertificatesInput {
	s.PageSize = &v
	return s
}

// The output of the ListCertificates operation.
type ListCertificatesOutput struct {
	_ struct{} `type:"structure"`

	// The descriptions of the certificates.
	Certificates []*Certificate `locationName:"certificates" type:"list"`

	// The marker for the next set of results, or null if there are no additional
	// results.
	NextMarker *string `locationName:"nextMarker" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCertificatesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCertificatesOutput) GoString() string {
	return s.String()
}

// SetCertificates sets the Certificates field's value.
func (s *ListCertificatesOutput) SetCertificates(v []*Certificate) *ListCertificatesOutput {
	s.Certificates = v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListCertificatesOutput) SetNextMarker(v string) *ListCertificatesOutput {
	s.NextMarker = &v
	return s
}

type ListCustomMetricsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time. The default is 25.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCustomMetricsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCustomMetricsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListCustomMetricsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListCustomMetricsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListCustomMetricsInput) SetMaxResults(v int64) *ListCustomMetricsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListCustomMetricsInput) SetNextToken(v string) *ListCustomMetricsInput {
	s.NextToken = &v
	return s
}

type ListCustomMetricsOutput struct {
	_ struct{} `type:"structure"`

	// The name of the custom metric.
	MetricNames []*string `locationName:"metricNames" type:"list"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCustomMetricsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListCustomMetricsOutput) GoString() string {
	return s.String()
}

// SetMetricNames sets the MetricNames field's value.
func (s *ListCustomMetricsOutput) SetMetricNames(v []*string) *ListCustomMetricsOutput {
	s.MetricNames = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListCustomMetricsOutput) SetNextToken(v string) *ListCustomMetricsOutput {
	s.NextToken = &v
	return s
}

type ListDetectMitigationActionsExecutionsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The end of the time period for which ML Detect mitigation actions executions
	// are returned.
	EndTime *time.Time `location:"querystring" locationName:"endTime" type:"timestamp"`

	// The maximum number of results to return at one time. The default is 25.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// A filter to limit results to those found after the specified time. You must
	// specify either the startTime and endTime or the taskId, but not both.
	StartTime *time.Time `location:"querystring" locationName:"startTime" type:"timestamp"`

	// The unique identifier of the task.
	TaskId *string `location:"querystring" locationName:"taskId" min:"1" type:"string"`

	// The name of the thing whose mitigation actions are listed.
	ThingName *string `location:"querystring" locationName:"thingName" min:"1" type:"string"`

	// The unique identifier of the violation.
	ViolationId *string `location:"querystring" locationName:"violationId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDetectMitigationActionsExecutionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDetectMitigationActionsExecutionsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListDetectMitigationActionsExecutionsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListDetectMitigationActionsExecutionsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.TaskId != nil && len(*s.TaskId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TaskId", 1))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}
	if s.ViolationId != nil && len(*s.ViolationId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ViolationId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEndTime sets the EndTime field's value.
func (s *ListDetectMitigationActionsExecutionsInput) SetEndTime(v time.Time) *ListDetectMitigationActionsExecutionsInput {
	s.EndTime = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListDetectMitigationActionsExecutionsInput) SetMaxResults(v int64) *ListDetectMitigationActionsExecutionsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListDetectMitigationActionsExecutionsInput) SetNextToken(v string) *ListDetectMitigationActionsExecutionsInput {
	s.NextToken = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *ListDetectMitigationActionsExecutionsInput) SetStartTime(v time.Time) *ListDetectMitigationActionsExecutionsInput {
	s.StartTime = &v
	return s
}

// SetTaskId sets the TaskId field's value.
func (s *ListDetectMitigationActionsExecutionsInput) SetTaskId(v string) *ListDetectMitigationActionsExecutionsInput {
	s.TaskId = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *ListDetectMitigationActionsExecutionsInput) SetThingName(v string) *ListDetectMitigationActionsExecutionsInput {
	s.ThingName = &v
	return s
}

// SetViolationId sets the ViolationId field's value.
func (s *ListDetectMitigationActionsExecutionsInput) SetViolationId(v string) *ListDetectMitigationActionsExecutionsInput {
	s.ViolationId = &v
	return s
}

type ListDetectMitigationActionsExecutionsOutput struct {
	_ struct{} `type:"structure"`

	// List of actions executions.
	ActionsExecutions []*DetectMitigationActionExecution `locationName:"actionsExecutions" type:"list"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDetectMitigationActionsExecutionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDetectMitigationActionsExecutionsOutput) GoString() string {
	return s.String()
}

// SetActionsExecutions sets the ActionsExecutions field's value.
func (s *ListDetectMitigationActionsExecutionsOutput) SetActionsExecutions(v []*DetectMitigationActionExecution) *ListDetectMitigationActionsExecutionsOutput {
	s.ActionsExecutions = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListDetectMitigationActionsExecutionsOutput) SetNextToken(v string) *ListDetectMitigationActionsExecutionsOutput {
	s.NextToken = &v
	return s
}

type ListDetectMitigationActionsTasksInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The end of the time period for which ML Detect mitigation actions tasks are
	// returned.
	//
	// EndTime is a required field
	EndTime *time.Time `location:"querystring" locationName:"endTime" type:"timestamp" required:"true"`

	// The maximum number of results to return at one time. The default is 25.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// A filter to limit results to those found after the specified time. You must
	// specify either the startTime and endTime or the taskId, but not both.
	//
	// StartTime is a required field
	StartTime *time.Time `location:"querystring" locationName:"startTime" type:"timestamp" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDetectMitigationActionsTasksInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDetectMitigationActionsTasksInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListDetectMitigationActionsTasksInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListDetectMitigationActionsTasksInput"}
	if s.EndTime == nil {
		invalidParams.Add(request.NewErrParamRequired("EndTime"))
	}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.StartTime == nil {
		invalidParams.Add(request.NewErrParamRequired("StartTime"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEndTime sets the EndTime field's value.
func (s *ListDetectMitigationActionsTasksInput) SetEndTime(v time.Time) *ListDetectMitigationActionsTasksInput {
	s.EndTime = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListDetectMitigationActionsTasksInput) SetMaxResults(v int64) *ListDetectMitigationActionsTasksInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListDetectMitigationActionsTasksInput) SetNextToken(v string) *ListDetectMitigationActionsTasksInput {
	s.NextToken = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *ListDetectMitigationActionsTasksInput) SetStartTime(v time.Time) *ListDetectMitigationActionsTasksInput {
	s.StartTime = &v
	return s
}

type ListDetectMitigationActionsTasksOutput struct {
	_ struct{} `type:"structure"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The collection of ML Detect mitigation tasks that matched the filter criteria.
	Tasks []*DetectMitigationActionsTaskSummary `locationName:"tasks" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDetectMitigationActionsTasksOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDetectMitigationActionsTasksOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListDetectMitigationActionsTasksOutput) SetNextToken(v string) *ListDetectMitigationActionsTasksOutput {
	s.NextToken = &v
	return s
}

// SetTasks sets the Tasks field's value.
func (s *ListDetectMitigationActionsTasksOutput) SetTasks(v []*DetectMitigationActionsTaskSummary) *ListDetectMitigationActionsTasksOutput {
	s.Tasks = v
	return s
}

type ListDimensionsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to retrieve at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDimensionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDimensionsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListDimensionsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListDimensionsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListDimensionsInput) SetMaxResults(v int64) *ListDimensionsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListDimensionsInput) SetNextToken(v string) *ListDimensionsInput {
	s.NextToken = &v
	return s
}

type ListDimensionsOutput struct {
	_ struct{} `type:"structure"`

	// A list of the names of the defined dimensions. Use DescribeDimension to get
	// details for a dimension.
	DimensionNames []*string `locationName:"dimensionNames" type:"list"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDimensionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDimensionsOutput) GoString() string {
	return s.String()
}

// SetDimensionNames sets the DimensionNames field's value.
func (s *ListDimensionsOutput) SetDimensionNames(v []*string) *ListDimensionsOutput {
	s.DimensionNames = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListDimensionsOutput) SetNextToken(v string) *ListDimensionsOutput {
	s.NextToken = &v
	return s
}

type ListDomainConfigurationsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The marker for the next set of results.
	Marker *string `location:"querystring" locationName:"marker" type:"string"`

	// The result page size.
	PageSize *int64 `location:"querystring" locationName:"pageSize" min:"1" type:"integer"`

	// The type of service delivered by the endpoint.
	ServiceType *string `location:"querystring" locationName:"serviceType" type:"string" enum:"ServiceType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDomainConfigurationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDomainConfigurationsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListDomainConfigurationsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListDomainConfigurationsInput"}
	if s.PageSize != nil && *s.PageSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("PageSize", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMarker sets the Marker field's value.
func (s *ListDomainConfigurationsInput) SetMarker(v string) *ListDomainConfigurationsInput {
	s.Marker = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *ListDomainConfigurationsInput) SetPageSize(v int64) *ListDomainConfigurationsInput {
	s.PageSize = &v
	return s
}

// SetServiceType sets the ServiceType field's value.
func (s *ListDomainConfigurationsInput) SetServiceType(v string) *ListDomainConfigurationsInput {
	s.ServiceType = &v
	return s
}

type ListDomainConfigurationsOutput struct {
	_ struct{} `type:"structure"`

	// A list of objects that contain summary information about the user's domain
	// configurations.
	DomainConfigurations []*DomainConfigurationSummary `locationName:"domainConfigurations" type:"list"`

	// The marker for the next set of results.
	NextMarker *string `locationName:"nextMarker" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDomainConfigurationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListDomainConfigurationsOutput) GoString() string {
	return s.String()
}

// SetDomainConfigurations sets the DomainConfigurations field's value.
func (s *ListDomainConfigurationsOutput) SetDomainConfigurations(v []*DomainConfigurationSummary) *ListDomainConfigurationsOutput {
	s.DomainConfigurations = v
	return s
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListDomainConfigurationsOutput) SetNextMarker(v string) *ListDomainConfigurationsOutput {
	s.NextMarker = &v
	return s
}

type ListFleetMetricsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return in this operation.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListFleetMetricsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListFleetMetricsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListFleetMetricsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListFleetMetricsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListFleetMetricsInput) SetMaxResults(v int64) *ListFleetMetricsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListFleetMetricsInput) SetNextToken(v string) *ListFleetMetricsInput {
	s.NextToken = &v
	return s
}

type ListFleetMetricsOutput struct {
	_ struct{} `type:"structure"`

	// The list of fleet metrics objects.
	FleetMetrics []*FleetMetricNameAndArn `locationName:"fleetMetrics" type:"list"`

	// The token for the next set of results. Will not be returned if the operation
	// has returned all results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListFleetMetricsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListFleetMetricsOutput) GoString() string {
	return s.String()
}

// SetFleetMetrics sets the FleetMetrics field's value.
func (s *ListFleetMetricsOutput) SetFleetMetrics(v []*FleetMetricNameAndArn) *ListFleetMetricsOutput {
	s.FleetMetrics = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListFleetMetricsOutput) SetNextToken(v string) *ListFleetMetricsOutput {
	s.NextToken = &v
	return s
}

type ListIndicesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token used to get the next set of results, or null if there are no additional
	// results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListIndicesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListIndicesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListIndicesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListIndicesInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListIndicesInput) SetMaxResults(v int64) *ListIndicesInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListIndicesInput) SetNextToken(v string) *ListIndicesInput {
	s.NextToken = &v
	return s
}

type ListIndicesOutput struct {
	_ struct{} `type:"structure"`

	// The index names.
	IndexNames []*string `locationName:"indexNames" type:"list"`

	// The token used to get the next set of results, or null if there are no additional
	// results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListIndicesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListIndicesOutput) GoString() string {
	return s.String()
}

// SetIndexNames sets the IndexNames field's value.
func (s *ListIndicesOutput) SetIndexNames(v []*string) *ListIndicesOutput {
	s.IndexNames = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListIndicesOutput) SetNextToken(v string) *ListIndicesOutput {
	s.NextToken = &v
	return s
}

type ListJobExecutionsForJobInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique identifier you assigned to this job when it was created.
	//
	// JobId is a required field
	JobId *string `location:"uri" locationName:"jobId" min:"1" type:"string" required:"true"`

	// The maximum number of results to be returned per request.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token to retrieve the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The status of the job.
	Status *string `location:"querystring" locationName:"status" type:"string" enum:"JobExecutionStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobExecutionsForJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobExecutionsForJobInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListJobExecutionsForJobInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListJobExecutionsForJobInput"}
	if s.JobId == nil {
		invalidParams.Add(request.NewErrParamRequired("JobId"))
	}
	if s.JobId != nil && len(*s.JobId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("JobId", 1))
	}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetJobId sets the JobId field's value.
func (s *ListJobExecutionsForJobInput) SetJobId(v string) *ListJobExecutionsForJobInput {
	s.JobId = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListJobExecutionsForJobInput) SetMaxResults(v int64) *ListJobExecutionsForJobInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListJobExecutionsForJobInput) SetNextToken(v string) *ListJobExecutionsForJobInput {
	s.NextToken = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ListJobExecutionsForJobInput) SetStatus(v string) *ListJobExecutionsForJobInput {
	s.Status = &v
	return s
}

type ListJobExecutionsForJobOutput struct {
	_ struct{} `type:"structure"`

	// A list of job execution summaries.
	ExecutionSummaries []*JobExecutionSummaryForJob `locationName:"executionSummaries" type:"list"`

	// The token for the next set of results, or null if there are no additional
	// results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobExecutionsForJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobExecutionsForJobOutput) GoString() string {
	return s.String()
}

// SetExecutionSummaries sets the ExecutionSummaries field's value.
func (s *ListJobExecutionsForJobOutput) SetExecutionSummaries(v []*JobExecutionSummaryForJob) *ListJobExecutionsForJobOutput {
	s.ExecutionSummaries = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListJobExecutionsForJobOutput) SetNextToken(v string) *ListJobExecutionsForJobOutput {
	s.NextToken = &v
	return s
}

type ListJobExecutionsForThingInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique identifier you assigned to this job when it was created.
	JobId *string `location:"querystring" locationName:"jobId" min:"1" type:"string"`

	// The maximum number of results to be returned per request.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The namespace used to indicate that a job is a customer-managed job.
	//
	// When you specify a value for this parameter, Amazon Web Services IoT Core
	// sends jobs notifications to MQTT topics that contain the value in the following
	// format.
	//
	// $aws/things/THING_NAME/jobs/JOB_ID/notify-namespace-NAMESPACE_ID/
	//
	// The namespaceId feature is only supported by IoT Greengrass at this time.
	// For more information, see Setting up IoT Greengrass core devices. (https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html)
	NamespaceId *string `location:"querystring" locationName:"namespaceId" type:"string"`

	// The token to retrieve the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// An optional filter that lets you search for jobs that have the specified
	// status.
	Status *string `location:"querystring" locationName:"status" type:"string" enum:"JobExecutionStatus"`

	// The thing name.
	//
	// ThingName is a required field
	ThingName *string `location:"uri" locationName:"thingName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobExecutionsForThingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobExecutionsForThingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListJobExecutionsForThingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListJobExecutionsForThingInput"}
	if s.JobId != nil && len(*s.JobId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("JobId", 1))
	}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.ThingName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingName"))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetJobId sets the JobId field's value.
func (s *ListJobExecutionsForThingInput) SetJobId(v string) *ListJobExecutionsForThingInput {
	s.JobId = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListJobExecutionsForThingInput) SetMaxResults(v int64) *ListJobExecutionsForThingInput {
	s.MaxResults = &v
	return s
}

// SetNamespaceId sets the NamespaceId field's value.
func (s *ListJobExecutionsForThingInput) SetNamespaceId(v string) *ListJobExecutionsForThingInput {
	s.NamespaceId = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListJobExecutionsForThingInput) SetNextToken(v string) *ListJobExecutionsForThingInput {
	s.NextToken = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ListJobExecutionsForThingInput) SetStatus(v string) *ListJobExecutionsForThingInput {
	s.Status = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *ListJobExecutionsForThingInput) SetThingName(v string) *ListJobExecutionsForThingInput {
	s.ThingName = &v
	return s
}

type ListJobExecutionsForThingOutput struct {
	_ struct{} `type:"structure"`

	// A list of job execution summaries.
	ExecutionSummaries []*JobExecutionSummaryForThing `locationName:"executionSummaries" type:"list"`

	// The token for the next set of results, or null if there are no additional
	// results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobExecutionsForThingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobExecutionsForThingOutput) GoString() string {
	return s.String()
}

// SetExecutionSummaries sets the ExecutionSummaries field's value.
func (s *ListJobExecutionsForThingOutput) SetExecutionSummaries(v []*JobExecutionSummaryForThing) *ListJobExecutionsForThingOutput {
	s.ExecutionSummaries = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListJobExecutionsForThingOutput) SetNextToken(v string) *ListJobExecutionsForThingOutput {
	s.NextToken = &v
	return s
}

type ListJobTemplatesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return in the list.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token to use to return the next set of results in the list.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobTemplatesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobTemplatesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListJobTemplatesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListJobTemplatesInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListJobTemplatesInput) SetMaxResults(v int64) *ListJobTemplatesInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListJobTemplatesInput) SetNextToken(v string) *ListJobTemplatesInput {
	s.NextToken = &v
	return s
}

type ListJobTemplatesOutput struct {
	_ struct{} `type:"structure"`

	// A list of objects that contain information about the job templates.
	JobTemplates []*JobTemplateSummary `locationName:"jobTemplates" type:"list"`

	// The token for the next set of results, or null if there are no additional
	// results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobTemplatesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobTemplatesOutput) GoString() string {
	return s.String()
}

// SetJobTemplates sets the JobTemplates field's value.
func (s *ListJobTemplatesOutput) SetJobTemplates(v []*JobTemplateSummary) *ListJobTemplatesOutput {
	s.JobTemplates = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListJobTemplatesOutput) SetNextToken(v string) *ListJobTemplatesOutput {
	s.NextToken = &v
	return s
}

type ListJobsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return per request.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The namespace used to indicate that a job is a customer-managed job.
	//
	// When you specify a value for this parameter, Amazon Web Services IoT Core
	// sends jobs notifications to MQTT topics that contain the value in the following
	// format.
	//
	// $aws/things/THING_NAME/jobs/JOB_ID/notify-namespace-NAMESPACE_ID/
	//
	// The namespaceId feature is only supported by IoT Greengrass at this time.
	// For more information, see Setting up IoT Greengrass core devices. (https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html)
	NamespaceId *string `location:"querystring" locationName:"namespaceId" type:"string"`

	// The token to retrieve the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// An optional filter that lets you search for jobs that have the specified
	// status.
	Status *string `location:"querystring" locationName:"status" type:"string" enum:"JobStatus"`

	// Specifies whether the job will continue to run (CONTINUOUS), or will be complete
	// after all those things specified as targets have completed the job (SNAPSHOT).
	// If continuous, the job may also be run on a thing when a change is detected
	// in a target. For example, a job will run on a thing when the thing is added
	// to a target group, even after the job was completed by all things originally
	// in the group.
	//
	// We recommend that you use continuous jobs instead of snapshot jobs for dynamic
	// thing group targets. By using continuous jobs, devices that join the group
	// receive the job execution even after the job has been created.
	TargetSelection *string `location:"querystring" locationName:"targetSelection" type:"string" enum:"TargetSelection"`

	// A filter that limits the returned jobs to those for the specified group.
	ThingGroupId *string `location:"querystring" locationName:"thingGroupId" min:"1" type:"string"`

	// A filter that limits the returned jobs to those for the specified group.
	ThingGroupName *string `location:"querystring" locationName:"thingGroupName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListJobsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListJobsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.ThingGroupId != nil && len(*s.ThingGroupId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingGroupId", 1))
	}
	if s.ThingGroupName != nil && len(*s.ThingGroupName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingGroupName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListJobsInput) SetMaxResults(v int64) *ListJobsInput {
	s.MaxResults = &v
	return s
}

// SetNamespaceId sets the NamespaceId field's value.
func (s *ListJobsInput) SetNamespaceId(v string) *ListJobsInput {
	s.NamespaceId = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListJobsInput) SetNextToken(v string) *ListJobsInput {
	s.NextToken = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ListJobsInput) SetStatus(v string) *ListJobsInput {
	s.Status = &v
	return s
}

// SetTargetSelection sets the TargetSelection field's value.
func (s *ListJobsInput) SetTargetSelection(v string) *ListJobsInput {
	s.TargetSelection = &v
	return s
}

// SetThingGroupId sets the ThingGroupId field's value.
func (s *ListJobsInput) SetThingGroupId(v string) *ListJobsInput {
	s.ThingGroupId = &v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *ListJobsInput) SetThingGroupName(v string) *ListJobsInput {
	s.ThingGroupName = &v
	return s
}

type ListJobsOutput struct {
	_ struct{} `type:"structure"`

	// A list of jobs.
	Jobs []*JobSummary `locationName:"jobs" type:"list"`

	// The token for the next set of results, or null if there are no additional
	// results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListJobsOutput) GoString() string {
	return s.String()
}

// SetJobs sets the Jobs field's value.
func (s *ListJobsOutput) SetJobs(v []*JobSummary) *ListJobsOutput {
	s.Jobs = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListJobsOutput) SetNextToken(v string) *ListJobsOutput {
	s.NextToken = &v
	return s
}

type ListManagedJobTemplatesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Maximum number of entries that can be returned.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token to retrieve the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// An optional parameter for template name. If specified, only the versions
	// of the managed job templates that have the specified template name will be
	// returned.
	TemplateName *string `location:"querystring" locationName:"templateName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListManagedJobTemplatesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListManagedJobTemplatesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListManagedJobTemplatesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListManagedJobTemplatesInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.TemplateName != nil && len(*s.TemplateName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TemplateName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListManagedJobTemplatesInput) SetMaxResults(v int64) *ListManagedJobTemplatesInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListManagedJobTemplatesInput) SetNextToken(v string) *ListManagedJobTemplatesInput {
	s.NextToken = &v
	return s
}

// SetTemplateName sets the TemplateName field's value.
func (s *ListManagedJobTemplatesInput) SetTemplateName(v string) *ListManagedJobTemplatesInput {
	s.TemplateName = &v
	return s
}

type ListManagedJobTemplatesOutput struct {
	_ struct{} `type:"structure"`

	// A list of managed job templates that are returned.
	ManagedJobTemplates []*ManagedJobTemplateSummary `locationName:"managedJobTemplates" type:"list"`

	// The token to retrieve the next set of results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListManagedJobTemplatesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListManagedJobTemplatesOutput) GoString() string {
	return s.String()
}

// SetManagedJobTemplates sets the ManagedJobTemplates field's value.
func (s *ListManagedJobTemplatesOutput) SetManagedJobTemplates(v []*ManagedJobTemplateSummary) *ListManagedJobTemplatesOutput {
	s.ManagedJobTemplates = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListManagedJobTemplatesOutput) SetNextToken(v string) *ListManagedJobTemplatesOutput {
	s.NextToken = &v
	return s
}

type ListMetricValuesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The dimension name.
	DimensionName *string `location:"querystring" locationName:"dimensionName" min:"1" type:"string"`

	// The dimension value operator.
	DimensionValueOperator *string `location:"querystring" locationName:"dimensionValueOperator" type:"string" enum:"DimensionValueOperator"`

	// The end of the time period for which metric values are returned.
	//
	// EndTime is a required field
	EndTime *time.Time `location:"querystring" locationName:"endTime" type:"timestamp" required:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The name of the security profile metric for which values are returned.
	//
	// MetricName is a required field
	MetricName *string `location:"querystring" locationName:"metricName" type:"string" required:"true"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The start of the time period for which metric values are returned.
	//
	// StartTime is a required field
	StartTime *time.Time `location:"querystring" locationName:"startTime" type:"timestamp" required:"true"`

	// The name of the thing for which security profile metric values are returned.
	//
	// ThingName is a required field
	ThingName *string `location:"querystring" locationName:"thingName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListMetricValuesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListMetricValuesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListMetricValuesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListMetricValuesInput"}
	if s.DimensionName != nil && len(*s.DimensionName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DimensionName", 1))
	}
	if s.EndTime == nil {
		invalidParams.Add(request.NewErrParamRequired("EndTime"))
	}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.MetricName == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricName"))
	}
	if s.StartTime == nil {
		invalidParams.Add(request.NewErrParamRequired("StartTime"))
	}
	if s.ThingName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingName"))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDimensionName sets the DimensionName field's value.
func (s *ListMetricValuesInput) SetDimensionName(v string) *ListMetricValuesInput {
	s.DimensionName = &v
	return s
}

// SetDimensionValueOperator sets the DimensionValueOperator field's value.
func (s *ListMetricValuesInput) SetDimensionValueOperator(v string) *ListMetricValuesInput {
	s.DimensionValueOperator = &v
	return s
}

// SetEndTime sets the EndTime field's value.
func (s *ListMetricValuesInput) SetEndTime(v time.Time) *ListMetricValuesInput {
	s.EndTime = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListMetricValuesInput) SetMaxResults(v int64) *ListMetricValuesInput {
	s.MaxResults = &v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *ListMetricValuesInput) SetMetricName(v string) *ListMetricValuesInput {
	s.MetricName = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListMetricValuesInput) SetNextToken(v string) *ListMetricValuesInput {
	s.NextToken = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *ListMetricValuesInput) SetStartTime(v time.Time) *ListMetricValuesInput {
	s.StartTime = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *ListMetricValuesInput) SetThingName(v string) *ListMetricValuesInput {
	s.ThingName = &v
	return s
}

type ListMetricValuesOutput struct {
	_ struct{} `type:"structure"`

	// The data the thing reports for the metric during the specified time period.
	MetricDatumList []*MetricDatum `locationName:"metricDatumList" type:"list"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListMetricValuesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListMetricValuesOutput) GoString() string {
	return s.String()
}

// SetMetricDatumList sets the MetricDatumList field's value.
func (s *ListMetricValuesOutput) SetMetricDatumList(v []*MetricDatum) *ListMetricValuesOutput {
	s.MetricDatumList = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListMetricValuesOutput) SetNextToken(v string) *ListMetricValuesOutput {
	s.NextToken = &v
	return s
}

type ListMitigationActionsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Specify a value to limit the result to mitigation actions with a specific
	// action type.
	ActionType *string `location:"querystring" locationName:"actionType" type:"string" enum:"MitigationActionType"`

	// The maximum number of results to return at one time. The default is 25.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListMitigationActionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListMitigationActionsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListMitigationActionsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListMitigationActionsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetActionType sets the ActionType field's value.
func (s *ListMitigationActionsInput) SetActionType(v string) *ListMitigationActionsInput {
	s.ActionType = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListMitigationActionsInput) SetMaxResults(v int64) *ListMitigationActionsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListMitigationActionsInput) SetNextToken(v string) *ListMitigationActionsInput {
	s.NextToken = &v
	return s
}

type ListMitigationActionsOutput struct {
	_ struct{} `type:"structure"`

	// A set of actions that matched the specified filter criteria.
	ActionIdentifiers []*MitigationActionIdentifier `locationName:"actionIdentifiers" type:"list"`

	// The token for the next set of results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListMitigationActionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListMitigationActionsOutput) GoString() string {
	return s.String()
}

// SetActionIdentifiers sets the ActionIdentifiers field's value.
func (s *ListMitigationActionsOutput) SetActionIdentifiers(v []*MitigationActionIdentifier) *ListMitigationActionsOutput {
	s.ActionIdentifiers = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListMitigationActionsOutput) SetNextToken(v string) *ListMitigationActionsOutput {
	s.NextToken = &v
	return s
}

type ListOTAUpdatesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// A token used to retrieve the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The OTA update job status.
	OtaUpdateStatus *string `location:"querystring" locationName:"otaUpdateStatus" type:"string" enum:"OTAUpdateStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListOTAUpdatesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListOTAUpdatesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListOTAUpdatesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListOTAUpdatesInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListOTAUpdatesInput) SetMaxResults(v int64) *ListOTAUpdatesInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListOTAUpdatesInput) SetNextToken(v string) *ListOTAUpdatesInput {
	s.NextToken = &v
	return s
}

// SetOtaUpdateStatus sets the OtaUpdateStatus field's value.
func (s *ListOTAUpdatesInput) SetOtaUpdateStatus(v string) *ListOTAUpdatesInput {
	s.OtaUpdateStatus = &v
	return s
}

type ListOTAUpdatesOutput struct {
	_ struct{} `type:"structure"`

	// A token to use to get the next set of results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// A list of OTA update jobs.
	OtaUpdates []*OTAUpdateSummary `locationName:"otaUpdates" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListOTAUpdatesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListOTAUpdatesOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListOTAUpdatesOutput) SetNextToken(v string) *ListOTAUpdatesOutput {
	s.NextToken = &v
	return s
}

// SetOtaUpdates sets the OtaUpdates field's value.
func (s *ListOTAUpdatesOutput) SetOtaUpdates(v []*OTAUpdateSummary) *ListOTAUpdatesOutput {
	s.OtaUpdates = v
	return s
}

// The input to the ListOutgoingCertificates operation.
type ListOutgoingCertificatesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Specifies the order for results. If True, the results are returned in ascending
	// order, based on the creation date.
	AscendingOrder *bool `location:"querystring" locationName:"isAscendingOrder" type:"boolean"`

	// The marker for the next set of results.
	Marker *string `location:"querystring" locationName:"marker" type:"string"`

	// The result page size.
	PageSize *int64 `location:"querystring" locationName:"pageSize" min:"1" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListOutgoingCertificatesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListOutgoingCertificatesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListOutgoingCertificatesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListOutgoingCertificatesInput"}
	if s.PageSize != nil && *s.PageSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("PageSize", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAscendingOrder sets the AscendingOrder field's value.
func (s *ListOutgoingCertificatesInput) SetAscendingOrder(v bool) *ListOutgoingCertificatesInput {
	s.AscendingOrder = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *ListOutgoingCertificatesInput) SetMarker(v string) *ListOutgoingCertificatesInput {
	s.Marker = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *ListOutgoingCertificatesInput) SetPageSize(v int64) *ListOutgoingCertificatesInput {
	s.PageSize = &v
	return s
}

// The output from the ListOutgoingCertificates operation.
type ListOutgoingCertificatesOutput struct {
	_ struct{} `type:"structure"`

	// The marker for the next set of results.
	NextMarker *string `locationName:"nextMarker" type:"string"`

	// The certificates that are being transferred but not yet accepted.
	OutgoingCertificates []*OutgoingCertificate `locationName:"outgoingCertificates" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListOutgoingCertificatesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListOutgoingCertificatesOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListOutgoingCertificatesOutput) SetNextMarker(v string) *ListOutgoingCertificatesOutput {
	s.NextMarker = &v
	return s
}

// SetOutgoingCertificates sets the OutgoingCertificates field's value.
func (s *ListOutgoingCertificatesOutput) SetOutgoingCertificates(v []*OutgoingCertificate) *ListOutgoingCertificatesOutput {
	s.OutgoingCertificates = v
	return s
}

type ListPackageVersionsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The name of the target software package.
	//
	// PackageName is a required field
	PackageName *string `location:"uri" locationName:"packageName" min:"1" type:"string" required:"true"`

	// The status of the package version. For more information, see Package version
	// lifecycle (https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#package-version-lifecycle).
	Status *string `location:"querystring" locationName:"status" type:"string" enum:"PackageVersionStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPackageVersionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPackageVersionsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListPackageVersionsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListPackageVersionsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.PackageName == nil {
		invalidParams.Add(request.NewErrParamRequired("PackageName"))
	}
	if s.PackageName != nil && len(*s.PackageName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PackageName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListPackageVersionsInput) SetMaxResults(v int64) *ListPackageVersionsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListPackageVersionsInput) SetNextToken(v string) *ListPackageVersionsInput {
	s.NextToken = &v
	return s
}

// SetPackageName sets the PackageName field's value.
func (s *ListPackageVersionsInput) SetPackageName(v string) *ListPackageVersionsInput {
	s.PackageName = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ListPackageVersionsInput) SetStatus(v string) *ListPackageVersionsInput {
	s.Status = &v
	return s
}

type ListPackageVersionsOutput struct {
	_ struct{} `type:"structure"`

	// The token for the next set of results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// Lists the package versions associated to the package.
	PackageVersionSummaries []*PackageVersionSummary `locationName:"packageVersionSummaries" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPackageVersionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPackageVersionsOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListPackageVersionsOutput) SetNextToken(v string) *ListPackageVersionsOutput {
	s.NextToken = &v
	return s
}

// SetPackageVersionSummaries sets the PackageVersionSummaries field's value.
func (s *ListPackageVersionsOutput) SetPackageVersionSummaries(v []*PackageVersionSummary) *ListPackageVersionsOutput {
	s.PackageVersionSummaries = v
	return s
}

type ListPackagesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results returned at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPackagesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPackagesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListPackagesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListPackagesInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListPackagesInput) SetMaxResults(v int64) *ListPackagesInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListPackagesInput) SetNextToken(v string) *ListPackagesInput {
	s.NextToken = &v
	return s
}

type ListPackagesOutput struct {
	_ struct{} `type:"structure"`

	// The token for the next set of results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The software package summary.
	PackageSummaries []*PackageSummary `locationName:"packageSummaries" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPackagesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPackagesOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListPackagesOutput) SetNextToken(v string) *ListPackagesOutput {
	s.NextToken = &v
	return s
}

// SetPackageSummaries sets the PackageSummaries field's value.
func (s *ListPackagesOutput) SetPackageSummaries(v []*PackageSummary) *ListPackagesOutput {
	s.PackageSummaries = v
	return s
}

// The input for the ListPolicies operation.
type ListPoliciesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Specifies the order for results. If true, the results are returned in ascending
	// creation order.
	AscendingOrder *bool `location:"querystring" locationName:"isAscendingOrder" type:"boolean"`

	// The marker for the next set of results.
	Marker *string `location:"querystring" locationName:"marker" type:"string"`

	// The result page size.
	PageSize *int64 `location:"querystring" locationName:"pageSize" min:"1" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPoliciesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPoliciesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListPoliciesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListPoliciesInput"}
	if s.PageSize != nil && *s.PageSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("PageSize", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAscendingOrder sets the AscendingOrder field's value.
func (s *ListPoliciesInput) SetAscendingOrder(v bool) *ListPoliciesInput {
	s.AscendingOrder = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *ListPoliciesInput) SetMarker(v string) *ListPoliciesInput {
	s.Marker = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *ListPoliciesInput) SetPageSize(v int64) *ListPoliciesInput {
	s.PageSize = &v
	return s
}

// The output from the ListPolicies operation.
type ListPoliciesOutput struct {
	_ struct{} `type:"structure"`

	// The marker for the next set of results, or null if there are no additional
	// results.
	NextMarker *string `locationName:"nextMarker" type:"string"`

	// The descriptions of the policies.
	Policies []*Policy `locationName:"policies" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPoliciesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPoliciesOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListPoliciesOutput) SetNextMarker(v string) *ListPoliciesOutput {
	s.NextMarker = &v
	return s
}

// SetPolicies sets the Policies field's value.
func (s *ListPoliciesOutput) SetPolicies(v []*Policy) *ListPoliciesOutput {
	s.Policies = v
	return s
}

// The input for the ListPolicyPrincipals operation.
type ListPolicyPrincipalsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Specifies the order for results. If true, the results are returned in ascending
	// creation order.
	AscendingOrder *bool `location:"querystring" locationName:"isAscendingOrder" type:"boolean"`

	// The marker for the next set of results.
	Marker *string `location:"querystring" locationName:"marker" type:"string"`

	// The result page size.
	PageSize *int64 `location:"querystring" locationName:"pageSize" min:"1" type:"integer"`

	// The policy name.
	//
	// PolicyName is a required field
	PolicyName *string `location:"header" locationName:"x-amzn-iot-policy" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPolicyPrincipalsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPolicyPrincipalsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListPolicyPrincipalsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListPolicyPrincipalsInput"}
	if s.PageSize != nil && *s.PageSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("PageSize", 1))
	}
	if s.PolicyName == nil {
		invalidParams.Add(request.NewErrParamRequired("PolicyName"))
	}
	if s.PolicyName != nil && len(*s.PolicyName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAscendingOrder sets the AscendingOrder field's value.
func (s *ListPolicyPrincipalsInput) SetAscendingOrder(v bool) *ListPolicyPrincipalsInput {
	s.AscendingOrder = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *ListPolicyPrincipalsInput) SetMarker(v string) *ListPolicyPrincipalsInput {
	s.Marker = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *ListPolicyPrincipalsInput) SetPageSize(v int64) *ListPolicyPrincipalsInput {
	s.PageSize = &v
	return s
}

// SetPolicyName sets the PolicyName field's value.
func (s *ListPolicyPrincipalsInput) SetPolicyName(v string) *ListPolicyPrincipalsInput {
	s.PolicyName = &v
	return s
}

// The output from the ListPolicyPrincipals operation.
type ListPolicyPrincipalsOutput struct {
	_ struct{} `type:"structure"`

	// The marker for the next set of results, or null if there are no additional
	// results.
	NextMarker *string `locationName:"nextMarker" type:"string"`

	// The descriptions of the principals.
	Principals []*string `locationName:"principals" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPolicyPrincipalsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPolicyPrincipalsOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListPolicyPrincipalsOutput) SetNextMarker(v string) *ListPolicyPrincipalsOutput {
	s.NextMarker = &v
	return s
}

// SetPrincipals sets the Principals field's value.
func (s *ListPolicyPrincipalsOutput) SetPrincipals(v []*string) *ListPolicyPrincipalsOutput {
	s.Principals = v
	return s
}

// The input for the ListPolicyVersions operation.
type ListPolicyVersionsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The policy name.
	//
	// PolicyName is a required field
	PolicyName *string `location:"uri" locationName:"policyName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPolicyVersionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPolicyVersionsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListPolicyVersionsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListPolicyVersionsInput"}
	if s.PolicyName == nil {
		invalidParams.Add(request.NewErrParamRequired("PolicyName"))
	}
	if s.PolicyName != nil && len(*s.PolicyName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPolicyName sets the PolicyName field's value.
func (s *ListPolicyVersionsInput) SetPolicyName(v string) *ListPolicyVersionsInput {
	s.PolicyName = &v
	return s
}

// The output from the ListPolicyVersions operation.
type ListPolicyVersionsOutput struct {
	_ struct{} `type:"structure"`

	// The policy versions.
	PolicyVersions []*PolicyVersion `locationName:"policyVersions" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPolicyVersionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPolicyVersionsOutput) GoString() string {
	return s.String()
}

// SetPolicyVersions sets the PolicyVersions field's value.
func (s *ListPolicyVersionsOutput) SetPolicyVersions(v []*PolicyVersion) *ListPolicyVersionsOutput {
	s.PolicyVersions = v
	return s
}

// The input for the ListPrincipalPolicies operation.
type ListPrincipalPoliciesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Specifies the order for results. If true, results are returned in ascending
	// creation order.
	AscendingOrder *bool `location:"querystring" locationName:"isAscendingOrder" type:"boolean"`

	// The marker for the next set of results.
	Marker *string `location:"querystring" locationName:"marker" type:"string"`

	// The result page size.
	PageSize *int64 `location:"querystring" locationName:"pageSize" min:"1" type:"integer"`

	// The principal. Valid principals are CertificateArn (arn:aws:iot:region:accountId:cert/certificateId),
	// thingGroupArn (arn:aws:iot:region:accountId:thinggroup/groupName) and CognitoId
	// (region:id).
	//
	// Principal is a required field
	Principal *string `location:"header" locationName:"x-amzn-iot-principal" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPrincipalPoliciesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPrincipalPoliciesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListPrincipalPoliciesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListPrincipalPoliciesInput"}
	if s.PageSize != nil && *s.PageSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("PageSize", 1))
	}
	if s.Principal == nil {
		invalidParams.Add(request.NewErrParamRequired("Principal"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAscendingOrder sets the AscendingOrder field's value.
func (s *ListPrincipalPoliciesInput) SetAscendingOrder(v bool) *ListPrincipalPoliciesInput {
	s.AscendingOrder = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *ListPrincipalPoliciesInput) SetMarker(v string) *ListPrincipalPoliciesInput {
	s.Marker = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *ListPrincipalPoliciesInput) SetPageSize(v int64) *ListPrincipalPoliciesInput {
	s.PageSize = &v
	return s
}

// SetPrincipal sets the Principal field's value.
func (s *ListPrincipalPoliciesInput) SetPrincipal(v string) *ListPrincipalPoliciesInput {
	s.Principal = &v
	return s
}

// The output from the ListPrincipalPolicies operation.
type ListPrincipalPoliciesOutput struct {
	_ struct{} `type:"structure"`

	// The marker for the next set of results, or null if there are no additional
	// results.
	NextMarker *string `locationName:"nextMarker" type:"string"`

	// The policies.
	Policies []*Policy `locationName:"policies" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPrincipalPoliciesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPrincipalPoliciesOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListPrincipalPoliciesOutput) SetNextMarker(v string) *ListPrincipalPoliciesOutput {
	s.NextMarker = &v
	return s
}

// SetPolicies sets the Policies field's value.
func (s *ListPrincipalPoliciesOutput) SetPolicies(v []*Policy) *ListPrincipalPoliciesOutput {
	s.Policies = v
	return s
}

// The input for the ListPrincipalThings operation.
type ListPrincipalThingsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return in this operation.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The principal.
	//
	// Principal is a required field
	Principal *string `location:"header" locationName:"x-amzn-principal" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPrincipalThingsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPrincipalThingsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListPrincipalThingsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListPrincipalThingsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.Principal == nil {
		invalidParams.Add(request.NewErrParamRequired("Principal"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListPrincipalThingsInput) SetMaxResults(v int64) *ListPrincipalThingsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListPrincipalThingsInput) SetNextToken(v string) *ListPrincipalThingsInput {
	s.NextToken = &v
	return s
}

// SetPrincipal sets the Principal field's value.
func (s *ListPrincipalThingsInput) SetPrincipal(v string) *ListPrincipalThingsInput {
	s.Principal = &v
	return s
}

// The output from the ListPrincipalThings operation.
type ListPrincipalThingsOutput struct {
	_ struct{} `type:"structure"`

	// The token to use to get the next set of results, or null if there are no
	// additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The things.
	Things []*string `locationName:"things" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPrincipalThingsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListPrincipalThingsOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListPrincipalThingsOutput) SetNextToken(v string) *ListPrincipalThingsOutput {
	s.NextToken = &v
	return s
}

// SetThings sets the Things field's value.
func (s *ListPrincipalThingsOutput) SetThings(v []*string) *ListPrincipalThingsOutput {
	s.Things = v
	return s
}

type ListProvisioningTemplateVersionsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// A token to retrieve the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The name of the provisioning template.
	//
	// TemplateName is a required field
	TemplateName *string `location:"uri" locationName:"templateName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListProvisioningTemplateVersionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListProvisioningTemplateVersionsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListProvisioningTemplateVersionsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListProvisioningTemplateVersionsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.TemplateName == nil {
		invalidParams.Add(request.NewErrParamRequired("TemplateName"))
	}
	if s.TemplateName != nil && len(*s.TemplateName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TemplateName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListProvisioningTemplateVersionsInput) SetMaxResults(v int64) *ListProvisioningTemplateVersionsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListProvisioningTemplateVersionsInput) SetNextToken(v string) *ListProvisioningTemplateVersionsInput {
	s.NextToken = &v
	return s
}

// SetTemplateName sets the TemplateName field's value.
func (s *ListProvisioningTemplateVersionsInput) SetTemplateName(v string) *ListProvisioningTemplateVersionsInput {
	s.TemplateName = &v
	return s
}

type ListProvisioningTemplateVersionsOutput struct {
	_ struct{} `type:"structure"`

	// A token to retrieve the next set of results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The list of provisioning template versions.
	Versions []*ProvisioningTemplateVersionSummary `locationName:"versions" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListProvisioningTemplateVersionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListProvisioningTemplateVersionsOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListProvisioningTemplateVersionsOutput) SetNextToken(v string) *ListProvisioningTemplateVersionsOutput {
	s.NextToken = &v
	return s
}

// SetVersions sets the Versions field's value.
func (s *ListProvisioningTemplateVersionsOutput) SetVersions(v []*ProvisioningTemplateVersionSummary) *ListProvisioningTemplateVersionsOutput {
	s.Versions = v
	return s
}

type ListProvisioningTemplatesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// A token to retrieve the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListProvisioningTemplatesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListProvisioningTemplatesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListProvisioningTemplatesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListProvisioningTemplatesInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListProvisioningTemplatesInput) SetMaxResults(v int64) *ListProvisioningTemplatesInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListProvisioningTemplatesInput) SetNextToken(v string) *ListProvisioningTemplatesInput {
	s.NextToken = &v
	return s
}

type ListProvisioningTemplatesOutput struct {
	_ struct{} `type:"structure"`

	// A token to retrieve the next set of results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// A list of provisioning templates
	Templates []*ProvisioningTemplateSummary `locationName:"templates" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListProvisioningTemplatesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListProvisioningTemplatesOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListProvisioningTemplatesOutput) SetNextToken(v string) *ListProvisioningTemplatesOutput {
	s.NextToken = &v
	return s
}

// SetTemplates sets the Templates field's value.
func (s *ListProvisioningTemplatesOutput) SetTemplates(v []*ProvisioningTemplateSummary) *ListProvisioningTemplatesOutput {
	s.Templates = v
	return s
}

type ListRelatedResourcesForAuditFindingInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The finding Id.
	//
	// FindingId is a required field
	FindingId *string `location:"querystring" locationName:"findingId" min:"1" type:"string" required:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListRelatedResourcesForAuditFindingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListRelatedResourcesForAuditFindingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListRelatedResourcesForAuditFindingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListRelatedResourcesForAuditFindingInput"}
	if s.FindingId == nil {
		invalidParams.Add(request.NewErrParamRequired("FindingId"))
	}
	if s.FindingId != nil && len(*s.FindingId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("FindingId", 1))
	}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetFindingId sets the FindingId field's value.
func (s *ListRelatedResourcesForAuditFindingInput) SetFindingId(v string) *ListRelatedResourcesForAuditFindingInput {
	s.FindingId = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListRelatedResourcesForAuditFindingInput) SetMaxResults(v int64) *ListRelatedResourcesForAuditFindingInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListRelatedResourcesForAuditFindingInput) SetNextToken(v string) *ListRelatedResourcesForAuditFindingInput {
	s.NextToken = &v
	return s
}

type ListRelatedResourcesForAuditFindingOutput struct {
	_ struct{} `type:"structure"`

	// A token that can be used to retrieve the next set of results, or null for
	// the first API call.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The related resources.
	RelatedResources []*RelatedResource `locationName:"relatedResources" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListRelatedResourcesForAuditFindingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListRelatedResourcesForAuditFindingOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListRelatedResourcesForAuditFindingOutput) SetNextToken(v string) *ListRelatedResourcesForAuditFindingOutput {
	s.NextToken = &v
	return s
}

// SetRelatedResources sets the RelatedResources field's value.
func (s *ListRelatedResourcesForAuditFindingOutput) SetRelatedResources(v []*RelatedResource) *ListRelatedResourcesForAuditFindingOutput {
	s.RelatedResources = v
	return s
}

type ListRoleAliasesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Return the list of role aliases in ascending alphabetical order.
	AscendingOrder *bool `location:"querystring" locationName:"isAscendingOrder" type:"boolean"`

	// A marker used to get the next set of results.
	Marker *string `location:"querystring" locationName:"marker" type:"string"`

	// The maximum number of results to return at one time.
	PageSize *int64 `location:"querystring" locationName:"pageSize" min:"1" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListRoleAliasesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListRoleAliasesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListRoleAliasesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListRoleAliasesInput"}
	if s.PageSize != nil && *s.PageSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("PageSize", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAscendingOrder sets the AscendingOrder field's value.
func (s *ListRoleAliasesInput) SetAscendingOrder(v bool) *ListRoleAliasesInput {
	s.AscendingOrder = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *ListRoleAliasesInput) SetMarker(v string) *ListRoleAliasesInput {
	s.Marker = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *ListRoleAliasesInput) SetPageSize(v int64) *ListRoleAliasesInput {
	s.PageSize = &v
	return s
}

type ListRoleAliasesOutput struct {
	_ struct{} `type:"structure"`

	// A marker used to get the next set of results.
	NextMarker *string `locationName:"nextMarker" type:"string"`

	// The role aliases.
	RoleAliases []*string `locationName:"roleAliases" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListRoleAliasesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListRoleAliasesOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListRoleAliasesOutput) SetNextMarker(v string) *ListRoleAliasesOutput {
	s.NextMarker = &v
	return s
}

// SetRoleAliases sets the RoleAliases field's value.
func (s *ListRoleAliasesOutput) SetRoleAliases(v []*string) *ListRoleAliasesOutput {
	s.RoleAliases = v
	return s
}

type ListScheduledAuditsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time. The default is 25.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListScheduledAuditsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListScheduledAuditsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListScheduledAuditsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListScheduledAuditsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListScheduledAuditsInput) SetMaxResults(v int64) *ListScheduledAuditsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListScheduledAuditsInput) SetNextToken(v string) *ListScheduledAuditsInput {
	s.NextToken = &v
	return s
}

type ListScheduledAuditsOutput struct {
	_ struct{} `type:"structure"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The list of scheduled audits.
	ScheduledAudits []*ScheduledAuditMetadata `locationName:"scheduledAudits" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListScheduledAuditsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListScheduledAuditsOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListScheduledAuditsOutput) SetNextToken(v string) *ListScheduledAuditsOutput {
	s.NextToken = &v
	return s
}

// SetScheduledAudits sets the ScheduledAudits field's value.
func (s *ListScheduledAuditsOutput) SetScheduledAudits(v []*ScheduledAuditMetadata) *ListScheduledAuditsOutput {
	s.ScheduledAudits = v
	return s
}

type ListSecurityProfilesForTargetInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// If true, return child groups too.
	Recursive *bool `location:"querystring" locationName:"recursive" type:"boolean"`

	// The ARN of the target (thing group) whose attached security profiles you
	// want to get.
	//
	// SecurityProfileTargetArn is a required field
	SecurityProfileTargetArn *string `location:"querystring" locationName:"securityProfileTargetArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListSecurityProfilesForTargetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListSecurityProfilesForTargetInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListSecurityProfilesForTargetInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListSecurityProfilesForTargetInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.SecurityProfileTargetArn == nil {
		invalidParams.Add(request.NewErrParamRequired("SecurityProfileTargetArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListSecurityProfilesForTargetInput) SetMaxResults(v int64) *ListSecurityProfilesForTargetInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListSecurityProfilesForTargetInput) SetNextToken(v string) *ListSecurityProfilesForTargetInput {
	s.NextToken = &v
	return s
}

// SetRecursive sets the Recursive field's value.
func (s *ListSecurityProfilesForTargetInput) SetRecursive(v bool) *ListSecurityProfilesForTargetInput {
	s.Recursive = &v
	return s
}

// SetSecurityProfileTargetArn sets the SecurityProfileTargetArn field's value.
func (s *ListSecurityProfilesForTargetInput) SetSecurityProfileTargetArn(v string) *ListSecurityProfilesForTargetInput {
	s.SecurityProfileTargetArn = &v
	return s
}

type ListSecurityProfilesForTargetOutput struct {
	_ struct{} `type:"structure"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// A list of security profiles and their associated targets.
	SecurityProfileTargetMappings []*SecurityProfileTargetMapping `locationName:"securityProfileTargetMappings" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListSecurityProfilesForTargetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListSecurityProfilesForTargetOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListSecurityProfilesForTargetOutput) SetNextToken(v string) *ListSecurityProfilesForTargetOutput {
	s.NextToken = &v
	return s
}

// SetSecurityProfileTargetMappings sets the SecurityProfileTargetMappings field's value.
func (s *ListSecurityProfilesForTargetOutput) SetSecurityProfileTargetMappings(v []*SecurityProfileTargetMapping) *ListSecurityProfilesForTargetOutput {
	s.SecurityProfileTargetMappings = v
	return s
}

type ListSecurityProfilesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// A filter to limit results to the security profiles that use the defined dimension.
	// Cannot be used with metricName
	DimensionName *string `location:"querystring" locationName:"dimensionName" min:"1" type:"string"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The name of the custom metric. Cannot be used with dimensionName.
	MetricName *string `location:"querystring" locationName:"metricName" min:"1" type:"string"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListSecurityProfilesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListSecurityProfilesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListSecurityProfilesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListSecurityProfilesInput"}
	if s.DimensionName != nil && len(*s.DimensionName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DimensionName", 1))
	}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.MetricName != nil && len(*s.MetricName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("MetricName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDimensionName sets the DimensionName field's value.
func (s *ListSecurityProfilesInput) SetDimensionName(v string) *ListSecurityProfilesInput {
	s.DimensionName = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListSecurityProfilesInput) SetMaxResults(v int64) *ListSecurityProfilesInput {
	s.MaxResults = &v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *ListSecurityProfilesInput) SetMetricName(v string) *ListSecurityProfilesInput {
	s.MetricName = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListSecurityProfilesInput) SetNextToken(v string) *ListSecurityProfilesInput {
	s.NextToken = &v
	return s
}

type ListSecurityProfilesOutput struct {
	_ struct{} `type:"structure"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// A list of security profile identifiers (names and ARNs).
	SecurityProfileIdentifiers []*SecurityProfileIdentifier `locationName:"securityProfileIdentifiers" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListSecurityProfilesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListSecurityProfilesOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListSecurityProfilesOutput) SetNextToken(v string) *ListSecurityProfilesOutput {
	s.NextToken = &v
	return s
}

// SetSecurityProfileIdentifiers sets the SecurityProfileIdentifiers field's value.
func (s *ListSecurityProfilesOutput) SetSecurityProfileIdentifiers(v []*SecurityProfileIdentifier) *ListSecurityProfilesOutput {
	s.SecurityProfileIdentifiers = v
	return s
}

type ListStreamsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// Set to true to return the list of streams in ascending order.
	AscendingOrder *bool `location:"querystring" locationName:"isAscendingOrder" type:"boolean"`

	// The maximum number of results to return at a time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// A token used to get the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListStreamsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListStreamsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListStreamsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListStreamsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAscendingOrder sets the AscendingOrder field's value.
func (s *ListStreamsInput) SetAscendingOrder(v bool) *ListStreamsInput {
	s.AscendingOrder = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListStreamsInput) SetMaxResults(v int64) *ListStreamsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListStreamsInput) SetNextToken(v string) *ListStreamsInput {
	s.NextToken = &v
	return s
}

type ListStreamsOutput struct {
	_ struct{} `type:"structure"`

	// A token used to get the next set of results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// A list of streams.
	Streams []*StreamSummary `locationName:"streams" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListStreamsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListStreamsOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListStreamsOutput) SetNextToken(v string) *ListStreamsOutput {
	s.NextToken = &v
	return s
}

// SetStreams sets the Streams field's value.
func (s *ListStreamsOutput) SetStreams(v []*StreamSummary) *ListStreamsOutput {
	s.Streams = v
	return s
}

type ListTagsForResourceInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The ARN of the resource.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"querystring" locationName:"resourceArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTagsForResourceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTagsForResourceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListTagsForResourceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListTagsForResourceInput"}
	if s.ResourceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetNextToken sets the NextToken field's value.
func (s *ListTagsForResourceInput) SetNextToken(v string) *ListTagsForResourceInput {
	s.NextToken = &v
	return s
}

// SetResourceArn sets the ResourceArn field's value.
func (s *ListTagsForResourceInput) SetResourceArn(v string) *ListTagsForResourceInput {
	s.ResourceArn = &v
	return s
}

type ListTagsForResourceOutput struct {
	_ struct{} `type:"structure"`

	// The token to use to get the next set of results, or null if there are no
	// additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The list of tags assigned to the resource.
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTagsForResourceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTagsForResourceOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListTagsForResourceOutput) SetNextToken(v string) *ListTagsForResourceOutput {
	s.NextToken = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *ListTagsForResourceOutput) SetTags(v []*Tag) *ListTagsForResourceOutput {
	s.Tags = v
	return s
}

type ListTargetsForPolicyInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// A marker used to get the next set of results.
	Marker *string `location:"querystring" locationName:"marker" type:"string"`

	// The maximum number of results to return at one time.
	PageSize *int64 `location:"querystring" locationName:"pageSize" min:"1" type:"integer"`

	// The policy name.
	//
	// PolicyName is a required field
	PolicyName *string `location:"uri" locationName:"policyName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTargetsForPolicyInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTargetsForPolicyInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListTargetsForPolicyInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListTargetsForPolicyInput"}
	if s.PageSize != nil && *s.PageSize < 1 {
		invalidParams.Add(request.NewErrParamMinValue("PageSize", 1))
	}
	if s.PolicyName == nil {
		invalidParams.Add(request.NewErrParamRequired("PolicyName"))
	}
	if s.PolicyName != nil && len(*s.PolicyName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMarker sets the Marker field's value.
func (s *ListTargetsForPolicyInput) SetMarker(v string) *ListTargetsForPolicyInput {
	s.Marker = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *ListTargetsForPolicyInput) SetPageSize(v int64) *ListTargetsForPolicyInput {
	s.PageSize = &v
	return s
}

// SetPolicyName sets the PolicyName field's value.
func (s *ListTargetsForPolicyInput) SetPolicyName(v string) *ListTargetsForPolicyInput {
	s.PolicyName = &v
	return s
}

type ListTargetsForPolicyOutput struct {
	_ struct{} `type:"structure"`

	// A marker used to get the next set of results.
	NextMarker *string `locationName:"nextMarker" type:"string"`

	// The policy targets.
	Targets []*string `locationName:"targets" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTargetsForPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTargetsForPolicyOutput) GoString() string {
	return s.String()
}

// SetNextMarker sets the NextMarker field's value.
func (s *ListTargetsForPolicyOutput) SetNextMarker(v string) *ListTargetsForPolicyOutput {
	s.NextMarker = &v
	return s
}

// SetTargets sets the Targets field's value.
func (s *ListTargetsForPolicyOutput) SetTargets(v []*string) *ListTargetsForPolicyOutput {
	s.Targets = v
	return s
}

type ListTargetsForSecurityProfileInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The security profile.
	//
	// SecurityProfileName is a required field
	SecurityProfileName *string `location:"uri" locationName:"securityProfileName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTargetsForSecurityProfileInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTargetsForSecurityProfileInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListTargetsForSecurityProfileInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListTargetsForSecurityProfileInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.SecurityProfileName == nil {
		invalidParams.Add(request.NewErrParamRequired("SecurityProfileName"))
	}
	if s.SecurityProfileName != nil && len(*s.SecurityProfileName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SecurityProfileName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListTargetsForSecurityProfileInput) SetMaxResults(v int64) *ListTargetsForSecurityProfileInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListTargetsForSecurityProfileInput) SetNextToken(v string) *ListTargetsForSecurityProfileInput {
	s.NextToken = &v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *ListTargetsForSecurityProfileInput) SetSecurityProfileName(v string) *ListTargetsForSecurityProfileInput {
	s.SecurityProfileName = &v
	return s
}

type ListTargetsForSecurityProfileOutput struct {
	_ struct{} `type:"structure"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The thing groups to which the security profile is attached.
	SecurityProfileTargets []*SecurityProfileTarget `locationName:"securityProfileTargets" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTargetsForSecurityProfileOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTargetsForSecurityProfileOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListTargetsForSecurityProfileOutput) SetNextToken(v string) *ListTargetsForSecurityProfileOutput {
	s.NextToken = &v
	return s
}

// SetSecurityProfileTargets sets the SecurityProfileTargets field's value.
func (s *ListTargetsForSecurityProfileOutput) SetSecurityProfileTargets(v []*SecurityProfileTarget) *ListTargetsForSecurityProfileOutput {
	s.SecurityProfileTargets = v
	return s
}

type ListThingGroupsForThingInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The thing name.
	//
	// ThingName is a required field
	ThingName *string `location:"uri" locationName:"thingName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingGroupsForThingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingGroupsForThingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListThingGroupsForThingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListThingGroupsForThingInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.ThingName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingName"))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListThingGroupsForThingInput) SetMaxResults(v int64) *ListThingGroupsForThingInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingGroupsForThingInput) SetNextToken(v string) *ListThingGroupsForThingInput {
	s.NextToken = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *ListThingGroupsForThingInput) SetThingName(v string) *ListThingGroupsForThingInput {
	s.ThingName = &v
	return s
}

type ListThingGroupsForThingOutput struct {
	_ struct{} `type:"structure"`

	// The token to use to get the next set of results, or null if there are no
	// additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The thing groups.
	ThingGroups []*GroupNameAndArn `locationName:"thingGroups" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingGroupsForThingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingGroupsForThingOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingGroupsForThingOutput) SetNextToken(v string) *ListThingGroupsForThingOutput {
	s.NextToken = &v
	return s
}

// SetThingGroups sets the ThingGroups field's value.
func (s *ListThingGroupsForThingOutput) SetThingGroups(v []*GroupNameAndArn) *ListThingGroupsForThingOutput {
	s.ThingGroups = v
	return s
}

type ListThingGroupsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// A filter that limits the results to those with the specified name prefix.
	NamePrefixFilter *string `location:"querystring" locationName:"namePrefixFilter" min:"1" type:"string"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// A filter that limits the results to those with the specified parent group.
	ParentGroup *string `location:"querystring" locationName:"parentGroup" min:"1" type:"string"`

	// If true, return child groups as well.
	Recursive *bool `location:"querystring" locationName:"recursive" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingGroupsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingGroupsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListThingGroupsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListThingGroupsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.NamePrefixFilter != nil && len(*s.NamePrefixFilter) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NamePrefixFilter", 1))
	}
	if s.ParentGroup != nil && len(*s.ParentGroup) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ParentGroup", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListThingGroupsInput) SetMaxResults(v int64) *ListThingGroupsInput {
	s.MaxResults = &v
	return s
}

// SetNamePrefixFilter sets the NamePrefixFilter field's value.
func (s *ListThingGroupsInput) SetNamePrefixFilter(v string) *ListThingGroupsInput {
	s.NamePrefixFilter = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingGroupsInput) SetNextToken(v string) *ListThingGroupsInput {
	s.NextToken = &v
	return s
}

// SetParentGroup sets the ParentGroup field's value.
func (s *ListThingGroupsInput) SetParentGroup(v string) *ListThingGroupsInput {
	s.ParentGroup = &v
	return s
}

// SetRecursive sets the Recursive field's value.
func (s *ListThingGroupsInput) SetRecursive(v bool) *ListThingGroupsInput {
	s.Recursive = &v
	return s
}

type ListThingGroupsOutput struct {
	_ struct{} `type:"structure"`

	// The token to use to get the next set of results. Will not be returned if
	// operation has returned all results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The thing groups.
	ThingGroups []*GroupNameAndArn `locationName:"thingGroups" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingGroupsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingGroupsOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingGroupsOutput) SetNextToken(v string) *ListThingGroupsOutput {
	s.NextToken = &v
	return s
}

// SetThingGroups sets the ThingGroups field's value.
func (s *ListThingGroupsOutput) SetThingGroups(v []*GroupNameAndArn) *ListThingGroupsOutput {
	s.ThingGroups = v
	return s
}

// The input for the ListThingPrincipal operation.
type ListThingPrincipalsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return in this operation.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The name of the thing.
	//
	// ThingName is a required field
	ThingName *string `location:"uri" locationName:"thingName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingPrincipalsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingPrincipalsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListThingPrincipalsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListThingPrincipalsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.ThingName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingName"))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListThingPrincipalsInput) SetMaxResults(v int64) *ListThingPrincipalsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingPrincipalsInput) SetNextToken(v string) *ListThingPrincipalsInput {
	s.NextToken = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *ListThingPrincipalsInput) SetThingName(v string) *ListThingPrincipalsInput {
	s.ThingName = &v
	return s
}

// The output from the ListThingPrincipals operation.
type ListThingPrincipalsOutput struct {
	_ struct{} `type:"structure"`

	// The token to use to get the next set of results, or null if there are no
	// additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The principals associated with the thing.
	Principals []*string `locationName:"principals" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingPrincipalsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingPrincipalsOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingPrincipalsOutput) SetNextToken(v string) *ListThingPrincipalsOutput {
	s.NextToken = &v
	return s
}

// SetPrincipals sets the Principals field's value.
func (s *ListThingPrincipalsOutput) SetPrincipals(v []*string) *ListThingPrincipalsOutput {
	s.Principals = v
	return s
}

type ListThingRegistrationTaskReportsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return per request.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The type of task report.
	//
	// ReportType is a required field
	ReportType *string `location:"querystring" locationName:"reportType" type:"string" required:"true" enum:"ReportType"`

	// The id of the task.
	//
	// TaskId is a required field
	TaskId *string `location:"uri" locationName:"taskId" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingRegistrationTaskReportsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingRegistrationTaskReportsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListThingRegistrationTaskReportsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListThingRegistrationTaskReportsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.ReportType == nil {
		invalidParams.Add(request.NewErrParamRequired("ReportType"))
	}
	if s.TaskId == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskId"))
	}
	if s.TaskId != nil && len(*s.TaskId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TaskId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListThingRegistrationTaskReportsInput) SetMaxResults(v int64) *ListThingRegistrationTaskReportsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingRegistrationTaskReportsInput) SetNextToken(v string) *ListThingRegistrationTaskReportsInput {
	s.NextToken = &v
	return s
}

// SetReportType sets the ReportType field's value.
func (s *ListThingRegistrationTaskReportsInput) SetReportType(v string) *ListThingRegistrationTaskReportsInput {
	s.ReportType = &v
	return s
}

// SetTaskId sets the TaskId field's value.
func (s *ListThingRegistrationTaskReportsInput) SetTaskId(v string) *ListThingRegistrationTaskReportsInput {
	s.TaskId = &v
	return s
}

type ListThingRegistrationTaskReportsOutput struct {
	_ struct{} `type:"structure"`

	// The token to use to get the next set of results, or null if there are no
	// additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The type of task report.
	ReportType *string `locationName:"reportType" type:"string" enum:"ReportType"`

	// Links to the task resources.
	ResourceLinks []*string `locationName:"resourceLinks" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingRegistrationTaskReportsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingRegistrationTaskReportsOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingRegistrationTaskReportsOutput) SetNextToken(v string) *ListThingRegistrationTaskReportsOutput {
	s.NextToken = &v
	return s
}

// SetReportType sets the ReportType field's value.
func (s *ListThingRegistrationTaskReportsOutput) SetReportType(v string) *ListThingRegistrationTaskReportsOutput {
	s.ReportType = &v
	return s
}

// SetResourceLinks sets the ResourceLinks field's value.
func (s *ListThingRegistrationTaskReportsOutput) SetResourceLinks(v []*string) *ListThingRegistrationTaskReportsOutput {
	s.ResourceLinks = v
	return s
}

type ListThingRegistrationTasksInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The status of the bulk thing provisioning task.
	Status *string `location:"querystring" locationName:"status" type:"string" enum:"Status"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingRegistrationTasksInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingRegistrationTasksInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListThingRegistrationTasksInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListThingRegistrationTasksInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListThingRegistrationTasksInput) SetMaxResults(v int64) *ListThingRegistrationTasksInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingRegistrationTasksInput) SetNextToken(v string) *ListThingRegistrationTasksInput {
	s.NextToken = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ListThingRegistrationTasksInput) SetStatus(v string) *ListThingRegistrationTasksInput {
	s.Status = &v
	return s
}

type ListThingRegistrationTasksOutput struct {
	_ struct{} `type:"structure"`

	// The token to use to get the next set of results, or null if there are no
	// additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// A list of bulk thing provisioning task IDs.
	TaskIds []*string `locationName:"taskIds" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingRegistrationTasksOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingRegistrationTasksOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingRegistrationTasksOutput) SetNextToken(v string) *ListThingRegistrationTasksOutput {
	s.NextToken = &v
	return s
}

// SetTaskIds sets the TaskIds field's value.
func (s *ListThingRegistrationTasksOutput) SetTaskIds(v []*string) *ListThingRegistrationTasksOutput {
	s.TaskIds = v
	return s
}

// The input for the ListThingTypes operation.
type ListThingTypesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return in this operation.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The name of the thing type.
	ThingTypeName *string `location:"querystring" locationName:"thingTypeName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingTypesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingTypesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListThingTypesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListThingTypesInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.ThingTypeName != nil && len(*s.ThingTypeName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingTypeName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListThingTypesInput) SetMaxResults(v int64) *ListThingTypesInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingTypesInput) SetNextToken(v string) *ListThingTypesInput {
	s.NextToken = &v
	return s
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *ListThingTypesInput) SetThingTypeName(v string) *ListThingTypesInput {
	s.ThingTypeName = &v
	return s
}

// The output for the ListThingTypes operation.
type ListThingTypesOutput struct {
	_ struct{} `type:"structure"`

	// The token for the next set of results. Will not be returned if operation
	// has returned all results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The thing types.
	ThingTypes []*ThingTypeDefinition `locationName:"thingTypes" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingTypesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingTypesOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingTypesOutput) SetNextToken(v string) *ListThingTypesOutput {
	s.NextToken = &v
	return s
}

// SetThingTypes sets the ThingTypes field's value.
func (s *ListThingTypesOutput) SetThingTypes(v []*ThingTypeDefinition) *ListThingTypesOutput {
	s.ThingTypes = v
	return s
}

type ListThingsInBillingGroupInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The name of the billing group.
	//
	// BillingGroupName is a required field
	BillingGroupName *string `location:"uri" locationName:"billingGroupName" min:"1" type:"string" required:"true"`

	// The maximum number of results to return per request.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingsInBillingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingsInBillingGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListThingsInBillingGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListThingsInBillingGroupInput"}
	if s.BillingGroupName == nil {
		invalidParams.Add(request.NewErrParamRequired("BillingGroupName"))
	}
	if s.BillingGroupName != nil && len(*s.BillingGroupName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("BillingGroupName", 1))
	}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBillingGroupName sets the BillingGroupName field's value.
func (s *ListThingsInBillingGroupInput) SetBillingGroupName(v string) *ListThingsInBillingGroupInput {
	s.BillingGroupName = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListThingsInBillingGroupInput) SetMaxResults(v int64) *ListThingsInBillingGroupInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingsInBillingGroupInput) SetNextToken(v string) *ListThingsInBillingGroupInput {
	s.NextToken = &v
	return s
}

type ListThingsInBillingGroupOutput struct {
	_ struct{} `type:"structure"`

	// The token to use to get the next set of results. Will not be returned if
	// operation has returned all results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// A list of things in the billing group.
	Things []*string `locationName:"things" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingsInBillingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingsInBillingGroupOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingsInBillingGroupOutput) SetNextToken(v string) *ListThingsInBillingGroupOutput {
	s.NextToken = &v
	return s
}

// SetThings sets the Things field's value.
func (s *ListThingsInBillingGroupOutput) SetThings(v []*string) *ListThingsInBillingGroupOutput {
	s.Things = v
	return s
}

type ListThingsInThingGroupInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// When true, list things in this thing group and in all child groups as well.
	Recursive *bool `location:"querystring" locationName:"recursive" type:"boolean"`

	// The thing group name.
	//
	// ThingGroupName is a required field
	ThingGroupName *string `location:"uri" locationName:"thingGroupName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingsInThingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingsInThingGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListThingsInThingGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListThingsInThingGroupInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.ThingGroupName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingGroupName"))
	}
	if s.ThingGroupName != nil && len(*s.ThingGroupName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingGroupName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListThingsInThingGroupInput) SetMaxResults(v int64) *ListThingsInThingGroupInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingsInThingGroupInput) SetNextToken(v string) *ListThingsInThingGroupInput {
	s.NextToken = &v
	return s
}

// SetRecursive sets the Recursive field's value.
func (s *ListThingsInThingGroupInput) SetRecursive(v bool) *ListThingsInThingGroupInput {
	s.Recursive = &v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *ListThingsInThingGroupInput) SetThingGroupName(v string) *ListThingsInThingGroupInput {
	s.ThingGroupName = &v
	return s
}

type ListThingsInThingGroupOutput struct {
	_ struct{} `type:"structure"`

	// The token to use to get the next set of results, or null if there are no
	// additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The things in the specified thing group.
	Things []*string `locationName:"things" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingsInThingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingsInThingGroupOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingsInThingGroupOutput) SetNextToken(v string) *ListThingsInThingGroupOutput {
	s.NextToken = &v
	return s
}

// SetThings sets the Things field's value.
func (s *ListThingsInThingGroupOutput) SetThings(v []*string) *ListThingsInThingGroupOutput {
	s.Things = v
	return s
}

// The input for the ListThings operation.
type ListThingsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The attribute name used to search for things.
	AttributeName *string `location:"querystring" locationName:"attributeName" type:"string"`

	// The attribute value used to search for things.
	AttributeValue *string `location:"querystring" locationName:"attributeValue" type:"string"`

	// The maximum number of results to return in this operation.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The name of the thing type used to search for things.
	ThingTypeName *string `location:"querystring" locationName:"thingTypeName" min:"1" type:"string"`

	// When true, the action returns the thing resources with attribute values that
	// start with the attributeValue provided.
	//
	// When false, or not present, the action returns only the thing resources with
	// attribute values that match the entire attributeValue provided.
	UsePrefixAttributeValue *bool `location:"querystring" locationName:"usePrefixAttributeValue" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListThingsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListThingsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.ThingTypeName != nil && len(*s.ThingTypeName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingTypeName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAttributeName sets the AttributeName field's value.
func (s *ListThingsInput) SetAttributeName(v string) *ListThingsInput {
	s.AttributeName = &v
	return s
}

// SetAttributeValue sets the AttributeValue field's value.
func (s *ListThingsInput) SetAttributeValue(v string) *ListThingsInput {
	s.AttributeValue = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListThingsInput) SetMaxResults(v int64) *ListThingsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingsInput) SetNextToken(v string) *ListThingsInput {
	s.NextToken = &v
	return s
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *ListThingsInput) SetThingTypeName(v string) *ListThingsInput {
	s.ThingTypeName = &v
	return s
}

// SetUsePrefixAttributeValue sets the UsePrefixAttributeValue field's value.
func (s *ListThingsInput) SetUsePrefixAttributeValue(v bool) *ListThingsInput {
	s.UsePrefixAttributeValue = &v
	return s
}

// The output from the ListThings operation.
type ListThingsOutput struct {
	_ struct{} `type:"structure"`

	// The token to use to get the next set of results. Will not be returned if
	// operation has returned all results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The things.
	Things []*ThingAttribute `locationName:"things" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListThingsOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListThingsOutput) SetNextToken(v string) *ListThingsOutput {
	s.NextToken = &v
	return s
}

// SetThings sets the Things field's value.
func (s *ListThingsOutput) SetThings(v []*ThingAttribute) *ListThingsOutput {
	s.Things = v
	return s
}

type ListTopicRuleDestinationsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTopicRuleDestinationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTopicRuleDestinationsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListTopicRuleDestinationsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListTopicRuleDestinationsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListTopicRuleDestinationsInput) SetMaxResults(v int64) *ListTopicRuleDestinationsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListTopicRuleDestinationsInput) SetNextToken(v string) *ListTopicRuleDestinationsInput {
	s.NextToken = &v
	return s
}

type ListTopicRuleDestinationsOutput struct {
	_ struct{} `type:"structure"`

	// Information about a topic rule destination.
	DestinationSummaries []*TopicRuleDestinationSummary `locationName:"destinationSummaries" type:"list"`

	// The token to use to get the next set of results, or null if there are no
	// additional results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTopicRuleDestinationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTopicRuleDestinationsOutput) GoString() string {
	return s.String()
}

// SetDestinationSummaries sets the DestinationSummaries field's value.
func (s *ListTopicRuleDestinationsOutput) SetDestinationSummaries(v []*TopicRuleDestinationSummary) *ListTopicRuleDestinationsOutput {
	s.DestinationSummaries = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListTopicRuleDestinationsOutput) SetNextToken(v string) *ListTopicRuleDestinationsOutput {
	s.NextToken = &v
	return s
}

// The input for the ListTopicRules operation.
type ListTopicRulesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// Specifies whether the rule is disabled.
	RuleDisabled *bool `location:"querystring" locationName:"ruleDisabled" type:"boolean"`

	// The topic.
	Topic *string `location:"querystring" locationName:"topic" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTopicRulesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTopicRulesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListTopicRulesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListTopicRulesInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListTopicRulesInput) SetMaxResults(v int64) *ListTopicRulesInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListTopicRulesInput) SetNextToken(v string) *ListTopicRulesInput {
	s.NextToken = &v
	return s
}

// SetRuleDisabled sets the RuleDisabled field's value.
func (s *ListTopicRulesInput) SetRuleDisabled(v bool) *ListTopicRulesInput {
	s.RuleDisabled = &v
	return s
}

// SetTopic sets the Topic field's value.
func (s *ListTopicRulesInput) SetTopic(v string) *ListTopicRulesInput {
	s.Topic = &v
	return s
}

// The output from the ListTopicRules operation.
type ListTopicRulesOutput struct {
	_ struct{} `type:"structure"`

	// The token to use to get the next set of results, or null if there are no
	// additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The rules.
	Rules []*TopicRuleListItem `locationName:"rules" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTopicRulesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListTopicRulesOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListTopicRulesOutput) SetNextToken(v string) *ListTopicRulesOutput {
	s.NextToken = &v
	return s
}

// SetRules sets the Rules field's value.
func (s *ListTopicRulesOutput) SetRules(v []*TopicRuleListItem) *ListTopicRulesOutput {
	s.Rules = v
	return s
}

type ListV2LoggingLevelsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// To retrieve the next set of results, the nextToken value from a previous
	// response; otherwise null to receive the first set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The type of resource for which you are configuring logging. Must be THING_Group.
	TargetType *string `location:"querystring" locationName:"targetType" type:"string" enum:"LogTargetType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListV2LoggingLevelsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListV2LoggingLevelsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListV2LoggingLevelsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListV2LoggingLevelsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListV2LoggingLevelsInput) SetMaxResults(v int64) *ListV2LoggingLevelsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListV2LoggingLevelsInput) SetNextToken(v string) *ListV2LoggingLevelsInput {
	s.NextToken = &v
	return s
}

// SetTargetType sets the TargetType field's value.
func (s *ListV2LoggingLevelsInput) SetTargetType(v string) *ListV2LoggingLevelsInput {
	s.TargetType = &v
	return s
}

type ListV2LoggingLevelsOutput struct {
	_ struct{} `type:"structure"`

	// The logging configuration for a target.
	LogTargetConfigurations []*LogTargetConfiguration `locationName:"logTargetConfigurations" type:"list"`

	// The token to use to get the next set of results, or null if there are no
	// additional results.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListV2LoggingLevelsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListV2LoggingLevelsOutput) GoString() string {
	return s.String()
}

// SetLogTargetConfigurations sets the LogTargetConfigurations field's value.
func (s *ListV2LoggingLevelsOutput) SetLogTargetConfigurations(v []*LogTargetConfiguration) *ListV2LoggingLevelsOutput {
	s.LogTargetConfigurations = v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListV2LoggingLevelsOutput) SetNextToken(v string) *ListV2LoggingLevelsOutput {
	s.NextToken = &v
	return s
}

type ListViolationEventsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The criteria for a behavior.
	BehaviorCriteriaType *string `location:"querystring" locationName:"behaviorCriteriaType" type:"string" enum:"BehaviorCriteriaType"`

	// The end time for the alerts to be listed.
	//
	// EndTime is a required field
	EndTime *time.Time `location:"querystring" locationName:"endTime" type:"timestamp" required:"true"`

	// A list of all suppressed alerts.
	ListSuppressedAlerts *bool `location:"querystring" locationName:"listSuppressedAlerts" type:"boolean"`

	// The maximum number of results to return at one time.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// A filter to limit results to those alerts generated by the specified security
	// profile.
	SecurityProfileName *string `location:"querystring" locationName:"securityProfileName" min:"1" type:"string"`

	// The start time for the alerts to be listed.
	//
	// StartTime is a required field
	StartTime *time.Time `location:"querystring" locationName:"startTime" type:"timestamp" required:"true"`

	// A filter to limit results to those alerts caused by the specified thing.
	ThingName *string `location:"querystring" locationName:"thingName" min:"1" type:"string"`

	// The verification state of the violation (detect alarm).
	VerificationState *string `location:"querystring" locationName:"verificationState" type:"string" enum:"VerificationState"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListViolationEventsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListViolationEventsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListViolationEventsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListViolationEventsInput"}
	if s.EndTime == nil {
		invalidParams.Add(request.NewErrParamRequired("EndTime"))
	}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.SecurityProfileName != nil && len(*s.SecurityProfileName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SecurityProfileName", 1))
	}
	if s.StartTime == nil {
		invalidParams.Add(request.NewErrParamRequired("StartTime"))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBehaviorCriteriaType sets the BehaviorCriteriaType field's value.
func (s *ListViolationEventsInput) SetBehaviorCriteriaType(v string) *ListViolationEventsInput {
	s.BehaviorCriteriaType = &v
	return s
}

// SetEndTime sets the EndTime field's value.
func (s *ListViolationEventsInput) SetEndTime(v time.Time) *ListViolationEventsInput {
	s.EndTime = &v
	return s
}

// SetListSuppressedAlerts sets the ListSuppressedAlerts field's value.
func (s *ListViolationEventsInput) SetListSuppressedAlerts(v bool) *ListViolationEventsInput {
	s.ListSuppressedAlerts = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *ListViolationEventsInput) SetMaxResults(v int64) *ListViolationEventsInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *ListViolationEventsInput) SetNextToken(v string) *ListViolationEventsInput {
	s.NextToken = &v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *ListViolationEventsInput) SetSecurityProfileName(v string) *ListViolationEventsInput {
	s.SecurityProfileName = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *ListViolationEventsInput) SetStartTime(v time.Time) *ListViolationEventsInput {
	s.StartTime = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *ListViolationEventsInput) SetThingName(v string) *ListViolationEventsInput {
	s.ThingName = &v
	return s
}

// SetVerificationState sets the VerificationState field's value.
func (s *ListViolationEventsInput) SetVerificationState(v string) *ListViolationEventsInput {
	s.VerificationState = &v
	return s
}

type ListViolationEventsOutput struct {
	_ struct{} `type:"structure"`

	// A token that can be used to retrieve the next set of results, or null if
	// there are no additional results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The security profile violation alerts issued for this account during the
	// given time period, potentially filtered by security profile, behavior violated,
	// or thing (device) violating.
	ViolationEvents []*ViolationEvent `locationName:"violationEvents" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListViolationEventsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListViolationEventsOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *ListViolationEventsOutput) SetNextToken(v string) *ListViolationEventsOutput {
	s.NextToken = &v
	return s
}

// SetViolationEvents sets the ViolationEvents field's value.
func (s *ListViolationEventsOutput) SetViolationEvents(v []*ViolationEvent) *ListViolationEventsOutput {
	s.ViolationEvents = v
	return s
}

// The Amazon Location rule action sends device location updates from an MQTT
// message to an Amazon Location tracker resource.
type LocationAction struct {
	_ struct{} `type:"structure"`

	// The unique ID of the device providing the location data.
	//
	// DeviceId is a required field
	DeviceId *string `locationName:"deviceId" type:"string" required:"true"`

	// A string that evaluates to a double value that represents the latitude of
	// the device's location.
	//
	// Latitude is a required field
	Latitude *string `locationName:"latitude" type:"string" required:"true"`

	// A string that evaluates to a double value that represents the longitude of
	// the device's location.
	//
	// Longitude is a required field
	Longitude *string `locationName:"longitude" type:"string" required:"true"`

	// The IAM role that grants permission to write to the Amazon Location resource.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// The time that the location data was sampled. The default value is the time
	// the MQTT message was processed.
	Timestamp *LocationTimestamp `locationName:"timestamp" type:"structure"`

	// The name of the tracker resource in Amazon Location in which the location
	// is updated.
	//
	// TrackerName is a required field
	TrackerName *string `locationName:"trackerName" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LocationAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LocationAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *LocationAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "LocationAction"}
	if s.DeviceId == nil {
		invalidParams.Add(request.NewErrParamRequired("DeviceId"))
	}
	if s.Latitude == nil {
		invalidParams.Add(request.NewErrParamRequired("Latitude"))
	}
	if s.Longitude == nil {
		invalidParams.Add(request.NewErrParamRequired("Longitude"))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.TrackerName == nil {
		invalidParams.Add(request.NewErrParamRequired("TrackerName"))
	}
	if s.Timestamp != nil {
		if err := s.Timestamp.Validate(); err != nil {
			invalidParams.AddNested("Timestamp", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDeviceId sets the DeviceId field's value.
func (s *LocationAction) SetDeviceId(v string) *LocationAction {
	s.DeviceId = &v
	return s
}

// SetLatitude sets the Latitude field's value.
func (s *LocationAction) SetLatitude(v string) *LocationAction {
	s.Latitude = &v
	return s
}

// SetLongitude sets the Longitude field's value.
func (s *LocationAction) SetLongitude(v string) *LocationAction {
	s.Longitude = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *LocationAction) SetRoleArn(v string) *LocationAction {
	s.RoleArn = &v
	return s
}

// SetTimestamp sets the Timestamp field's value.
func (s *LocationAction) SetTimestamp(v *LocationTimestamp) *LocationAction {
	s.Timestamp = v
	return s
}

// SetTrackerName sets the TrackerName field's value.
func (s *LocationAction) SetTrackerName(v string) *LocationAction {
	s.TrackerName = &v
	return s
}

// Describes how to interpret an application-defined timestamp value from an
// MQTT message payload and the precision of that value.
type LocationTimestamp struct {
	_ struct{} `type:"structure"`

	// The precision of the timestamp value that results from the expression described
	// in value.
	//
	// Valid values: SECONDS | MILLISECONDS | MICROSECONDS | NANOSECONDS. The default
	// is MILLISECONDS.
	Unit *string `locationName:"unit" type:"string"`

	// An expression that returns a long epoch time value.
	//
	// Value is a required field
	Value *string `locationName:"value" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LocationTimestamp) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LocationTimestamp) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *LocationTimestamp) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "LocationTimestamp"}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetUnit sets the Unit field's value.
func (s *LocationTimestamp) SetUnit(v string) *LocationTimestamp {
	s.Unit = &v
	return s
}

// SetValue sets the Value field's value.
func (s *LocationTimestamp) SetValue(v string) *LocationTimestamp {
	s.Value = &v
	return s
}

// A log target.
type LogTarget struct {
	_ struct{} `type:"structure"`

	// The target name.
	TargetName *string `locationName:"targetName" type:"string"`

	// The target type.
	//
	// TargetType is a required field
	TargetType *string `locationName:"targetType" type:"string" required:"true" enum:"LogTargetType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LogTarget) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LogTarget) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *LogTarget) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "LogTarget"}
	if s.TargetType == nil {
		invalidParams.Add(request.NewErrParamRequired("TargetType"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTargetName sets the TargetName field's value.
func (s *LogTarget) SetTargetName(v string) *LogTarget {
	s.TargetName = &v
	return s
}

// SetTargetType sets the TargetType field's value.
func (s *LogTarget) SetTargetType(v string) *LogTarget {
	s.TargetType = &v
	return s
}

// The target configuration.
type LogTargetConfiguration struct {
	_ struct{} `type:"structure"`

	// The logging level.
	LogLevel *string `locationName:"logLevel" type:"string" enum:"LogLevel"`

	// A log target
	LogTarget *LogTarget `locationName:"logTarget" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LogTargetConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LogTargetConfiguration) GoString() string {
	return s.String()
}

// SetLogLevel sets the LogLevel field's value.
func (s *LogTargetConfiguration) SetLogLevel(v string) *LogTargetConfiguration {
	s.LogLevel = &v
	return s
}

// SetLogTarget sets the LogTarget field's value.
func (s *LogTargetConfiguration) SetLogTarget(v *LogTarget) *LogTargetConfiguration {
	s.LogTarget = v
	return s
}

// Describes the logging options payload.
type LoggingOptionsPayload struct {
	_ struct{} `type:"structure"`

	// The log level.
	LogLevel *string `locationName:"logLevel" type:"string" enum:"LogLevel"`

	// The ARN of the IAM role that grants access.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LoggingOptionsPayload) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LoggingOptionsPayload) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *LoggingOptionsPayload) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "LoggingOptionsPayload"}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLogLevel sets the LogLevel field's value.
func (s *LoggingOptionsPayload) SetLogLevel(v string) *LoggingOptionsPayload {
	s.LogLevel = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *LoggingOptionsPayload) SetRoleArn(v string) *LoggingOptionsPayload {
	s.RoleArn = &v
	return s
}

// The configuration of an ML Detect Security Profile.
type MachineLearningDetectionConfig struct {
	_ struct{} `type:"structure"`

	// The sensitivity of anomalous behavior evaluation. Can be Low, Medium, or
	// High.
	//
	// ConfidenceLevel is a required field
	ConfidenceLevel *string `locationName:"confidenceLevel" type:"string" required:"true" enum:"ConfidenceLevel"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MachineLearningDetectionConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MachineLearningDetectionConfig) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *MachineLearningDetectionConfig) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "MachineLearningDetectionConfig"}
	if s.ConfidenceLevel == nil {
		invalidParams.Add(request.NewErrParamRequired("ConfidenceLevel"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetConfidenceLevel sets the ConfidenceLevel field's value.
func (s *MachineLearningDetectionConfig) SetConfidenceLevel(v string) *MachineLearningDetectionConfig {
	s.ConfidenceLevel = &v
	return s
}

// An optional configuration within the SchedulingConfig to setup a recurring
// maintenance window with a predetermined start time and duration for the rollout
// of a job document to all devices in a target group for a job.
type MaintenanceWindow struct {
	_ struct{} `type:"structure"`

	// Displays the duration of the next maintenance window.
	//
	// DurationInMinutes is a required field
	DurationInMinutes *int64 `locationName:"durationInMinutes" min:"1" type:"integer" required:"true"`

	// Displays the start time of the next maintenance window.
	//
	// StartTime is a required field
	StartTime *string `locationName:"startTime" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MaintenanceWindow) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MaintenanceWindow) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *MaintenanceWindow) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "MaintenanceWindow"}
	if s.DurationInMinutes == nil {
		invalidParams.Add(request.NewErrParamRequired("DurationInMinutes"))
	}
	if s.DurationInMinutes != nil && *s.DurationInMinutes < 1 {
		invalidParams.Add(request.NewErrParamMinValue("DurationInMinutes", 1))
	}
	if s.StartTime == nil {
		invalidParams.Add(request.NewErrParamRequired("StartTime"))
	}
	if s.StartTime != nil && len(*s.StartTime) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("StartTime", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDurationInMinutes sets the DurationInMinutes field's value.
func (s *MaintenanceWindow) SetDurationInMinutes(v int64) *MaintenanceWindow {
	s.DurationInMinutes = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *MaintenanceWindow) SetStartTime(v string) *MaintenanceWindow {
	s.StartTime = &v
	return s
}

// The policy documentation is not valid.
type MalformedPolicyException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MalformedPolicyException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MalformedPolicyException) GoString() string {
	return s.String()
}

func newErrorMalformedPolicyException(v protocol.ResponseMetadata) error {
	return &MalformedPolicyException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *MalformedPolicyException) Code() string {
	return "MalformedPolicyException"
}

// Message returns the exception's message.
func (s *MalformedPolicyException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *MalformedPolicyException) OrigErr() error {
	return nil
}

func (s *MalformedPolicyException) 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 *MalformedPolicyException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *MalformedPolicyException) RequestID() string {
	return s.RespMetadata.RequestID
}

// An object that contains information about the managed template.
type ManagedJobTemplateSummary struct {
	_ struct{} `type:"structure"`

	// The description for a managed template.
	Description *string `locationName:"description" type:"string"`

	// A list of environments that are supported with the managed job template.
	Environments []*string `locationName:"environments" type:"list"`

	// The Amazon Resource Name (ARN) for a managed template.
	TemplateArn *string `locationName:"templateArn" min:"1" type:"string"`

	// The unique Name for a managed template.
	TemplateName *string `locationName:"templateName" min:"1" type:"string"`

	// The version for a managed template.
	TemplateVersion *string `locationName:"templateVersion" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ManagedJobTemplateSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ManagedJobTemplateSummary) GoString() string {
	return s.String()
}

// SetDescription sets the Description field's value.
func (s *ManagedJobTemplateSummary) SetDescription(v string) *ManagedJobTemplateSummary {
	s.Description = &v
	return s
}

// SetEnvironments sets the Environments field's value.
func (s *ManagedJobTemplateSummary) SetEnvironments(v []*string) *ManagedJobTemplateSummary {
	s.Environments = v
	return s
}

// SetTemplateArn sets the TemplateArn field's value.
func (s *ManagedJobTemplateSummary) SetTemplateArn(v string) *ManagedJobTemplateSummary {
	s.TemplateArn = &v
	return s
}

// SetTemplateName sets the TemplateName field's value.
func (s *ManagedJobTemplateSummary) SetTemplateName(v string) *ManagedJobTemplateSummary {
	s.TemplateName = &v
	return s
}

// SetTemplateVersion sets the TemplateVersion field's value.
func (s *ManagedJobTemplateSummary) SetTemplateVersion(v string) *ManagedJobTemplateSummary {
	s.TemplateVersion = &v
	return s
}

// A metric.
type MetricDatum struct {
	_ struct{} `type:"structure"`

	// The time the metric value was reported.
	Timestamp *time.Time `locationName:"timestamp" type:"timestamp"`

	// The value reported for the metric.
	Value *MetricValue `locationName:"value" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MetricDatum) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MetricDatum) GoString() string {
	return s.String()
}

// SetTimestamp sets the Timestamp field's value.
func (s *MetricDatum) SetTimestamp(v time.Time) *MetricDatum {
	s.Timestamp = &v
	return s
}

// SetValue sets the Value field's value.
func (s *MetricDatum) SetValue(v *MetricValue) *MetricDatum {
	s.Value = v
	return s
}

// The dimension of a metric.
type MetricDimension struct {
	_ struct{} `type:"structure"`

	// A unique identifier for the dimension.
	//
	// DimensionName is a required field
	DimensionName *string `locationName:"dimensionName" min:"1" type:"string" required:"true"`

	// Defines how the dimensionValues of a dimension are interpreted. For example,
	// for dimension type TOPIC_FILTER, the IN operator, a message will be counted
	// only if its topic matches one of the topic filters. With NOT_IN operator,
	// a message will be counted only if it doesn't match any of the topic filters.
	// The operator is optional: if it's not provided (is null), it will be interpreted
	// as IN.
	Operator *string `locationName:"operator" type:"string" enum:"DimensionValueOperator"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MetricDimension) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MetricDimension) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *MetricDimension) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "MetricDimension"}
	if s.DimensionName == nil {
		invalidParams.Add(request.NewErrParamRequired("DimensionName"))
	}
	if s.DimensionName != nil && len(*s.DimensionName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DimensionName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDimensionName sets the DimensionName field's value.
func (s *MetricDimension) SetDimensionName(v string) *MetricDimension {
	s.DimensionName = &v
	return s
}

// SetOperator sets the Operator field's value.
func (s *MetricDimension) SetOperator(v string) *MetricDimension {
	s.Operator = &v
	return s
}

// The metric you want to retain. Dimensions are optional.
type MetricToRetain struct {
	_ struct{} `type:"structure"`

	// The value indicates exporting metrics related to the MetricToRetain when
	// it's true.
	ExportMetric *bool `locationName:"exportMetric" type:"boolean"`

	// What is measured by the behavior.
	//
	// Metric is a required field
	Metric *string `locationName:"metric" type:"string" required:"true"`

	// The dimension of a metric. This can't be used with custom metrics.
	MetricDimension *MetricDimension `locationName:"metricDimension" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MetricToRetain) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MetricToRetain) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *MetricToRetain) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "MetricToRetain"}
	if s.Metric == nil {
		invalidParams.Add(request.NewErrParamRequired("Metric"))
	}
	if s.MetricDimension != nil {
		if err := s.MetricDimension.Validate(); err != nil {
			invalidParams.AddNested("MetricDimension", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExportMetric sets the ExportMetric field's value.
func (s *MetricToRetain) SetExportMetric(v bool) *MetricToRetain {
	s.ExportMetric = &v
	return s
}

// SetMetric sets the Metric field's value.
func (s *MetricToRetain) SetMetric(v string) *MetricToRetain {
	s.Metric = &v
	return s
}

// SetMetricDimension sets the MetricDimension field's value.
func (s *MetricToRetain) SetMetricDimension(v *MetricDimension) *MetricToRetain {
	s.MetricDimension = v
	return s
}

// The value to be compared with the metric.
type MetricValue struct {
	_ struct{} `type:"structure"`

	// If the comparisonOperator calls for a set of CIDRs, use this to specify that
	// set to be compared with the metric.
	Cidrs []*string `locationName:"cidrs" type:"list"`

	// If the comparisonOperator calls for a numeric value, use this to specify
	// that numeric value to be compared with the metric.
	Count *int64 `locationName:"count" type:"long"`

	// The numeral value of a metric.
	Number *float64 `locationName:"number" type:"double"`

	// The numeral values of a metric.
	Numbers []*float64 `locationName:"numbers" type:"list"`

	// If the comparisonOperator calls for a set of ports, use this to specify that
	// set to be compared with the metric.
	Ports []*int64 `locationName:"ports" type:"list"`

	// The string values of a metric.
	Strings []*string `locationName:"strings" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MetricValue) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MetricValue) GoString() string {
	return s.String()
}

// SetCidrs sets the Cidrs field's value.
func (s *MetricValue) SetCidrs(v []*string) *MetricValue {
	s.Cidrs = v
	return s
}

// SetCount sets the Count field's value.
func (s *MetricValue) SetCount(v int64) *MetricValue {
	s.Count = &v
	return s
}

// SetNumber sets the Number field's value.
func (s *MetricValue) SetNumber(v float64) *MetricValue {
	s.Number = &v
	return s
}

// SetNumbers sets the Numbers field's value.
func (s *MetricValue) SetNumbers(v []*float64) *MetricValue {
	s.Numbers = v
	return s
}

// SetPorts sets the Ports field's value.
func (s *MetricValue) SetPorts(v []*int64) *MetricValue {
	s.Ports = v
	return s
}

// SetStrings sets the Strings field's value.
func (s *MetricValue) SetStrings(v []*string) *MetricValue {
	s.Strings = v
	return s
}

// Set configurations for metrics export.
type MetricsExportConfig struct {
	_ struct{} `type:"structure"`

	// The MQTT topic that Device Defender Detect should publish messages to for
	// metrics export.
	//
	// MqttTopic is a required field
	MqttTopic *string `locationName:"mqttTopic" min:"1" type:"string" required:"true"`

	// This role ARN has permission to publish MQTT messages, after which Device
	// Defender Detect can assume the role and publish messages on your behalf.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" min:"20" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MetricsExportConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MetricsExportConfig) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *MetricsExportConfig) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "MetricsExportConfig"}
	if s.MqttTopic == nil {
		invalidParams.Add(request.NewErrParamRequired("MqttTopic"))
	}
	if s.MqttTopic != nil && len(*s.MqttTopic) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("MqttTopic", 1))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.RoleArn != nil && len(*s.RoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMqttTopic sets the MqttTopic field's value.
func (s *MetricsExportConfig) SetMqttTopic(v string) *MetricsExportConfig {
	s.MqttTopic = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *MetricsExportConfig) SetRoleArn(v string) *MetricsExportConfig {
	s.RoleArn = &v
	return s
}

// Describes which changes should be applied as part of a mitigation action.
type MitigationAction struct {
	_ struct{} `type:"structure"`

	// The set of parameters for this mitigation action. The parameters vary, depending
	// on the kind of action you apply.
	ActionParams *MitigationActionParams `locationName:"actionParams" type:"structure"`

	// A unique identifier for the mitigation action.
	Id *string `locationName:"id" type:"string"`

	// A user-friendly name for the mitigation action.
	Name *string `locationName:"name" type:"string"`

	// The IAM role ARN used to apply this mitigation action.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MitigationAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MitigationAction) GoString() string {
	return s.String()
}

// SetActionParams sets the ActionParams field's value.
func (s *MitigationAction) SetActionParams(v *MitigationActionParams) *MitigationAction {
	s.ActionParams = v
	return s
}

// SetId sets the Id field's value.
func (s *MitigationAction) SetId(v string) *MitigationAction {
	s.Id = &v
	return s
}

// SetName sets the Name field's value.
func (s *MitigationAction) SetName(v string) *MitigationAction {
	s.Name = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *MitigationAction) SetRoleArn(v string) *MitigationAction {
	s.RoleArn = &v
	return s
}

// Information that identifies a mitigation action. This information is returned
// by ListMitigationActions.
type MitigationActionIdentifier struct {
	_ struct{} `type:"structure"`

	// The IAM role ARN used to apply this mitigation action.
	ActionArn *string `locationName:"actionArn" type:"string"`

	// The friendly name of the mitigation action.
	ActionName *string `locationName:"actionName" type:"string"`

	// The date when this mitigation action was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MitigationActionIdentifier) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MitigationActionIdentifier) GoString() string {
	return s.String()
}

// SetActionArn sets the ActionArn field's value.
func (s *MitigationActionIdentifier) SetActionArn(v string) *MitigationActionIdentifier {
	s.ActionArn = &v
	return s
}

// SetActionName sets the ActionName field's value.
func (s *MitigationActionIdentifier) SetActionName(v string) *MitigationActionIdentifier {
	s.ActionName = &v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *MitigationActionIdentifier) SetCreationDate(v time.Time) *MitigationActionIdentifier {
	s.CreationDate = &v
	return s
}

// The set of parameters for this mitigation action. You can specify only one
// type of parameter (in other words, you can apply only one action for each
// defined mitigation action).
type MitigationActionParams struct {
	_ struct{} `type:"structure"`

	// Parameters to define a mitigation action that moves devices associated with
	// a certificate to one or more specified thing groups, typically for quarantine.
	AddThingsToThingGroupParams *AddThingsToThingGroupParams `locationName:"addThingsToThingGroupParams" type:"structure"`

	// Parameters to define a mitigation action that enables Amazon Web Services
	// IoT Core logging at a specified level of detail.
	EnableIoTLoggingParams *EnableIoTLoggingParams `locationName:"enableIoTLoggingParams" type:"structure"`

	// Parameters to define a mitigation action that publishes findings to Amazon
	// Simple Notification Service (Amazon SNS. You can implement your own custom
	// actions in response to the Amazon SNS messages.
	PublishFindingToSnsParams *PublishFindingToSnsParams `locationName:"publishFindingToSnsParams" type:"structure"`

	// Parameters to define a mitigation action that adds a blank policy to restrict
	// permissions.
	ReplaceDefaultPolicyVersionParams *ReplaceDefaultPolicyVersionParams `locationName:"replaceDefaultPolicyVersionParams" type:"structure"`

	// Parameters to define a mitigation action that changes the state of the CA
	// certificate to inactive.
	UpdateCACertificateParams *UpdateCACertificateParams `locationName:"updateCACertificateParams" type:"structure"`

	// Parameters to define a mitigation action that changes the state of the device
	// certificate to inactive.
	UpdateDeviceCertificateParams *UpdateDeviceCertificateParams `locationName:"updateDeviceCertificateParams" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MitigationActionParams) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MitigationActionParams) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *MitigationActionParams) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "MitigationActionParams"}
	if s.AddThingsToThingGroupParams != nil {
		if err := s.AddThingsToThingGroupParams.Validate(); err != nil {
			invalidParams.AddNested("AddThingsToThingGroupParams", err.(request.ErrInvalidParams))
		}
	}
	if s.EnableIoTLoggingParams != nil {
		if err := s.EnableIoTLoggingParams.Validate(); err != nil {
			invalidParams.AddNested("EnableIoTLoggingParams", err.(request.ErrInvalidParams))
		}
	}
	if s.PublishFindingToSnsParams != nil {
		if err := s.PublishFindingToSnsParams.Validate(); err != nil {
			invalidParams.AddNested("PublishFindingToSnsParams", err.(request.ErrInvalidParams))
		}
	}
	if s.ReplaceDefaultPolicyVersionParams != nil {
		if err := s.ReplaceDefaultPolicyVersionParams.Validate(); err != nil {
			invalidParams.AddNested("ReplaceDefaultPolicyVersionParams", err.(request.ErrInvalidParams))
		}
	}
	if s.UpdateCACertificateParams != nil {
		if err := s.UpdateCACertificateParams.Validate(); err != nil {
			invalidParams.AddNested("UpdateCACertificateParams", err.(request.ErrInvalidParams))
		}
	}
	if s.UpdateDeviceCertificateParams != nil {
		if err := s.UpdateDeviceCertificateParams.Validate(); err != nil {
			invalidParams.AddNested("UpdateDeviceCertificateParams", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAddThingsToThingGroupParams sets the AddThingsToThingGroupParams field's value.
func (s *MitigationActionParams) SetAddThingsToThingGroupParams(v *AddThingsToThingGroupParams) *MitigationActionParams {
	s.AddThingsToThingGroupParams = v
	return s
}

// SetEnableIoTLoggingParams sets the EnableIoTLoggingParams field's value.
func (s *MitigationActionParams) SetEnableIoTLoggingParams(v *EnableIoTLoggingParams) *MitigationActionParams {
	s.EnableIoTLoggingParams = v
	return s
}

// SetPublishFindingToSnsParams sets the PublishFindingToSnsParams field's value.
func (s *MitigationActionParams) SetPublishFindingToSnsParams(v *PublishFindingToSnsParams) *MitigationActionParams {
	s.PublishFindingToSnsParams = v
	return s
}

// SetReplaceDefaultPolicyVersionParams sets the ReplaceDefaultPolicyVersionParams field's value.
func (s *MitigationActionParams) SetReplaceDefaultPolicyVersionParams(v *ReplaceDefaultPolicyVersionParams) *MitigationActionParams {
	s.ReplaceDefaultPolicyVersionParams = v
	return s
}

// SetUpdateCACertificateParams sets the UpdateCACertificateParams field's value.
func (s *MitigationActionParams) SetUpdateCACertificateParams(v *UpdateCACertificateParams) *MitigationActionParams {
	s.UpdateCACertificateParams = v
	return s
}

// SetUpdateDeviceCertificateParams sets the UpdateDeviceCertificateParams field's value.
func (s *MitigationActionParams) SetUpdateDeviceCertificateParams(v *UpdateDeviceCertificateParams) *MitigationActionParams {
	s.UpdateDeviceCertificateParams = v
	return s
}

// Specifies the MQTT context to use for the test authorizer request
type MqttContext struct {
	_ struct{} `type:"structure"`

	// The value of the clientId key in an MQTT authorization request.
	ClientId *string `locationName:"clientId" min:"1" type:"string"`

	// The value of the password key in an MQTT authorization request.
	// Password is automatically base64 encoded/decoded by the SDK.
	Password []byte `locationName:"password" min:"1" type:"blob"`

	// The value of the username key in an MQTT authorization request.
	Username *string `locationName:"username" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MqttContext) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MqttContext) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *MqttContext) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "MqttContext"}
	if s.ClientId != nil && len(*s.ClientId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientId", 1))
	}
	if s.Password != nil && len(s.Password) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Password", 1))
	}
	if s.Username != nil && len(*s.Username) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Username", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetClientId sets the ClientId field's value.
func (s *MqttContext) SetClientId(v string) *MqttContext {
	s.ClientId = &v
	return s
}

// SetPassword sets the Password field's value.
func (s *MqttContext) SetPassword(v []byte) *MqttContext {
	s.Password = v
	return s
}

// SetUsername sets the Username field's value.
func (s *MqttContext) SetUsername(v string) *MqttContext {
	s.Username = &v
	return s
}

// Specifies MQTT Version 5.0 headers information. For more information, see
// MQTT (https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html) from
// Amazon Web Services IoT Core Developer Guide.
type MqttHeaders struct {
	_ struct{} `type:"structure"`

	// A UTF-8 encoded string that describes the content of the publishing message.
	//
	// For more information, see Content Type (https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901118)
	// from the MQTT Version 5.0 specification.
	//
	// Supports substitution templates (https://docs.aws.amazon.com/iot/latest/developerguide/iot-substitution-templates.html).
	ContentType *string `locationName:"contentType" type:"string"`

	// The base64-encoded binary data used by the sender of the request message
	// to identify which request the response message is for when it's received.
	//
	// For more information, see Correlation Data (https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901115)
	// from the MQTT Version 5.0 specification.
	//
	// This binary data must be based64-encoded.
	//
	// Supports substitution templates (https://docs.aws.amazon.com/iot/latest/developerguide/iot-substitution-templates.html).
	CorrelationData *string `locationName:"correlationData" type:"string"`

	// A user-defined integer value that will persist a message at the message broker
	// for a specified amount of time to ensure that the message will expire if
	// it's no longer relevant to the subscriber. The value of messageExpiry represents
	// the number of seconds before it expires. For more information about the limits
	// of messageExpiry, see Amazon Web Services IoT Core message broker and protocol
	// limits and quotas (https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html)
	// from the Amazon Web Services Reference Guide.
	//
	// Supports substitution templates (https://docs.aws.amazon.com/iot/latest/developerguide/iot-substitution-templates.html).
	MessageExpiry *string `locationName:"messageExpiry" type:"string"`

	// An Enum string value that indicates whether the payload is formatted as UTF-8.
	//
	// Valid values are UNSPECIFIED_BYTES and UTF8_DATA.
	//
	// For more information, see Payload Format Indicator (https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901111)
	// from the MQTT Version 5.0 specification.
	//
	// Supports substitution templates (https://docs.aws.amazon.com/iot/latest/developerguide/iot-substitution-templates.html).
	PayloadFormatIndicator *string `locationName:"payloadFormatIndicator" type:"string"`

	// A UTF-8 encoded string that's used as the topic name for a response message.
	// The response topic is used to describe the topic which the receiver should
	// publish to as part of the request-response flow. The topic must not contain
	// wildcard characters.
	//
	// For more information, see Response Topic (https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901114)
	// from the MQTT Version 5.0 specification.
	//
	// Supports substitution templates (https://docs.aws.amazon.com/iot/latest/developerguide/iot-substitution-templates.html).
	ResponseTopic *string `locationName:"responseTopic" type:"string"`

	// An array of key-value pairs that you define in the MQTT5 header.
	UserProperties []*UserProperty `locationName:"userProperties" min:"1" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MqttHeaders) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MqttHeaders) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *MqttHeaders) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "MqttHeaders"}
	if s.UserProperties != nil && len(s.UserProperties) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("UserProperties", 1))
	}
	if s.UserProperties != nil {
		for i, v := range s.UserProperties {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "UserProperties", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetContentType sets the ContentType field's value.
func (s *MqttHeaders) SetContentType(v string) *MqttHeaders {
	s.ContentType = &v
	return s
}

// SetCorrelationData sets the CorrelationData field's value.
func (s *MqttHeaders) SetCorrelationData(v string) *MqttHeaders {
	s.CorrelationData = &v
	return s
}

// SetMessageExpiry sets the MessageExpiry field's value.
func (s *MqttHeaders) SetMessageExpiry(v string) *MqttHeaders {
	s.MessageExpiry = &v
	return s
}

// SetPayloadFormatIndicator sets the PayloadFormatIndicator field's value.
func (s *MqttHeaders) SetPayloadFormatIndicator(v string) *MqttHeaders {
	s.PayloadFormatIndicator = &v
	return s
}

// SetResponseTopic sets the ResponseTopic field's value.
func (s *MqttHeaders) SetResponseTopic(v string) *MqttHeaders {
	s.ResponseTopic = &v
	return s
}

// SetUserProperties sets the UserProperties field's value.
func (s *MqttHeaders) SetUserProperties(v []*UserProperty) *MqttHeaders {
	s.UserProperties = v
	return s
}

// Information about the resource that was noncompliant with the audit check.
type NonCompliantResource struct {
	_ struct{} `type:"structure"`

	// Other information about the noncompliant resource.
	AdditionalInfo map[string]*string `locationName:"additionalInfo" type:"map"`

	// Information that identifies the noncompliant resource.
	ResourceIdentifier *ResourceIdentifier `locationName:"resourceIdentifier" type:"structure"`

	// The type of the noncompliant resource.
	ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NonCompliantResource) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NonCompliantResource) GoString() string {
	return s.String()
}

// SetAdditionalInfo sets the AdditionalInfo field's value.
func (s *NonCompliantResource) SetAdditionalInfo(v map[string]*string) *NonCompliantResource {
	s.AdditionalInfo = v
	return s
}

// SetResourceIdentifier sets the ResourceIdentifier field's value.
func (s *NonCompliantResource) SetResourceIdentifier(v *ResourceIdentifier) *NonCompliantResource {
	s.ResourceIdentifier = v
	return s
}

// SetResourceType sets the ResourceType field's value.
func (s *NonCompliantResource) SetResourceType(v string) *NonCompliantResource {
	s.ResourceType = &v
	return s
}

// The resource is not configured.
type NotConfiguredException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NotConfiguredException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s NotConfiguredException) GoString() string {
	return s.String()
}

func newErrorNotConfiguredException(v protocol.ResponseMetadata) error {
	return &NotConfiguredException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *NotConfiguredException) Code() string {
	return "NotConfiguredException"
}

// Message returns the exception's message.
func (s *NotConfiguredException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *NotConfiguredException) OrigErr() error {
	return nil
}

func (s *NotConfiguredException) 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 *NotConfiguredException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *NotConfiguredException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Describes a file to be associated with an OTA update.
type OTAUpdateFile struct {
	_ struct{} `type:"structure"`

	// A list of name-attribute pairs. They won't be sent to devices as a part of
	// the Job document.
	Attributes map[string]*string `locationName:"attributes" type:"map"`

	// The code signing method of the file.
	CodeSigning *CodeSigning `locationName:"codeSigning" type:"structure"`

	// The location of the updated firmware.
	FileLocation *FileLocation `locationName:"fileLocation" type:"structure"`

	// The name of the file.
	FileName *string `locationName:"fileName" type:"string"`

	// An integer value you can include in the job document to allow your devices
	// to identify the type of file received from the cloud.
	FileType *int64 `locationName:"fileType" type:"integer"`

	// The file version.
	FileVersion *string `locationName:"fileVersion" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OTAUpdateFile) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OTAUpdateFile) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *OTAUpdateFile) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "OTAUpdateFile"}
	if s.CodeSigning != nil {
		if err := s.CodeSigning.Validate(); err != nil {
			invalidParams.AddNested("CodeSigning", err.(request.ErrInvalidParams))
		}
	}
	if s.FileLocation != nil {
		if err := s.FileLocation.Validate(); err != nil {
			invalidParams.AddNested("FileLocation", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAttributes sets the Attributes field's value.
func (s *OTAUpdateFile) SetAttributes(v map[string]*string) *OTAUpdateFile {
	s.Attributes = v
	return s
}

// SetCodeSigning sets the CodeSigning field's value.
func (s *OTAUpdateFile) SetCodeSigning(v *CodeSigning) *OTAUpdateFile {
	s.CodeSigning = v
	return s
}

// SetFileLocation sets the FileLocation field's value.
func (s *OTAUpdateFile) SetFileLocation(v *FileLocation) *OTAUpdateFile {
	s.FileLocation = v
	return s
}

// SetFileName sets the FileName field's value.
func (s *OTAUpdateFile) SetFileName(v string) *OTAUpdateFile {
	s.FileName = &v
	return s
}

// SetFileType sets the FileType field's value.
func (s *OTAUpdateFile) SetFileType(v int64) *OTAUpdateFile {
	s.FileType = &v
	return s
}

// SetFileVersion sets the FileVersion field's value.
func (s *OTAUpdateFile) SetFileVersion(v string) *OTAUpdateFile {
	s.FileVersion = &v
	return s
}

// Information about an OTA update.
type OTAUpdateInfo struct {
	_ struct{} `type:"structure"`

	// A collection of name/value pairs
	AdditionalParameters map[string]*string `locationName:"additionalParameters" type:"map"`

	// The IoT job ARN associated with the OTA update.
	AwsIotJobArn *string `locationName:"awsIotJobArn" type:"string"`

	// The IoT job ID associated with the OTA update.
	AwsIotJobId *string `locationName:"awsIotJobId" type:"string"`

	// Configuration for the rollout of OTA updates.
	AwsJobExecutionsRolloutConfig *AwsJobExecutionsRolloutConfig `locationName:"awsJobExecutionsRolloutConfig" type:"structure"`

	// Configuration information for pre-signed URLs. Valid when protocols contains
	// HTTP.
	AwsJobPresignedUrlConfig *AwsJobPresignedUrlConfig `locationName:"awsJobPresignedUrlConfig" type:"structure"`

	// The date when the OTA update was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// A description of the OTA update.
	Description *string `locationName:"description" type:"string"`

	// Error information associated with the OTA update.
	ErrorInfo *ErrorInfo `locationName:"errorInfo" type:"structure"`

	// The date when the OTA update was last updated.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The OTA update ARN.
	OtaUpdateArn *string `locationName:"otaUpdateArn" type:"string"`

	// A list of files associated with the OTA update.
	OtaUpdateFiles []*OTAUpdateFile `locationName:"otaUpdateFiles" min:"1" type:"list"`

	// The OTA update ID.
	OtaUpdateId *string `locationName:"otaUpdateId" min:"1" type:"string"`

	// The status of the OTA update.
	OtaUpdateStatus *string `locationName:"otaUpdateStatus" type:"string" enum:"OTAUpdateStatus"`

	// The protocol used to transfer the OTA update image. Valid values are [HTTP],
	// [MQTT], [HTTP, MQTT]. When both HTTP and MQTT are specified, the target device
	// can choose the protocol.
	Protocols []*string `locationName:"protocols" min:"1" type:"list" enum:"Protocol"`

	// Specifies whether the OTA update will continue to run (CONTINUOUS), or will
	// be complete after all those things specified as targets have completed the
	// OTA update (SNAPSHOT). If continuous, the OTA update may also be run on a
	// thing when a change is detected in a target. For example, an OTA update will
	// run on a thing when the thing is added to a target group, even after the
	// OTA update was completed by all things originally in the group.
	TargetSelection *string `locationName:"targetSelection" type:"string" enum:"TargetSelection"`

	// The targets of the OTA update.
	Targets []*string `locationName:"targets" min:"1" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OTAUpdateInfo) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OTAUpdateInfo) GoString() string {
	return s.String()
}

// SetAdditionalParameters sets the AdditionalParameters field's value.
func (s *OTAUpdateInfo) SetAdditionalParameters(v map[string]*string) *OTAUpdateInfo {
	s.AdditionalParameters = v
	return s
}

// SetAwsIotJobArn sets the AwsIotJobArn field's value.
func (s *OTAUpdateInfo) SetAwsIotJobArn(v string) *OTAUpdateInfo {
	s.AwsIotJobArn = &v
	return s
}

// SetAwsIotJobId sets the AwsIotJobId field's value.
func (s *OTAUpdateInfo) SetAwsIotJobId(v string) *OTAUpdateInfo {
	s.AwsIotJobId = &v
	return s
}

// SetAwsJobExecutionsRolloutConfig sets the AwsJobExecutionsRolloutConfig field's value.
func (s *OTAUpdateInfo) SetAwsJobExecutionsRolloutConfig(v *AwsJobExecutionsRolloutConfig) *OTAUpdateInfo {
	s.AwsJobExecutionsRolloutConfig = v
	return s
}

// SetAwsJobPresignedUrlConfig sets the AwsJobPresignedUrlConfig field's value.
func (s *OTAUpdateInfo) SetAwsJobPresignedUrlConfig(v *AwsJobPresignedUrlConfig) *OTAUpdateInfo {
	s.AwsJobPresignedUrlConfig = v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *OTAUpdateInfo) SetCreationDate(v time.Time) *OTAUpdateInfo {
	s.CreationDate = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *OTAUpdateInfo) SetDescription(v string) *OTAUpdateInfo {
	s.Description = &v
	return s
}

// SetErrorInfo sets the ErrorInfo field's value.
func (s *OTAUpdateInfo) SetErrorInfo(v *ErrorInfo) *OTAUpdateInfo {
	s.ErrorInfo = v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *OTAUpdateInfo) SetLastModifiedDate(v time.Time) *OTAUpdateInfo {
	s.LastModifiedDate = &v
	return s
}

// SetOtaUpdateArn sets the OtaUpdateArn field's value.
func (s *OTAUpdateInfo) SetOtaUpdateArn(v string) *OTAUpdateInfo {
	s.OtaUpdateArn = &v
	return s
}

// SetOtaUpdateFiles sets the OtaUpdateFiles field's value.
func (s *OTAUpdateInfo) SetOtaUpdateFiles(v []*OTAUpdateFile) *OTAUpdateInfo {
	s.OtaUpdateFiles = v
	return s
}

// SetOtaUpdateId sets the OtaUpdateId field's value.
func (s *OTAUpdateInfo) SetOtaUpdateId(v string) *OTAUpdateInfo {
	s.OtaUpdateId = &v
	return s
}

// SetOtaUpdateStatus sets the OtaUpdateStatus field's value.
func (s *OTAUpdateInfo) SetOtaUpdateStatus(v string) *OTAUpdateInfo {
	s.OtaUpdateStatus = &v
	return s
}

// SetProtocols sets the Protocols field's value.
func (s *OTAUpdateInfo) SetProtocols(v []*string) *OTAUpdateInfo {
	s.Protocols = v
	return s
}

// SetTargetSelection sets the TargetSelection field's value.
func (s *OTAUpdateInfo) SetTargetSelection(v string) *OTAUpdateInfo {
	s.TargetSelection = &v
	return s
}

// SetTargets sets the Targets field's value.
func (s *OTAUpdateInfo) SetTargets(v []*string) *OTAUpdateInfo {
	s.Targets = v
	return s
}

// An OTA update summary.
type OTAUpdateSummary struct {
	_ struct{} `type:"structure"`

	// The date when the OTA update was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The OTA update ARN.
	OtaUpdateArn *string `locationName:"otaUpdateArn" type:"string"`

	// The OTA update ID.
	OtaUpdateId *string `locationName:"otaUpdateId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OTAUpdateSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OTAUpdateSummary) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *OTAUpdateSummary) SetCreationDate(v time.Time) *OTAUpdateSummary {
	s.CreationDate = &v
	return s
}

// SetOtaUpdateArn sets the OtaUpdateArn field's value.
func (s *OTAUpdateSummary) SetOtaUpdateArn(v string) *OTAUpdateSummary {
	s.OtaUpdateArn = &v
	return s
}

// SetOtaUpdateId sets the OtaUpdateId field's value.
func (s *OTAUpdateSummary) SetOtaUpdateId(v string) *OTAUpdateSummary {
	s.OtaUpdateId = &v
	return s
}

// Describes an action that writes data to an Amazon OpenSearch Service domain.
type OpenSearchAction struct {
	_ struct{} `type:"structure"`

	// The endpoint of your OpenSearch domain.
	//
	// Endpoint is a required field
	Endpoint *string `locationName:"endpoint" type:"string" required:"true"`

	// The unique identifier for the document you are storing.
	//
	// Id is a required field
	Id *string `locationName:"id" type:"string" required:"true"`

	// The OpenSearch index where you want to store your data.
	//
	// Index is a required field
	Index *string `locationName:"index" type:"string" required:"true"`

	// The IAM role ARN that has access to OpenSearch.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// The type of document you are storing.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OpenSearchAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OpenSearchAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *OpenSearchAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "OpenSearchAction"}
	if s.Endpoint == nil {
		invalidParams.Add(request.NewErrParamRequired("Endpoint"))
	}
	if s.Id == nil {
		invalidParams.Add(request.NewErrParamRequired("Id"))
	}
	if s.Index == nil {
		invalidParams.Add(request.NewErrParamRequired("Index"))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEndpoint sets the Endpoint field's value.
func (s *OpenSearchAction) SetEndpoint(v string) *OpenSearchAction {
	s.Endpoint = &v
	return s
}

// SetId sets the Id field's value.
func (s *OpenSearchAction) SetId(v string) *OpenSearchAction {
	s.Id = &v
	return s
}

// SetIndex sets the Index field's value.
func (s *OpenSearchAction) SetIndex(v string) *OpenSearchAction {
	s.Index = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *OpenSearchAction) SetRoleArn(v string) *OpenSearchAction {
	s.RoleArn = &v
	return s
}

// SetType sets the Type field's value.
func (s *OpenSearchAction) SetType(v string) *OpenSearchAction {
	s.Type = &v
	return s
}

// A certificate that has been transferred but not yet accepted.
type OutgoingCertificate struct {
	_ struct{} `type:"structure"`

	// The certificate ARN.
	CertificateArn *string `locationName:"certificateArn" type:"string"`

	// The certificate ID.
	CertificateId *string `locationName:"certificateId" min:"64" type:"string"`

	// The certificate creation date.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The date the transfer was initiated.
	TransferDate *time.Time `locationName:"transferDate" type:"timestamp"`

	// The transfer message.
	TransferMessage *string `locationName:"transferMessage" type:"string"`

	// The Amazon Web Services account to which the transfer was made.
	TransferredTo *string `locationName:"transferredTo" min:"12" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OutgoingCertificate) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OutgoingCertificate) GoString() string {
	return s.String()
}

// SetCertificateArn sets the CertificateArn field's value.
func (s *OutgoingCertificate) SetCertificateArn(v string) *OutgoingCertificate {
	s.CertificateArn = &v
	return s
}

// SetCertificateId sets the CertificateId field's value.
func (s *OutgoingCertificate) SetCertificateId(v string) *OutgoingCertificate {
	s.CertificateId = &v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *OutgoingCertificate) SetCreationDate(v time.Time) *OutgoingCertificate {
	s.CreationDate = &v
	return s
}

// SetTransferDate sets the TransferDate field's value.
func (s *OutgoingCertificate) SetTransferDate(v time.Time) *OutgoingCertificate {
	s.TransferDate = &v
	return s
}

// SetTransferMessage sets the TransferMessage field's value.
func (s *OutgoingCertificate) SetTransferMessage(v string) *OutgoingCertificate {
	s.TransferMessage = &v
	return s
}

// SetTransferredTo sets the TransferredTo field's value.
func (s *OutgoingCertificate) SetTransferredTo(v string) *OutgoingCertificate {
	s.TransferredTo = &v
	return s
}

// A summary of information about a software package.
type PackageSummary struct {
	_ struct{} `type:"structure"`

	// The date that the package was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The name of the default package version.
	DefaultVersionName *string `locationName:"defaultVersionName" min:"1" type:"string"`

	// The date that the package was last updated.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The name for the target software package.
	PackageName *string `locationName:"packageName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PackageSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PackageSummary) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *PackageSummary) SetCreationDate(v time.Time) *PackageSummary {
	s.CreationDate = &v
	return s
}

// SetDefaultVersionName sets the DefaultVersionName field's value.
func (s *PackageSummary) SetDefaultVersionName(v string) *PackageSummary {
	s.DefaultVersionName = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *PackageSummary) SetLastModifiedDate(v time.Time) *PackageSummary {
	s.LastModifiedDate = &v
	return s
}

// SetPackageName sets the PackageName field's value.
func (s *PackageSummary) SetPackageName(v string) *PackageSummary {
	s.PackageName = &v
	return s
}

// A summary of information about a package version.
type PackageVersionSummary struct {
	_ struct{} `type:"structure"`

	// The date that the package version was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The date that the package version was last updated.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The name of the associated software package.
	PackageName *string `locationName:"packageName" min:"1" type:"string"`

	// The status of the package version. For more information, see Package version
	// lifecycle (https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#package-version-lifecycle).
	Status *string `locationName:"status" type:"string" enum:"PackageVersionStatus"`

	// The name of the target package version.
	VersionName *string `locationName:"versionName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PackageVersionSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PackageVersionSummary) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *PackageVersionSummary) SetCreationDate(v time.Time) *PackageVersionSummary {
	s.CreationDate = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *PackageVersionSummary) SetLastModifiedDate(v time.Time) *PackageVersionSummary {
	s.LastModifiedDate = &v
	return s
}

// SetPackageName sets the PackageName field's value.
func (s *PackageVersionSummary) SetPackageName(v string) *PackageVersionSummary {
	s.PackageName = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *PackageVersionSummary) SetStatus(v string) *PackageVersionSummary {
	s.Status = &v
	return s
}

// SetVersionName sets the VersionName field's value.
func (s *PackageVersionSummary) SetVersionName(v string) *PackageVersionSummary {
	s.VersionName = &v
	return s
}

// Describes the percentile and percentile value.
type PercentPair struct {
	_ struct{} `type:"structure"`

	// The percentile.
	Percent *float64 `locationName:"percent" type:"double"`

	// The value of the percentile.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PercentPair) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PercentPair) GoString() string {
	return s.String()
}

// SetPercent sets the Percent field's value.
func (s *PercentPair) SetPercent(v float64) *PercentPair {
	s.Percent = &v
	return s
}

// SetValue sets the Value field's value.
func (s *PercentPair) SetValue(v float64) *PercentPair {
	s.Value = &v
	return s
}

// Describes an IoT policy.
type Policy struct {
	_ struct{} `type:"structure"`

	// The policy ARN.
	PolicyArn *string `locationName:"policyArn" type:"string"`

	// The policy name.
	PolicyName *string `locationName:"policyName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Policy) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Policy) GoString() string {
	return s.String()
}

// SetPolicyArn sets the PolicyArn field's value.
func (s *Policy) SetPolicyArn(v string) *Policy {
	s.PolicyArn = &v
	return s
}

// SetPolicyName sets the PolicyName field's value.
func (s *Policy) SetPolicyName(v string) *Policy {
	s.PolicyName = &v
	return s
}

// Describes a policy version.
type PolicyVersion struct {
	_ struct{} `type:"structure"`

	// The date and time the policy was created.
	CreateDate *time.Time `locationName:"createDate" type:"timestamp"`

	// Specifies whether the policy version is the default.
	IsDefaultVersion *bool `locationName:"isDefaultVersion" type:"boolean"`

	// The policy version ID.
	VersionId *string `locationName:"versionId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PolicyVersion) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PolicyVersion) GoString() string {
	return s.String()
}

// SetCreateDate sets the CreateDate field's value.
func (s *PolicyVersion) SetCreateDate(v time.Time) *PolicyVersion {
	s.CreateDate = &v
	return s
}

// SetIsDefaultVersion sets the IsDefaultVersion field's value.
func (s *PolicyVersion) SetIsDefaultVersion(v bool) *PolicyVersion {
	s.IsDefaultVersion = &v
	return s
}

// SetVersionId sets the VersionId field's value.
func (s *PolicyVersion) SetVersionId(v string) *PolicyVersion {
	s.VersionId = &v
	return s
}

// Information about the version of the policy associated with the resource.
type PolicyVersionIdentifier struct {
	_ struct{} `type:"structure"`

	// The name of the policy.
	PolicyName *string `locationName:"policyName" min:"1" type:"string"`

	// The ID of the version of the policy associated with the resource.
	PolicyVersionId *string `locationName:"policyVersionId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PolicyVersionIdentifier) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PolicyVersionIdentifier) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PolicyVersionIdentifier) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PolicyVersionIdentifier"}
	if s.PolicyName != nil && len(*s.PolicyName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPolicyName sets the PolicyName field's value.
func (s *PolicyVersionIdentifier) SetPolicyName(v string) *PolicyVersionIdentifier {
	s.PolicyName = &v
	return s
}

// SetPolicyVersionId sets the PolicyVersionId field's value.
func (s *PolicyVersionIdentifier) SetPolicyVersionId(v string) *PolicyVersionIdentifier {
	s.PolicyVersionId = &v
	return s
}

// Configuration for pre-signed S3 URLs.
type PresignedUrlConfig struct {
	_ struct{} `type:"structure"`

	// How long (in seconds) pre-signed URLs are valid. Valid values are 60 - 3600,
	// the default value is 3600 seconds. Pre-signed URLs are generated when Jobs
	// receives an MQTT request for the job document.
	ExpiresInSec *int64 `locationName:"expiresInSec" min:"60" type:"long"`

	// The ARN of an IAM role that grants permission to download files from the
	// S3 bucket where the job data/updates are stored. The role must also grant
	// permission for IoT to download the files.
	//
	// For information about addressing the confused deputy problem, see cross-service
	// confused deputy prevention (https://docs.aws.amazon.com/iot/latest/developerguide/cross-service-confused-deputy-prevention.html)
	// in the Amazon Web Services IoT Core developer guide.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PresignedUrlConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PresignedUrlConfig) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PresignedUrlConfig) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PresignedUrlConfig"}
	if s.ExpiresInSec != nil && *s.ExpiresInSec < 60 {
		invalidParams.Add(request.NewErrParamMinValue("ExpiresInSec", 60))
	}
	if s.RoleArn != nil && len(*s.RoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExpiresInSec sets the ExpiresInSec field's value.
func (s *PresignedUrlConfig) SetExpiresInSec(v int64) *PresignedUrlConfig {
	s.ExpiresInSec = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *PresignedUrlConfig) SetRoleArn(v string) *PresignedUrlConfig {
	s.RoleArn = &v
	return s
}

// Structure that contains payloadVersion and targetArn.
type ProvisioningHook struct {
	_ struct{} `type:"structure"`

	// The payload that was sent to the target function.
	//
	// Note: Only Lambda functions are currently supported.
	PayloadVersion *string `locationName:"payloadVersion" min:"10" type:"string"`

	// The ARN of the target function.
	//
	// Note: Only Lambda functions are currently supported.
	//
	// TargetArn is a required field
	TargetArn *string `locationName:"targetArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ProvisioningHook) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ProvisioningHook) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ProvisioningHook) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ProvisioningHook"}
	if s.PayloadVersion != nil && len(*s.PayloadVersion) < 10 {
		invalidParams.Add(request.NewErrParamMinLen("PayloadVersion", 10))
	}
	if s.TargetArn == nil {
		invalidParams.Add(request.NewErrParamRequired("TargetArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPayloadVersion sets the PayloadVersion field's value.
func (s *ProvisioningHook) SetPayloadVersion(v string) *ProvisioningHook {
	s.PayloadVersion = &v
	return s
}

// SetTargetArn sets the TargetArn field's value.
func (s *ProvisioningHook) SetTargetArn(v string) *ProvisioningHook {
	s.TargetArn = &v
	return s
}

// A summary of information about a provisioning template.
type ProvisioningTemplateSummary struct {
	_ struct{} `type:"structure"`

	// The date when the provisioning template summary was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The description of the provisioning template.
	Description *string `locationName:"description" type:"string"`

	// True if the fleet provision template is enabled, otherwise false.
	Enabled *bool `locationName:"enabled" type:"boolean"`

	// The date when the provisioning template summary was last modified.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The ARN of the provisioning template.
	TemplateArn *string `locationName:"templateArn" type:"string"`

	// The name of the provisioning template.
	TemplateName *string `locationName:"templateName" min:"1" type:"string"`

	// The type you define in a provisioning template. You can create a template
	// with only one type. You can't change the template type after its creation.
	// The default value is FLEET_PROVISIONING. For more information about provisioning
	// template, see: Provisioning template (https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html).
	Type *string `locationName:"type" type:"string" enum:"TemplateType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ProvisioningTemplateSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ProvisioningTemplateSummary) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *ProvisioningTemplateSummary) SetCreationDate(v time.Time) *ProvisioningTemplateSummary {
	s.CreationDate = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *ProvisioningTemplateSummary) SetDescription(v string) *ProvisioningTemplateSummary {
	s.Description = &v
	return s
}

// SetEnabled sets the Enabled field's value.
func (s *ProvisioningTemplateSummary) SetEnabled(v bool) *ProvisioningTemplateSummary {
	s.Enabled = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *ProvisioningTemplateSummary) SetLastModifiedDate(v time.Time) *ProvisioningTemplateSummary {
	s.LastModifiedDate = &v
	return s
}

// SetTemplateArn sets the TemplateArn field's value.
func (s *ProvisioningTemplateSummary) SetTemplateArn(v string) *ProvisioningTemplateSummary {
	s.TemplateArn = &v
	return s
}

// SetTemplateName sets the TemplateName field's value.
func (s *ProvisioningTemplateSummary) SetTemplateName(v string) *ProvisioningTemplateSummary {
	s.TemplateName = &v
	return s
}

// SetType sets the Type field's value.
func (s *ProvisioningTemplateSummary) SetType(v string) *ProvisioningTemplateSummary {
	s.Type = &v
	return s
}

// A summary of information about a fleet provision template version.
type ProvisioningTemplateVersionSummary struct {
	_ struct{} `type:"structure"`

	// The date when the provisioning template version was created
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// True if the provisioning template version is the default version, otherwise
	// false.
	IsDefaultVersion *bool `locationName:"isDefaultVersion" type:"boolean"`

	// The ID of the fleet provisioning template version.
	VersionId *int64 `locationName:"versionId" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ProvisioningTemplateVersionSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ProvisioningTemplateVersionSummary) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *ProvisioningTemplateVersionSummary) SetCreationDate(v time.Time) *ProvisioningTemplateVersionSummary {
	s.CreationDate = &v
	return s
}

// SetIsDefaultVersion sets the IsDefaultVersion field's value.
func (s *ProvisioningTemplateVersionSummary) SetIsDefaultVersion(v bool) *ProvisioningTemplateVersionSummary {
	s.IsDefaultVersion = &v
	return s
}

// SetVersionId sets the VersionId field's value.
func (s *ProvisioningTemplateVersionSummary) SetVersionId(v int64) *ProvisioningTemplateVersionSummary {
	s.VersionId = &v
	return s
}

// Parameters to define a mitigation action that publishes findings to Amazon
// SNS. You can implement your own custom actions in response to the Amazon
// SNS messages.
type PublishFindingToSnsParams struct {
	_ struct{} `type:"structure"`

	// The ARN of the topic to which you want to publish the findings.
	//
	// TopicArn is a required field
	TopicArn *string `locationName:"topicArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PublishFindingToSnsParams) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PublishFindingToSnsParams) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PublishFindingToSnsParams) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PublishFindingToSnsParams"}
	if s.TopicArn == nil {
		invalidParams.Add(request.NewErrParamRequired("TopicArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTopicArn sets the TopicArn field's value.
func (s *PublishFindingToSnsParams) SetTopicArn(v string) *PublishFindingToSnsParams {
	s.TopicArn = &v
	return s
}

// An asset property value entry containing the following information.
type PutAssetPropertyValueEntry struct {
	_ struct{} `type:"structure"`

	// The ID of the IoT SiteWise asset. You must specify either a propertyAlias
	// or both an aliasId and a propertyId. Accepts substitution templates.
	AssetId *string `locationName:"assetId" type:"string"`

	// Optional. A unique identifier for this entry that you can define to better
	// track which message caused an error in case of failure. Accepts substitution
	// templates. Defaults to a new UUID.
	EntryId *string `locationName:"entryId" type:"string"`

	// The name of the property alias associated with your asset property. You must
	// specify either a propertyAlias or both an aliasId and a propertyId. Accepts
	// substitution templates.
	PropertyAlias *string `locationName:"propertyAlias" min:"1" type:"string"`

	// The ID of the asset's property. You must specify either a propertyAlias or
	// both an aliasId and a propertyId. Accepts substitution templates.
	PropertyId *string `locationName:"propertyId" type:"string"`

	// A list of property values to insert that each contain timestamp, quality,
	// and value (TQV) information.
	//
	// PropertyValues is a required field
	PropertyValues []*AssetPropertyValue `locationName:"propertyValues" min:"1" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAssetPropertyValueEntry) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAssetPropertyValueEntry) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutAssetPropertyValueEntry) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutAssetPropertyValueEntry"}
	if s.PropertyAlias != nil && len(*s.PropertyAlias) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PropertyAlias", 1))
	}
	if s.PropertyValues == nil {
		invalidParams.Add(request.NewErrParamRequired("PropertyValues"))
	}
	if s.PropertyValues != nil && len(s.PropertyValues) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PropertyValues", 1))
	}
	if s.PropertyValues != nil {
		for i, v := range s.PropertyValues {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PropertyValues", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAssetId sets the AssetId field's value.
func (s *PutAssetPropertyValueEntry) SetAssetId(v string) *PutAssetPropertyValueEntry {
	s.AssetId = &v
	return s
}

// SetEntryId sets the EntryId field's value.
func (s *PutAssetPropertyValueEntry) SetEntryId(v string) *PutAssetPropertyValueEntry {
	s.EntryId = &v
	return s
}

// SetPropertyAlias sets the PropertyAlias field's value.
func (s *PutAssetPropertyValueEntry) SetPropertyAlias(v string) *PutAssetPropertyValueEntry {
	s.PropertyAlias = &v
	return s
}

// SetPropertyId sets the PropertyId field's value.
func (s *PutAssetPropertyValueEntry) SetPropertyId(v string) *PutAssetPropertyValueEntry {
	s.PropertyId = &v
	return s
}

// SetPropertyValues sets the PropertyValues field's value.
func (s *PutAssetPropertyValueEntry) SetPropertyValues(v []*AssetPropertyValue) *PutAssetPropertyValueEntry {
	s.PropertyValues = v
	return s
}

// The input for the DynamoActionVS action that specifies the DynamoDB table
// to which the message data will be written.
type PutItemInput struct {
	_ struct{} `type:"structure"`

	// The table where the message data will be written.
	//
	// TableName is a required field
	TableName *string `locationName:"tableName" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutItemInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutItemInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutItemInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutItemInput"}
	if s.TableName == nil {
		invalidParams.Add(request.NewErrParamRequired("TableName"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTableName sets the TableName field's value.
func (s *PutItemInput) SetTableName(v string) *PutItemInput {
	s.TableName = &v
	return s
}

type PutVerificationStateOnViolationInput struct {
	_ struct{} `type:"structure"`

	// The verification state of the violation.
	//
	// VerificationState is a required field
	VerificationState *string `locationName:"verificationState" type:"string" required:"true" enum:"VerificationState"`

	// The description of the verification state of the violation (detect alarm).
	VerificationStateDescription *string `locationName:"verificationStateDescription" type:"string"`

	// The violation ID.
	//
	// ViolationId is a required field
	ViolationId *string `location:"uri" locationName:"violationId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutVerificationStateOnViolationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutVerificationStateOnViolationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutVerificationStateOnViolationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutVerificationStateOnViolationInput"}
	if s.VerificationState == nil {
		invalidParams.Add(request.NewErrParamRequired("VerificationState"))
	}
	if s.ViolationId == nil {
		invalidParams.Add(request.NewErrParamRequired("ViolationId"))
	}
	if s.ViolationId != nil && len(*s.ViolationId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ViolationId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetVerificationState sets the VerificationState field's value.
func (s *PutVerificationStateOnViolationInput) SetVerificationState(v string) *PutVerificationStateOnViolationInput {
	s.VerificationState = &v
	return s
}

// SetVerificationStateDescription sets the VerificationStateDescription field's value.
func (s *PutVerificationStateOnViolationInput) SetVerificationStateDescription(v string) *PutVerificationStateOnViolationInput {
	s.VerificationStateDescription = &v
	return s
}

// SetViolationId sets the ViolationId field's value.
func (s *PutVerificationStateOnViolationInput) SetViolationId(v string) *PutVerificationStateOnViolationInput {
	s.ViolationId = &v
	return s
}

type PutVerificationStateOnViolationOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutVerificationStateOnViolationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutVerificationStateOnViolationOutput) GoString() string {
	return s.String()
}

// Allows you to define a criteria to initiate the increase in rate of rollout
// for a job.
type RateIncreaseCriteria struct {
	_ struct{} `type:"structure"`

	// The threshold for number of notified things that will initiate the increase
	// in rate of rollout.
	NumberOfNotifiedThings *int64 `locationName:"numberOfNotifiedThings" min:"1" type:"integer"`

	// The threshold for number of succeeded things that will initiate the increase
	// in rate of rollout.
	NumberOfSucceededThings *int64 `locationName:"numberOfSucceededThings" min:"1" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RateIncreaseCriteria) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RateIncreaseCriteria) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RateIncreaseCriteria) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RateIncreaseCriteria"}
	if s.NumberOfNotifiedThings != nil && *s.NumberOfNotifiedThings < 1 {
		invalidParams.Add(request.NewErrParamMinValue("NumberOfNotifiedThings", 1))
	}
	if s.NumberOfSucceededThings != nil && *s.NumberOfSucceededThings < 1 {
		invalidParams.Add(request.NewErrParamMinValue("NumberOfSucceededThings", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetNumberOfNotifiedThings sets the NumberOfNotifiedThings field's value.
func (s *RateIncreaseCriteria) SetNumberOfNotifiedThings(v int64) *RateIncreaseCriteria {
	s.NumberOfNotifiedThings = &v
	return s
}

// SetNumberOfSucceededThings sets the NumberOfSucceededThings field's value.
func (s *RateIncreaseCriteria) SetNumberOfSucceededThings(v int64) *RateIncreaseCriteria {
	s.NumberOfSucceededThings = &v
	return s
}

// The input to the RegisterCACertificate operation.
type RegisterCACertificateInput struct {
	_ struct{} `type:"structure"`

	// Allows this CA certificate to be used for auto registration of device certificates.
	AllowAutoRegistration *bool `location:"querystring" locationName:"allowAutoRegistration" type:"boolean"`

	// The CA certificate.
	//
	// CaCertificate is a required field
	CaCertificate *string `locationName:"caCertificate" min:"1" type:"string" required:"true"`

	// Describes the certificate mode in which the Certificate Authority (CA) will
	// be registered. If the verificationCertificate field is not provided, set
	// certificateMode to be SNI_ONLY. If the verificationCertificate field is provided,
	// set certificateMode to be DEFAULT. When certificateMode is not provided,
	// it defaults to DEFAULT. All the device certificates that are registered using
	// this CA will be registered in the same certificate mode as the CA. For more
	// information about certificate mode for device certificates, see certificate
	// mode (https://docs.aws.amazon.com/iot/latest/apireference/API_CertificateDescription.html#iot-Type-CertificateDescription-certificateMode).
	CertificateMode *string `locationName:"certificateMode" type:"string" enum:"CertificateMode"`

	// Information about the registration configuration.
	RegistrationConfig *RegistrationConfig `locationName:"registrationConfig" type:"structure"`

	// A boolean value that specifies if the CA certificate is set to active.
	//
	// Valid values: ACTIVE | INACTIVE
	SetAsActive *bool `location:"querystring" locationName:"setAsActive" type:"boolean"`

	// Metadata which can be used to manage the CA certificate.
	//
	// For URI Request parameters use format: ...key1=value1&key2=value2...
	//
	// For the CLI command-line parameter use format: &&tags "key1=value1&key2=value2..."
	//
	// For the cli-input-json file use format: "tags": "key1=value1&key2=value2..."
	Tags []*Tag `locationName:"tags" type:"list"`

	// The private key verification certificate. If certificateMode is SNI_ONLY,
	// the verificationCertificate field must be empty. If certificateMode is DEFAULT
	// or not provided, the verificationCertificate field must not be empty.
	VerificationCertificate *string `locationName:"verificationCertificate" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterCACertificateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterCACertificateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegisterCACertificateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegisterCACertificateInput"}
	if s.CaCertificate == nil {
		invalidParams.Add(request.NewErrParamRequired("CaCertificate"))
	}
	if s.CaCertificate != nil && len(*s.CaCertificate) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("CaCertificate", 1))
	}
	if s.VerificationCertificate != nil && len(*s.VerificationCertificate) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("VerificationCertificate", 1))
	}
	if s.RegistrationConfig != nil {
		if err := s.RegistrationConfig.Validate(); err != nil {
			invalidParams.AddNested("RegistrationConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAllowAutoRegistration sets the AllowAutoRegistration field's value.
func (s *RegisterCACertificateInput) SetAllowAutoRegistration(v bool) *RegisterCACertificateInput {
	s.AllowAutoRegistration = &v
	return s
}

// SetCaCertificate sets the CaCertificate field's value.
func (s *RegisterCACertificateInput) SetCaCertificate(v string) *RegisterCACertificateInput {
	s.CaCertificate = &v
	return s
}

// SetCertificateMode sets the CertificateMode field's value.
func (s *RegisterCACertificateInput) SetCertificateMode(v string) *RegisterCACertificateInput {
	s.CertificateMode = &v
	return s
}

// SetRegistrationConfig sets the RegistrationConfig field's value.
func (s *RegisterCACertificateInput) SetRegistrationConfig(v *RegistrationConfig) *RegisterCACertificateInput {
	s.RegistrationConfig = v
	return s
}

// SetSetAsActive sets the SetAsActive field's value.
func (s *RegisterCACertificateInput) SetSetAsActive(v bool) *RegisterCACertificateInput {
	s.SetAsActive = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *RegisterCACertificateInput) SetTags(v []*Tag) *RegisterCACertificateInput {
	s.Tags = v
	return s
}

// SetVerificationCertificate sets the VerificationCertificate field's value.
func (s *RegisterCACertificateInput) SetVerificationCertificate(v string) *RegisterCACertificateInput {
	s.VerificationCertificate = &v
	return s
}

// The output from the RegisterCACertificateResponse operation.
type RegisterCACertificateOutput struct {
	_ struct{} `type:"structure"`

	// The CA certificate ARN.
	CertificateArn *string `locationName:"certificateArn" type:"string"`

	// The CA certificate identifier.
	CertificateId *string `locationName:"certificateId" min:"64" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterCACertificateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterCACertificateOutput) GoString() string {
	return s.String()
}

// SetCertificateArn sets the CertificateArn field's value.
func (s *RegisterCACertificateOutput) SetCertificateArn(v string) *RegisterCACertificateOutput {
	s.CertificateArn = &v
	return s
}

// SetCertificateId sets the CertificateId field's value.
func (s *RegisterCACertificateOutput) SetCertificateId(v string) *RegisterCACertificateOutput {
	s.CertificateId = &v
	return s
}

// The input to the RegisterCertificate operation.
type RegisterCertificateInput struct {
	_ struct{} `type:"structure"`

	// The CA certificate used to sign the device certificate being registered.
	CaCertificatePem *string `locationName:"caCertificatePem" min:"1" type:"string"`

	// The certificate data, in PEM format.
	//
	// CertificatePem is a required field
	CertificatePem *string `locationName:"certificatePem" min:"1" type:"string" required:"true"`

	// A boolean value that specifies if the certificate is set to active.
	//
	// Valid values: ACTIVE | INACTIVE
	//
	// Deprecated: SetAsActive has been deprecated
	SetAsActive *bool `location:"querystring" locationName:"setAsActive" deprecated:"true" type:"boolean"`

	// The status of the register certificate request. Valid values that you can
	// use include ACTIVE, INACTIVE, and REVOKED.
	Status *string `locationName:"status" type:"string" enum:"CertificateStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterCertificateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterCertificateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegisterCertificateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegisterCertificateInput"}
	if s.CaCertificatePem != nil && len(*s.CaCertificatePem) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("CaCertificatePem", 1))
	}
	if s.CertificatePem == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificatePem"))
	}
	if s.CertificatePem != nil && len(*s.CertificatePem) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("CertificatePem", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCaCertificatePem sets the CaCertificatePem field's value.
func (s *RegisterCertificateInput) SetCaCertificatePem(v string) *RegisterCertificateInput {
	s.CaCertificatePem = &v
	return s
}

// SetCertificatePem sets the CertificatePem field's value.
func (s *RegisterCertificateInput) SetCertificatePem(v string) *RegisterCertificateInput {
	s.CertificatePem = &v
	return s
}

// SetSetAsActive sets the SetAsActive field's value.
func (s *RegisterCertificateInput) SetSetAsActive(v bool) *RegisterCertificateInput {
	s.SetAsActive = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *RegisterCertificateInput) SetStatus(v string) *RegisterCertificateInput {
	s.Status = &v
	return s
}

// The output from the RegisterCertificate operation.
type RegisterCertificateOutput struct {
	_ struct{} `type:"structure"`

	// The certificate ARN.
	CertificateArn *string `locationName:"certificateArn" type:"string"`

	// The certificate identifier.
	CertificateId *string `locationName:"certificateId" min:"64" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterCertificateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterCertificateOutput) GoString() string {
	return s.String()
}

// SetCertificateArn sets the CertificateArn field's value.
func (s *RegisterCertificateOutput) SetCertificateArn(v string) *RegisterCertificateOutput {
	s.CertificateArn = &v
	return s
}

// SetCertificateId sets the CertificateId field's value.
func (s *RegisterCertificateOutput) SetCertificateId(v string) *RegisterCertificateOutput {
	s.CertificateId = &v
	return s
}

type RegisterCertificateWithoutCAInput struct {
	_ struct{} `type:"structure"`

	// The certificate data, in PEM format.
	//
	// CertificatePem is a required field
	CertificatePem *string `locationName:"certificatePem" min:"1" type:"string" required:"true"`

	// The status of the register certificate request.
	Status *string `locationName:"status" type:"string" enum:"CertificateStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterCertificateWithoutCAInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterCertificateWithoutCAInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegisterCertificateWithoutCAInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegisterCertificateWithoutCAInput"}
	if s.CertificatePem == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificatePem"))
	}
	if s.CertificatePem != nil && len(*s.CertificatePem) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("CertificatePem", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCertificatePem sets the CertificatePem field's value.
func (s *RegisterCertificateWithoutCAInput) SetCertificatePem(v string) *RegisterCertificateWithoutCAInput {
	s.CertificatePem = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *RegisterCertificateWithoutCAInput) SetStatus(v string) *RegisterCertificateWithoutCAInput {
	s.Status = &v
	return s
}

type RegisterCertificateWithoutCAOutput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the registered certificate.
	CertificateArn *string `locationName:"certificateArn" type:"string"`

	// The ID of the registered certificate. (The last part of the certificate ARN
	// contains the certificate ID.
	CertificateId *string `locationName:"certificateId" min:"64" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterCertificateWithoutCAOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterCertificateWithoutCAOutput) GoString() string {
	return s.String()
}

// SetCertificateArn sets the CertificateArn field's value.
func (s *RegisterCertificateWithoutCAOutput) SetCertificateArn(v string) *RegisterCertificateWithoutCAOutput {
	s.CertificateArn = &v
	return s
}

// SetCertificateId sets the CertificateId field's value.
func (s *RegisterCertificateWithoutCAOutput) SetCertificateId(v string) *RegisterCertificateWithoutCAOutput {
	s.CertificateId = &v
	return s
}

type RegisterThingInput struct {
	_ struct{} `type:"structure"`

	// The parameters for provisioning a thing. See Provisioning Templates (https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html)
	// for more information.
	Parameters map[string]*string `locationName:"parameters" type:"map"`

	// The provisioning template. See Provisioning Devices That Have Device Certificates
	// (https://docs.aws.amazon.com/iot/latest/developerguide/provision-w-cert.html)
	// for more information.
	//
	// TemplateBody is a required field
	TemplateBody *string `locationName:"templateBody" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterThingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterThingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegisterThingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegisterThingInput"}
	if s.TemplateBody == nil {
		invalidParams.Add(request.NewErrParamRequired("TemplateBody"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetParameters sets the Parameters field's value.
func (s *RegisterThingInput) SetParameters(v map[string]*string) *RegisterThingInput {
	s.Parameters = v
	return s
}

// SetTemplateBody sets the TemplateBody field's value.
func (s *RegisterThingInput) SetTemplateBody(v string) *RegisterThingInput {
	s.TemplateBody = &v
	return s
}

type RegisterThingOutput struct {
	_ struct{} `type:"structure"`

	// The certificate data, in PEM format.
	CertificatePem *string `locationName:"certificatePem" min:"1" type:"string"`

	// ARNs for the generated resources.
	ResourceArns map[string]*string `locationName:"resourceArns" type:"map"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterThingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterThingOutput) GoString() string {
	return s.String()
}

// SetCertificatePem sets the CertificatePem field's value.
func (s *RegisterThingOutput) SetCertificatePem(v string) *RegisterThingOutput {
	s.CertificatePem = &v
	return s
}

// SetResourceArns sets the ResourceArns field's value.
func (s *RegisterThingOutput) SetResourceArns(v map[string]*string) *RegisterThingOutput {
	s.ResourceArns = v
	return s
}

// The registration code is invalid.
type RegistrationCodeValidationException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// Additional information about the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegistrationCodeValidationException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegistrationCodeValidationException) GoString() string {
	return s.String()
}

func newErrorRegistrationCodeValidationException(v protocol.ResponseMetadata) error {
	return &RegistrationCodeValidationException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *RegistrationCodeValidationException) Code() string {
	return "RegistrationCodeValidationException"
}

// Message returns the exception's message.
func (s *RegistrationCodeValidationException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *RegistrationCodeValidationException) OrigErr() error {
	return nil
}

func (s *RegistrationCodeValidationException) 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 *RegistrationCodeValidationException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *RegistrationCodeValidationException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The registration configuration.
type RegistrationConfig struct {
	_ struct{} `type:"structure"`

	// The ARN of the role.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`

	// The template body.
	TemplateBody *string `locationName:"templateBody" type:"string"`

	// The name of the provisioning template.
	TemplateName *string `locationName:"templateName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegistrationConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegistrationConfig) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegistrationConfig) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegistrationConfig"}
	if s.RoleArn != nil && len(*s.RoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20))
	}
	if s.TemplateName != nil && len(*s.TemplateName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TemplateName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRoleArn sets the RoleArn field's value.
func (s *RegistrationConfig) SetRoleArn(v string) *RegistrationConfig {
	s.RoleArn = &v
	return s
}

// SetTemplateBody sets the TemplateBody field's value.
func (s *RegistrationConfig) SetTemplateBody(v string) *RegistrationConfig {
	s.TemplateBody = &v
	return s
}

// SetTemplateName sets the TemplateName field's value.
func (s *RegistrationConfig) SetTemplateName(v string) *RegistrationConfig {
	s.TemplateName = &v
	return s
}

// The input for the RejectCertificateTransfer operation.
type RejectCertificateTransferInput struct {
	_ struct{} `type:"structure"`

	// The ID of the certificate. (The last part of the certificate ARN contains
	// the certificate ID.)
	//
	// CertificateId is a required field
	CertificateId *string `location:"uri" locationName:"certificateId" min:"64" type:"string" required:"true"`

	// The reason the certificate transfer was rejected.
	RejectReason *string `locationName:"rejectReason" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RejectCertificateTransferInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RejectCertificateTransferInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RejectCertificateTransferInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RejectCertificateTransferInput"}
	if s.CertificateId == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificateId"))
	}
	if s.CertificateId != nil && len(*s.CertificateId) < 64 {
		invalidParams.Add(request.NewErrParamMinLen("CertificateId", 64))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCertificateId sets the CertificateId field's value.
func (s *RejectCertificateTransferInput) SetCertificateId(v string) *RejectCertificateTransferInput {
	s.CertificateId = &v
	return s
}

// SetRejectReason sets the RejectReason field's value.
func (s *RejectCertificateTransferInput) SetRejectReason(v string) *RejectCertificateTransferInput {
	s.RejectReason = &v
	return s
}

type RejectCertificateTransferOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RejectCertificateTransferOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RejectCertificateTransferOutput) GoString() string {
	return s.String()
}

// Information about a related resource.
type RelatedResource struct {
	_ struct{} `type:"structure"`

	// Other information about the resource.
	AdditionalInfo map[string]*string `locationName:"additionalInfo" type:"map"`

	// Information that identifies the resource.
	ResourceIdentifier *ResourceIdentifier `locationName:"resourceIdentifier" type:"structure"`

	// The type of resource.
	ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RelatedResource) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RelatedResource) GoString() string {
	return s.String()
}

// SetAdditionalInfo sets the AdditionalInfo field's value.
func (s *RelatedResource) SetAdditionalInfo(v map[string]*string) *RelatedResource {
	s.AdditionalInfo = v
	return s
}

// SetResourceIdentifier sets the ResourceIdentifier field's value.
func (s *RelatedResource) SetResourceIdentifier(v *ResourceIdentifier) *RelatedResource {
	s.ResourceIdentifier = v
	return s
}

// SetResourceType sets the ResourceType field's value.
func (s *RelatedResource) SetResourceType(v string) *RelatedResource {
	s.ResourceType = &v
	return s
}

type RemoveThingFromBillingGroupInput struct {
	_ struct{} `type:"structure"`

	// The ARN of the billing group.
	BillingGroupArn *string `locationName:"billingGroupArn" type:"string"`

	// The name of the billing group.
	BillingGroupName *string `locationName:"billingGroupName" min:"1" type:"string"`

	// The ARN of the thing to be removed from the billing group.
	ThingArn *string `locationName:"thingArn" type:"string"`

	// The name of the thing to be removed from the billing group.
	ThingName *string `locationName:"thingName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RemoveThingFromBillingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RemoveThingFromBillingGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RemoveThingFromBillingGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RemoveThingFromBillingGroupInput"}
	if s.BillingGroupName != nil && len(*s.BillingGroupName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("BillingGroupName", 1))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBillingGroupArn sets the BillingGroupArn field's value.
func (s *RemoveThingFromBillingGroupInput) SetBillingGroupArn(v string) *RemoveThingFromBillingGroupInput {
	s.BillingGroupArn = &v
	return s
}

// SetBillingGroupName sets the BillingGroupName field's value.
func (s *RemoveThingFromBillingGroupInput) SetBillingGroupName(v string) *RemoveThingFromBillingGroupInput {
	s.BillingGroupName = &v
	return s
}

// SetThingArn sets the ThingArn field's value.
func (s *RemoveThingFromBillingGroupInput) SetThingArn(v string) *RemoveThingFromBillingGroupInput {
	s.ThingArn = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *RemoveThingFromBillingGroupInput) SetThingName(v string) *RemoveThingFromBillingGroupInput {
	s.ThingName = &v
	return s
}

type RemoveThingFromBillingGroupOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RemoveThingFromBillingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RemoveThingFromBillingGroupOutput) GoString() string {
	return s.String()
}

type RemoveThingFromThingGroupInput struct {
	_ struct{} `type:"structure"`

	// The ARN of the thing to remove from the group.
	ThingArn *string `locationName:"thingArn" type:"string"`

	// The group ARN.
	ThingGroupArn *string `locationName:"thingGroupArn" type:"string"`

	// The group name.
	ThingGroupName *string `locationName:"thingGroupName" min:"1" type:"string"`

	// The name of the thing to remove from the group.
	ThingName *string `locationName:"thingName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RemoveThingFromThingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RemoveThingFromThingGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RemoveThingFromThingGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RemoveThingFromThingGroupInput"}
	if s.ThingGroupName != nil && len(*s.ThingGroupName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingGroupName", 1))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetThingArn sets the ThingArn field's value.
func (s *RemoveThingFromThingGroupInput) SetThingArn(v string) *RemoveThingFromThingGroupInput {
	s.ThingArn = &v
	return s
}

// SetThingGroupArn sets the ThingGroupArn field's value.
func (s *RemoveThingFromThingGroupInput) SetThingGroupArn(v string) *RemoveThingFromThingGroupInput {
	s.ThingGroupArn = &v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *RemoveThingFromThingGroupInput) SetThingGroupName(v string) *RemoveThingFromThingGroupInput {
	s.ThingGroupName = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *RemoveThingFromThingGroupInput) SetThingName(v string) *RemoveThingFromThingGroupInput {
	s.ThingName = &v
	return s
}

type RemoveThingFromThingGroupOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RemoveThingFromThingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RemoveThingFromThingGroupOutput) GoString() string {
	return s.String()
}

// Parameters to define a mitigation action that adds a blank policy to restrict
// permissions.
type ReplaceDefaultPolicyVersionParams struct {
	_ struct{} `type:"structure"`

	// The name of the template to be applied. The only supported value is BLANK_POLICY.
	//
	// TemplateName is a required field
	TemplateName *string `locationName:"templateName" type:"string" required:"true" enum:"PolicyTemplateName"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReplaceDefaultPolicyVersionParams) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReplaceDefaultPolicyVersionParams) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ReplaceDefaultPolicyVersionParams) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ReplaceDefaultPolicyVersionParams"}
	if s.TemplateName == nil {
		invalidParams.Add(request.NewErrParamRequired("TemplateName"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTemplateName sets the TemplateName field's value.
func (s *ReplaceDefaultPolicyVersionParams) SetTemplateName(v string) *ReplaceDefaultPolicyVersionParams {
	s.TemplateName = &v
	return s
}

// The input for the ReplaceTopicRule operation.
type ReplaceTopicRuleInput struct {
	_ struct{} `type:"structure" payload:"TopicRulePayload"`

	// The name of the rule.
	//
	// RuleName is a required field
	RuleName *string `location:"uri" locationName:"ruleName" min:"1" type:"string" required:"true"`

	// The rule payload.
	//
	// TopicRulePayload is a required field
	TopicRulePayload *TopicRulePayload `locationName:"topicRulePayload" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReplaceTopicRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReplaceTopicRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ReplaceTopicRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ReplaceTopicRuleInput"}
	if s.RuleName == nil {
		invalidParams.Add(request.NewErrParamRequired("RuleName"))
	}
	if s.RuleName != nil && len(*s.RuleName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RuleName", 1))
	}
	if s.TopicRulePayload == nil {
		invalidParams.Add(request.NewErrParamRequired("TopicRulePayload"))
	}
	if s.TopicRulePayload != nil {
		if err := s.TopicRulePayload.Validate(); err != nil {
			invalidParams.AddNested("TopicRulePayload", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRuleName sets the RuleName field's value.
func (s *ReplaceTopicRuleInput) SetRuleName(v string) *ReplaceTopicRuleInput {
	s.RuleName = &v
	return s
}

// SetTopicRulePayload sets the TopicRulePayload field's value.
func (s *ReplaceTopicRuleInput) SetTopicRulePayload(v *TopicRulePayload) *ReplaceTopicRuleInput {
	s.TopicRulePayload = v
	return s
}

type ReplaceTopicRuleOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReplaceTopicRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReplaceTopicRuleOutput) GoString() string {
	return s.String()
}

// Describes an action to republish to another topic.
type RepublishAction struct {
	_ struct{} `type:"structure"`

	// MQTT Version 5.0 headers information. For more information, see MQTT (https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html)
	// from the Amazon Web Services IoT Core Developer Guide.
	Headers *MqttHeaders `locationName:"headers" type:"structure"`

	// The Quality of Service (QoS) level to use when republishing messages. The
	// default value is 0.
	Qos *int64 `locationName:"qos" type:"integer"`

	// The ARN of the IAM role that grants access.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// The name of the MQTT topic.
	//
	// Topic is a required field
	Topic *string `locationName:"topic" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RepublishAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RepublishAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RepublishAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RepublishAction"}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.Topic == nil {
		invalidParams.Add(request.NewErrParamRequired("Topic"))
	}
	if s.Headers != nil {
		if err := s.Headers.Validate(); err != nil {
			invalidParams.AddNested("Headers", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetHeaders sets the Headers field's value.
func (s *RepublishAction) SetHeaders(v *MqttHeaders) *RepublishAction {
	s.Headers = v
	return s
}

// SetQos sets the Qos field's value.
func (s *RepublishAction) SetQos(v int64) *RepublishAction {
	s.Qos = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *RepublishAction) SetRoleArn(v string) *RepublishAction {
	s.RoleArn = &v
	return s
}

// SetTopic sets the Topic field's value.
func (s *RepublishAction) SetTopic(v string) *RepublishAction {
	s.Topic = &v
	return s
}

// The resource already exists.
type ResourceAlreadyExistsException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`

	// The ARN of the resource that caused the exception.
	ResourceArn *string `locationName:"resourceArn" type:"string"`

	// The ID of the resource that caused the exception.
	ResourceId *string `locationName:"resourceId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceAlreadyExistsException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
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
}

// Information that identifies the noncompliant resource.
type ResourceIdentifier struct {
	_ struct{} `type:"structure"`

	// The account with which the resource is associated.
	Account *string `locationName:"account" min:"12" type:"string"`

	// The ID of the CA certificate used to authorize the certificate.
	CaCertificateId *string `locationName:"caCertificateId" min:"64" type:"string"`

	// The client ID.
	ClientId *string `locationName:"clientId" type:"string"`

	// The ID of the Amazon Cognito identity pool.
	CognitoIdentityPoolId *string `locationName:"cognitoIdentityPoolId" type:"string"`

	// The ARN of the identified device certificate.
	DeviceCertificateArn *string `locationName:"deviceCertificateArn" type:"string"`

	// The ID of the certificate attached to the resource.
	DeviceCertificateId *string `locationName:"deviceCertificateId" min:"64" type:"string"`

	// The ARN of the IAM role that has overly permissive actions.
	IamRoleArn *string `locationName:"iamRoleArn" min:"20" type:"string"`

	// The issuer certificate identifier.
	IssuerCertificateIdentifier *IssuerCertificateIdentifier `locationName:"issuerCertificateIdentifier" type:"structure"`

	// The version of the policy associated with the resource.
	PolicyVersionIdentifier *PolicyVersionIdentifier `locationName:"policyVersionIdentifier" type:"structure"`

	// The ARN of the role alias that has overly permissive actions.
	RoleAliasArn *string `locationName:"roleAliasArn" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceIdentifier) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceIdentifier) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ResourceIdentifier) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ResourceIdentifier"}
	if s.Account != nil && len(*s.Account) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("Account", 12))
	}
	if s.CaCertificateId != nil && len(*s.CaCertificateId) < 64 {
		invalidParams.Add(request.NewErrParamMinLen("CaCertificateId", 64))
	}
	if s.DeviceCertificateId != nil && len(*s.DeviceCertificateId) < 64 {
		invalidParams.Add(request.NewErrParamMinLen("DeviceCertificateId", 64))
	}
	if s.IamRoleArn != nil && len(*s.IamRoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("IamRoleArn", 20))
	}
	if s.RoleAliasArn != nil && len(*s.RoleAliasArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RoleAliasArn", 1))
	}
	if s.PolicyVersionIdentifier != nil {
		if err := s.PolicyVersionIdentifier.Validate(); err != nil {
			invalidParams.AddNested("PolicyVersionIdentifier", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAccount sets the Account field's value.
func (s *ResourceIdentifier) SetAccount(v string) *ResourceIdentifier {
	s.Account = &v
	return s
}

// SetCaCertificateId sets the CaCertificateId field's value.
func (s *ResourceIdentifier) SetCaCertificateId(v string) *ResourceIdentifier {
	s.CaCertificateId = &v
	return s
}

// SetClientId sets the ClientId field's value.
func (s *ResourceIdentifier) SetClientId(v string) *ResourceIdentifier {
	s.ClientId = &v
	return s
}

// SetCognitoIdentityPoolId sets the CognitoIdentityPoolId field's value.
func (s *ResourceIdentifier) SetCognitoIdentityPoolId(v string) *ResourceIdentifier {
	s.CognitoIdentityPoolId = &v
	return s
}

// SetDeviceCertificateArn sets the DeviceCertificateArn field's value.
func (s *ResourceIdentifier) SetDeviceCertificateArn(v string) *ResourceIdentifier {
	s.DeviceCertificateArn = &v
	return s
}

// SetDeviceCertificateId sets the DeviceCertificateId field's value.
func (s *ResourceIdentifier) SetDeviceCertificateId(v string) *ResourceIdentifier {
	s.DeviceCertificateId = &v
	return s
}

// SetIamRoleArn sets the IamRoleArn field's value.
func (s *ResourceIdentifier) SetIamRoleArn(v string) *ResourceIdentifier {
	s.IamRoleArn = &v
	return s
}

// SetIssuerCertificateIdentifier sets the IssuerCertificateIdentifier field's value.
func (s *ResourceIdentifier) SetIssuerCertificateIdentifier(v *IssuerCertificateIdentifier) *ResourceIdentifier {
	s.IssuerCertificateIdentifier = v
	return s
}

// SetPolicyVersionIdentifier sets the PolicyVersionIdentifier field's value.
func (s *ResourceIdentifier) SetPolicyVersionIdentifier(v *PolicyVersionIdentifier) *ResourceIdentifier {
	s.PolicyVersionIdentifier = v
	return s
}

// SetRoleAliasArn sets the RoleAliasArn field's value.
func (s *ResourceIdentifier) SetRoleAliasArn(v string) *ResourceIdentifier {
	s.RoleAliasArn = &v
	return s
}

// The specified resource does not exist.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceNotFoundException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
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", s.Code(), s.Message())
}

// 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 resource registration failed.
type ResourceRegistrationFailureException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceRegistrationFailureException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceRegistrationFailureException) GoString() string {
	return s.String()
}

func newErrorResourceRegistrationFailureException(v protocol.ResponseMetadata) error {
	return &ResourceRegistrationFailureException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ResourceRegistrationFailureException) Code() string {
	return "ResourceRegistrationFailureException"
}

// Message returns the exception's message.
func (s *ResourceRegistrationFailureException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ResourceRegistrationFailureException) OrigErr() error {
	return nil
}

func (s *ResourceRegistrationFailureException) 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 *ResourceRegistrationFailureException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ResourceRegistrationFailureException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The criteria that determines how many retries are allowed for each failure
// type for a job.
type RetryCriteria struct {
	_ struct{} `type:"structure"`

	// The type of job execution failures that can initiate a job retry.
	//
	// FailureType is a required field
	FailureType *string `locationName:"failureType" type:"string" required:"true" enum:"RetryableFailureType"`

	// The number of retries allowed for a failure type for the job.
	//
	// NumberOfRetries is a required field
	NumberOfRetries *int64 `locationName:"numberOfRetries" type:"integer" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RetryCriteria) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RetryCriteria) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RetryCriteria) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RetryCriteria"}
	if s.FailureType == nil {
		invalidParams.Add(request.NewErrParamRequired("FailureType"))
	}
	if s.NumberOfRetries == nil {
		invalidParams.Add(request.NewErrParamRequired("NumberOfRetries"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetFailureType sets the FailureType field's value.
func (s *RetryCriteria) SetFailureType(v string) *RetryCriteria {
	s.FailureType = &v
	return s
}

// SetNumberOfRetries sets the NumberOfRetries field's value.
func (s *RetryCriteria) SetNumberOfRetries(v int64) *RetryCriteria {
	s.NumberOfRetries = &v
	return s
}

// Role alias description.
type RoleAliasDescription struct {
	_ struct{} `type:"structure"`

	// The UNIX timestamp of when the role alias was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The number of seconds for which the credential is valid.
	CredentialDurationSeconds *int64 `locationName:"credentialDurationSeconds" min:"900" type:"integer"`

	// The UNIX timestamp of when the role alias was last modified.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The role alias owner.
	Owner *string `locationName:"owner" min:"12" type:"string"`

	// The role alias.
	RoleAlias *string `locationName:"roleAlias" min:"1" type:"string"`

	// The ARN of the role alias.
	RoleAliasArn *string `locationName:"roleAliasArn" min:"1" type:"string"`

	// The role ARN.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RoleAliasDescription) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RoleAliasDescription) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *RoleAliasDescription) SetCreationDate(v time.Time) *RoleAliasDescription {
	s.CreationDate = &v
	return s
}

// SetCredentialDurationSeconds sets the CredentialDurationSeconds field's value.
func (s *RoleAliasDescription) SetCredentialDurationSeconds(v int64) *RoleAliasDescription {
	s.CredentialDurationSeconds = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *RoleAliasDescription) SetLastModifiedDate(v time.Time) *RoleAliasDescription {
	s.LastModifiedDate = &v
	return s
}

// SetOwner sets the Owner field's value.
func (s *RoleAliasDescription) SetOwner(v string) *RoleAliasDescription {
	s.Owner = &v
	return s
}

// SetRoleAlias sets the RoleAlias field's value.
func (s *RoleAliasDescription) SetRoleAlias(v string) *RoleAliasDescription {
	s.RoleAlias = &v
	return s
}

// SetRoleAliasArn sets the RoleAliasArn field's value.
func (s *RoleAliasDescription) SetRoleAliasArn(v string) *RoleAliasDescription {
	s.RoleAliasArn = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *RoleAliasDescription) SetRoleArn(v string) *RoleAliasDescription {
	s.RoleArn = &v
	return s
}

// Describes an action to write data to an Amazon S3 bucket.
type S3Action struct {
	_ struct{} `type:"structure"`

	// The Amazon S3 bucket.
	//
	// BucketName is a required field
	BucketName *string `locationName:"bucketName" type:"string" required:"true"`

	// The Amazon S3 canned ACL that controls access to the object identified by
	// the object key. For more information, see S3 canned ACLs (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl).
	CannedAcl *string `locationName:"cannedAcl" type:"string" enum:"CannedAccessControlList"`

	// The object key. For more information, see Actions, resources, and condition
	// keys for Amazon S3 (https://docs.aws.amazon.com/AmazonS3/latest/dev/list_amazons3.html).
	//
	// Key is a required field
	Key *string `locationName:"key" type:"string" required:"true"`

	// The ARN of the IAM role that grants access.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s S3Action) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s S3Action) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *S3Action) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "S3Action"}
	if s.BucketName == nil {
		invalidParams.Add(request.NewErrParamRequired("BucketName"))
	}
	if s.Key == nil {
		invalidParams.Add(request.NewErrParamRequired("Key"))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBucketName sets the BucketName field's value.
func (s *S3Action) SetBucketName(v string) *S3Action {
	s.BucketName = &v
	return s
}

// SetCannedAcl sets the CannedAcl field's value.
func (s *S3Action) SetCannedAcl(v string) *S3Action {
	s.CannedAcl = &v
	return s
}

// SetKey sets the Key field's value.
func (s *S3Action) SetKey(v string) *S3Action {
	s.Key = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *S3Action) SetRoleArn(v string) *S3Action {
	s.RoleArn = &v
	return s
}

// Describes the location of updated firmware in S3.
type S3Destination struct {
	_ struct{} `type:"structure"`

	// The S3 bucket that contains the updated firmware.
	Bucket *string `locationName:"bucket" min:"1" type:"string"`

	// The S3 prefix.
	Prefix *string `locationName:"prefix" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s S3Destination) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s S3Destination) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *S3Destination) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "S3Destination"}
	if s.Bucket != nil && len(*s.Bucket) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Bucket", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBucket sets the Bucket field's value.
func (s *S3Destination) SetBucket(v string) *S3Destination {
	s.Bucket = &v
	return s
}

// SetPrefix sets the Prefix field's value.
func (s *S3Destination) SetPrefix(v string) *S3Destination {
	s.Prefix = &v
	return s
}

// The S3 location.
type S3Location struct {
	_ struct{} `type:"structure"`

	// The S3 bucket.
	Bucket *string `locationName:"bucket" min:"1" type:"string"`

	// The S3 key.
	Key *string `locationName:"key" min:"1" type:"string"`

	// The S3 bucket version.
	Version *string `locationName:"version" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s S3Location) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s S3Location) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *S3Location) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "S3Location"}
	if s.Bucket != nil && len(*s.Bucket) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Bucket", 1))
	}
	if s.Key != nil && len(*s.Key) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Key", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBucket sets the Bucket field's value.
func (s *S3Location) SetBucket(v string) *S3Location {
	s.Bucket = &v
	return s
}

// SetKey sets the Key field's value.
func (s *S3Location) SetKey(v string) *S3Location {
	s.Key = &v
	return s
}

// SetVersion sets the Version field's value.
func (s *S3Location) SetVersion(v string) *S3Location {
	s.Version = &v
	return s
}

// Describes an action to write a message to a Salesforce IoT Cloud Input Stream.
type SalesforceAction struct {
	_ struct{} `type:"structure"`

	// The token used to authenticate access to the Salesforce IoT Cloud Input Stream.
	// The token is available from the Salesforce IoT Cloud platform after creation
	// of the Input Stream.
	//
	// Token is a required field
	Token *string `locationName:"token" min:"40" type:"string" required:"true"`

	// The URL exposed by the Salesforce IoT Cloud Input Stream. The URL is available
	// from the Salesforce IoT Cloud platform after creation of the Input Stream.
	//
	// Url is a required field
	Url *string `locationName:"url" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SalesforceAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SalesforceAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SalesforceAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SalesforceAction"}
	if s.Token == nil {
		invalidParams.Add(request.NewErrParamRequired("Token"))
	}
	if s.Token != nil && len(*s.Token) < 40 {
		invalidParams.Add(request.NewErrParamMinLen("Token", 40))
	}
	if s.Url == nil {
		invalidParams.Add(request.NewErrParamRequired("Url"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetToken sets the Token field's value.
func (s *SalesforceAction) SetToken(v string) *SalesforceAction {
	s.Token = &v
	return s
}

// SetUrl sets the Url field's value.
func (s *SalesforceAction) SetUrl(v string) *SalesforceAction {
	s.Url = &v
	return s
}

// Information about the scheduled audit.
type ScheduledAuditMetadata struct {
	_ struct{} `type:"structure"`

	// The day of the month on which the scheduled audit is run (if the frequency
	// is "MONTHLY"). If days 29-31 are specified, and the month does not have that
	// many days, the audit takes place on the "LAST" day of the month.
	DayOfMonth *string `locationName:"dayOfMonth" type:"string"`

	// The day of the week on which the scheduled audit is run (if the frequency
	// is "WEEKLY" or "BIWEEKLY").
	DayOfWeek *string `locationName:"dayOfWeek" type:"string" enum:"DayOfWeek"`

	// How often the scheduled audit occurs.
	Frequency *string `locationName:"frequency" type:"string" enum:"AuditFrequency"`

	// The ARN of the scheduled audit.
	ScheduledAuditArn *string `locationName:"scheduledAuditArn" type:"string"`

	// The name of the scheduled audit.
	ScheduledAuditName *string `locationName:"scheduledAuditName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ScheduledAuditMetadata) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ScheduledAuditMetadata) GoString() string {
	return s.String()
}

// SetDayOfMonth sets the DayOfMonth field's value.
func (s *ScheduledAuditMetadata) SetDayOfMonth(v string) *ScheduledAuditMetadata {
	s.DayOfMonth = &v
	return s
}

// SetDayOfWeek sets the DayOfWeek field's value.
func (s *ScheduledAuditMetadata) SetDayOfWeek(v string) *ScheduledAuditMetadata {
	s.DayOfWeek = &v
	return s
}

// SetFrequency sets the Frequency field's value.
func (s *ScheduledAuditMetadata) SetFrequency(v string) *ScheduledAuditMetadata {
	s.Frequency = &v
	return s
}

// SetScheduledAuditArn sets the ScheduledAuditArn field's value.
func (s *ScheduledAuditMetadata) SetScheduledAuditArn(v string) *ScheduledAuditMetadata {
	s.ScheduledAuditArn = &v
	return s
}

// SetScheduledAuditName sets the ScheduledAuditName field's value.
func (s *ScheduledAuditMetadata) SetScheduledAuditName(v string) *ScheduledAuditMetadata {
	s.ScheduledAuditName = &v
	return s
}

// Displays the next seven maintenance window occurrences and their start times.
type ScheduledJobRollout struct {
	_ struct{} `type:"structure"`

	// Displays the start times of the next seven maintenance window occurrences.
	StartTime *string `locationName:"startTime" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ScheduledJobRollout) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ScheduledJobRollout) GoString() string {
	return s.String()
}

// SetStartTime sets the StartTime field's value.
func (s *ScheduledJobRollout) SetStartTime(v string) *ScheduledJobRollout {
	s.StartTime = &v
	return s
}

// Specifies the date and time that a job will begin the rollout of the job
// document to all devices in the target group. Additionally, you can specify
// the end behavior for each job execution when it reaches the scheduled end
// time.
type SchedulingConfig struct {
	_ struct{} `type:"structure"`

	// Specifies the end behavior for all job executions after a job reaches the
	// selected endTime. If endTime is not selected when creating the job, then
	// endBehavior does not apply.
	EndBehavior *string `locationName:"endBehavior" type:"string" enum:"JobEndBehavior"`

	// The time a job will stop rollout of the job document to all devices in the
	// target group for a job. The endTime must take place no later than two years
	// from the current time and be scheduled a minimum of thirty minutes from the
	// current time. The minimum duration between startTime and endTime is thirty
	// minutes. The maximum duration between startTime and endTime is two years.
	// The date and time format for the endTime is YYYY-MM-DD for the date and HH:MM
	// for the time.
	//
	// For more information on the syntax for endTime when using an API command
	// or the Command Line Interface, see Timestamp (https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-types.html#parameter-type-timestamp).
	EndTime *string `locationName:"endTime" min:"1" type:"string"`

	// An optional configuration within the SchedulingConfig to setup a recurring
	// maintenance window with a predetermined start time and duration for the rollout
	// of a job document to all devices in a target group for a job.
	MaintenanceWindows []*MaintenanceWindow `locationName:"maintenanceWindows" type:"list"`

	// The time a job will begin rollout of the job document to all devices in the
	// target group for a job. The startTime can be scheduled up to a year in advance
	// and must be scheduled a minimum of thirty minutes from the current time.
	// The date and time format for the startTime is YYYY-MM-DD for the date and
	// HH:MM for the time.
	//
	// For more information on the syntax for startTime when using an API command
	// or the Command Line Interface, see Timestamp (https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-types.html#parameter-type-timestamp).
	StartTime *string `locationName:"startTime" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SchedulingConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SchedulingConfig) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SchedulingConfig) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SchedulingConfig"}
	if s.EndTime != nil && len(*s.EndTime) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("EndTime", 1))
	}
	if s.StartTime != nil && len(*s.StartTime) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("StartTime", 1))
	}
	if s.MaintenanceWindows != nil {
		for i, v := range s.MaintenanceWindows {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "MaintenanceWindows", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEndBehavior sets the EndBehavior field's value.
func (s *SchedulingConfig) SetEndBehavior(v string) *SchedulingConfig {
	s.EndBehavior = &v
	return s
}

// SetEndTime sets the EndTime field's value.
func (s *SchedulingConfig) SetEndTime(v string) *SchedulingConfig {
	s.EndTime = &v
	return s
}

// SetMaintenanceWindows sets the MaintenanceWindows field's value.
func (s *SchedulingConfig) SetMaintenanceWindows(v []*MaintenanceWindow) *SchedulingConfig {
	s.MaintenanceWindows = v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *SchedulingConfig) SetStartTime(v string) *SchedulingConfig {
	s.StartTime = &v
	return s
}

type SearchIndexInput struct {
	_ struct{} `type:"structure"`

	// The search index name.
	IndexName *string `locationName:"indexName" min:"1" type:"string"`

	// The maximum number of results to return per page at one time. This maximum
	// number cannot exceed 100. The response might contain fewer results but will
	// never contain more. You can use nextToken (https://docs.aws.amazon.com/iot/latest/apireference/API_SearchIndex.html#iot-SearchIndex-request-nextToken)
	// to retrieve the next set of results until nextToken returns NULL.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// The token used to get the next set of results, or null if there are no additional
	// results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The search query string. For more information about the search query syntax,
	// see Query syntax (https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html).
	//
	// QueryString is a required field
	QueryString *string `locationName:"queryString" min:"1" type:"string" required:"true"`

	// The query version.
	QueryVersion *string `locationName:"queryVersion" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SearchIndexInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SearchIndexInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SearchIndexInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SearchIndexInput"}
	if s.IndexName != nil && len(*s.IndexName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("IndexName", 1))
	}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.QueryString == nil {
		invalidParams.Add(request.NewErrParamRequired("QueryString"))
	}
	if s.QueryString != nil && len(*s.QueryString) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("QueryString", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetIndexName sets the IndexName field's value.
func (s *SearchIndexInput) SetIndexName(v string) *SearchIndexInput {
	s.IndexName = &v
	return s
}

// SetMaxResults sets the MaxResults field's value.
func (s *SearchIndexInput) SetMaxResults(v int64) *SearchIndexInput {
	s.MaxResults = &v
	return s
}

// SetNextToken sets the NextToken field's value.
func (s *SearchIndexInput) SetNextToken(v string) *SearchIndexInput {
	s.NextToken = &v
	return s
}

// SetQueryString sets the QueryString field's value.
func (s *SearchIndexInput) SetQueryString(v string) *SearchIndexInput {
	s.QueryString = &v
	return s
}

// SetQueryVersion sets the QueryVersion field's value.
func (s *SearchIndexInput) SetQueryVersion(v string) *SearchIndexInput {
	s.QueryVersion = &v
	return s
}

type SearchIndexOutput struct {
	_ struct{} `type:"structure"`

	// The token used to get the next set of results, or null if there are no additional
	// results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The thing groups that match the search query.
	ThingGroups []*ThingGroupDocument `locationName:"thingGroups" type:"list"`

	// The things that match the search query.
	Things []*ThingDocument `locationName:"things" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SearchIndexOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SearchIndexOutput) GoString() string {
	return s.String()
}

// SetNextToken sets the NextToken field's value.
func (s *SearchIndexOutput) SetNextToken(v string) *SearchIndexOutput {
	s.NextToken = &v
	return s
}

// SetThingGroups sets the ThingGroups field's value.
func (s *SearchIndexOutput) SetThingGroups(v []*ThingGroupDocument) *SearchIndexOutput {
	s.ThingGroups = v
	return s
}

// SetThings sets the Things field's value.
func (s *SearchIndexOutput) SetThings(v []*ThingDocument) *SearchIndexOutput {
	s.Things = v
	return s
}

// Identifying information for a Device Defender security profile.
type SecurityProfileIdentifier struct {
	_ struct{} `type:"structure"`

	// The ARN of the security profile.
	//
	// Arn is a required field
	Arn *string `locationName:"arn" type:"string" required:"true"`

	// The name you've given to the security profile.
	//
	// Name is a required field
	Name *string `locationName:"name" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SecurityProfileIdentifier) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SecurityProfileIdentifier) GoString() string {
	return s.String()
}

// SetArn sets the Arn field's value.
func (s *SecurityProfileIdentifier) SetArn(v string) *SecurityProfileIdentifier {
	s.Arn = &v
	return s
}

// SetName sets the Name field's value.
func (s *SecurityProfileIdentifier) SetName(v string) *SecurityProfileIdentifier {
	s.Name = &v
	return s
}

// A target to which an alert is sent when a security profile behavior is violated.
type SecurityProfileTarget struct {
	_ struct{} `type:"structure"`

	// The ARN of the security profile.
	//
	// Arn is a required field
	Arn *string `locationName:"arn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SecurityProfileTarget) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SecurityProfileTarget) GoString() string {
	return s.String()
}

// SetArn sets the Arn field's value.
func (s *SecurityProfileTarget) SetArn(v string) *SecurityProfileTarget {
	s.Arn = &v
	return s
}

// Information about a security profile and the target associated with it.
type SecurityProfileTargetMapping struct {
	_ struct{} `type:"structure"`

	// Information that identifies the security profile.
	SecurityProfileIdentifier *SecurityProfileIdentifier `locationName:"securityProfileIdentifier" type:"structure"`

	// Information about the target (thing group) associated with the security profile.
	Target *SecurityProfileTarget `locationName:"target" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SecurityProfileTargetMapping) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SecurityProfileTargetMapping) GoString() string {
	return s.String()
}

// SetSecurityProfileIdentifier sets the SecurityProfileIdentifier field's value.
func (s *SecurityProfileTargetMapping) SetSecurityProfileIdentifier(v *SecurityProfileIdentifier) *SecurityProfileTargetMapping {
	s.SecurityProfileIdentifier = v
	return s
}

// SetTarget sets the Target field's value.
func (s *SecurityProfileTargetMapping) SetTarget(v *SecurityProfileTarget) *SecurityProfileTargetMapping {
	s.Target = v
	return s
}

// The server certificate configuration.
type ServerCertificateConfig struct {
	_ struct{} `type:"structure"`

	// A Boolean value that indicates whether Online Certificate Status Protocol
	// (OCSP) server certificate check is enabled or not.
	//
	// For more information, see Configuring OCSP server-certificate stapling in
	// domain configuration (https://docs.aws.amazon.com/iot/latest/developerguide/iot-custom-domain-ocsp-config.html)
	// from Amazon Web Services IoT Core Developer Guide.
	EnableOCSPCheck *bool `locationName:"enableOCSPCheck" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServerCertificateConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServerCertificateConfig) GoString() string {
	return s.String()
}

// SetEnableOCSPCheck sets the EnableOCSPCheck field's value.
func (s *ServerCertificateConfig) SetEnableOCSPCheck(v bool) *ServerCertificateConfig {
	s.EnableOCSPCheck = &v
	return s
}

// An object that contains information about a server certificate.
type ServerCertificateSummary struct {
	_ struct{} `type:"structure"`

	// The ARN of the server certificate.
	ServerCertificateArn *string `locationName:"serverCertificateArn" min:"1" type:"string"`

	// The status of the server certificate.
	ServerCertificateStatus *string `locationName:"serverCertificateStatus" type:"string" enum:"ServerCertificateStatus"`

	// Details that explain the status of the server certificate.
	ServerCertificateStatusDetail *string `locationName:"serverCertificateStatusDetail" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServerCertificateSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServerCertificateSummary) GoString() string {
	return s.String()
}

// SetServerCertificateArn sets the ServerCertificateArn field's value.
func (s *ServerCertificateSummary) SetServerCertificateArn(v string) *ServerCertificateSummary {
	s.ServerCertificateArn = &v
	return s
}

// SetServerCertificateStatus sets the ServerCertificateStatus field's value.
func (s *ServerCertificateSummary) SetServerCertificateStatus(v string) *ServerCertificateSummary {
	s.ServerCertificateStatus = &v
	return s
}

// SetServerCertificateStatusDetail sets the ServerCertificateStatusDetail field's value.
func (s *ServerCertificateSummary) SetServerCertificateStatusDetail(v string) *ServerCertificateSummary {
	s.ServerCertificateStatusDetail = &v
	return s
}

// A limit has been exceeded.
type ServiceQuotaExceededException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceQuotaExceededException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceQuotaExceededException) GoString() string {
	return s.String()
}

func newErrorServiceQuotaExceededException(v protocol.ResponseMetadata) error {
	return &ServiceQuotaExceededException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ServiceQuotaExceededException) Code() string {
	return "ServiceQuotaExceededException"
}

// Message returns the exception's message.
func (s *ServiceQuotaExceededException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ServiceQuotaExceededException) OrigErr() error {
	return nil
}

func (s *ServiceQuotaExceededException) 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 *ServiceQuotaExceededException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ServiceQuotaExceededException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The service is temporarily unavailable.
type ServiceUnavailableException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceUnavailableException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceUnavailableException) GoString() string {
	return s.String()
}

func newErrorServiceUnavailableException(v protocol.ResponseMetadata) error {
	return &ServiceUnavailableException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ServiceUnavailableException) Code() string {
	return "ServiceUnavailableException"
}

// Message returns the exception's message.
func (s *ServiceUnavailableException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ServiceUnavailableException) OrigErr() error {
	return nil
}

func (s *ServiceUnavailableException) 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 *ServiceUnavailableException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ServiceUnavailableException) RequestID() string {
	return s.RespMetadata.RequestID
}

type SetDefaultAuthorizerInput struct {
	_ struct{} `type:"structure"`

	// The authorizer name.
	//
	// AuthorizerName is a required field
	AuthorizerName *string `locationName:"authorizerName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetDefaultAuthorizerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetDefaultAuthorizerInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SetDefaultAuthorizerInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SetDefaultAuthorizerInput"}
	if s.AuthorizerName == nil {
		invalidParams.Add(request.NewErrParamRequired("AuthorizerName"))
	}
	if s.AuthorizerName != nil && len(*s.AuthorizerName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AuthorizerName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuthorizerName sets the AuthorizerName field's value.
func (s *SetDefaultAuthorizerInput) SetAuthorizerName(v string) *SetDefaultAuthorizerInput {
	s.AuthorizerName = &v
	return s
}

type SetDefaultAuthorizerOutput struct {
	_ struct{} `type:"structure"`

	// The authorizer ARN.
	AuthorizerArn *string `locationName:"authorizerArn" type:"string"`

	// The authorizer name.
	AuthorizerName *string `locationName:"authorizerName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetDefaultAuthorizerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetDefaultAuthorizerOutput) GoString() string {
	return s.String()
}

// SetAuthorizerArn sets the AuthorizerArn field's value.
func (s *SetDefaultAuthorizerOutput) SetAuthorizerArn(v string) *SetDefaultAuthorizerOutput {
	s.AuthorizerArn = &v
	return s
}

// SetAuthorizerName sets the AuthorizerName field's value.
func (s *SetDefaultAuthorizerOutput) SetAuthorizerName(v string) *SetDefaultAuthorizerOutput {
	s.AuthorizerName = &v
	return s
}

// The input for the SetDefaultPolicyVersion operation.
type SetDefaultPolicyVersionInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The policy name.
	//
	// PolicyName is a required field
	PolicyName *string `location:"uri" locationName:"policyName" min:"1" type:"string" required:"true"`

	// The policy version ID.
	//
	// PolicyVersionId is a required field
	PolicyVersionId *string `location:"uri" locationName:"policyVersionId" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetDefaultPolicyVersionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetDefaultPolicyVersionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SetDefaultPolicyVersionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SetDefaultPolicyVersionInput"}
	if s.PolicyName == nil {
		invalidParams.Add(request.NewErrParamRequired("PolicyName"))
	}
	if s.PolicyName != nil && len(*s.PolicyName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyName", 1))
	}
	if s.PolicyVersionId == nil {
		invalidParams.Add(request.NewErrParamRequired("PolicyVersionId"))
	}
	if s.PolicyVersionId != nil && len(*s.PolicyVersionId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PolicyVersionId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPolicyName sets the PolicyName field's value.
func (s *SetDefaultPolicyVersionInput) SetPolicyName(v string) *SetDefaultPolicyVersionInput {
	s.PolicyName = &v
	return s
}

// SetPolicyVersionId sets the PolicyVersionId field's value.
func (s *SetDefaultPolicyVersionInput) SetPolicyVersionId(v string) *SetDefaultPolicyVersionInput {
	s.PolicyVersionId = &v
	return s
}

type SetDefaultPolicyVersionOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetDefaultPolicyVersionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetDefaultPolicyVersionOutput) GoString() string {
	return s.String()
}

// The input for the SetLoggingOptions operation.
type SetLoggingOptionsInput struct {
	_ struct{} `type:"structure" payload:"LoggingOptionsPayload"`

	// The logging options payload.
	//
	// LoggingOptionsPayload is a required field
	LoggingOptionsPayload *LoggingOptionsPayload `locationName:"loggingOptionsPayload" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetLoggingOptionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetLoggingOptionsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SetLoggingOptionsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SetLoggingOptionsInput"}
	if s.LoggingOptionsPayload == nil {
		invalidParams.Add(request.NewErrParamRequired("LoggingOptionsPayload"))
	}
	if s.LoggingOptionsPayload != nil {
		if err := s.LoggingOptionsPayload.Validate(); err != nil {
			invalidParams.AddNested("LoggingOptionsPayload", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLoggingOptionsPayload sets the LoggingOptionsPayload field's value.
func (s *SetLoggingOptionsInput) SetLoggingOptionsPayload(v *LoggingOptionsPayload) *SetLoggingOptionsInput {
	s.LoggingOptionsPayload = v
	return s
}

type SetLoggingOptionsOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetLoggingOptionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetLoggingOptionsOutput) GoString() string {
	return s.String()
}

type SetV2LoggingLevelInput struct {
	_ struct{} `type:"structure"`

	// The log level.
	//
	// LogLevel is a required field
	LogLevel *string `locationName:"logLevel" type:"string" required:"true" enum:"LogLevel"`

	// The log target.
	//
	// LogTarget is a required field
	LogTarget *LogTarget `locationName:"logTarget" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetV2LoggingLevelInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetV2LoggingLevelInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SetV2LoggingLevelInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SetV2LoggingLevelInput"}
	if s.LogLevel == nil {
		invalidParams.Add(request.NewErrParamRequired("LogLevel"))
	}
	if s.LogTarget == nil {
		invalidParams.Add(request.NewErrParamRequired("LogTarget"))
	}
	if s.LogTarget != nil {
		if err := s.LogTarget.Validate(); err != nil {
			invalidParams.AddNested("LogTarget", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLogLevel sets the LogLevel field's value.
func (s *SetV2LoggingLevelInput) SetLogLevel(v string) *SetV2LoggingLevelInput {
	s.LogLevel = &v
	return s
}

// SetLogTarget sets the LogTarget field's value.
func (s *SetV2LoggingLevelInput) SetLogTarget(v *LogTarget) *SetV2LoggingLevelInput {
	s.LogTarget = v
	return s
}

type SetV2LoggingLevelOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetV2LoggingLevelOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetV2LoggingLevelOutput) GoString() string {
	return s.String()
}

type SetV2LoggingOptionsInput struct {
	_ struct{} `type:"structure"`

	// The default logging level.
	DefaultLogLevel *string `locationName:"defaultLogLevel" type:"string" enum:"LogLevel"`

	// If true all logs are disabled. The default is false.
	DisableAllLogs *bool `locationName:"disableAllLogs" type:"boolean"`

	// The ARN of the role that allows IoT to write to Cloudwatch logs.
	RoleArn *string `locationName:"roleArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetV2LoggingOptionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetV2LoggingOptionsInput) GoString() string {
	return s.String()
}

// SetDefaultLogLevel sets the DefaultLogLevel field's value.
func (s *SetV2LoggingOptionsInput) SetDefaultLogLevel(v string) *SetV2LoggingOptionsInput {
	s.DefaultLogLevel = &v
	return s
}

// SetDisableAllLogs sets the DisableAllLogs field's value.
func (s *SetV2LoggingOptionsInput) SetDisableAllLogs(v bool) *SetV2LoggingOptionsInput {
	s.DisableAllLogs = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *SetV2LoggingOptionsInput) SetRoleArn(v string) *SetV2LoggingOptionsInput {
	s.RoleArn = &v
	return s
}

type SetV2LoggingOptionsOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetV2LoggingOptionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SetV2LoggingOptionsOutput) GoString() string {
	return s.String()
}

// For more information, see Signature Version 4 signing process (https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html).
type SigV4Authorization struct {
	_ struct{} `type:"structure"`

	// The ARN of the signing role.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// The service name to use while signing with Sig V4.
	//
	// ServiceName is a required field
	ServiceName *string `locationName:"serviceName" type:"string" required:"true"`

	// The signing region.
	//
	// SigningRegion is a required field
	SigningRegion *string `locationName:"signingRegion" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SigV4Authorization) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SigV4Authorization) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SigV4Authorization) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SigV4Authorization"}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.ServiceName == nil {
		invalidParams.Add(request.NewErrParamRequired("ServiceName"))
	}
	if s.SigningRegion == nil {
		invalidParams.Add(request.NewErrParamRequired("SigningRegion"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRoleArn sets the RoleArn field's value.
func (s *SigV4Authorization) SetRoleArn(v string) *SigV4Authorization {
	s.RoleArn = &v
	return s
}

// SetServiceName sets the ServiceName field's value.
func (s *SigV4Authorization) SetServiceName(v string) *SigV4Authorization {
	s.ServiceName = &v
	return s
}

// SetSigningRegion sets the SigningRegion field's value.
func (s *SigV4Authorization) SetSigningRegion(v string) *SigV4Authorization {
	s.SigningRegion = &v
	return s
}

// Describes the code-signing profile.
type SigningProfileParameter struct {
	_ struct{} `type:"structure"`

	// Certificate ARN.
	CertificateArn *string `locationName:"certificateArn" type:"string"`

	// The location of the code-signing certificate on your device.
	CertificatePathOnDevice *string `locationName:"certificatePathOnDevice" type:"string"`

	// The hardware platform of your device.
	Platform *string `locationName:"platform" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SigningProfileParameter) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SigningProfileParameter) GoString() string {
	return s.String()
}

// SetCertificateArn sets the CertificateArn field's value.
func (s *SigningProfileParameter) SetCertificateArn(v string) *SigningProfileParameter {
	s.CertificateArn = &v
	return s
}

// SetCertificatePathOnDevice sets the CertificatePathOnDevice field's value.
func (s *SigningProfileParameter) SetCertificatePathOnDevice(v string) *SigningProfileParameter {
	s.CertificatePathOnDevice = &v
	return s
}

// SetPlatform sets the Platform field's value.
func (s *SigningProfileParameter) SetPlatform(v string) *SigningProfileParameter {
	s.Platform = &v
	return s
}

// Describes an action to publish to an Amazon SNS topic.
type SnsAction struct {
	_ struct{} `type:"structure"`

	// (Optional) The message format of the message to publish. Accepted values
	// are "JSON" and "RAW". The default value of the attribute is "RAW". SNS uses
	// this setting to determine if the payload should be parsed and relevant platform-specific
	// bits of the payload should be extracted. To read more about SNS message formats,
	// see https://docs.aws.amazon.com/sns/latest/dg/json-formats.html (https://docs.aws.amazon.com/sns/latest/dg/json-formats.html)
	// refer to their official documentation.
	MessageFormat *string `locationName:"messageFormat" type:"string" enum:"MessageFormat"`

	// The ARN of the IAM role that grants access.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// The ARN of the SNS topic.
	//
	// TargetArn is a required field
	TargetArn *string `locationName:"targetArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SnsAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SnsAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SnsAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SnsAction"}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.TargetArn == nil {
		invalidParams.Add(request.NewErrParamRequired("TargetArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMessageFormat sets the MessageFormat field's value.
func (s *SnsAction) SetMessageFormat(v string) *SnsAction {
	s.MessageFormat = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *SnsAction) SetRoleArn(v string) *SnsAction {
	s.RoleArn = &v
	return s
}

// SetTargetArn sets the TargetArn field's value.
func (s *SnsAction) SetTargetArn(v string) *SnsAction {
	s.TargetArn = &v
	return s
}

// The Rule-SQL expression can't be parsed correctly.
type SqlParseException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SqlParseException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SqlParseException) GoString() string {
	return s.String()
}

func newErrorSqlParseException(v protocol.ResponseMetadata) error {
	return &SqlParseException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *SqlParseException) Code() string {
	return "SqlParseException"
}

// Message returns the exception's message.
func (s *SqlParseException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *SqlParseException) OrigErr() error {
	return nil
}

func (s *SqlParseException) 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 *SqlParseException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *SqlParseException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Describes an action to publish data to an Amazon SQS queue.
type SqsAction struct {
	_ struct{} `type:"structure"`

	// The URL of the Amazon SQS queue.
	//
	// QueueUrl is a required field
	QueueUrl *string `locationName:"queueUrl" type:"string" required:"true"`

	// The ARN of the IAM role that grants access.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// Specifies whether to use Base64 encoding.
	UseBase64 *bool `locationName:"useBase64" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SqsAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SqsAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SqsAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SqsAction"}
	if s.QueueUrl == nil {
		invalidParams.Add(request.NewErrParamRequired("QueueUrl"))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetQueueUrl sets the QueueUrl field's value.
func (s *SqsAction) SetQueueUrl(v string) *SqsAction {
	s.QueueUrl = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *SqsAction) SetRoleArn(v string) *SqsAction {
	s.RoleArn = &v
	return s
}

// SetUseBase64 sets the UseBase64 field's value.
func (s *SqsAction) SetUseBase64(v bool) *SqsAction {
	s.UseBase64 = &v
	return s
}

type StartAuditMitigationActionsTaskInput struct {
	_ struct{} `type:"structure"`

	// For an audit check, specifies which mitigation actions to apply. Those actions
	// must be defined in your Amazon Web Services accounts.
	//
	// AuditCheckToActionsMapping is a required field
	AuditCheckToActionsMapping map[string][]*string `locationName:"auditCheckToActionsMapping" type:"map" required:"true"`

	// Each audit mitigation task must have a unique client request token. If you
	// try to start a new task with the same token as a task that already exists,
	// an exception occurs. If you omit this value, a unique client request token
	// is generated automatically.
	ClientRequestToken *string `locationName:"clientRequestToken" min:"1" type:"string" idempotencyToken:"true"`

	// Specifies the audit findings to which the mitigation actions are applied.
	// You can apply them to a type of audit check, to all findings from an audit,
	// or to a specific set of findings.
	//
	// Target is a required field
	Target *AuditMitigationActionsTaskTarget `locationName:"target" type:"structure" required:"true"`

	// A unique identifier for the task. You can use this identifier to check the
	// status of the task or to cancel it.
	//
	// TaskId is a required field
	TaskId *string `location:"uri" locationName:"taskId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartAuditMitigationActionsTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartAuditMitigationActionsTaskInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StartAuditMitigationActionsTaskInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StartAuditMitigationActionsTaskInput"}
	if s.AuditCheckToActionsMapping == nil {
		invalidParams.Add(request.NewErrParamRequired("AuditCheckToActionsMapping"))
	}
	if s.ClientRequestToken != nil && len(*s.ClientRequestToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientRequestToken", 1))
	}
	if s.Target == nil {
		invalidParams.Add(request.NewErrParamRequired("Target"))
	}
	if s.TaskId == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskId"))
	}
	if s.TaskId != nil && len(*s.TaskId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TaskId", 1))
	}
	if s.Target != nil {
		if err := s.Target.Validate(); err != nil {
			invalidParams.AddNested("Target", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuditCheckToActionsMapping sets the AuditCheckToActionsMapping field's value.
func (s *StartAuditMitigationActionsTaskInput) SetAuditCheckToActionsMapping(v map[string][]*string) *StartAuditMitigationActionsTaskInput {
	s.AuditCheckToActionsMapping = v
	return s
}

// SetClientRequestToken sets the ClientRequestToken field's value.
func (s *StartAuditMitigationActionsTaskInput) SetClientRequestToken(v string) *StartAuditMitigationActionsTaskInput {
	s.ClientRequestToken = &v
	return s
}

// SetTarget sets the Target field's value.
func (s *StartAuditMitigationActionsTaskInput) SetTarget(v *AuditMitigationActionsTaskTarget) *StartAuditMitigationActionsTaskInput {
	s.Target = v
	return s
}

// SetTaskId sets the TaskId field's value.
func (s *StartAuditMitigationActionsTaskInput) SetTaskId(v string) *StartAuditMitigationActionsTaskInput {
	s.TaskId = &v
	return s
}

type StartAuditMitigationActionsTaskOutput struct {
	_ struct{} `type:"structure"`

	// The unique identifier for the audit mitigation task. This matches the taskId
	// that you specified in the request.
	TaskId *string `locationName:"taskId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartAuditMitigationActionsTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartAuditMitigationActionsTaskOutput) GoString() string {
	return s.String()
}

// SetTaskId sets the TaskId field's value.
func (s *StartAuditMitigationActionsTaskOutput) SetTaskId(v string) *StartAuditMitigationActionsTaskOutput {
	s.TaskId = &v
	return s
}

type StartDetectMitigationActionsTaskInput struct {
	_ struct{} `type:"structure"`

	// The actions to be performed when a device has unexpected behavior.
	//
	// Actions is a required field
	Actions []*string `locationName:"actions" min:"1" type:"list" required:"true"`

	// Each mitigation action task must have a unique client request token. If you
	// try to create a new task with the same token as a task that already exists,
	// an exception occurs. If you omit this value, Amazon Web Services SDKs will
	// automatically generate a unique client request.
	ClientRequestToken *string `locationName:"clientRequestToken" min:"1" type:"string" idempotencyToken:"true"`

	// Specifies to list only active violations.
	IncludeOnlyActiveViolations *bool `locationName:"includeOnlyActiveViolations" type:"boolean"`

	// Specifies to include suppressed alerts.
	IncludeSuppressedAlerts *bool `locationName:"includeSuppressedAlerts" type:"boolean"`

	// Specifies the ML Detect findings to which the mitigation actions are applied.
	//
	// Target is a required field
	Target *DetectMitigationActionsTaskTarget `locationName:"target" type:"structure" required:"true"`

	// The unique identifier of the task.
	//
	// TaskId is a required field
	TaskId *string `location:"uri" locationName:"taskId" min:"1" type:"string" required:"true"`

	// Specifies the time period of which violation events occurred between.
	ViolationEventOccurrenceRange *ViolationEventOccurrenceRange `locationName:"violationEventOccurrenceRange" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartDetectMitigationActionsTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartDetectMitigationActionsTaskInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StartDetectMitigationActionsTaskInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StartDetectMitigationActionsTaskInput"}
	if s.Actions == nil {
		invalidParams.Add(request.NewErrParamRequired("Actions"))
	}
	if s.Actions != nil && len(s.Actions) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Actions", 1))
	}
	if s.ClientRequestToken != nil && len(*s.ClientRequestToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientRequestToken", 1))
	}
	if s.Target == nil {
		invalidParams.Add(request.NewErrParamRequired("Target"))
	}
	if s.TaskId == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskId"))
	}
	if s.TaskId != nil && len(*s.TaskId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TaskId", 1))
	}
	if s.Target != nil {
		if err := s.Target.Validate(); err != nil {
			invalidParams.AddNested("Target", err.(request.ErrInvalidParams))
		}
	}
	if s.ViolationEventOccurrenceRange != nil {
		if err := s.ViolationEventOccurrenceRange.Validate(); err != nil {
			invalidParams.AddNested("ViolationEventOccurrenceRange", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetActions sets the Actions field's value.
func (s *StartDetectMitigationActionsTaskInput) SetActions(v []*string) *StartDetectMitigationActionsTaskInput {
	s.Actions = v
	return s
}

// SetClientRequestToken sets the ClientRequestToken field's value.
func (s *StartDetectMitigationActionsTaskInput) SetClientRequestToken(v string) *StartDetectMitigationActionsTaskInput {
	s.ClientRequestToken = &v
	return s
}

// SetIncludeOnlyActiveViolations sets the IncludeOnlyActiveViolations field's value.
func (s *StartDetectMitigationActionsTaskInput) SetIncludeOnlyActiveViolations(v bool) *StartDetectMitigationActionsTaskInput {
	s.IncludeOnlyActiveViolations = &v
	return s
}

// SetIncludeSuppressedAlerts sets the IncludeSuppressedAlerts field's value.
func (s *StartDetectMitigationActionsTaskInput) SetIncludeSuppressedAlerts(v bool) *StartDetectMitigationActionsTaskInput {
	s.IncludeSuppressedAlerts = &v
	return s
}

// SetTarget sets the Target field's value.
func (s *StartDetectMitigationActionsTaskInput) SetTarget(v *DetectMitigationActionsTaskTarget) *StartDetectMitigationActionsTaskInput {
	s.Target = v
	return s
}

// SetTaskId sets the TaskId field's value.
func (s *StartDetectMitigationActionsTaskInput) SetTaskId(v string) *StartDetectMitigationActionsTaskInput {
	s.TaskId = &v
	return s
}

// SetViolationEventOccurrenceRange sets the ViolationEventOccurrenceRange field's value.
func (s *StartDetectMitigationActionsTaskInput) SetViolationEventOccurrenceRange(v *ViolationEventOccurrenceRange) *StartDetectMitigationActionsTaskInput {
	s.ViolationEventOccurrenceRange = v
	return s
}

type StartDetectMitigationActionsTaskOutput struct {
	_ struct{} `type:"structure"`

	// The unique identifier of the task.
	TaskId *string `locationName:"taskId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartDetectMitigationActionsTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartDetectMitigationActionsTaskOutput) GoString() string {
	return s.String()
}

// SetTaskId sets the TaskId field's value.
func (s *StartDetectMitigationActionsTaskOutput) SetTaskId(v string) *StartDetectMitigationActionsTaskOutput {
	s.TaskId = &v
	return s
}

type StartOnDemandAuditTaskInput struct {
	_ struct{} `type:"structure"`

	// Which checks are performed during the audit. The checks you specify must
	// be enabled for your account or an exception occurs. Use DescribeAccountAuditConfiguration
	// to see the list of all checks, including those that are enabled or UpdateAccountAuditConfiguration
	// to select which checks are enabled.
	//
	// TargetCheckNames is a required field
	TargetCheckNames []*string `locationName:"targetCheckNames" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartOnDemandAuditTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartOnDemandAuditTaskInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StartOnDemandAuditTaskInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StartOnDemandAuditTaskInput"}
	if s.TargetCheckNames == nil {
		invalidParams.Add(request.NewErrParamRequired("TargetCheckNames"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTargetCheckNames sets the TargetCheckNames field's value.
func (s *StartOnDemandAuditTaskInput) SetTargetCheckNames(v []*string) *StartOnDemandAuditTaskInput {
	s.TargetCheckNames = v
	return s
}

type StartOnDemandAuditTaskOutput struct {
	_ struct{} `type:"structure"`

	// The ID of the on-demand audit you started.
	TaskId *string `locationName:"taskId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartOnDemandAuditTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartOnDemandAuditTaskOutput) GoString() string {
	return s.String()
}

// SetTaskId sets the TaskId field's value.
func (s *StartOnDemandAuditTaskOutput) SetTaskId(v string) *StartOnDemandAuditTaskOutput {
	s.TaskId = &v
	return s
}

// Information required to start a signing job.
type StartSigningJobParameter struct {
	_ struct{} `type:"structure"`

	// The location to write the code-signed file.
	Destination *Destination `locationName:"destination" type:"structure"`

	// The code-signing profile name.
	SigningProfileName *string `locationName:"signingProfileName" type:"string"`

	// Describes the code-signing profile.
	SigningProfileParameter *SigningProfileParameter `locationName:"signingProfileParameter" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartSigningJobParameter) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartSigningJobParameter) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StartSigningJobParameter) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StartSigningJobParameter"}
	if s.Destination != nil {
		if err := s.Destination.Validate(); err != nil {
			invalidParams.AddNested("Destination", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDestination sets the Destination field's value.
func (s *StartSigningJobParameter) SetDestination(v *Destination) *StartSigningJobParameter {
	s.Destination = v
	return s
}

// SetSigningProfileName sets the SigningProfileName field's value.
func (s *StartSigningJobParameter) SetSigningProfileName(v string) *StartSigningJobParameter {
	s.SigningProfileName = &v
	return s
}

// SetSigningProfileParameter sets the SigningProfileParameter field's value.
func (s *StartSigningJobParameter) SetSigningProfileParameter(v *SigningProfileParameter) *StartSigningJobParameter {
	s.SigningProfileParameter = v
	return s
}

type StartThingRegistrationTaskInput struct {
	_ struct{} `type:"structure"`

	// The S3 bucket that contains the input file.
	//
	// InputFileBucket is a required field
	InputFileBucket *string `locationName:"inputFileBucket" min:"3" type:"string" required:"true"`

	// The name of input file within the S3 bucket. This file contains a newline
	// delimited JSON file. Each line contains the parameter values to provision
	// one device (thing).
	//
	// InputFileKey is a required field
	InputFileKey *string `locationName:"inputFileKey" min:"1" type:"string" required:"true"`

	// The IAM role ARN that grants permission the input file.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" min:"20" type:"string" required:"true"`

	// The provisioning template.
	//
	// TemplateBody is a required field
	TemplateBody *string `locationName:"templateBody" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartThingRegistrationTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartThingRegistrationTaskInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StartThingRegistrationTaskInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StartThingRegistrationTaskInput"}
	if s.InputFileBucket == nil {
		invalidParams.Add(request.NewErrParamRequired("InputFileBucket"))
	}
	if s.InputFileBucket != nil && len(*s.InputFileBucket) < 3 {
		invalidParams.Add(request.NewErrParamMinLen("InputFileBucket", 3))
	}
	if s.InputFileKey == nil {
		invalidParams.Add(request.NewErrParamRequired("InputFileKey"))
	}
	if s.InputFileKey != nil && len(*s.InputFileKey) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("InputFileKey", 1))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.RoleArn != nil && len(*s.RoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20))
	}
	if s.TemplateBody == nil {
		invalidParams.Add(request.NewErrParamRequired("TemplateBody"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetInputFileBucket sets the InputFileBucket field's value.
func (s *StartThingRegistrationTaskInput) SetInputFileBucket(v string) *StartThingRegistrationTaskInput {
	s.InputFileBucket = &v
	return s
}

// SetInputFileKey sets the InputFileKey field's value.
func (s *StartThingRegistrationTaskInput) SetInputFileKey(v string) *StartThingRegistrationTaskInput {
	s.InputFileKey = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *StartThingRegistrationTaskInput) SetRoleArn(v string) *StartThingRegistrationTaskInput {
	s.RoleArn = &v
	return s
}

// SetTemplateBody sets the TemplateBody field's value.
func (s *StartThingRegistrationTaskInput) SetTemplateBody(v string) *StartThingRegistrationTaskInput {
	s.TemplateBody = &v
	return s
}

type StartThingRegistrationTaskOutput struct {
	_ struct{} `type:"structure"`

	// The bulk thing provisioning task ID.
	TaskId *string `locationName:"taskId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartThingRegistrationTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartThingRegistrationTaskOutput) GoString() string {
	return s.String()
}

// SetTaskId sets the TaskId field's value.
func (s *StartThingRegistrationTaskOutput) SetTaskId(v string) *StartThingRegistrationTaskOutput {
	s.TaskId = &v
	return s
}

// A statistical ranking (percentile) that indicates a threshold value by which
// a behavior is determined to be in compliance or in violation of the behavior.
type StatisticalThreshold struct {
	_ struct{} `type:"structure"`

	// The percentile that resolves to a threshold value by which compliance with
	// a behavior is determined. Metrics are collected over the specified period
	// (durationSeconds) from all reporting devices in your account and statistical
	// ranks are calculated. Then, the measurements from a device are collected
	// over the same period. If the accumulated measurements from the device fall
	// above or below (comparisonOperator) the value associated with the percentile
	// specified, then the device is considered to be in compliance with the behavior,
	// otherwise a violation occurs.
	Statistic *string `locationName:"statistic" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StatisticalThreshold) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StatisticalThreshold) GoString() string {
	return s.String()
}

// SetStatistic sets the Statistic field's value.
func (s *StatisticalThreshold) SetStatistic(v string) *StatisticalThreshold {
	s.Statistic = &v
	return s
}

// A map of key-value pairs for all supported statistics. For issues with missing
// or unexpected values for this API, consult Fleet indexing troubleshooting
// guide (https://docs.aws.amazon.com/iot/latest/developerguide/fleet-indexing-troubleshooting.html).
type Statistics struct {
	_ struct{} `type:"structure"`

	// The average of the aggregated field values.
	Average *float64 `locationName:"average" type:"double"`

	// The count of things that match the query string criteria and contain a valid
	// aggregation field value.
	Count *int64 `locationName:"count" type:"integer"`

	// The maximum aggregated field value.
	Maximum *float64 `locationName:"maximum" type:"double"`

	// The minimum aggregated field value.
	Minimum *float64 `locationName:"minimum" type:"double"`

	// The standard deviation of the aggregated field values.
	StdDeviation *float64 `locationName:"stdDeviation" type:"double"`

	// The sum of the aggregated field values.
	Sum *float64 `locationName:"sum" type:"double"`

	// The sum of the squares of the aggregated field values.
	SumOfSquares *float64 `locationName:"sumOfSquares" type:"double"`

	// The variance of the aggregated field values.
	Variance *float64 `locationName:"variance" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Statistics) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Statistics) GoString() string {
	return s.String()
}

// SetAverage sets the Average field's value.
func (s *Statistics) SetAverage(v float64) *Statistics {
	s.Average = &v
	return s
}

// SetCount sets the Count field's value.
func (s *Statistics) SetCount(v int64) *Statistics {
	s.Count = &v
	return s
}

// SetMaximum sets the Maximum field's value.
func (s *Statistics) SetMaximum(v float64) *Statistics {
	s.Maximum = &v
	return s
}

// SetMinimum sets the Minimum field's value.
func (s *Statistics) SetMinimum(v float64) *Statistics {
	s.Minimum = &v
	return s
}

// SetStdDeviation sets the StdDeviation field's value.
func (s *Statistics) SetStdDeviation(v float64) *Statistics {
	s.StdDeviation = &v
	return s
}

// SetSum sets the Sum field's value.
func (s *Statistics) SetSum(v float64) *Statistics {
	s.Sum = &v
	return s
}

// SetSumOfSquares sets the SumOfSquares field's value.
func (s *Statistics) SetSumOfSquares(v float64) *Statistics {
	s.SumOfSquares = &v
	return s
}

// SetVariance sets the Variance field's value.
func (s *Statistics) SetVariance(v float64) *Statistics {
	s.Variance = &v
	return s
}

// Starts execution of a Step Functions state machine.
type StepFunctionsAction struct {
	_ struct{} `type:"structure"`

	// (Optional) A name will be given to the state machine execution consisting
	// of this prefix followed by a UUID. Step Functions automatically creates a
	// unique name for each state machine execution if one is not provided.
	ExecutionNamePrefix *string `locationName:"executionNamePrefix" type:"string"`

	// The ARN of the role that grants IoT permission to start execution of a state
	// machine ("Action":"states:StartExecution").
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// The name of the Step Functions state machine whose execution will be started.
	//
	// StateMachineName is a required field
	StateMachineName *string `locationName:"stateMachineName" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StepFunctionsAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StepFunctionsAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StepFunctionsAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StepFunctionsAction"}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.StateMachineName == nil {
		invalidParams.Add(request.NewErrParamRequired("StateMachineName"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExecutionNamePrefix sets the ExecutionNamePrefix field's value.
func (s *StepFunctionsAction) SetExecutionNamePrefix(v string) *StepFunctionsAction {
	s.ExecutionNamePrefix = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *StepFunctionsAction) SetRoleArn(v string) *StepFunctionsAction {
	s.RoleArn = &v
	return s
}

// SetStateMachineName sets the StateMachineName field's value.
func (s *StepFunctionsAction) SetStateMachineName(v string) *StepFunctionsAction {
	s.StateMachineName = &v
	return s
}

type StopThingRegistrationTaskInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The bulk thing provisioning task ID.
	//
	// TaskId is a required field
	TaskId *string `location:"uri" locationName:"taskId" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopThingRegistrationTaskInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopThingRegistrationTaskInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StopThingRegistrationTaskInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StopThingRegistrationTaskInput"}
	if s.TaskId == nil {
		invalidParams.Add(request.NewErrParamRequired("TaskId"))
	}
	if s.TaskId != nil && len(*s.TaskId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TaskId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTaskId sets the TaskId field's value.
func (s *StopThingRegistrationTaskInput) SetTaskId(v string) *StopThingRegistrationTaskInput {
	s.TaskId = &v
	return s
}

type StopThingRegistrationTaskOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopThingRegistrationTaskOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopThingRegistrationTaskOutput) GoString() string {
	return s.String()
}

// Describes a group of files that can be streamed.
type Stream struct {
	_ struct{} `type:"structure"`

	// The ID of a file associated with a stream.
	FileId *int64 `locationName:"fileId" type:"integer"`

	// The stream ID.
	StreamId *string `locationName:"streamId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Stream) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Stream) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Stream) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Stream"}
	if s.StreamId != nil && len(*s.StreamId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("StreamId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetFileId sets the FileId field's value.
func (s *Stream) SetFileId(v int64) *Stream {
	s.FileId = &v
	return s
}

// SetStreamId sets the StreamId field's value.
func (s *Stream) SetStreamId(v string) *Stream {
	s.StreamId = &v
	return s
}

// Represents a file to stream.
type StreamFile struct {
	_ struct{} `type:"structure"`

	// The file ID.
	FileId *int64 `locationName:"fileId" type:"integer"`

	// The location of the file in S3.
	S3Location *S3Location `locationName:"s3Location" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StreamFile) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StreamFile) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StreamFile) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StreamFile"}
	if s.S3Location != nil {
		if err := s.S3Location.Validate(); err != nil {
			invalidParams.AddNested("S3Location", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetFileId sets the FileId field's value.
func (s *StreamFile) SetFileId(v int64) *StreamFile {
	s.FileId = &v
	return s
}

// SetS3Location sets the S3Location field's value.
func (s *StreamFile) SetS3Location(v *S3Location) *StreamFile {
	s.S3Location = v
	return s
}

// Information about a stream.
type StreamInfo struct {
	_ struct{} `type:"structure"`

	// The date when the stream was created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// The description of the stream.
	Description *string `locationName:"description" type:"string"`

	// The files to stream.
	Files []*StreamFile `locationName:"files" min:"1" type:"list"`

	// The date when the stream was last updated.
	LastUpdatedAt *time.Time `locationName:"lastUpdatedAt" type:"timestamp"`

	// An IAM role IoT assumes to access your S3 files.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`

	// The stream ARN.
	StreamArn *string `locationName:"streamArn" type:"string"`

	// The stream ID.
	StreamId *string `locationName:"streamId" min:"1" type:"string"`

	// The stream version.
	StreamVersion *int64 `locationName:"streamVersion" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StreamInfo) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StreamInfo) GoString() string {
	return s.String()
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *StreamInfo) SetCreatedAt(v time.Time) *StreamInfo {
	s.CreatedAt = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *StreamInfo) SetDescription(v string) *StreamInfo {
	s.Description = &v
	return s
}

// SetFiles sets the Files field's value.
func (s *StreamInfo) SetFiles(v []*StreamFile) *StreamInfo {
	s.Files = v
	return s
}

// SetLastUpdatedAt sets the LastUpdatedAt field's value.
func (s *StreamInfo) SetLastUpdatedAt(v time.Time) *StreamInfo {
	s.LastUpdatedAt = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *StreamInfo) SetRoleArn(v string) *StreamInfo {
	s.RoleArn = &v
	return s
}

// SetStreamArn sets the StreamArn field's value.
func (s *StreamInfo) SetStreamArn(v string) *StreamInfo {
	s.StreamArn = &v
	return s
}

// SetStreamId sets the StreamId field's value.
func (s *StreamInfo) SetStreamId(v string) *StreamInfo {
	s.StreamId = &v
	return s
}

// SetStreamVersion sets the StreamVersion field's value.
func (s *StreamInfo) SetStreamVersion(v int64) *StreamInfo {
	s.StreamVersion = &v
	return s
}

// A summary of a stream.
type StreamSummary struct {
	_ struct{} `type:"structure"`

	// A description of the stream.
	Description *string `locationName:"description" type:"string"`

	// The stream ARN.
	StreamArn *string `locationName:"streamArn" type:"string"`

	// The stream ID.
	StreamId *string `locationName:"streamId" min:"1" type:"string"`

	// The stream version.
	StreamVersion *int64 `locationName:"streamVersion" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StreamSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StreamSummary) GoString() string {
	return s.String()
}

// SetDescription sets the Description field's value.
func (s *StreamSummary) SetDescription(v string) *StreamSummary {
	s.Description = &v
	return s
}

// SetStreamArn sets the StreamArn field's value.
func (s *StreamSummary) SetStreamArn(v string) *StreamSummary {
	s.StreamArn = &v
	return s
}

// SetStreamId sets the StreamId field's value.
func (s *StreamSummary) SetStreamId(v string) *StreamSummary {
	s.StreamId = &v
	return s
}

// SetStreamVersion sets the StreamVersion field's value.
func (s *StreamSummary) SetStreamVersion(v int64) *StreamSummary {
	s.StreamVersion = &v
	return s
}

// A set of key/value pairs that are used to manage the resource.
type Tag struct {
	_ struct{} `type:"structure"`

	// The tag's key.
	//
	// Key is a required field
	Key *string `min:"1" type:"string" required:"true"`

	// The tag's value.
	Value *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tag) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tag) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Tag) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Tag"}
	if s.Key == nil {
		invalidParams.Add(request.NewErrParamRequired("Key"))
	}
	if s.Key != nil && len(*s.Key) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Key", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetKey sets the Key field's value.
func (s *Tag) SetKey(v string) *Tag {
	s.Key = &v
	return s
}

// SetValue sets the Value field's value.
func (s *Tag) SetValue(v string) *Tag {
	s.Value = &v
	return s
}

type TagResourceInput struct {
	_ struct{} `type:"structure"`

	// The ARN of the resource.
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" type:"string" required:"true"`

	// The new or modified tags for the resource.
	//
	// Tags is a required field
	Tags []*Tag `locationName:"tags" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TagResourceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TagResourceInput"}
	if s.ResourceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceArn"))
	}
	if s.Tags == nil {
		invalidParams.Add(request.NewErrParamRequired("Tags"))
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetResourceArn sets the ResourceArn field's value.
func (s *TagResourceInput) SetResourceArn(v string) *TagResourceInput {
	s.ResourceArn = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *TagResourceInput) SetTags(v []*Tag) *TagResourceInput {
	s.Tags = v
	return s
}

type TagResourceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceOutput) GoString() string {
	return s.String()
}

// This exception occurs if you attempt to start a task with the same task-id
// as an existing task but with a different clientRequestToken.
type TaskAlreadyExistsException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskAlreadyExistsException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskAlreadyExistsException) GoString() string {
	return s.String()
}

func newErrorTaskAlreadyExistsException(v protocol.ResponseMetadata) error {
	return &TaskAlreadyExistsException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *TaskAlreadyExistsException) Code() string {
	return "TaskAlreadyExistsException"
}

// Message returns the exception's message.
func (s *TaskAlreadyExistsException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *TaskAlreadyExistsException) OrigErr() error {
	return nil
}

func (s *TaskAlreadyExistsException) 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 *TaskAlreadyExistsException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *TaskAlreadyExistsException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Statistics for the checks performed during the audit.
type TaskStatistics struct {
	_ struct{} `type:"structure"`

	// The number of checks that did not run because the audit was canceled.
	CanceledChecks *int64 `locationName:"canceledChecks" type:"integer"`

	// The number of checks that found compliant resources.
	CompliantChecks *int64 `locationName:"compliantChecks" type:"integer"`

	// The number of checks.
	FailedChecks *int64 `locationName:"failedChecks" type:"integer"`

	// The number of checks in progress.
	InProgressChecks *int64 `locationName:"inProgressChecks" type:"integer"`

	// The number of checks that found noncompliant resources.
	NonCompliantChecks *int64 `locationName:"nonCompliantChecks" type:"integer"`

	// The number of checks in this audit.
	TotalChecks *int64 `locationName:"totalChecks" type:"integer"`

	// The number of checks waiting for data collection.
	WaitingForDataCollectionChecks *int64 `locationName:"waitingForDataCollectionChecks" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskStatistics) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskStatistics) GoString() string {
	return s.String()
}

// SetCanceledChecks sets the CanceledChecks field's value.
func (s *TaskStatistics) SetCanceledChecks(v int64) *TaskStatistics {
	s.CanceledChecks = &v
	return s
}

// SetCompliantChecks sets the CompliantChecks field's value.
func (s *TaskStatistics) SetCompliantChecks(v int64) *TaskStatistics {
	s.CompliantChecks = &v
	return s
}

// SetFailedChecks sets the FailedChecks field's value.
func (s *TaskStatistics) SetFailedChecks(v int64) *TaskStatistics {
	s.FailedChecks = &v
	return s
}

// SetInProgressChecks sets the InProgressChecks field's value.
func (s *TaskStatistics) SetInProgressChecks(v int64) *TaskStatistics {
	s.InProgressChecks = &v
	return s
}

// SetNonCompliantChecks sets the NonCompliantChecks field's value.
func (s *TaskStatistics) SetNonCompliantChecks(v int64) *TaskStatistics {
	s.NonCompliantChecks = &v
	return s
}

// SetTotalChecks sets the TotalChecks field's value.
func (s *TaskStatistics) SetTotalChecks(v int64) *TaskStatistics {
	s.TotalChecks = &v
	return s
}

// SetWaitingForDataCollectionChecks sets the WaitingForDataCollectionChecks field's value.
func (s *TaskStatistics) SetWaitingForDataCollectionChecks(v int64) *TaskStatistics {
	s.WaitingForDataCollectionChecks = &v
	return s
}

// Provides summary counts of how many tasks for findings are in a particular
// state. This information is included in the response from DescribeAuditMitigationActionsTask.
type TaskStatisticsForAuditCheck struct {
	_ struct{} `type:"structure"`

	// The number of findings to which the mitigation action task was canceled when
	// applied.
	CanceledFindingsCount *int64 `locationName:"canceledFindingsCount" type:"long"`

	// The number of findings for which at least one of the actions failed when
	// applied.
	FailedFindingsCount *int64 `locationName:"failedFindingsCount" type:"long"`

	// The number of findings skipped because of filter conditions provided in the
	// parameters to the command.
	SkippedFindingsCount *int64 `locationName:"skippedFindingsCount" type:"long"`

	// The number of findings for which all mitigation actions succeeded when applied.
	SucceededFindingsCount *int64 `locationName:"succeededFindingsCount" type:"long"`

	// The total number of findings to which a task is being applied.
	TotalFindingsCount *int64 `locationName:"totalFindingsCount" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskStatisticsForAuditCheck) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TaskStatisticsForAuditCheck) GoString() string {
	return s.String()
}

// SetCanceledFindingsCount sets the CanceledFindingsCount field's value.
func (s *TaskStatisticsForAuditCheck) SetCanceledFindingsCount(v int64) *TaskStatisticsForAuditCheck {
	s.CanceledFindingsCount = &v
	return s
}

// SetFailedFindingsCount sets the FailedFindingsCount field's value.
func (s *TaskStatisticsForAuditCheck) SetFailedFindingsCount(v int64) *TaskStatisticsForAuditCheck {
	s.FailedFindingsCount = &v
	return s
}

// SetSkippedFindingsCount sets the SkippedFindingsCount field's value.
func (s *TaskStatisticsForAuditCheck) SetSkippedFindingsCount(v int64) *TaskStatisticsForAuditCheck {
	s.SkippedFindingsCount = &v
	return s
}

// SetSucceededFindingsCount sets the SucceededFindingsCount field's value.
func (s *TaskStatisticsForAuditCheck) SetSucceededFindingsCount(v int64) *TaskStatisticsForAuditCheck {
	s.SucceededFindingsCount = &v
	return s
}

// SetTotalFindingsCount sets the TotalFindingsCount field's value.
func (s *TaskStatisticsForAuditCheck) SetTotalFindingsCount(v int64) *TaskStatisticsForAuditCheck {
	s.TotalFindingsCount = &v
	return s
}

// Performs an aggregation that will return a list of buckets. The list of buckets
// is a ranked list of the number of occurrences of an aggregation field value.
type TermsAggregation struct {
	_ struct{} `type:"structure"`

	// The number of buckets to return in the response. Default to 10.
	MaxBuckets *int64 `locationName:"maxBuckets" min:"1" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TermsAggregation) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TermsAggregation) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TermsAggregation) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TermsAggregation"}
	if s.MaxBuckets != nil && *s.MaxBuckets < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxBuckets", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMaxBuckets sets the MaxBuckets field's value.
func (s *TermsAggregation) SetMaxBuckets(v int64) *TermsAggregation {
	s.MaxBuckets = &v
	return s
}

type TestAuthorizationInput struct {
	_ struct{} `type:"structure"`

	// A list of authorization info objects. Simulating authorization will create
	// a response for each authInfo object in the list.
	//
	// AuthInfos is a required field
	AuthInfos []*AuthInfo `locationName:"authInfos" min:"1" type:"list" required:"true"`

	// The MQTT client ID.
	ClientId *string `location:"querystring" locationName:"clientId" type:"string"`

	// The Cognito identity pool ID.
	CognitoIdentityPoolId *string `locationName:"cognitoIdentityPoolId" type:"string"`

	// When testing custom authorization, the policies specified here are treated
	// as if they are attached to the principal being authorized.
	PolicyNamesToAdd []*string `locationName:"policyNamesToAdd" type:"list"`

	// When testing custom authorization, the policies specified here are treated
	// as if they are not attached to the principal being authorized.
	PolicyNamesToSkip []*string `locationName:"policyNamesToSkip" type:"list"`

	// The principal. Valid principals are CertificateArn (arn:aws:iot:region:accountId:cert/certificateId),
	// thingGroupArn (arn:aws:iot:region:accountId:thinggroup/groupName) and CognitoId
	// (region:id).
	Principal *string `locationName:"principal" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestAuthorizationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestAuthorizationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TestAuthorizationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TestAuthorizationInput"}
	if s.AuthInfos == nil {
		invalidParams.Add(request.NewErrParamRequired("AuthInfos"))
	}
	if s.AuthInfos != nil && len(s.AuthInfos) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AuthInfos", 1))
	}
	if s.AuthInfos != nil {
		for i, v := range s.AuthInfos {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "AuthInfos", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuthInfos sets the AuthInfos field's value.
func (s *TestAuthorizationInput) SetAuthInfos(v []*AuthInfo) *TestAuthorizationInput {
	s.AuthInfos = v
	return s
}

// SetClientId sets the ClientId field's value.
func (s *TestAuthorizationInput) SetClientId(v string) *TestAuthorizationInput {
	s.ClientId = &v
	return s
}

// SetCognitoIdentityPoolId sets the CognitoIdentityPoolId field's value.
func (s *TestAuthorizationInput) SetCognitoIdentityPoolId(v string) *TestAuthorizationInput {
	s.CognitoIdentityPoolId = &v
	return s
}

// SetPolicyNamesToAdd sets the PolicyNamesToAdd field's value.
func (s *TestAuthorizationInput) SetPolicyNamesToAdd(v []*string) *TestAuthorizationInput {
	s.PolicyNamesToAdd = v
	return s
}

// SetPolicyNamesToSkip sets the PolicyNamesToSkip field's value.
func (s *TestAuthorizationInput) SetPolicyNamesToSkip(v []*string) *TestAuthorizationInput {
	s.PolicyNamesToSkip = v
	return s
}

// SetPrincipal sets the Principal field's value.
func (s *TestAuthorizationInput) SetPrincipal(v string) *TestAuthorizationInput {
	s.Principal = &v
	return s
}

type TestAuthorizationOutput struct {
	_ struct{} `type:"structure"`

	// The authentication results.
	AuthResults []*AuthResult `locationName:"authResults" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestAuthorizationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestAuthorizationOutput) GoString() string {
	return s.String()
}

// SetAuthResults sets the AuthResults field's value.
func (s *TestAuthorizationOutput) SetAuthResults(v []*AuthResult) *TestAuthorizationOutput {
	s.AuthResults = v
	return s
}

type TestInvokeAuthorizerInput struct {
	_ struct{} `type:"structure"`

	// The custom authorizer name.
	//
	// AuthorizerName is a required field
	AuthorizerName *string `location:"uri" locationName:"authorizerName" min:"1" type:"string" required:"true"`

	// Specifies a test HTTP authorization request.
	HttpContext *HttpContext `locationName:"httpContext" type:"structure"`

	// Specifies a test MQTT authorization request.
	MqttContext *MqttContext `locationName:"mqttContext" type:"structure"`

	// Specifies a test TLS authorization request.
	TlsContext *TlsContext `locationName:"tlsContext" type:"structure"`

	// The token returned by your custom authentication service.
	Token *string `locationName:"token" min:"1" type:"string"`

	// The signature made with the token and your custom authentication service's
	// private key. This value must be Base-64-encoded.
	TokenSignature *string `locationName:"tokenSignature" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestInvokeAuthorizerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestInvokeAuthorizerInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TestInvokeAuthorizerInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TestInvokeAuthorizerInput"}
	if s.AuthorizerName == nil {
		invalidParams.Add(request.NewErrParamRequired("AuthorizerName"))
	}
	if s.AuthorizerName != nil && len(*s.AuthorizerName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AuthorizerName", 1))
	}
	if s.Token != nil && len(*s.Token) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Token", 1))
	}
	if s.TokenSignature != nil && len(*s.TokenSignature) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TokenSignature", 1))
	}
	if s.HttpContext != nil {
		if err := s.HttpContext.Validate(); err != nil {
			invalidParams.AddNested("HttpContext", err.(request.ErrInvalidParams))
		}
	}
	if s.MqttContext != nil {
		if err := s.MqttContext.Validate(); err != nil {
			invalidParams.AddNested("MqttContext", err.(request.ErrInvalidParams))
		}
	}
	if s.TlsContext != nil {
		if err := s.TlsContext.Validate(); err != nil {
			invalidParams.AddNested("TlsContext", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuthorizerName sets the AuthorizerName field's value.
func (s *TestInvokeAuthorizerInput) SetAuthorizerName(v string) *TestInvokeAuthorizerInput {
	s.AuthorizerName = &v
	return s
}

// SetHttpContext sets the HttpContext field's value.
func (s *TestInvokeAuthorizerInput) SetHttpContext(v *HttpContext) *TestInvokeAuthorizerInput {
	s.HttpContext = v
	return s
}

// SetMqttContext sets the MqttContext field's value.
func (s *TestInvokeAuthorizerInput) SetMqttContext(v *MqttContext) *TestInvokeAuthorizerInput {
	s.MqttContext = v
	return s
}

// SetTlsContext sets the TlsContext field's value.
func (s *TestInvokeAuthorizerInput) SetTlsContext(v *TlsContext) *TestInvokeAuthorizerInput {
	s.TlsContext = v
	return s
}

// SetToken sets the Token field's value.
func (s *TestInvokeAuthorizerInput) SetToken(v string) *TestInvokeAuthorizerInput {
	s.Token = &v
	return s
}

// SetTokenSignature sets the TokenSignature field's value.
func (s *TestInvokeAuthorizerInput) SetTokenSignature(v string) *TestInvokeAuthorizerInput {
	s.TokenSignature = &v
	return s
}

type TestInvokeAuthorizerOutput struct {
	_ struct{} `type:"structure"`

	// The number of seconds after which the connection is terminated.
	DisconnectAfterInSeconds *int64 `locationName:"disconnectAfterInSeconds" type:"integer"`

	// True if the token is authenticated, otherwise false.
	IsAuthenticated *bool `locationName:"isAuthenticated" type:"boolean"`

	// IAM policy documents.
	PolicyDocuments []*string `locationName:"policyDocuments" type:"list"`

	// The principal ID.
	PrincipalId *string `locationName:"principalId" min:"1" type:"string"`

	// The number of seconds after which the temporary credentials are refreshed.
	RefreshAfterInSeconds *int64 `locationName:"refreshAfterInSeconds" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestInvokeAuthorizerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestInvokeAuthorizerOutput) GoString() string {
	return s.String()
}

// SetDisconnectAfterInSeconds sets the DisconnectAfterInSeconds field's value.
func (s *TestInvokeAuthorizerOutput) SetDisconnectAfterInSeconds(v int64) *TestInvokeAuthorizerOutput {
	s.DisconnectAfterInSeconds = &v
	return s
}

// SetIsAuthenticated sets the IsAuthenticated field's value.
func (s *TestInvokeAuthorizerOutput) SetIsAuthenticated(v bool) *TestInvokeAuthorizerOutput {
	s.IsAuthenticated = &v
	return s
}

// SetPolicyDocuments sets the PolicyDocuments field's value.
func (s *TestInvokeAuthorizerOutput) SetPolicyDocuments(v []*string) *TestInvokeAuthorizerOutput {
	s.PolicyDocuments = v
	return s
}

// SetPrincipalId sets the PrincipalId field's value.
func (s *TestInvokeAuthorizerOutput) SetPrincipalId(v string) *TestInvokeAuthorizerOutput {
	s.PrincipalId = &v
	return s
}

// SetRefreshAfterInSeconds sets the RefreshAfterInSeconds field's value.
func (s *TestInvokeAuthorizerOutput) SetRefreshAfterInSeconds(v int64) *TestInvokeAuthorizerOutput {
	s.RefreshAfterInSeconds = &v
	return s
}

// The properties of the thing, including thing name, thing type name, and a
// list of thing attributes.
type ThingAttribute struct {
	_ struct{} `type:"structure"`

	// A list of thing attributes which are name-value pairs.
	Attributes map[string]*string `locationName:"attributes" type:"map"`

	// The thing ARN.
	ThingArn *string `locationName:"thingArn" type:"string"`

	// The name of the thing.
	ThingName *string `locationName:"thingName" min:"1" type:"string"`

	// The name of the thing type, if the thing has been associated with a type.
	ThingTypeName *string `locationName:"thingTypeName" min:"1" type:"string"`

	// The version of the thing record in the registry.
	Version *int64 `locationName:"version" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingAttribute) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingAttribute) GoString() string {
	return s.String()
}

// SetAttributes sets the Attributes field's value.
func (s *ThingAttribute) SetAttributes(v map[string]*string) *ThingAttribute {
	s.Attributes = v
	return s
}

// SetThingArn sets the ThingArn field's value.
func (s *ThingAttribute) SetThingArn(v string) *ThingAttribute {
	s.ThingArn = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *ThingAttribute) SetThingName(v string) *ThingAttribute {
	s.ThingName = &v
	return s
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *ThingAttribute) SetThingTypeName(v string) *ThingAttribute {
	s.ThingTypeName = &v
	return s
}

// SetVersion sets the Version field's value.
func (s *ThingAttribute) SetVersion(v int64) *ThingAttribute {
	s.Version = &v
	return s
}

// The connectivity status of the thing.
type ThingConnectivity struct {
	_ struct{} `type:"structure"`

	// True if the thing is connected to the Amazon Web Services IoT Core service;
	// false if it is not connected.
	Connected *bool `locationName:"connected" type:"boolean"`

	// The reason why the client is disconnected. If the thing has been disconnected
	// for approximately an hour, the disconnectReason value might be missing.
	DisconnectReason *string `locationName:"disconnectReason" type:"string"`

	// The epoch time (in milliseconds) when the thing last connected or disconnected.
	// If the thing has been disconnected for approximately an hour, the time value
	// might be missing.
	Timestamp *int64 `locationName:"timestamp" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingConnectivity) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingConnectivity) GoString() string {
	return s.String()
}

// SetConnected sets the Connected field's value.
func (s *ThingConnectivity) SetConnected(v bool) *ThingConnectivity {
	s.Connected = &v
	return s
}

// SetDisconnectReason sets the DisconnectReason field's value.
func (s *ThingConnectivity) SetDisconnectReason(v string) *ThingConnectivity {
	s.DisconnectReason = &v
	return s
}

// SetTimestamp sets the Timestamp field's value.
func (s *ThingConnectivity) SetTimestamp(v int64) *ThingConnectivity {
	s.Timestamp = &v
	return s
}

// The thing search index document.
type ThingDocument struct {
	_ struct{} `type:"structure"`

	// The attributes.
	Attributes map[string]*string `locationName:"attributes" type:"map"`

	// Indicates whether the thing is connected to the Amazon Web Services IoT Core
	// service.
	Connectivity *ThingConnectivity `locationName:"connectivity" type:"structure"`

	// Contains Device Defender data.
	//
	// For more information about Device Defender, see Device Defender (https://docs.aws.amazon.com/iot/latest/developerguide/device-defender.html).
	DeviceDefender *string `locationName:"deviceDefender" type:"string"`

	// The unnamed shadow and named shadow.
	//
	// For more information about shadows, see IoT Device Shadow service. (https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html)
	Shadow *string `locationName:"shadow" type:"string"`

	// Thing group names.
	ThingGroupNames []*string `locationName:"thingGroupNames" type:"list"`

	// The thing ID.
	ThingId *string `locationName:"thingId" type:"string"`

	// The thing name.
	ThingName *string `locationName:"thingName" min:"1" type:"string"`

	// The thing type name.
	ThingTypeName *string `locationName:"thingTypeName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingDocument) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingDocument) GoString() string {
	return s.String()
}

// SetAttributes sets the Attributes field's value.
func (s *ThingDocument) SetAttributes(v map[string]*string) *ThingDocument {
	s.Attributes = v
	return s
}

// SetConnectivity sets the Connectivity field's value.
func (s *ThingDocument) SetConnectivity(v *ThingConnectivity) *ThingDocument {
	s.Connectivity = v
	return s
}

// SetDeviceDefender sets the DeviceDefender field's value.
func (s *ThingDocument) SetDeviceDefender(v string) *ThingDocument {
	s.DeviceDefender = &v
	return s
}

// SetShadow sets the Shadow field's value.
func (s *ThingDocument) SetShadow(v string) *ThingDocument {
	s.Shadow = &v
	return s
}

// SetThingGroupNames sets the ThingGroupNames field's value.
func (s *ThingDocument) SetThingGroupNames(v []*string) *ThingDocument {
	s.ThingGroupNames = v
	return s
}

// SetThingId sets the ThingId field's value.
func (s *ThingDocument) SetThingId(v string) *ThingDocument {
	s.ThingId = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *ThingDocument) SetThingName(v string) *ThingDocument {
	s.ThingName = &v
	return s
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *ThingDocument) SetThingTypeName(v string) *ThingDocument {
	s.ThingTypeName = &v
	return s
}

// The thing group search index document.
type ThingGroupDocument struct {
	_ struct{} `type:"structure"`

	// The thing group attributes.
	Attributes map[string]*string `locationName:"attributes" type:"map"`

	// Parent group names.
	ParentGroupNames []*string `locationName:"parentGroupNames" type:"list"`

	// The thing group description.
	ThingGroupDescription *string `locationName:"thingGroupDescription" type:"string"`

	// The thing group ID.
	ThingGroupId *string `locationName:"thingGroupId" min:"1" type:"string"`

	// The thing group name.
	ThingGroupName *string `locationName:"thingGroupName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingGroupDocument) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingGroupDocument) GoString() string {
	return s.String()
}

// SetAttributes sets the Attributes field's value.
func (s *ThingGroupDocument) SetAttributes(v map[string]*string) *ThingGroupDocument {
	s.Attributes = v
	return s
}

// SetParentGroupNames sets the ParentGroupNames field's value.
func (s *ThingGroupDocument) SetParentGroupNames(v []*string) *ThingGroupDocument {
	s.ParentGroupNames = v
	return s
}

// SetThingGroupDescription sets the ThingGroupDescription field's value.
func (s *ThingGroupDocument) SetThingGroupDescription(v string) *ThingGroupDocument {
	s.ThingGroupDescription = &v
	return s
}

// SetThingGroupId sets the ThingGroupId field's value.
func (s *ThingGroupDocument) SetThingGroupId(v string) *ThingGroupDocument {
	s.ThingGroupId = &v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *ThingGroupDocument) SetThingGroupName(v string) *ThingGroupDocument {
	s.ThingGroupName = &v
	return s
}

// Thing group indexing configuration.
type ThingGroupIndexingConfiguration struct {
	_ struct{} `type:"structure"`

	// A list of thing group fields to index. This list cannot contain any managed
	// fields. Use the GetIndexingConfiguration API to get a list of managed fields.
	//
	// Contains custom field names and their data type.
	CustomFields []*Field `locationName:"customFields" type:"list"`

	// Contains fields that are indexed and whose types are already known by the
	// Fleet Indexing service. This is an optional field. For more information,
	// see Managed fields (https://docs.aws.amazon.com/iot/latest/developerguide/managing-fleet-index.html#managed-field)
	// in the Amazon Web Services IoT Core Developer Guide.
	//
	// You can't modify managed fields by updating fleet indexing configuration.
	ManagedFields []*Field `locationName:"managedFields" type:"list"`

	// Thing group indexing mode.
	//
	// ThingGroupIndexingMode is a required field
	ThingGroupIndexingMode *string `locationName:"thingGroupIndexingMode" type:"string" required:"true" enum:"ThingGroupIndexingMode"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingGroupIndexingConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingGroupIndexingConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ThingGroupIndexingConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ThingGroupIndexingConfiguration"}
	if s.ThingGroupIndexingMode == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingGroupIndexingMode"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCustomFields sets the CustomFields field's value.
func (s *ThingGroupIndexingConfiguration) SetCustomFields(v []*Field) *ThingGroupIndexingConfiguration {
	s.CustomFields = v
	return s
}

// SetManagedFields sets the ManagedFields field's value.
func (s *ThingGroupIndexingConfiguration) SetManagedFields(v []*Field) *ThingGroupIndexingConfiguration {
	s.ManagedFields = v
	return s
}

// SetThingGroupIndexingMode sets the ThingGroupIndexingMode field's value.
func (s *ThingGroupIndexingConfiguration) SetThingGroupIndexingMode(v string) *ThingGroupIndexingConfiguration {
	s.ThingGroupIndexingMode = &v
	return s
}

// Thing group metadata.
type ThingGroupMetadata struct {
	_ struct{} `type:"structure"`

	// The UNIX timestamp of when the thing group was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The parent thing group name.
	ParentGroupName *string `locationName:"parentGroupName" min:"1" type:"string"`

	// The root parent thing group.
	RootToParentThingGroups []*GroupNameAndArn `locationName:"rootToParentThingGroups" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingGroupMetadata) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingGroupMetadata) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *ThingGroupMetadata) SetCreationDate(v time.Time) *ThingGroupMetadata {
	s.CreationDate = &v
	return s
}

// SetParentGroupName sets the ParentGroupName field's value.
func (s *ThingGroupMetadata) SetParentGroupName(v string) *ThingGroupMetadata {
	s.ParentGroupName = &v
	return s
}

// SetRootToParentThingGroups sets the RootToParentThingGroups field's value.
func (s *ThingGroupMetadata) SetRootToParentThingGroups(v []*GroupNameAndArn) *ThingGroupMetadata {
	s.RootToParentThingGroups = v
	return s
}

// Thing group properties.
type ThingGroupProperties struct {
	_ struct{} `type:"structure"`

	// The thing group attributes in JSON format.
	AttributePayload *AttributePayload `locationName:"attributePayload" type:"structure"`

	// The thing group description.
	ThingGroupDescription *string `locationName:"thingGroupDescription" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingGroupProperties) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingGroupProperties) GoString() string {
	return s.String()
}

// SetAttributePayload sets the AttributePayload field's value.
func (s *ThingGroupProperties) SetAttributePayload(v *AttributePayload) *ThingGroupProperties {
	s.AttributePayload = v
	return s
}

// SetThingGroupDescription sets the ThingGroupDescription field's value.
func (s *ThingGroupProperties) SetThingGroupDescription(v string) *ThingGroupProperties {
	s.ThingGroupDescription = &v
	return s
}

// The thing indexing configuration. For more information, see Managing Thing
// Indexing (https://docs.aws.amazon.com/iot/latest/developerguide/managing-index.html).
type ThingIndexingConfiguration struct {
	_ struct{} `type:"structure"`

	// Contains custom field names and their data type.
	CustomFields []*Field `locationName:"customFields" type:"list"`

	// Device Defender indexing mode. Valid values are:
	//
	//    * VIOLATIONS – Your thing index contains Device Defender violations.
	//    To enable Device Defender indexing, deviceDefenderIndexingMode must not
	//    be set to OFF.
	//
	//    * OFF - Device Defender indexing is disabled.
	//
	// For more information about Device Defender violations, see Device Defender
	// Detect. (https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-detect.html)
	DeviceDefenderIndexingMode *string `locationName:"deviceDefenderIndexingMode" type:"string" enum:"DeviceDefenderIndexingMode"`

	// Provides additional selections for named shadows and geolocation data.
	//
	// To add named shadows to your fleet indexing configuration, set namedShadowIndexingMode
	// to be ON and specify your shadow names in namedShadowNames filter.
	//
	// To add geolocation data to your fleet indexing configuration:
	//
	//    * If you store geolocation data in a class/unnamed shadow, set thingIndexingMode
	//    to be REGISTRY_AND_SHADOW and specify your geolocation data in geoLocations
	//    filter.
	//
	//    * If you store geolocation data in a named shadow, set namedShadowIndexingMode
	//    to be ON, add the shadow name in namedShadowNames filter, and specify
	//    your geolocation data in geoLocations filter. For more information, see
	//    Managing fleet indexing (https://docs.aws.amazon.com/iot/latest/developerguide/managing-fleet-index.html).
	Filter *IndexingFilter `locationName:"filter" type:"structure"`

	// Contains fields that are indexed and whose types are already known by the
	// Fleet Indexing service. This is an optional field. For more information,
	// see Managed fields (https://docs.aws.amazon.com/iot/latest/developerguide/managing-fleet-index.html#managed-field)
	// in the Amazon Web Services IoT Core Developer Guide.
	//
	// You can't modify managed fields by updating fleet indexing configuration.
	ManagedFields []*Field `locationName:"managedFields" type:"list"`

	// Named shadow indexing mode. Valid values are:
	//
	//    * ON – Your thing index contains named shadow. To enable thing named
	//    shadow indexing, namedShadowIndexingMode must not be set to OFF.
	//
	//    * OFF - Named shadow indexing is disabled.
	//
	// For more information about Shadows, see IoT Device Shadow service. (https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html)
	NamedShadowIndexingMode *string `locationName:"namedShadowIndexingMode" type:"string" enum:"NamedShadowIndexingMode"`

	// Thing connectivity indexing mode. Valid values are:
	//
	//    * STATUS – Your thing index contains connectivity status. To enable
	//    thing connectivity indexing, thingIndexMode must not be set to OFF.
	//
	//    * OFF - Thing connectivity status indexing is disabled.
	ThingConnectivityIndexingMode *string `locationName:"thingConnectivityIndexingMode" type:"string" enum:"ThingConnectivityIndexingMode"`

	// Thing indexing mode. Valid values are:
	//
	//    * REGISTRY – Your thing index contains registry data only.
	//
	//    * REGISTRY_AND_SHADOW - Your thing index contains registry and shadow
	//    data.
	//
	//    * OFF - Thing indexing is disabled.
	//
	// ThingIndexingMode is a required field
	ThingIndexingMode *string `locationName:"thingIndexingMode" type:"string" required:"true" enum:"ThingIndexingMode"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingIndexingConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingIndexingConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ThingIndexingConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ThingIndexingConfiguration"}
	if s.ThingIndexingMode == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingIndexingMode"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCustomFields sets the CustomFields field's value.
func (s *ThingIndexingConfiguration) SetCustomFields(v []*Field) *ThingIndexingConfiguration {
	s.CustomFields = v
	return s
}

// SetDeviceDefenderIndexingMode sets the DeviceDefenderIndexingMode field's value.
func (s *ThingIndexingConfiguration) SetDeviceDefenderIndexingMode(v string) *ThingIndexingConfiguration {
	s.DeviceDefenderIndexingMode = &v
	return s
}

// SetFilter sets the Filter field's value.
func (s *ThingIndexingConfiguration) SetFilter(v *IndexingFilter) *ThingIndexingConfiguration {
	s.Filter = v
	return s
}

// SetManagedFields sets the ManagedFields field's value.
func (s *ThingIndexingConfiguration) SetManagedFields(v []*Field) *ThingIndexingConfiguration {
	s.ManagedFields = v
	return s
}

// SetNamedShadowIndexingMode sets the NamedShadowIndexingMode field's value.
func (s *ThingIndexingConfiguration) SetNamedShadowIndexingMode(v string) *ThingIndexingConfiguration {
	s.NamedShadowIndexingMode = &v
	return s
}

// SetThingConnectivityIndexingMode sets the ThingConnectivityIndexingMode field's value.
func (s *ThingIndexingConfiguration) SetThingConnectivityIndexingMode(v string) *ThingIndexingConfiguration {
	s.ThingConnectivityIndexingMode = &v
	return s
}

// SetThingIndexingMode sets the ThingIndexingMode field's value.
func (s *ThingIndexingConfiguration) SetThingIndexingMode(v string) *ThingIndexingConfiguration {
	s.ThingIndexingMode = &v
	return s
}

// The definition of the thing type, including thing type name and description.
type ThingTypeDefinition struct {
	_ struct{} `type:"structure"`

	// The thing type ARN.
	ThingTypeArn *string `locationName:"thingTypeArn" type:"string"`

	// The ThingTypeMetadata contains additional information about the thing type
	// including: creation date and time, a value indicating whether the thing type
	// is deprecated, and a date and time when it was deprecated.
	ThingTypeMetadata *ThingTypeMetadata `locationName:"thingTypeMetadata" type:"structure"`

	// The name of the thing type.
	ThingTypeName *string `locationName:"thingTypeName" min:"1" type:"string"`

	// The ThingTypeProperties for the thing type.
	ThingTypeProperties *ThingTypeProperties `locationName:"thingTypeProperties" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingTypeDefinition) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingTypeDefinition) GoString() string {
	return s.String()
}

// SetThingTypeArn sets the ThingTypeArn field's value.
func (s *ThingTypeDefinition) SetThingTypeArn(v string) *ThingTypeDefinition {
	s.ThingTypeArn = &v
	return s
}

// SetThingTypeMetadata sets the ThingTypeMetadata field's value.
func (s *ThingTypeDefinition) SetThingTypeMetadata(v *ThingTypeMetadata) *ThingTypeDefinition {
	s.ThingTypeMetadata = v
	return s
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *ThingTypeDefinition) SetThingTypeName(v string) *ThingTypeDefinition {
	s.ThingTypeName = &v
	return s
}

// SetThingTypeProperties sets the ThingTypeProperties field's value.
func (s *ThingTypeDefinition) SetThingTypeProperties(v *ThingTypeProperties) *ThingTypeDefinition {
	s.ThingTypeProperties = v
	return s
}

// The ThingTypeMetadata contains additional information about the thing type
// including: creation date and time, a value indicating whether the thing type
// is deprecated, and a date and time when time was deprecated.
type ThingTypeMetadata struct {
	_ struct{} `type:"structure"`

	// The date and time when the thing type was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// Whether the thing type is deprecated. If true, no new things could be associated
	// with this type.
	Deprecated *bool `locationName:"deprecated" type:"boolean"`

	// The date and time when the thing type was deprecated.
	DeprecationDate *time.Time `locationName:"deprecationDate" type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingTypeMetadata) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingTypeMetadata) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *ThingTypeMetadata) SetCreationDate(v time.Time) *ThingTypeMetadata {
	s.CreationDate = &v
	return s
}

// SetDeprecated sets the Deprecated field's value.
func (s *ThingTypeMetadata) SetDeprecated(v bool) *ThingTypeMetadata {
	s.Deprecated = &v
	return s
}

// SetDeprecationDate sets the DeprecationDate field's value.
func (s *ThingTypeMetadata) SetDeprecationDate(v time.Time) *ThingTypeMetadata {
	s.DeprecationDate = &v
	return s
}

// The ThingTypeProperties contains information about the thing type including:
// a thing type description, and a list of searchable thing attribute names.
type ThingTypeProperties struct {
	_ struct{} `type:"structure"`

	// A list of searchable thing attribute names.
	SearchableAttributes []*string `locationName:"searchableAttributes" type:"list"`

	// The description of the thing type.
	ThingTypeDescription *string `locationName:"thingTypeDescription" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingTypeProperties) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThingTypeProperties) GoString() string {
	return s.String()
}

// SetSearchableAttributes sets the SearchableAttributes field's value.
func (s *ThingTypeProperties) SetSearchableAttributes(v []*string) *ThingTypeProperties {
	s.SearchableAttributes = v
	return s
}

// SetThingTypeDescription sets the ThingTypeDescription field's value.
func (s *ThingTypeProperties) SetThingTypeDescription(v string) *ThingTypeProperties {
	s.ThingTypeDescription = &v
	return s
}

// The rate exceeds the limit.
type ThrottlingException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThrottlingException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThrottlingException) GoString() string {
	return s.String()
}

func newErrorThrottlingException(v protocol.ResponseMetadata) error {
	return &ThrottlingException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ThrottlingException) Code() string {
	return "ThrottlingException"
}

// Message returns the exception's message.
func (s *ThrottlingException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ThrottlingException) OrigErr() error {
	return nil
}

func (s *ThrottlingException) 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 *ThrottlingException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ThrottlingException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Specifies the amount of time each device has to finish its execution of the
// job. A timer is started when the job execution status is set to IN_PROGRESS.
// If the job execution status is not set to another terminal state before the
// timer expires, it will be automatically set to TIMED_OUT.
type TimeoutConfig struct {
	_ struct{} `type:"structure"`

	// Specifies the amount of time, in minutes, this device has to finish execution
	// of this job. The timeout interval can be anywhere between 1 minute and 7
	// days (1 to 10080 minutes). The in progress timer can't be updated and will
	// apply to all job executions for the job. Whenever a job execution remains
	// in the IN_PROGRESS status for longer than this interval, the job execution
	// will fail and switch to the terminal TIMED_OUT status.
	InProgressTimeoutInMinutes *int64 `locationName:"inProgressTimeoutInMinutes" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TimeoutConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TimeoutConfig) GoString() string {
	return s.String()
}

// SetInProgressTimeoutInMinutes sets the InProgressTimeoutInMinutes field's value.
func (s *TimeoutConfig) SetInProgressTimeoutInMinutes(v int64) *TimeoutConfig {
	s.InProgressTimeoutInMinutes = &v
	return s
}

// The Timestream rule action writes attributes (measures) from an MQTT message
// into an Amazon Timestream table. For more information, see the Timestream
// (https://docs.aws.amazon.com/iot/latest/developerguide/timestream-rule-action.html)
// topic rule action documentation.
type TimestreamAction struct {
	_ struct{} `type:"structure"`

	// The name of an Amazon Timestream database.
	//
	// DatabaseName is a required field
	DatabaseName *string `locationName:"databaseName" type:"string" required:"true"`

	// Metadata attributes of the time series that are written in each measure record.
	//
	// Dimensions is a required field
	Dimensions []*TimestreamDimension `locationName:"dimensions" min:"1" type:"list" required:"true"`

	// The ARN of the role that grants permission to write to the Amazon Timestream
	// database table.
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// The name of the database table into which to write the measure records.
	//
	// TableName is a required field
	TableName *string `locationName:"tableName" type:"string" required:"true"`

	// Specifies an application-defined value to replace the default value assigned
	// to the Timestream record's timestamp in the time column.
	//
	// You can use this property to specify the value and the precision of the Timestream
	// record's timestamp. You can specify a value from the message payload or a
	// value computed by a substitution template.
	//
	// If omitted, the topic rule action assigns the timestamp, in milliseconds,
	// at the time it processed the rule.
	Timestamp *TimestreamTimestamp `locationName:"timestamp" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TimestreamAction) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TimestreamAction) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TimestreamAction) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TimestreamAction"}
	if s.DatabaseName == nil {
		invalidParams.Add(request.NewErrParamRequired("DatabaseName"))
	}
	if s.Dimensions == nil {
		invalidParams.Add(request.NewErrParamRequired("Dimensions"))
	}
	if s.Dimensions != nil && len(s.Dimensions) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Dimensions", 1))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.TableName == nil {
		invalidParams.Add(request.NewErrParamRequired("TableName"))
	}
	if s.Dimensions != nil {
		for i, v := range s.Dimensions {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Dimensions", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Timestamp != nil {
		if err := s.Timestamp.Validate(); err != nil {
			invalidParams.AddNested("Timestamp", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDatabaseName sets the DatabaseName field's value.
func (s *TimestreamAction) SetDatabaseName(v string) *TimestreamAction {
	s.DatabaseName = &v
	return s
}

// SetDimensions sets the Dimensions field's value.
func (s *TimestreamAction) SetDimensions(v []*TimestreamDimension) *TimestreamAction {
	s.Dimensions = v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *TimestreamAction) SetRoleArn(v string) *TimestreamAction {
	s.RoleArn = &v
	return s
}

// SetTableName sets the TableName field's value.
func (s *TimestreamAction) SetTableName(v string) *TimestreamAction {
	s.TableName = &v
	return s
}

// SetTimestamp sets the Timestamp field's value.
func (s *TimestreamAction) SetTimestamp(v *TimestreamTimestamp) *TimestreamAction {
	s.Timestamp = v
	return s
}

// Metadata attributes of the time series that are written in each measure record.
type TimestreamDimension struct {
	_ struct{} `type:"structure"`

	// The metadata dimension name. This is the name of the column in the Amazon
	// Timestream database table record.
	//
	// Dimensions cannot be named: measure_name, measure_value, or time. These names
	// are reserved. Dimension names cannot start with ts_ or measure_value and
	// they cannot contain the colon (:) character.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`

	// The value to write in this column of the database record.
	//
	// Value is a required field
	Value *string `locationName:"value" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TimestreamDimension) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TimestreamDimension) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TimestreamDimension) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TimestreamDimension"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetName sets the Name field's value.
func (s *TimestreamDimension) SetName(v string) *TimestreamDimension {
	s.Name = &v
	return s
}

// SetValue sets the Value field's value.
func (s *TimestreamDimension) SetValue(v string) *TimestreamDimension {
	s.Value = &v
	return s
}

// Describes how to interpret an application-defined timestamp value from an
// MQTT message payload and the precision of that value.
type TimestreamTimestamp struct {
	_ struct{} `type:"structure"`

	// The precision of the timestamp value that results from the expression described
	// in value.
	//
	// Valid values: SECONDS | MILLISECONDS | MICROSECONDS | NANOSECONDS. The default
	// is MILLISECONDS.
	//
	// Unit is a required field
	Unit *string `locationName:"unit" type:"string" required:"true"`

	// An expression that returns a long epoch time value.
	//
	// Value is a required field
	Value *string `locationName:"value" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TimestreamTimestamp) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TimestreamTimestamp) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TimestreamTimestamp) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TimestreamTimestamp"}
	if s.Unit == nil {
		invalidParams.Add(request.NewErrParamRequired("Unit"))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetUnit sets the Unit field's value.
func (s *TimestreamTimestamp) SetUnit(v string) *TimestreamTimestamp {
	s.Unit = &v
	return s
}

// SetValue sets the Value field's value.
func (s *TimestreamTimestamp) SetValue(v string) *TimestreamTimestamp {
	s.Value = &v
	return s
}

// An object that specifies the TLS configuration for a domain.
type TlsConfig struct {
	_ struct{} `type:"structure"`

	// The security policy for a domain configuration. For more information, see
	// Security policies (https://docs.aws.amazon.com/iot/latest/developerguide/transport-security.html#tls-policy-table)
	// in the Amazon Web Services IoT Core developer guide.
	SecurityPolicy *string `locationName:"securityPolicy" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TlsConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TlsConfig) GoString() string {
	return s.String()
}

// SetSecurityPolicy sets the SecurityPolicy field's value.
func (s *TlsConfig) SetSecurityPolicy(v string) *TlsConfig {
	s.SecurityPolicy = &v
	return s
}

// Specifies the TLS context to use for the test authorizer request.
type TlsContext struct {
	_ struct{} `type:"structure"`

	// The value of the serverName key in a TLS authorization request.
	ServerName *string `locationName:"serverName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TlsContext) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TlsContext) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TlsContext) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TlsContext"}
	if s.ServerName != nil && len(*s.ServerName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ServerName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetServerName sets the ServerName field's value.
func (s *TlsContext) SetServerName(v string) *TlsContext {
	s.ServerName = &v
	return s
}

// Describes a rule.
type TopicRule struct {
	_ struct{} `type:"structure"`

	// The actions associated with the rule.
	Actions []*Action `locationName:"actions" type:"list"`

	// The version of the SQL rules engine to use when evaluating the rule.
	AwsIotSqlVersion *string `locationName:"awsIotSqlVersion" type:"string"`

	// The date and time the rule was created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// The description of the rule.
	Description *string `locationName:"description" type:"string"`

	// The action to perform when an error occurs.
	ErrorAction *Action `locationName:"errorAction" type:"structure"`

	// Specifies whether the rule is disabled.
	RuleDisabled *bool `locationName:"ruleDisabled" type:"boolean"`

	// The name of the rule.
	RuleName *string `locationName:"ruleName" min:"1" type:"string"`

	// The SQL statement used to query the topic. When using a SQL query with multiple
	// lines, be sure to escape the newline characters.
	Sql *string `locationName:"sql" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TopicRule) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TopicRule) GoString() string {
	return s.String()
}

// SetActions sets the Actions field's value.
func (s *TopicRule) SetActions(v []*Action) *TopicRule {
	s.Actions = v
	return s
}

// SetAwsIotSqlVersion sets the AwsIotSqlVersion field's value.
func (s *TopicRule) SetAwsIotSqlVersion(v string) *TopicRule {
	s.AwsIotSqlVersion = &v
	return s
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *TopicRule) SetCreatedAt(v time.Time) *TopicRule {
	s.CreatedAt = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *TopicRule) SetDescription(v string) *TopicRule {
	s.Description = &v
	return s
}

// SetErrorAction sets the ErrorAction field's value.
func (s *TopicRule) SetErrorAction(v *Action) *TopicRule {
	s.ErrorAction = v
	return s
}

// SetRuleDisabled sets the RuleDisabled field's value.
func (s *TopicRule) SetRuleDisabled(v bool) *TopicRule {
	s.RuleDisabled = &v
	return s
}

// SetRuleName sets the RuleName field's value.
func (s *TopicRule) SetRuleName(v string) *TopicRule {
	s.RuleName = &v
	return s
}

// SetSql sets the Sql field's value.
func (s *TopicRule) SetSql(v string) *TopicRule {
	s.Sql = &v
	return s
}

// A topic rule destination.
type TopicRuleDestination struct {
	_ struct{} `type:"structure"`

	// The topic rule destination URL.
	Arn *string `locationName:"arn" type:"string"`

	// The date and time when the topic rule destination was created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// Properties of the HTTP URL.
	HttpUrlProperties *HttpUrlDestinationProperties `locationName:"httpUrlProperties" type:"structure"`

	// The date and time when the topic rule destination was last updated.
	LastUpdatedAt *time.Time `locationName:"lastUpdatedAt" type:"timestamp"`

	// The status of the topic rule destination. Valid values are:
	//
	// IN_PROGRESS
	//
	// A topic rule destination was created but has not been confirmed. You can
	// set status to IN_PROGRESS by calling UpdateTopicRuleDestination. Calling
	// UpdateTopicRuleDestination causes a new confirmation challenge to be sent
	// to your confirmation endpoint.
	//
	// ENABLED
	//
	// Confirmation was completed, and traffic to this destination is allowed. You
	// can set status to DISABLED by calling UpdateTopicRuleDestination.
	//
	// DISABLED
	//
	// Confirmation was completed, and traffic to this destination is not allowed.
	// You can set status to ENABLED by calling UpdateTopicRuleDestination.
	//
	// ERROR
	//
	// Confirmation could not be completed, for example if the confirmation timed
	// out. You can call GetTopicRuleDestination for details about the error. You
	// can set status to IN_PROGRESS by calling UpdateTopicRuleDestination. Calling
	// UpdateTopicRuleDestination causes a new confirmation challenge to be sent
	// to your confirmation endpoint.
	Status *string `locationName:"status" type:"string" enum:"TopicRuleDestinationStatus"`

	// Additional details or reason why the topic rule destination is in the current
	// status.
	StatusReason *string `locationName:"statusReason" type:"string"`

	// Properties of the virtual private cloud (VPC) connection.
	VpcProperties *VpcDestinationProperties `locationName:"vpcProperties" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TopicRuleDestination) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TopicRuleDestination) GoString() string {
	return s.String()
}

// SetArn sets the Arn field's value.
func (s *TopicRuleDestination) SetArn(v string) *TopicRuleDestination {
	s.Arn = &v
	return s
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *TopicRuleDestination) SetCreatedAt(v time.Time) *TopicRuleDestination {
	s.CreatedAt = &v
	return s
}

// SetHttpUrlProperties sets the HttpUrlProperties field's value.
func (s *TopicRuleDestination) SetHttpUrlProperties(v *HttpUrlDestinationProperties) *TopicRuleDestination {
	s.HttpUrlProperties = v
	return s
}

// SetLastUpdatedAt sets the LastUpdatedAt field's value.
func (s *TopicRuleDestination) SetLastUpdatedAt(v time.Time) *TopicRuleDestination {
	s.LastUpdatedAt = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *TopicRuleDestination) SetStatus(v string) *TopicRuleDestination {
	s.Status = &v
	return s
}

// SetStatusReason sets the StatusReason field's value.
func (s *TopicRuleDestination) SetStatusReason(v string) *TopicRuleDestination {
	s.StatusReason = &v
	return s
}

// SetVpcProperties sets the VpcProperties field's value.
func (s *TopicRuleDestination) SetVpcProperties(v *VpcDestinationProperties) *TopicRuleDestination {
	s.VpcProperties = v
	return s
}

// Configuration of the topic rule destination.
type TopicRuleDestinationConfiguration struct {
	_ struct{} `type:"structure"`

	// Configuration of the HTTP URL.
	HttpUrlConfiguration *HttpUrlDestinationConfiguration `locationName:"httpUrlConfiguration" type:"structure"`

	// Configuration of the virtual private cloud (VPC) connection.
	VpcConfiguration *VpcDestinationConfiguration `locationName:"vpcConfiguration" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TopicRuleDestinationConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TopicRuleDestinationConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TopicRuleDestinationConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TopicRuleDestinationConfiguration"}
	if s.HttpUrlConfiguration != nil {
		if err := s.HttpUrlConfiguration.Validate(); err != nil {
			invalidParams.AddNested("HttpUrlConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.VpcConfiguration != nil {
		if err := s.VpcConfiguration.Validate(); err != nil {
			invalidParams.AddNested("VpcConfiguration", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetHttpUrlConfiguration sets the HttpUrlConfiguration field's value.
func (s *TopicRuleDestinationConfiguration) SetHttpUrlConfiguration(v *HttpUrlDestinationConfiguration) *TopicRuleDestinationConfiguration {
	s.HttpUrlConfiguration = v
	return s
}

// SetVpcConfiguration sets the VpcConfiguration field's value.
func (s *TopicRuleDestinationConfiguration) SetVpcConfiguration(v *VpcDestinationConfiguration) *TopicRuleDestinationConfiguration {
	s.VpcConfiguration = v
	return s
}

// Information about the topic rule destination.
type TopicRuleDestinationSummary struct {
	_ struct{} `type:"structure"`

	// The topic rule destination ARN.
	Arn *string `locationName:"arn" type:"string"`

	// The date and time when the topic rule destination was created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// Information about the HTTP URL.
	HttpUrlSummary *HttpUrlDestinationSummary `locationName:"httpUrlSummary" type:"structure"`

	// The date and time when the topic rule destination was last updated.
	LastUpdatedAt *time.Time `locationName:"lastUpdatedAt" type:"timestamp"`

	// The status of the topic rule destination. Valid values are:
	//
	// IN_PROGRESS
	//
	// A topic rule destination was created but has not been confirmed. You can
	// set status to IN_PROGRESS by calling UpdateTopicRuleDestination. Calling
	// UpdateTopicRuleDestination causes a new confirmation challenge to be sent
	// to your confirmation endpoint.
	//
	// ENABLED
	//
	// Confirmation was completed, and traffic to this destination is allowed. You
	// can set status to DISABLED by calling UpdateTopicRuleDestination.
	//
	// DISABLED
	//
	// Confirmation was completed, and traffic to this destination is not allowed.
	// You can set status to ENABLED by calling UpdateTopicRuleDestination.
	//
	// ERROR
	//
	// Confirmation could not be completed, for example if the confirmation timed
	// out. You can call GetTopicRuleDestination for details about the error. You
	// can set status to IN_PROGRESS by calling UpdateTopicRuleDestination. Calling
	// UpdateTopicRuleDestination causes a new confirmation challenge to be sent
	// to your confirmation endpoint.
	Status *string `locationName:"status" type:"string" enum:"TopicRuleDestinationStatus"`

	// The reason the topic rule destination is in the current status.
	StatusReason *string `locationName:"statusReason" type:"string"`

	// Information about the virtual private cloud (VPC) connection.
	VpcDestinationSummary *VpcDestinationSummary `locationName:"vpcDestinationSummary" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TopicRuleDestinationSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TopicRuleDestinationSummary) GoString() string {
	return s.String()
}

// SetArn sets the Arn field's value.
func (s *TopicRuleDestinationSummary) SetArn(v string) *TopicRuleDestinationSummary {
	s.Arn = &v
	return s
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *TopicRuleDestinationSummary) SetCreatedAt(v time.Time) *TopicRuleDestinationSummary {
	s.CreatedAt = &v
	return s
}

// SetHttpUrlSummary sets the HttpUrlSummary field's value.
func (s *TopicRuleDestinationSummary) SetHttpUrlSummary(v *HttpUrlDestinationSummary) *TopicRuleDestinationSummary {
	s.HttpUrlSummary = v
	return s
}

// SetLastUpdatedAt sets the LastUpdatedAt field's value.
func (s *TopicRuleDestinationSummary) SetLastUpdatedAt(v time.Time) *TopicRuleDestinationSummary {
	s.LastUpdatedAt = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *TopicRuleDestinationSummary) SetStatus(v string) *TopicRuleDestinationSummary {
	s.Status = &v
	return s
}

// SetStatusReason sets the StatusReason field's value.
func (s *TopicRuleDestinationSummary) SetStatusReason(v string) *TopicRuleDestinationSummary {
	s.StatusReason = &v
	return s
}

// SetVpcDestinationSummary sets the VpcDestinationSummary field's value.
func (s *TopicRuleDestinationSummary) SetVpcDestinationSummary(v *VpcDestinationSummary) *TopicRuleDestinationSummary {
	s.VpcDestinationSummary = v
	return s
}

// Describes a rule.
type TopicRuleListItem struct {
	_ struct{} `type:"structure"`

	// The date and time the rule was created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// The rule ARN.
	RuleArn *string `locationName:"ruleArn" type:"string"`

	// Specifies whether the rule is disabled.
	RuleDisabled *bool `locationName:"ruleDisabled" type:"boolean"`

	// The name of the rule.
	RuleName *string `locationName:"ruleName" min:"1" type:"string"`

	// The pattern for the topic names that apply.
	TopicPattern *string `locationName:"topicPattern" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TopicRuleListItem) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TopicRuleListItem) GoString() string {
	return s.String()
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *TopicRuleListItem) SetCreatedAt(v time.Time) *TopicRuleListItem {
	s.CreatedAt = &v
	return s
}

// SetRuleArn sets the RuleArn field's value.
func (s *TopicRuleListItem) SetRuleArn(v string) *TopicRuleListItem {
	s.RuleArn = &v
	return s
}

// SetRuleDisabled sets the RuleDisabled field's value.
func (s *TopicRuleListItem) SetRuleDisabled(v bool) *TopicRuleListItem {
	s.RuleDisabled = &v
	return s
}

// SetRuleName sets the RuleName field's value.
func (s *TopicRuleListItem) SetRuleName(v string) *TopicRuleListItem {
	s.RuleName = &v
	return s
}

// SetTopicPattern sets the TopicPattern field's value.
func (s *TopicRuleListItem) SetTopicPattern(v string) *TopicRuleListItem {
	s.TopicPattern = &v
	return s
}

// Describes a rule.
type TopicRulePayload struct {
	_ struct{} `type:"structure"`

	// The actions associated with the rule.
	//
	// Actions is a required field
	Actions []*Action `locationName:"actions" type:"list" required:"true"`

	// The version of the SQL rules engine to use when evaluating the rule.
	AwsIotSqlVersion *string `locationName:"awsIotSqlVersion" type:"string"`

	// The description of the rule.
	Description *string `locationName:"description" type:"string"`

	// The action to take when an error occurs.
	ErrorAction *Action `locationName:"errorAction" type:"structure"`

	// Specifies whether the rule is disabled.
	RuleDisabled *bool `locationName:"ruleDisabled" type:"boolean"`

	// The SQL statement used to query the topic. For more information, see IoT
	// SQL Reference (https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-reference.html)
	// in the IoT Developer Guide.
	//
	// Sql is a required field
	Sql *string `locationName:"sql" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TopicRulePayload) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TopicRulePayload) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TopicRulePayload) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TopicRulePayload"}
	if s.Actions == nil {
		invalidParams.Add(request.NewErrParamRequired("Actions"))
	}
	if s.Sql == nil {
		invalidParams.Add(request.NewErrParamRequired("Sql"))
	}
	if s.Actions != nil {
		for i, v := range s.Actions {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Actions", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.ErrorAction != nil {
		if err := s.ErrorAction.Validate(); err != nil {
			invalidParams.AddNested("ErrorAction", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetActions sets the Actions field's value.
func (s *TopicRulePayload) SetActions(v []*Action) *TopicRulePayload {
	s.Actions = v
	return s
}

// SetAwsIotSqlVersion sets the AwsIotSqlVersion field's value.
func (s *TopicRulePayload) SetAwsIotSqlVersion(v string) *TopicRulePayload {
	s.AwsIotSqlVersion = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *TopicRulePayload) SetDescription(v string) *TopicRulePayload {
	s.Description = &v
	return s
}

// SetErrorAction sets the ErrorAction field's value.
func (s *TopicRulePayload) SetErrorAction(v *Action) *TopicRulePayload {
	s.ErrorAction = v
	return s
}

// SetRuleDisabled sets the RuleDisabled field's value.
func (s *TopicRulePayload) SetRuleDisabled(v bool) *TopicRulePayload {
	s.RuleDisabled = &v
	return s
}

// SetSql sets the Sql field's value.
func (s *TopicRulePayload) SetSql(v string) *TopicRulePayload {
	s.Sql = &v
	return s
}

// You can't revert the certificate transfer because the transfer is already
// complete.
type TransferAlreadyCompletedException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TransferAlreadyCompletedException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TransferAlreadyCompletedException) GoString() string {
	return s.String()
}

func newErrorTransferAlreadyCompletedException(v protocol.ResponseMetadata) error {
	return &TransferAlreadyCompletedException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *TransferAlreadyCompletedException) Code() string {
	return "TransferAlreadyCompletedException"
}

// Message returns the exception's message.
func (s *TransferAlreadyCompletedException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *TransferAlreadyCompletedException) OrigErr() error {
	return nil
}

func (s *TransferAlreadyCompletedException) 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 *TransferAlreadyCompletedException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *TransferAlreadyCompletedException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The input for the TransferCertificate operation.
type TransferCertificateInput struct {
	_ struct{} `type:"structure"`

	// The ID of the certificate. (The last part of the certificate ARN contains
	// the certificate ID.)
	//
	// CertificateId is a required field
	CertificateId *string `location:"uri" locationName:"certificateId" min:"64" type:"string" required:"true"`

	// The Amazon Web Services account.
	//
	// TargetAwsAccount is a required field
	TargetAwsAccount *string `location:"querystring" locationName:"targetAwsAccount" min:"12" type:"string" required:"true"`

	// The transfer message.
	TransferMessage *string `locationName:"transferMessage" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TransferCertificateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TransferCertificateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TransferCertificateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TransferCertificateInput"}
	if s.CertificateId == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificateId"))
	}
	if s.CertificateId != nil && len(*s.CertificateId) < 64 {
		invalidParams.Add(request.NewErrParamMinLen("CertificateId", 64))
	}
	if s.TargetAwsAccount == nil {
		invalidParams.Add(request.NewErrParamRequired("TargetAwsAccount"))
	}
	if s.TargetAwsAccount != nil && len(*s.TargetAwsAccount) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("TargetAwsAccount", 12))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCertificateId sets the CertificateId field's value.
func (s *TransferCertificateInput) SetCertificateId(v string) *TransferCertificateInput {
	s.CertificateId = &v
	return s
}

// SetTargetAwsAccount sets the TargetAwsAccount field's value.
func (s *TransferCertificateInput) SetTargetAwsAccount(v string) *TransferCertificateInput {
	s.TargetAwsAccount = &v
	return s
}

// SetTransferMessage sets the TransferMessage field's value.
func (s *TransferCertificateInput) SetTransferMessage(v string) *TransferCertificateInput {
	s.TransferMessage = &v
	return s
}

// The output from the TransferCertificate operation.
type TransferCertificateOutput struct {
	_ struct{} `type:"structure"`

	// The ARN of the certificate.
	TransferredCertificateArn *string `locationName:"transferredCertificateArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TransferCertificateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TransferCertificateOutput) GoString() string {
	return s.String()
}

// SetTransferredCertificateArn sets the TransferredCertificateArn field's value.
func (s *TransferCertificateOutput) SetTransferredCertificateArn(v string) *TransferCertificateOutput {
	s.TransferredCertificateArn = &v
	return s
}

// You can't transfer the certificate because authorization policies are still
// attached.
type TransferConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TransferConflictException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TransferConflictException) GoString() string {
	return s.String()
}

func newErrorTransferConflictException(v protocol.ResponseMetadata) error {
	return &TransferConflictException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *TransferConflictException) Code() string {
	return "TransferConflictException"
}

// Message returns the exception's message.
func (s *TransferConflictException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *TransferConflictException) OrigErr() error {
	return nil
}

func (s *TransferConflictException) 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 *TransferConflictException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *TransferConflictException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Data used to transfer a certificate to an Amazon Web Services account.
type TransferData struct {
	_ struct{} `type:"structure"`

	// The date the transfer was accepted.
	AcceptDate *time.Time `locationName:"acceptDate" type:"timestamp"`

	// The date the transfer was rejected.
	RejectDate *time.Time `locationName:"rejectDate" type:"timestamp"`

	// The reason why the transfer was rejected.
	RejectReason *string `locationName:"rejectReason" type:"string"`

	// The date the transfer took place.
	TransferDate *time.Time `locationName:"transferDate" type:"timestamp"`

	// The transfer message.
	TransferMessage *string `locationName:"transferMessage" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TransferData) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TransferData) GoString() string {
	return s.String()
}

// SetAcceptDate sets the AcceptDate field's value.
func (s *TransferData) SetAcceptDate(v time.Time) *TransferData {
	s.AcceptDate = &v
	return s
}

// SetRejectDate sets the RejectDate field's value.
func (s *TransferData) SetRejectDate(v time.Time) *TransferData {
	s.RejectDate = &v
	return s
}

// SetRejectReason sets the RejectReason field's value.
func (s *TransferData) SetRejectReason(v string) *TransferData {
	s.RejectReason = &v
	return s
}

// SetTransferDate sets the TransferDate field's value.
func (s *TransferData) SetTransferDate(v time.Time) *TransferData {
	s.TransferDate = &v
	return s
}

// SetTransferMessage sets the TransferMessage field's value.
func (s *TransferData) SetTransferMessage(v string) *TransferData {
	s.TransferMessage = &v
	return s
}

// You are not authorized to perform this operation.
type UnauthorizedException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UnauthorizedException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UnauthorizedException) GoString() string {
	return s.String()
}

func newErrorUnauthorizedException(v protocol.ResponseMetadata) error {
	return &UnauthorizedException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *UnauthorizedException) Code() string {
	return "UnauthorizedException"
}

// Message returns the exception's message.
func (s *UnauthorizedException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *UnauthorizedException) OrigErr() error {
	return nil
}

func (s *UnauthorizedException) 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 *UnauthorizedException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *UnauthorizedException) RequestID() string {
	return s.RespMetadata.RequestID
}

type UntagResourceInput struct {
	_ struct{} `type:"structure"`

	// The ARN of the resource.
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" type:"string" required:"true"`

	// A list of the keys of the tags to be removed from the resource.
	//
	// TagKeys is a required field
	TagKeys []*string `locationName:"tagKeys" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UntagResourceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UntagResourceInput"}
	if s.ResourceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceArn"))
	}
	if s.TagKeys == nil {
		invalidParams.Add(request.NewErrParamRequired("TagKeys"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetResourceArn sets the ResourceArn field's value.
func (s *UntagResourceInput) SetResourceArn(v string) *UntagResourceInput {
	s.ResourceArn = &v
	return s
}

// SetTagKeys sets the TagKeys field's value.
func (s *UntagResourceInput) SetTagKeys(v []*string) *UntagResourceInput {
	s.TagKeys = v
	return s
}

type UntagResourceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceOutput) GoString() string {
	return s.String()
}

type UpdateAccountAuditConfigurationInput struct {
	_ struct{} `type:"structure"`

	// Specifies which audit checks are enabled and disabled for this account. Use
	// DescribeAccountAuditConfiguration to see the list of all checks, including
	// those that are currently enabled.
	//
	// Some data collection might start immediately when certain checks are enabled.
	// When a check is disabled, any data collected so far in relation to the check
	// is deleted.
	//
	// You cannot disable a check if it's used by any scheduled audit. You must
	// first delete the check from the scheduled audit or delete the scheduled audit
	// itself.
	//
	// On the first call to UpdateAccountAuditConfiguration, this parameter is required
	// and must specify at least one enabled check.
	AuditCheckConfigurations map[string]*AuditCheckConfiguration `locationName:"auditCheckConfigurations" type:"map"`

	// Information about the targets to which audit notifications are sent.
	AuditNotificationTargetConfigurations map[string]*AuditNotificationTarget `locationName:"auditNotificationTargetConfigurations" type:"map"`

	// The Amazon Resource Name (ARN) of the role that grants permission to IoT
	// to access information about your devices, policies, certificates, and other
	// items as required when performing an audit.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAccountAuditConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAccountAuditConfigurationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateAccountAuditConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateAccountAuditConfigurationInput"}
	if s.RoleArn != nil && len(*s.RoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20))
	}
	if s.AuditNotificationTargetConfigurations != nil {
		for i, v := range s.AuditNotificationTargetConfigurations {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "AuditNotificationTargetConfigurations", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuditCheckConfigurations sets the AuditCheckConfigurations field's value.
func (s *UpdateAccountAuditConfigurationInput) SetAuditCheckConfigurations(v map[string]*AuditCheckConfiguration) *UpdateAccountAuditConfigurationInput {
	s.AuditCheckConfigurations = v
	return s
}

// SetAuditNotificationTargetConfigurations sets the AuditNotificationTargetConfigurations field's value.
func (s *UpdateAccountAuditConfigurationInput) SetAuditNotificationTargetConfigurations(v map[string]*AuditNotificationTarget) *UpdateAccountAuditConfigurationInput {
	s.AuditNotificationTargetConfigurations = v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *UpdateAccountAuditConfigurationInput) SetRoleArn(v string) *UpdateAccountAuditConfigurationInput {
	s.RoleArn = &v
	return s
}

type UpdateAccountAuditConfigurationOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAccountAuditConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAccountAuditConfigurationOutput) GoString() string {
	return s.String()
}

type UpdateAuditSuppressionInput struct {
	_ struct{} `type:"structure"`

	// An audit check name. Checks must be enabled for your account. (Use DescribeAccountAuditConfiguration
	// to see the list of all checks, including those that are enabled or use UpdateAccountAuditConfiguration
	// to select which checks are enabled.)
	//
	// CheckName is a required field
	CheckName *string `locationName:"checkName" type:"string" required:"true"`

	// The description of the audit suppression.
	Description *string `locationName:"description" type:"string"`

	// The expiration date (epoch timestamp in seconds) that you want the suppression
	// to adhere to.
	ExpirationDate *time.Time `locationName:"expirationDate" type:"timestamp"`

	// Information that identifies the noncompliant resource.
	//
	// ResourceIdentifier is a required field
	ResourceIdentifier *ResourceIdentifier `locationName:"resourceIdentifier" type:"structure" required:"true"`

	// Indicates whether a suppression should exist indefinitely or not.
	SuppressIndefinitely *bool `locationName:"suppressIndefinitely" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAuditSuppressionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAuditSuppressionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateAuditSuppressionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateAuditSuppressionInput"}
	if s.CheckName == nil {
		invalidParams.Add(request.NewErrParamRequired("CheckName"))
	}
	if s.ResourceIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceIdentifier"))
	}
	if s.ResourceIdentifier != nil {
		if err := s.ResourceIdentifier.Validate(); err != nil {
			invalidParams.AddNested("ResourceIdentifier", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCheckName sets the CheckName field's value.
func (s *UpdateAuditSuppressionInput) SetCheckName(v string) *UpdateAuditSuppressionInput {
	s.CheckName = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdateAuditSuppressionInput) SetDescription(v string) *UpdateAuditSuppressionInput {
	s.Description = &v
	return s
}

// SetExpirationDate sets the ExpirationDate field's value.
func (s *UpdateAuditSuppressionInput) SetExpirationDate(v time.Time) *UpdateAuditSuppressionInput {
	s.ExpirationDate = &v
	return s
}

// SetResourceIdentifier sets the ResourceIdentifier field's value.
func (s *UpdateAuditSuppressionInput) SetResourceIdentifier(v *ResourceIdentifier) *UpdateAuditSuppressionInput {
	s.ResourceIdentifier = v
	return s
}

// SetSuppressIndefinitely sets the SuppressIndefinitely field's value.
func (s *UpdateAuditSuppressionInput) SetSuppressIndefinitely(v bool) *UpdateAuditSuppressionInput {
	s.SuppressIndefinitely = &v
	return s
}

type UpdateAuditSuppressionOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAuditSuppressionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAuditSuppressionOutput) GoString() string {
	return s.String()
}

type UpdateAuthorizerInput struct {
	_ struct{} `type:"structure"`

	// The ARN of the authorizer's Lambda function.
	AuthorizerFunctionArn *string `locationName:"authorizerFunctionArn" type:"string"`

	// The authorizer name.
	//
	// AuthorizerName is a required field
	AuthorizerName *string `location:"uri" locationName:"authorizerName" min:"1" type:"string" required:"true"`

	// When true, the result from the authorizer’s Lambda function is cached for
	// the time specified in refreshAfterInSeconds. The cached result is used while
	// the device reuses the same HTTP connection.
	EnableCachingForHttp *bool `locationName:"enableCachingForHttp" type:"boolean"`

	// The status of the update authorizer request.
	Status *string `locationName:"status" type:"string" enum:"AuthorizerStatus"`

	// The key used to extract the token from the HTTP headers.
	TokenKeyName *string `locationName:"tokenKeyName" min:"1" type:"string"`

	// The public keys used to verify the token signature.
	TokenSigningPublicKeys map[string]*string `locationName:"tokenSigningPublicKeys" type:"map"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAuthorizerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAuthorizerInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateAuthorizerInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateAuthorizerInput"}
	if s.AuthorizerName == nil {
		invalidParams.Add(request.NewErrParamRequired("AuthorizerName"))
	}
	if s.AuthorizerName != nil && len(*s.AuthorizerName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AuthorizerName", 1))
	}
	if s.TokenKeyName != nil && len(*s.TokenKeyName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TokenKeyName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuthorizerFunctionArn sets the AuthorizerFunctionArn field's value.
func (s *UpdateAuthorizerInput) SetAuthorizerFunctionArn(v string) *UpdateAuthorizerInput {
	s.AuthorizerFunctionArn = &v
	return s
}

// SetAuthorizerName sets the AuthorizerName field's value.
func (s *UpdateAuthorizerInput) SetAuthorizerName(v string) *UpdateAuthorizerInput {
	s.AuthorizerName = &v
	return s
}

// SetEnableCachingForHttp sets the EnableCachingForHttp field's value.
func (s *UpdateAuthorizerInput) SetEnableCachingForHttp(v bool) *UpdateAuthorizerInput {
	s.EnableCachingForHttp = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *UpdateAuthorizerInput) SetStatus(v string) *UpdateAuthorizerInput {
	s.Status = &v
	return s
}

// SetTokenKeyName sets the TokenKeyName field's value.
func (s *UpdateAuthorizerInput) SetTokenKeyName(v string) *UpdateAuthorizerInput {
	s.TokenKeyName = &v
	return s
}

// SetTokenSigningPublicKeys sets the TokenSigningPublicKeys field's value.
func (s *UpdateAuthorizerInput) SetTokenSigningPublicKeys(v map[string]*string) *UpdateAuthorizerInput {
	s.TokenSigningPublicKeys = v
	return s
}

type UpdateAuthorizerOutput struct {
	_ struct{} `type:"structure"`

	// The authorizer ARN.
	AuthorizerArn *string `locationName:"authorizerArn" type:"string"`

	// The authorizer name.
	AuthorizerName *string `locationName:"authorizerName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAuthorizerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAuthorizerOutput) GoString() string {
	return s.String()
}

// SetAuthorizerArn sets the AuthorizerArn field's value.
func (s *UpdateAuthorizerOutput) SetAuthorizerArn(v string) *UpdateAuthorizerOutput {
	s.AuthorizerArn = &v
	return s
}

// SetAuthorizerName sets the AuthorizerName field's value.
func (s *UpdateAuthorizerOutput) SetAuthorizerName(v string) *UpdateAuthorizerOutput {
	s.AuthorizerName = &v
	return s
}

type UpdateBillingGroupInput struct {
	_ struct{} `type:"structure"`

	// The name of the billing group.
	//
	// BillingGroupName is a required field
	BillingGroupName *string `location:"uri" locationName:"billingGroupName" min:"1" type:"string" required:"true"`

	// The properties of the billing group.
	//
	// BillingGroupProperties is a required field
	BillingGroupProperties *BillingGroupProperties `locationName:"billingGroupProperties" type:"structure" required:"true"`

	// The expected version of the billing group. If the version of the billing
	// group does not match the expected version specified in the request, the UpdateBillingGroup
	// request is rejected with a VersionConflictException.
	ExpectedVersion *int64 `locationName:"expectedVersion" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateBillingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateBillingGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateBillingGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateBillingGroupInput"}
	if s.BillingGroupName == nil {
		invalidParams.Add(request.NewErrParamRequired("BillingGroupName"))
	}
	if s.BillingGroupName != nil && len(*s.BillingGroupName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("BillingGroupName", 1))
	}
	if s.BillingGroupProperties == nil {
		invalidParams.Add(request.NewErrParamRequired("BillingGroupProperties"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBillingGroupName sets the BillingGroupName field's value.
func (s *UpdateBillingGroupInput) SetBillingGroupName(v string) *UpdateBillingGroupInput {
	s.BillingGroupName = &v
	return s
}

// SetBillingGroupProperties sets the BillingGroupProperties field's value.
func (s *UpdateBillingGroupInput) SetBillingGroupProperties(v *BillingGroupProperties) *UpdateBillingGroupInput {
	s.BillingGroupProperties = v
	return s
}

// SetExpectedVersion sets the ExpectedVersion field's value.
func (s *UpdateBillingGroupInput) SetExpectedVersion(v int64) *UpdateBillingGroupInput {
	s.ExpectedVersion = &v
	return s
}

type UpdateBillingGroupOutput struct {
	_ struct{} `type:"structure"`

	// The latest version of the billing group.
	Version *int64 `locationName:"version" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateBillingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateBillingGroupOutput) GoString() string {
	return s.String()
}

// SetVersion sets the Version field's value.
func (s *UpdateBillingGroupOutput) SetVersion(v int64) *UpdateBillingGroupOutput {
	s.Version = &v
	return s
}

// The input to the UpdateCACertificate operation.
type UpdateCACertificateInput struct {
	_ struct{} `type:"structure"`

	// The CA certificate identifier.
	//
	// CertificateId is a required field
	CertificateId *string `location:"uri" locationName:"caCertificateId" min:"64" type:"string" required:"true"`

	// The new value for the auto registration status. Valid values are: "ENABLE"
	// or "DISABLE".
	NewAutoRegistrationStatus *string `location:"querystring" locationName:"newAutoRegistrationStatus" type:"string" enum:"AutoRegistrationStatus"`

	// The updated status of the CA certificate.
	//
	// Note: The status value REGISTER_INACTIVE is deprecated and should not be
	// used.
	NewStatus *string `location:"querystring" locationName:"newStatus" type:"string" enum:"CACertificateStatus"`

	// Information about the registration configuration.
	RegistrationConfig *RegistrationConfig `locationName:"registrationConfig" type:"structure"`

	// If true, removes auto registration.
	RemoveAutoRegistration *bool `locationName:"removeAutoRegistration" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCACertificateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCACertificateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateCACertificateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateCACertificateInput"}
	if s.CertificateId == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificateId"))
	}
	if s.CertificateId != nil && len(*s.CertificateId) < 64 {
		invalidParams.Add(request.NewErrParamMinLen("CertificateId", 64))
	}
	if s.RegistrationConfig != nil {
		if err := s.RegistrationConfig.Validate(); err != nil {
			invalidParams.AddNested("RegistrationConfig", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCertificateId sets the CertificateId field's value.
func (s *UpdateCACertificateInput) SetCertificateId(v string) *UpdateCACertificateInput {
	s.CertificateId = &v
	return s
}

// SetNewAutoRegistrationStatus sets the NewAutoRegistrationStatus field's value.
func (s *UpdateCACertificateInput) SetNewAutoRegistrationStatus(v string) *UpdateCACertificateInput {
	s.NewAutoRegistrationStatus = &v
	return s
}

// SetNewStatus sets the NewStatus field's value.
func (s *UpdateCACertificateInput) SetNewStatus(v string) *UpdateCACertificateInput {
	s.NewStatus = &v
	return s
}

// SetRegistrationConfig sets the RegistrationConfig field's value.
func (s *UpdateCACertificateInput) SetRegistrationConfig(v *RegistrationConfig) *UpdateCACertificateInput {
	s.RegistrationConfig = v
	return s
}

// SetRemoveAutoRegistration sets the RemoveAutoRegistration field's value.
func (s *UpdateCACertificateInput) SetRemoveAutoRegistration(v bool) *UpdateCACertificateInput {
	s.RemoveAutoRegistration = &v
	return s
}

type UpdateCACertificateOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCACertificateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCACertificateOutput) GoString() string {
	return s.String()
}

// Parameters to define a mitigation action that changes the state of the CA
// certificate to inactive.
type UpdateCACertificateParams struct {
	_ struct{} `type:"structure"`

	// The action that you want to apply to the CA certificate. The only supported
	// value is DEACTIVATE.
	//
	// Action is a required field
	Action *string `locationName:"action" type:"string" required:"true" enum:"CACertificateUpdateAction"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCACertificateParams) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCACertificateParams) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateCACertificateParams) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateCACertificateParams"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *UpdateCACertificateParams) SetAction(v string) *UpdateCACertificateParams {
	s.Action = &v
	return s
}

// The input for the UpdateCertificate operation.
type UpdateCertificateInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The ID of the certificate. (The last part of the certificate ARN contains
	// the certificate ID.)
	//
	// CertificateId is a required field
	CertificateId *string `location:"uri" locationName:"certificateId" min:"64" type:"string" required:"true"`

	// The new status.
	//
	// Note: Setting the status to PENDING_TRANSFER or PENDING_ACTIVATION will result
	// in an exception being thrown. PENDING_TRANSFER and PENDING_ACTIVATION are
	// statuses used internally by IoT. They are not intended for developer use.
	//
	// Note: The status value REGISTER_INACTIVE is deprecated and should not be
	// used.
	//
	// NewStatus is a required field
	NewStatus *string `location:"querystring" locationName:"newStatus" type:"string" required:"true" enum:"CertificateStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCertificateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCertificateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateCertificateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateCertificateInput"}
	if s.CertificateId == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificateId"))
	}
	if s.CertificateId != nil && len(*s.CertificateId) < 64 {
		invalidParams.Add(request.NewErrParamMinLen("CertificateId", 64))
	}
	if s.NewStatus == nil {
		invalidParams.Add(request.NewErrParamRequired("NewStatus"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCertificateId sets the CertificateId field's value.
func (s *UpdateCertificateInput) SetCertificateId(v string) *UpdateCertificateInput {
	s.CertificateId = &v
	return s
}

// SetNewStatus sets the NewStatus field's value.
func (s *UpdateCertificateInput) SetNewStatus(v string) *UpdateCertificateInput {
	s.NewStatus = &v
	return s
}

type UpdateCertificateOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCertificateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCertificateOutput) GoString() string {
	return s.String()
}

type UpdateCertificateProviderInput struct {
	_ struct{} `type:"structure"`

	// A list of the operations that the certificate provider will use to generate
	// certificates. Valid value: CreateCertificateFromCsr.
	AccountDefaultForOperations []*string `locationName:"accountDefaultForOperations" min:"1" type:"list" enum:"CertificateProviderOperation"`

	// The name of the certificate provider.
	//
	// CertificateProviderName is a required field
	CertificateProviderName *string `location:"uri" locationName:"certificateProviderName" min:"1" type:"string" required:"true"`

	// The Lambda function ARN that's associated with the certificate provider.
	LambdaFunctionArn *string `locationName:"lambdaFunctionArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCertificateProviderInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCertificateProviderInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateCertificateProviderInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateCertificateProviderInput"}
	if s.AccountDefaultForOperations != nil && len(s.AccountDefaultForOperations) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AccountDefaultForOperations", 1))
	}
	if s.CertificateProviderName == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificateProviderName"))
	}
	if s.CertificateProviderName != nil && len(*s.CertificateProviderName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("CertificateProviderName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAccountDefaultForOperations sets the AccountDefaultForOperations field's value.
func (s *UpdateCertificateProviderInput) SetAccountDefaultForOperations(v []*string) *UpdateCertificateProviderInput {
	s.AccountDefaultForOperations = v
	return s
}

// SetCertificateProviderName sets the CertificateProviderName field's value.
func (s *UpdateCertificateProviderInput) SetCertificateProviderName(v string) *UpdateCertificateProviderInput {
	s.CertificateProviderName = &v
	return s
}

// SetLambdaFunctionArn sets the LambdaFunctionArn field's value.
func (s *UpdateCertificateProviderInput) SetLambdaFunctionArn(v string) *UpdateCertificateProviderInput {
	s.LambdaFunctionArn = &v
	return s
}

type UpdateCertificateProviderOutput struct {
	_ struct{} `type:"structure"`

	// The ARN of the certificate provider.
	CertificateProviderArn *string `locationName:"certificateProviderArn" type:"string"`

	// The name of the certificate provider.
	CertificateProviderName *string `locationName:"certificateProviderName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCertificateProviderOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCertificateProviderOutput) GoString() string {
	return s.String()
}

// SetCertificateProviderArn sets the CertificateProviderArn field's value.
func (s *UpdateCertificateProviderOutput) SetCertificateProviderArn(v string) *UpdateCertificateProviderOutput {
	s.CertificateProviderArn = &v
	return s
}

// SetCertificateProviderName sets the CertificateProviderName field's value.
func (s *UpdateCertificateProviderOutput) SetCertificateProviderName(v string) *UpdateCertificateProviderOutput {
	s.CertificateProviderName = &v
	return s
}

type UpdateCustomMetricInput struct {
	_ struct{} `type:"structure"`

	// Field represents a friendly name in the console for the custom metric, it
	// doesn't have to be unique. Don't use this name as the metric identifier in
	// the device metric report. Can be updated.
	//
	// DisplayName is a required field
	DisplayName *string `locationName:"displayName" type:"string" required:"true"`

	// The name of the custom metric. Cannot be updated.
	//
	// MetricName is a required field
	MetricName *string `location:"uri" locationName:"metricName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCustomMetricInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCustomMetricInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateCustomMetricInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateCustomMetricInput"}
	if s.DisplayName == nil {
		invalidParams.Add(request.NewErrParamRequired("DisplayName"))
	}
	if s.MetricName == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricName"))
	}
	if s.MetricName != nil && len(*s.MetricName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("MetricName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDisplayName sets the DisplayName field's value.
func (s *UpdateCustomMetricInput) SetDisplayName(v string) *UpdateCustomMetricInput {
	s.DisplayName = &v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *UpdateCustomMetricInput) SetMetricName(v string) *UpdateCustomMetricInput {
	s.MetricName = &v
	return s
}

type UpdateCustomMetricOutput struct {
	_ struct{} `type:"structure"`

	// The creation date of the custom metric in milliseconds since epoch.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// A friendly name in the console for the custom metric
	DisplayName *string `locationName:"displayName" type:"string"`

	// The time the custom metric was last modified in milliseconds since epoch.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// The Amazon Resource Number (ARN) of the custom metric.
	MetricArn *string `locationName:"metricArn" type:"string"`

	// The name of the custom metric.
	MetricName *string `locationName:"metricName" min:"1" type:"string"`

	// The type of the custom metric.
	//
	// The type number only takes a single metric value as an input, but while submitting
	// the metrics value in the DeviceMetrics report, it must be passed as an array
	// with a single value.
	MetricType *string `locationName:"metricType" type:"string" enum:"CustomMetricType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCustomMetricOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCustomMetricOutput) GoString() string {
	return s.String()
}

// SetCreationDate sets the CreationDate field's value.
func (s *UpdateCustomMetricOutput) SetCreationDate(v time.Time) *UpdateCustomMetricOutput {
	s.CreationDate = &v
	return s
}

// SetDisplayName sets the DisplayName field's value.
func (s *UpdateCustomMetricOutput) SetDisplayName(v string) *UpdateCustomMetricOutput {
	s.DisplayName = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *UpdateCustomMetricOutput) SetLastModifiedDate(v time.Time) *UpdateCustomMetricOutput {
	s.LastModifiedDate = &v
	return s
}

// SetMetricArn sets the MetricArn field's value.
func (s *UpdateCustomMetricOutput) SetMetricArn(v string) *UpdateCustomMetricOutput {
	s.MetricArn = &v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *UpdateCustomMetricOutput) SetMetricName(v string) *UpdateCustomMetricOutput {
	s.MetricName = &v
	return s
}

// SetMetricType sets the MetricType field's value.
func (s *UpdateCustomMetricOutput) SetMetricType(v string) *UpdateCustomMetricOutput {
	s.MetricType = &v
	return s
}

// Parameters to define a mitigation action that changes the state of the device
// certificate to inactive.
type UpdateDeviceCertificateParams struct {
	_ struct{} `type:"structure"`

	// The action that you want to apply to the device certificate. The only supported
	// value is DEACTIVATE.
	//
	// Action is a required field
	Action *string `locationName:"action" type:"string" required:"true" enum:"DeviceCertificateUpdateAction"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDeviceCertificateParams) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDeviceCertificateParams) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateDeviceCertificateParams) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateDeviceCertificateParams"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *UpdateDeviceCertificateParams) SetAction(v string) *UpdateDeviceCertificateParams {
	s.Action = &v
	return s
}

type UpdateDimensionInput struct {
	_ struct{} `type:"structure"`

	// A unique identifier for the dimension. Choose something that describes the
	// type and value to make it easy to remember what it does.
	//
	// Name is a required field
	Name *string `location:"uri" locationName:"name" min:"1" type:"string" required:"true"`

	// Specifies the value or list of values for the dimension. For TOPIC_FILTER
	// dimensions, this is a pattern used to match the MQTT topic (for example,
	// "admin/#").
	//
	// StringValues is a required field
	StringValues []*string `locationName:"stringValues" min:"1" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDimensionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDimensionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateDimensionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateDimensionInput"}
	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.StringValues == nil {
		invalidParams.Add(request.NewErrParamRequired("StringValues"))
	}
	if s.StringValues != nil && len(s.StringValues) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("StringValues", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetName sets the Name field's value.
func (s *UpdateDimensionInput) SetName(v string) *UpdateDimensionInput {
	s.Name = &v
	return s
}

// SetStringValues sets the StringValues field's value.
func (s *UpdateDimensionInput) SetStringValues(v []*string) *UpdateDimensionInput {
	s.StringValues = v
	return s
}

type UpdateDimensionOutput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN)of the created dimension.
	Arn *string `locationName:"arn" type:"string"`

	// The date and time, in milliseconds since epoch, when the dimension was initially
	// created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The date and time, in milliseconds since epoch, when the dimension was most
	// recently updated.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// A unique identifier for the dimension.
	Name *string `locationName:"name" min:"1" type:"string"`

	// The value or list of values used to scope the dimension. For example, for
	// topic filters, this is the pattern used to match the MQTT topic name.
	StringValues []*string `locationName:"stringValues" min:"1" type:"list"`

	// The type of the dimension.
	Type *string `locationName:"type" type:"string" enum:"DimensionType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDimensionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDimensionOutput) GoString() string {
	return s.String()
}

// SetArn sets the Arn field's value.
func (s *UpdateDimensionOutput) SetArn(v string) *UpdateDimensionOutput {
	s.Arn = &v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *UpdateDimensionOutput) SetCreationDate(v time.Time) *UpdateDimensionOutput {
	s.CreationDate = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *UpdateDimensionOutput) SetLastModifiedDate(v time.Time) *UpdateDimensionOutput {
	s.LastModifiedDate = &v
	return s
}

// SetName sets the Name field's value.
func (s *UpdateDimensionOutput) SetName(v string) *UpdateDimensionOutput {
	s.Name = &v
	return s
}

// SetStringValues sets the StringValues field's value.
func (s *UpdateDimensionOutput) SetStringValues(v []*string) *UpdateDimensionOutput {
	s.StringValues = v
	return s
}

// SetType sets the Type field's value.
func (s *UpdateDimensionOutput) SetType(v string) *UpdateDimensionOutput {
	s.Type = &v
	return s
}

type UpdateDomainConfigurationInput struct {
	_ struct{} `type:"structure"`

	// An object that specifies the authorization service for a domain.
	AuthorizerConfig *AuthorizerConfig `locationName:"authorizerConfig" type:"structure"`

	// The name of the domain configuration to be updated.
	//
	// DomainConfigurationName is a required field
	DomainConfigurationName *string `location:"uri" locationName:"domainConfigurationName" min:"1" type:"string" required:"true"`

	// The status to which the domain configuration should be updated.
	DomainConfigurationStatus *string `locationName:"domainConfigurationStatus" type:"string" enum:"DomainConfigurationStatus"`

	// Removes the authorization configuration from a domain.
	RemoveAuthorizerConfig *bool `locationName:"removeAuthorizerConfig" type:"boolean"`

	// The server certificate configuration.
	ServerCertificateConfig *ServerCertificateConfig `locationName:"serverCertificateConfig" type:"structure"`

	// An object that specifies the TLS configuration for a domain.
	TlsConfig *TlsConfig `locationName:"tlsConfig" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDomainConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDomainConfigurationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateDomainConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateDomainConfigurationInput"}
	if s.DomainConfigurationName == nil {
		invalidParams.Add(request.NewErrParamRequired("DomainConfigurationName"))
	}
	if s.DomainConfigurationName != nil && len(*s.DomainConfigurationName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DomainConfigurationName", 1))
	}
	if s.AuthorizerConfig != nil {
		if err := s.AuthorizerConfig.Validate(); err != nil {
			invalidParams.AddNested("AuthorizerConfig", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuthorizerConfig sets the AuthorizerConfig field's value.
func (s *UpdateDomainConfigurationInput) SetAuthorizerConfig(v *AuthorizerConfig) *UpdateDomainConfigurationInput {
	s.AuthorizerConfig = v
	return s
}

// SetDomainConfigurationName sets the DomainConfigurationName field's value.
func (s *UpdateDomainConfigurationInput) SetDomainConfigurationName(v string) *UpdateDomainConfigurationInput {
	s.DomainConfigurationName = &v
	return s
}

// SetDomainConfigurationStatus sets the DomainConfigurationStatus field's value.
func (s *UpdateDomainConfigurationInput) SetDomainConfigurationStatus(v string) *UpdateDomainConfigurationInput {
	s.DomainConfigurationStatus = &v
	return s
}

// SetRemoveAuthorizerConfig sets the RemoveAuthorizerConfig field's value.
func (s *UpdateDomainConfigurationInput) SetRemoveAuthorizerConfig(v bool) *UpdateDomainConfigurationInput {
	s.RemoveAuthorizerConfig = &v
	return s
}

// SetServerCertificateConfig sets the ServerCertificateConfig field's value.
func (s *UpdateDomainConfigurationInput) SetServerCertificateConfig(v *ServerCertificateConfig) *UpdateDomainConfigurationInput {
	s.ServerCertificateConfig = v
	return s
}

// SetTlsConfig sets the TlsConfig field's value.
func (s *UpdateDomainConfigurationInput) SetTlsConfig(v *TlsConfig) *UpdateDomainConfigurationInput {
	s.TlsConfig = v
	return s
}

type UpdateDomainConfigurationOutput struct {
	_ struct{} `type:"structure"`

	// The ARN of the domain configuration that was updated.
	DomainConfigurationArn *string `locationName:"domainConfigurationArn" type:"string"`

	// The name of the domain configuration that was updated.
	DomainConfigurationName *string `locationName:"domainConfigurationName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDomainConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDomainConfigurationOutput) GoString() string {
	return s.String()
}

// SetDomainConfigurationArn sets the DomainConfigurationArn field's value.
func (s *UpdateDomainConfigurationOutput) SetDomainConfigurationArn(v string) *UpdateDomainConfigurationOutput {
	s.DomainConfigurationArn = &v
	return s
}

// SetDomainConfigurationName sets the DomainConfigurationName field's value.
func (s *UpdateDomainConfigurationOutput) SetDomainConfigurationName(v string) *UpdateDomainConfigurationOutput {
	s.DomainConfigurationName = &v
	return s
}

type UpdateDynamicThingGroupInput struct {
	_ struct{} `type:"structure"`

	// The expected version of the dynamic thing group to update.
	ExpectedVersion *int64 `locationName:"expectedVersion" type:"long"`

	// The dynamic thing group index to update.
	//
	// Currently one index is supported: AWS_Things.
	IndexName *string `locationName:"indexName" min:"1" type:"string"`

	// The dynamic thing group search query string to update.
	QueryString *string `locationName:"queryString" min:"1" type:"string"`

	// The dynamic thing group query version to update.
	//
	// Currently one query version is supported: "2017-09-30". If not specified,
	// the query version defaults to this value.
	QueryVersion *string `locationName:"queryVersion" type:"string"`

	// The name of the dynamic thing group to update.
	//
	// ThingGroupName is a required field
	ThingGroupName *string `location:"uri" locationName:"thingGroupName" min:"1" type:"string" required:"true"`

	// The dynamic thing group properties to update.
	//
	// ThingGroupProperties is a required field
	ThingGroupProperties *ThingGroupProperties `locationName:"thingGroupProperties" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDynamicThingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDynamicThingGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateDynamicThingGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateDynamicThingGroupInput"}
	if s.IndexName != nil && len(*s.IndexName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("IndexName", 1))
	}
	if s.QueryString != nil && len(*s.QueryString) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("QueryString", 1))
	}
	if s.ThingGroupName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingGroupName"))
	}
	if s.ThingGroupName != nil && len(*s.ThingGroupName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingGroupName", 1))
	}
	if s.ThingGroupProperties == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingGroupProperties"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExpectedVersion sets the ExpectedVersion field's value.
func (s *UpdateDynamicThingGroupInput) SetExpectedVersion(v int64) *UpdateDynamicThingGroupInput {
	s.ExpectedVersion = &v
	return s
}

// SetIndexName sets the IndexName field's value.
func (s *UpdateDynamicThingGroupInput) SetIndexName(v string) *UpdateDynamicThingGroupInput {
	s.IndexName = &v
	return s
}

// SetQueryString sets the QueryString field's value.
func (s *UpdateDynamicThingGroupInput) SetQueryString(v string) *UpdateDynamicThingGroupInput {
	s.QueryString = &v
	return s
}

// SetQueryVersion sets the QueryVersion field's value.
func (s *UpdateDynamicThingGroupInput) SetQueryVersion(v string) *UpdateDynamicThingGroupInput {
	s.QueryVersion = &v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *UpdateDynamicThingGroupInput) SetThingGroupName(v string) *UpdateDynamicThingGroupInput {
	s.ThingGroupName = &v
	return s
}

// SetThingGroupProperties sets the ThingGroupProperties field's value.
func (s *UpdateDynamicThingGroupInput) SetThingGroupProperties(v *ThingGroupProperties) *UpdateDynamicThingGroupInput {
	s.ThingGroupProperties = v
	return s
}

type UpdateDynamicThingGroupOutput struct {
	_ struct{} `type:"structure"`

	// The dynamic thing group version.
	Version *int64 `locationName:"version" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDynamicThingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDynamicThingGroupOutput) GoString() string {
	return s.String()
}

// SetVersion sets the Version field's value.
func (s *UpdateDynamicThingGroupOutput) SetVersion(v int64) *UpdateDynamicThingGroupOutput {
	s.Version = &v
	return s
}

type UpdateEventConfigurationsInput struct {
	_ struct{} `type:"structure"`

	// The new event configuration values.
	EventConfigurations map[string]*Configuration `locationName:"eventConfigurations" type:"map"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateEventConfigurationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateEventConfigurationsInput) GoString() string {
	return s.String()
}

// SetEventConfigurations sets the EventConfigurations field's value.
func (s *UpdateEventConfigurationsInput) SetEventConfigurations(v map[string]*Configuration) *UpdateEventConfigurationsInput {
	s.EventConfigurations = v
	return s
}

type UpdateEventConfigurationsOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateEventConfigurationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateEventConfigurationsOutput) GoString() string {
	return s.String()
}

type UpdateFleetMetricInput struct {
	_ struct{} `type:"structure"`

	// The field to aggregate.
	AggregationField *string `locationName:"aggregationField" min:"1" type:"string"`

	// The type of the aggregation query.
	AggregationType *AggregationType `locationName:"aggregationType" type:"structure"`

	// The description of the fleet metric.
	Description *string `locationName:"description" type:"string"`

	// The expected version of the fleet metric record in the registry.
	ExpectedVersion *int64 `locationName:"expectedVersion" type:"long"`

	// The name of the index to search.
	//
	// IndexName is a required field
	IndexName *string `locationName:"indexName" min:"1" type:"string" required:"true"`

	// The name of the fleet metric to update.
	//
	// MetricName is a required field
	MetricName *string `location:"uri" locationName:"metricName" min:"1" type:"string" required:"true"`

	// The time in seconds between fleet metric emissions. Range [60(1 min), 86400(1
	// day)] and must be multiple of 60.
	Period *int64 `locationName:"period" min:"60" type:"integer"`

	// The search query string.
	QueryString *string `locationName:"queryString" min:"1" type:"string"`

	// The version of the query.
	QueryVersion *string `locationName:"queryVersion" type:"string"`

	// Used to support unit transformation such as milliseconds to seconds. The
	// unit must be supported by CW metric (https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html).
	Unit *string `locationName:"unit" type:"string" enum:"FleetMetricUnit"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateFleetMetricInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateFleetMetricInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateFleetMetricInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateFleetMetricInput"}
	if s.AggregationField != nil && len(*s.AggregationField) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AggregationField", 1))
	}
	if s.IndexName == nil {
		invalidParams.Add(request.NewErrParamRequired("IndexName"))
	}
	if s.IndexName != nil && len(*s.IndexName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("IndexName", 1))
	}
	if s.MetricName == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricName"))
	}
	if s.MetricName != nil && len(*s.MetricName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("MetricName", 1))
	}
	if s.Period != nil && *s.Period < 60 {
		invalidParams.Add(request.NewErrParamMinValue("Period", 60))
	}
	if s.QueryString != nil && len(*s.QueryString) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("QueryString", 1))
	}
	if s.AggregationType != nil {
		if err := s.AggregationType.Validate(); err != nil {
			invalidParams.AddNested("AggregationType", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAggregationField sets the AggregationField field's value.
func (s *UpdateFleetMetricInput) SetAggregationField(v string) *UpdateFleetMetricInput {
	s.AggregationField = &v
	return s
}

// SetAggregationType sets the AggregationType field's value.
func (s *UpdateFleetMetricInput) SetAggregationType(v *AggregationType) *UpdateFleetMetricInput {
	s.AggregationType = v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdateFleetMetricInput) SetDescription(v string) *UpdateFleetMetricInput {
	s.Description = &v
	return s
}

// SetExpectedVersion sets the ExpectedVersion field's value.
func (s *UpdateFleetMetricInput) SetExpectedVersion(v int64) *UpdateFleetMetricInput {
	s.ExpectedVersion = &v
	return s
}

// SetIndexName sets the IndexName field's value.
func (s *UpdateFleetMetricInput) SetIndexName(v string) *UpdateFleetMetricInput {
	s.IndexName = &v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *UpdateFleetMetricInput) SetMetricName(v string) *UpdateFleetMetricInput {
	s.MetricName = &v
	return s
}

// SetPeriod sets the Period field's value.
func (s *UpdateFleetMetricInput) SetPeriod(v int64) *UpdateFleetMetricInput {
	s.Period = &v
	return s
}

// SetQueryString sets the QueryString field's value.
func (s *UpdateFleetMetricInput) SetQueryString(v string) *UpdateFleetMetricInput {
	s.QueryString = &v
	return s
}

// SetQueryVersion sets the QueryVersion field's value.
func (s *UpdateFleetMetricInput) SetQueryVersion(v string) *UpdateFleetMetricInput {
	s.QueryVersion = &v
	return s
}

// SetUnit sets the Unit field's value.
func (s *UpdateFleetMetricInput) SetUnit(v string) *UpdateFleetMetricInput {
	s.Unit = &v
	return s
}

type UpdateFleetMetricOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateFleetMetricOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateFleetMetricOutput) GoString() string {
	return s.String()
}

type UpdateIndexingConfigurationInput struct {
	_ struct{} `type:"structure"`

	// Thing group indexing configuration.
	ThingGroupIndexingConfiguration *ThingGroupIndexingConfiguration `locationName:"thingGroupIndexingConfiguration" type:"structure"`

	// Thing indexing configuration.
	ThingIndexingConfiguration *ThingIndexingConfiguration `locationName:"thingIndexingConfiguration" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateIndexingConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateIndexingConfigurationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateIndexingConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateIndexingConfigurationInput"}
	if s.ThingGroupIndexingConfiguration != nil {
		if err := s.ThingGroupIndexingConfiguration.Validate(); err != nil {
			invalidParams.AddNested("ThingGroupIndexingConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.ThingIndexingConfiguration != nil {
		if err := s.ThingIndexingConfiguration.Validate(); err != nil {
			invalidParams.AddNested("ThingIndexingConfiguration", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetThingGroupIndexingConfiguration sets the ThingGroupIndexingConfiguration field's value.
func (s *UpdateIndexingConfigurationInput) SetThingGroupIndexingConfiguration(v *ThingGroupIndexingConfiguration) *UpdateIndexingConfigurationInput {
	s.ThingGroupIndexingConfiguration = v
	return s
}

// SetThingIndexingConfiguration sets the ThingIndexingConfiguration field's value.
func (s *UpdateIndexingConfigurationInput) SetThingIndexingConfiguration(v *ThingIndexingConfiguration) *UpdateIndexingConfigurationInput {
	s.ThingIndexingConfiguration = v
	return s
}

type UpdateIndexingConfigurationOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateIndexingConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateIndexingConfigurationOutput) GoString() string {
	return s.String()
}

type UpdateJobInput struct {
	_ struct{} `type:"structure"`

	// Allows you to create criteria to abort a job.
	AbortConfig *AbortConfig `locationName:"abortConfig" type:"structure"`

	// A short text description of the job.
	Description *string `locationName:"description" type:"string"`

	// Allows you to create the criteria to retry a job.
	JobExecutionsRetryConfig *JobExecutionsRetryConfig `locationName:"jobExecutionsRetryConfig" type:"structure"`

	// Allows you to create a staged rollout of the job.
	JobExecutionsRolloutConfig *JobExecutionsRolloutConfig `locationName:"jobExecutionsRolloutConfig" type:"structure"`

	// The ID of the job to be updated.
	//
	// JobId is a required field
	JobId *string `location:"uri" locationName:"jobId" min:"1" type:"string" required:"true"`

	// The namespace used to indicate that a job is a customer-managed job.
	//
	// When you specify a value for this parameter, Amazon Web Services IoT Core
	// sends jobs notifications to MQTT topics that contain the value in the following
	// format.
	//
	// $aws/things/THING_NAME/jobs/JOB_ID/notify-namespace-NAMESPACE_ID/
	//
	// The namespaceId feature is only supported by IoT Greengrass at this time.
	// For more information, see Setting up IoT Greengrass core devices. (https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html)
	NamespaceId *string `location:"querystring" locationName:"namespaceId" type:"string"`

	// Configuration information for pre-signed S3 URLs.
	PresignedUrlConfig *PresignedUrlConfig `locationName:"presignedUrlConfig" type:"structure"`

	// Specifies the amount of time each device has to finish its execution of the
	// job. The timer is started when the job execution status is set to IN_PROGRESS.
	// If the job execution status is not set to another terminal state before the
	// time expires, it will be automatically set to TIMED_OUT.
	TimeoutConfig *TimeoutConfig `locationName:"timeoutConfig" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateJobInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateJobInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateJobInput"}
	if s.JobId == nil {
		invalidParams.Add(request.NewErrParamRequired("JobId"))
	}
	if s.JobId != nil && len(*s.JobId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("JobId", 1))
	}
	if s.AbortConfig != nil {
		if err := s.AbortConfig.Validate(); err != nil {
			invalidParams.AddNested("AbortConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.JobExecutionsRetryConfig != nil {
		if err := s.JobExecutionsRetryConfig.Validate(); err != nil {
			invalidParams.AddNested("JobExecutionsRetryConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.JobExecutionsRolloutConfig != nil {
		if err := s.JobExecutionsRolloutConfig.Validate(); err != nil {
			invalidParams.AddNested("JobExecutionsRolloutConfig", err.(request.ErrInvalidParams))
		}
	}
	if s.PresignedUrlConfig != nil {
		if err := s.PresignedUrlConfig.Validate(); err != nil {
			invalidParams.AddNested("PresignedUrlConfig", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAbortConfig sets the AbortConfig field's value.
func (s *UpdateJobInput) SetAbortConfig(v *AbortConfig) *UpdateJobInput {
	s.AbortConfig = v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdateJobInput) SetDescription(v string) *UpdateJobInput {
	s.Description = &v
	return s
}

// SetJobExecutionsRetryConfig sets the JobExecutionsRetryConfig field's value.
func (s *UpdateJobInput) SetJobExecutionsRetryConfig(v *JobExecutionsRetryConfig) *UpdateJobInput {
	s.JobExecutionsRetryConfig = v
	return s
}

// SetJobExecutionsRolloutConfig sets the JobExecutionsRolloutConfig field's value.
func (s *UpdateJobInput) SetJobExecutionsRolloutConfig(v *JobExecutionsRolloutConfig) *UpdateJobInput {
	s.JobExecutionsRolloutConfig = v
	return s
}

// SetJobId sets the JobId field's value.
func (s *UpdateJobInput) SetJobId(v string) *UpdateJobInput {
	s.JobId = &v
	return s
}

// SetNamespaceId sets the NamespaceId field's value.
func (s *UpdateJobInput) SetNamespaceId(v string) *UpdateJobInput {
	s.NamespaceId = &v
	return s
}

// SetPresignedUrlConfig sets the PresignedUrlConfig field's value.
func (s *UpdateJobInput) SetPresignedUrlConfig(v *PresignedUrlConfig) *UpdateJobInput {
	s.PresignedUrlConfig = v
	return s
}

// SetTimeoutConfig sets the TimeoutConfig field's value.
func (s *UpdateJobInput) SetTimeoutConfig(v *TimeoutConfig) *UpdateJobInput {
	s.TimeoutConfig = v
	return s
}

type UpdateJobOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateJobOutput) GoString() string {
	return s.String()
}

type UpdateMitigationActionInput struct {
	_ struct{} `type:"structure"`

	// The friendly name for the mitigation action. You cannot change the name by
	// using UpdateMitigationAction. Instead, you must delete and recreate the mitigation
	// action with the new name.
	//
	// ActionName is a required field
	ActionName *string `location:"uri" locationName:"actionName" type:"string" required:"true"`

	// Defines the type of action and the parameters for that action.
	ActionParams *MitigationActionParams `locationName:"actionParams" type:"structure"`

	// The ARN of the IAM role that is used to apply the mitigation action.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateMitigationActionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateMitigationActionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateMitigationActionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateMitigationActionInput"}
	if s.ActionName == nil {
		invalidParams.Add(request.NewErrParamRequired("ActionName"))
	}
	if s.ActionName != nil && len(*s.ActionName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ActionName", 1))
	}
	if s.RoleArn != nil && len(*s.RoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20))
	}
	if s.ActionParams != nil {
		if err := s.ActionParams.Validate(); err != nil {
			invalidParams.AddNested("ActionParams", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetActionName sets the ActionName field's value.
func (s *UpdateMitigationActionInput) SetActionName(v string) *UpdateMitigationActionInput {
	s.ActionName = &v
	return s
}

// SetActionParams sets the ActionParams field's value.
func (s *UpdateMitigationActionInput) SetActionParams(v *MitigationActionParams) *UpdateMitigationActionInput {
	s.ActionParams = v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *UpdateMitigationActionInput) SetRoleArn(v string) *UpdateMitigationActionInput {
	s.RoleArn = &v
	return s
}

type UpdateMitigationActionOutput struct {
	_ struct{} `type:"structure"`

	// The ARN for the new mitigation action.
	ActionArn *string `locationName:"actionArn" type:"string"`

	// A unique identifier for the mitigation action.
	ActionId *string `locationName:"actionId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateMitigationActionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateMitigationActionOutput) GoString() string {
	return s.String()
}

// SetActionArn sets the ActionArn field's value.
func (s *UpdateMitigationActionOutput) SetActionArn(v string) *UpdateMitigationActionOutput {
	s.ActionArn = &v
	return s
}

// SetActionId sets the ActionId field's value.
func (s *UpdateMitigationActionOutput) SetActionId(v string) *UpdateMitigationActionOutput {
	s.ActionId = &v
	return s
}

type UpdatePackageConfigurationInput struct {
	_ struct{} `type:"structure"`

	// A unique case-sensitive identifier that you can provide to ensure the idempotency
	// of the request. Don't reuse this client token if a new idempotent request
	// is required.
	ClientToken *string `location:"querystring" locationName:"clientToken" min:"36" type:"string" idempotencyToken:"true"`

	// Configuration to manage job's package version reporting. This updates the
	// thing's reserved named shadow that the job targets.
	VersionUpdateByJobsConfig *VersionUpdateByJobsConfig `locationName:"versionUpdateByJobsConfig" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePackageConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePackageConfigurationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdatePackageConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdatePackageConfigurationInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 36 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 36))
	}
	if s.VersionUpdateByJobsConfig != nil {
		if err := s.VersionUpdateByJobsConfig.Validate(); err != nil {
			invalidParams.AddNested("VersionUpdateByJobsConfig", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetClientToken sets the ClientToken field's value.
func (s *UpdatePackageConfigurationInput) SetClientToken(v string) *UpdatePackageConfigurationInput {
	s.ClientToken = &v
	return s
}

// SetVersionUpdateByJobsConfig sets the VersionUpdateByJobsConfig field's value.
func (s *UpdatePackageConfigurationInput) SetVersionUpdateByJobsConfig(v *VersionUpdateByJobsConfig) *UpdatePackageConfigurationInput {
	s.VersionUpdateByJobsConfig = v
	return s
}

type UpdatePackageConfigurationOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePackageConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePackageConfigurationOutput) GoString() string {
	return s.String()
}

type UpdatePackageInput struct {
	_ struct{} `type:"structure"`

	// A unique case-sensitive identifier that you can provide to ensure the idempotency
	// of the request. Don't reuse this client token if a new idempotent request
	// is required.
	ClientToken *string `location:"querystring" locationName:"clientToken" min:"36" type:"string" idempotencyToken:"true"`

	// The name of the default package version.
	//
	// Note: You cannot name a defaultVersion and set unsetDefaultVersion equal
	// to true at the same time.
	DefaultVersionName *string `locationName:"defaultVersionName" min:"1" type:"string"`

	// The package description.
	//
	// Description is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdatePackageInput's
	// String and GoString methods.
	Description *string `locationName:"description" type:"string" sensitive:"true"`

	// The name of the target software package.
	//
	// PackageName is a required field
	PackageName *string `location:"uri" locationName:"packageName" min:"1" type:"string" required:"true"`

	// Indicates whether you want to remove the named default package version from
	// the software package. Set as true to remove the default package version.
	//
	// Note: You cannot name a defaultVersion and set unsetDefaultVersion equal
	// to true at the same time.
	UnsetDefaultVersion *bool `locationName:"unsetDefaultVersion" type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePackageInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePackageInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdatePackageInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdatePackageInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 36 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 36))
	}
	if s.DefaultVersionName != nil && len(*s.DefaultVersionName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DefaultVersionName", 1))
	}
	if s.PackageName == nil {
		invalidParams.Add(request.NewErrParamRequired("PackageName"))
	}
	if s.PackageName != nil && len(*s.PackageName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PackageName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetClientToken sets the ClientToken field's value.
func (s *UpdatePackageInput) SetClientToken(v string) *UpdatePackageInput {
	s.ClientToken = &v
	return s
}

// SetDefaultVersionName sets the DefaultVersionName field's value.
func (s *UpdatePackageInput) SetDefaultVersionName(v string) *UpdatePackageInput {
	s.DefaultVersionName = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdatePackageInput) SetDescription(v string) *UpdatePackageInput {
	s.Description = &v
	return s
}

// SetPackageName sets the PackageName field's value.
func (s *UpdatePackageInput) SetPackageName(v string) *UpdatePackageInput {
	s.PackageName = &v
	return s
}

// SetUnsetDefaultVersion sets the UnsetDefaultVersion field's value.
func (s *UpdatePackageInput) SetUnsetDefaultVersion(v bool) *UpdatePackageInput {
	s.UnsetDefaultVersion = &v
	return s
}

type UpdatePackageOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePackageOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePackageOutput) GoString() string {
	return s.String()
}

type UpdatePackageVersionInput struct {
	_ struct{} `type:"structure"`

	// The status that the package version should be assigned. For more information,
	// see Package version lifecycle (https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#package-version-lifecycle).
	Action *string `locationName:"action" type:"string" enum:"PackageVersionAction"`

	// Metadata that can be used to define a package version’s configuration.
	// For example, the Amazon S3 file location, configuration options that are
	// being sent to the device or fleet.
	//
	// Note: Attributes can be updated only when the package version is in a draft
	// state.
	//
	// The combined size of all the attributes on a package version is limited to
	// 3KB.
	//
	// Attributes is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdatePackageVersionInput's
	// String and GoString methods.
	Attributes map[string]*string `locationName:"attributes" type:"map" sensitive:"true"`

	// A unique case-sensitive identifier that you can provide to ensure the idempotency
	// of the request. Don't reuse this client token if a new idempotent request
	// is required.
	ClientToken *string `location:"querystring" locationName:"clientToken" min:"36" type:"string" idempotencyToken:"true"`

	// The package version description.
	//
	// Description is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdatePackageVersionInput's
	// String and GoString methods.
	Description *string `locationName:"description" type:"string" sensitive:"true"`

	// The name of the associated software package.
	//
	// PackageName is a required field
	PackageName *string `location:"uri" locationName:"packageName" min:"1" type:"string" required:"true"`

	// The name of the target package version.
	//
	// VersionName is a required field
	VersionName *string `location:"uri" locationName:"versionName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePackageVersionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePackageVersionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdatePackageVersionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdatePackageVersionInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 36 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 36))
	}
	if s.PackageName == nil {
		invalidParams.Add(request.NewErrParamRequired("PackageName"))
	}
	if s.PackageName != nil && len(*s.PackageName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PackageName", 1))
	}
	if s.VersionName == nil {
		invalidParams.Add(request.NewErrParamRequired("VersionName"))
	}
	if s.VersionName != nil && len(*s.VersionName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("VersionName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAction sets the Action field's value.
func (s *UpdatePackageVersionInput) SetAction(v string) *UpdatePackageVersionInput {
	s.Action = &v
	return s
}

// SetAttributes sets the Attributes field's value.
func (s *UpdatePackageVersionInput) SetAttributes(v map[string]*string) *UpdatePackageVersionInput {
	s.Attributes = v
	return s
}

// SetClientToken sets the ClientToken field's value.
func (s *UpdatePackageVersionInput) SetClientToken(v string) *UpdatePackageVersionInput {
	s.ClientToken = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdatePackageVersionInput) SetDescription(v string) *UpdatePackageVersionInput {
	s.Description = &v
	return s
}

// SetPackageName sets the PackageName field's value.
func (s *UpdatePackageVersionInput) SetPackageName(v string) *UpdatePackageVersionInput {
	s.PackageName = &v
	return s
}

// SetVersionName sets the VersionName field's value.
func (s *UpdatePackageVersionInput) SetVersionName(v string) *UpdatePackageVersionInput {
	s.VersionName = &v
	return s
}

type UpdatePackageVersionOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePackageVersionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePackageVersionOutput) GoString() string {
	return s.String()
}

type UpdateProvisioningTemplateInput struct {
	_ struct{} `type:"structure"`

	// The ID of the default provisioning template version.
	DefaultVersionId *int64 `locationName:"defaultVersionId" type:"integer"`

	// The description of the provisioning template.
	Description *string `locationName:"description" type:"string"`

	// True to enable the provisioning template, otherwise false.
	Enabled *bool `locationName:"enabled" type:"boolean"`

	// Updates the pre-provisioning hook template. Only supports template of type
	// FLEET_PROVISIONING. For more information about provisioning template types,
	// see type (https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html#iot-CreateProvisioningTemplate-request-type).
	PreProvisioningHook *ProvisioningHook `locationName:"preProvisioningHook" type:"structure"`

	// The ARN of the role associated with the provisioning template. This IoT role
	// grants permission to provision a device.
	ProvisioningRoleArn *string `locationName:"provisioningRoleArn" min:"20" type:"string"`

	// Removes pre-provisioning hook template.
	RemovePreProvisioningHook *bool `locationName:"removePreProvisioningHook" type:"boolean"`

	// The name of the provisioning template.
	//
	// TemplateName is a required field
	TemplateName *string `location:"uri" locationName:"templateName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateProvisioningTemplateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateProvisioningTemplateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateProvisioningTemplateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateProvisioningTemplateInput"}
	if s.ProvisioningRoleArn != nil && len(*s.ProvisioningRoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("ProvisioningRoleArn", 20))
	}
	if s.TemplateName == nil {
		invalidParams.Add(request.NewErrParamRequired("TemplateName"))
	}
	if s.TemplateName != nil && len(*s.TemplateName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TemplateName", 1))
	}
	if s.PreProvisioningHook != nil {
		if err := s.PreProvisioningHook.Validate(); err != nil {
			invalidParams.AddNested("PreProvisioningHook", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDefaultVersionId sets the DefaultVersionId field's value.
func (s *UpdateProvisioningTemplateInput) SetDefaultVersionId(v int64) *UpdateProvisioningTemplateInput {
	s.DefaultVersionId = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdateProvisioningTemplateInput) SetDescription(v string) *UpdateProvisioningTemplateInput {
	s.Description = &v
	return s
}

// SetEnabled sets the Enabled field's value.
func (s *UpdateProvisioningTemplateInput) SetEnabled(v bool) *UpdateProvisioningTemplateInput {
	s.Enabled = &v
	return s
}

// SetPreProvisioningHook sets the PreProvisioningHook field's value.
func (s *UpdateProvisioningTemplateInput) SetPreProvisioningHook(v *ProvisioningHook) *UpdateProvisioningTemplateInput {
	s.PreProvisioningHook = v
	return s
}

// SetProvisioningRoleArn sets the ProvisioningRoleArn field's value.
func (s *UpdateProvisioningTemplateInput) SetProvisioningRoleArn(v string) *UpdateProvisioningTemplateInput {
	s.ProvisioningRoleArn = &v
	return s
}

// SetRemovePreProvisioningHook sets the RemovePreProvisioningHook field's value.
func (s *UpdateProvisioningTemplateInput) SetRemovePreProvisioningHook(v bool) *UpdateProvisioningTemplateInput {
	s.RemovePreProvisioningHook = &v
	return s
}

// SetTemplateName sets the TemplateName field's value.
func (s *UpdateProvisioningTemplateInput) SetTemplateName(v string) *UpdateProvisioningTemplateInput {
	s.TemplateName = &v
	return s
}

type UpdateProvisioningTemplateOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateProvisioningTemplateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateProvisioningTemplateOutput) GoString() string {
	return s.String()
}

type UpdateRoleAliasInput struct {
	_ struct{} `type:"structure"`

	// The number of seconds the credential will be valid.
	//
	// This value must be less than or equal to the maximum session duration of
	// the IAM role that the role alias references.
	CredentialDurationSeconds *int64 `locationName:"credentialDurationSeconds" min:"900" type:"integer"`

	// The role alias to update.
	//
	// RoleAlias is a required field
	RoleAlias *string `location:"uri" locationName:"roleAlias" min:"1" type:"string" required:"true"`

	// The role ARN.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateRoleAliasInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateRoleAliasInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateRoleAliasInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateRoleAliasInput"}
	if s.CredentialDurationSeconds != nil && *s.CredentialDurationSeconds < 900 {
		invalidParams.Add(request.NewErrParamMinValue("CredentialDurationSeconds", 900))
	}
	if s.RoleAlias == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleAlias"))
	}
	if s.RoleAlias != nil && len(*s.RoleAlias) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RoleAlias", 1))
	}
	if s.RoleArn != nil && len(*s.RoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCredentialDurationSeconds sets the CredentialDurationSeconds field's value.
func (s *UpdateRoleAliasInput) SetCredentialDurationSeconds(v int64) *UpdateRoleAliasInput {
	s.CredentialDurationSeconds = &v
	return s
}

// SetRoleAlias sets the RoleAlias field's value.
func (s *UpdateRoleAliasInput) SetRoleAlias(v string) *UpdateRoleAliasInput {
	s.RoleAlias = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *UpdateRoleAliasInput) SetRoleArn(v string) *UpdateRoleAliasInput {
	s.RoleArn = &v
	return s
}

type UpdateRoleAliasOutput struct {
	_ struct{} `type:"structure"`

	// The role alias.
	RoleAlias *string `locationName:"roleAlias" min:"1" type:"string"`

	// The role alias ARN.
	RoleAliasArn *string `locationName:"roleAliasArn" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateRoleAliasOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateRoleAliasOutput) GoString() string {
	return s.String()
}

// SetRoleAlias sets the RoleAlias field's value.
func (s *UpdateRoleAliasOutput) SetRoleAlias(v string) *UpdateRoleAliasOutput {
	s.RoleAlias = &v
	return s
}

// SetRoleAliasArn sets the RoleAliasArn field's value.
func (s *UpdateRoleAliasOutput) SetRoleAliasArn(v string) *UpdateRoleAliasOutput {
	s.RoleAliasArn = &v
	return s
}

type UpdateScheduledAuditInput struct {
	_ struct{} `type:"structure"`

	// The day of the month on which the scheduled audit takes place. This can be
	// 1 through 31 or LAST. This field is required if the frequency parameter is
	// set to MONTHLY. If days 29-31 are specified, and the month does not have
	// that many days, the audit takes place on the "LAST" day of the month.
	DayOfMonth *string `locationName:"dayOfMonth" type:"string"`

	// The day of the week on which the scheduled audit takes place. This can be
	// one of SUN, MON, TUE, WED, THU, FRI, or SAT. This field is required if the
	// "frequency" parameter is set to WEEKLY or BIWEEKLY.
	DayOfWeek *string `locationName:"dayOfWeek" type:"string" enum:"DayOfWeek"`

	// How often the scheduled audit takes place, either DAILY, WEEKLY, BIWEEKLY,
	// or MONTHLY. The start time of each audit is determined by the system.
	Frequency *string `locationName:"frequency" type:"string" enum:"AuditFrequency"`

	// The name of the scheduled audit. (Max. 128 chars)
	//
	// ScheduledAuditName is a required field
	ScheduledAuditName *string `location:"uri" locationName:"scheduledAuditName" min:"1" type:"string" required:"true"`

	// Which checks are performed during the scheduled audit. Checks must be enabled
	// for your account. (Use DescribeAccountAuditConfiguration to see the list
	// of all checks, including those that are enabled or use UpdateAccountAuditConfiguration
	// to select which checks are enabled.)
	TargetCheckNames []*string `locationName:"targetCheckNames" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateScheduledAuditInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateScheduledAuditInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateScheduledAuditInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateScheduledAuditInput"}
	if s.ScheduledAuditName == nil {
		invalidParams.Add(request.NewErrParamRequired("ScheduledAuditName"))
	}
	if s.ScheduledAuditName != nil && len(*s.ScheduledAuditName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ScheduledAuditName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDayOfMonth sets the DayOfMonth field's value.
func (s *UpdateScheduledAuditInput) SetDayOfMonth(v string) *UpdateScheduledAuditInput {
	s.DayOfMonth = &v
	return s
}

// SetDayOfWeek sets the DayOfWeek field's value.
func (s *UpdateScheduledAuditInput) SetDayOfWeek(v string) *UpdateScheduledAuditInput {
	s.DayOfWeek = &v
	return s
}

// SetFrequency sets the Frequency field's value.
func (s *UpdateScheduledAuditInput) SetFrequency(v string) *UpdateScheduledAuditInput {
	s.Frequency = &v
	return s
}

// SetScheduledAuditName sets the ScheduledAuditName field's value.
func (s *UpdateScheduledAuditInput) SetScheduledAuditName(v string) *UpdateScheduledAuditInput {
	s.ScheduledAuditName = &v
	return s
}

// SetTargetCheckNames sets the TargetCheckNames field's value.
func (s *UpdateScheduledAuditInput) SetTargetCheckNames(v []*string) *UpdateScheduledAuditInput {
	s.TargetCheckNames = v
	return s
}

type UpdateScheduledAuditOutput struct {
	_ struct{} `type:"structure"`

	// The ARN of the scheduled audit.
	ScheduledAuditArn *string `locationName:"scheduledAuditArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateScheduledAuditOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateScheduledAuditOutput) GoString() string {
	return s.String()
}

// SetScheduledAuditArn sets the ScheduledAuditArn field's value.
func (s *UpdateScheduledAuditOutput) SetScheduledAuditArn(v string) *UpdateScheduledAuditOutput {
	s.ScheduledAuditArn = &v
	return s
}

type UpdateSecurityProfileInput struct {
	_ struct{} `type:"structure"`

	// Please use UpdateSecurityProfileRequest$additionalMetricsToRetainV2 instead.
	//
	// A list of metrics whose data is retained (stored). By default, data is retained
	// for any metric used in the profile's behaviors, but it is also retained for
	// any metric specified here. Can be used with custom metrics; cannot be used
	// with dimensions.
	//
	// Deprecated: Use additionalMetricsToRetainV2.
	AdditionalMetricsToRetain []*string `locationName:"additionalMetricsToRetain" deprecated:"true" type:"list"`

	// A list of metrics whose data is retained (stored). By default, data is retained
	// for any metric used in the profile's behaviors, but it is also retained for
	// any metric specified here. Can be used with custom metrics; cannot be used
	// with dimensions.
	AdditionalMetricsToRetainV2 []*MetricToRetain `locationName:"additionalMetricsToRetainV2" type:"list"`

	// Where the alerts are sent. (Alerts are always sent to the console.)
	AlertTargets map[string]*AlertTarget `locationName:"alertTargets" type:"map"`

	// Specifies the behaviors that, when violated by a device (thing), cause an
	// alert.
	Behaviors []*Behavior `locationName:"behaviors" type:"list"`

	// If true, delete all additionalMetricsToRetain defined for this security profile.
	// If any additionalMetricsToRetain are defined in the current invocation, an
	// exception occurs.
	DeleteAdditionalMetricsToRetain *bool `locationName:"deleteAdditionalMetricsToRetain" type:"boolean"`

	// If true, delete all alertTargets defined for this security profile. If any
	// alertTargets are defined in the current invocation, an exception occurs.
	DeleteAlertTargets *bool `locationName:"deleteAlertTargets" type:"boolean"`

	// If true, delete all behaviors defined for this security profile. If any behaviors
	// are defined in the current invocation, an exception occurs.
	DeleteBehaviors *bool `locationName:"deleteBehaviors" type:"boolean"`

	// Set the value as true to delete metrics export related configurations.
	DeleteMetricsExportConfig *bool `locationName:"deleteMetricsExportConfig" type:"boolean"`

	// The expected version of the security profile. A new version is generated
	// whenever the security profile is updated. If you specify a value that is
	// different from the actual version, a VersionConflictException is thrown.
	ExpectedVersion *int64 `location:"querystring" locationName:"expectedVersion" type:"long"`

	// Specifies the MQTT topic and role ARN required for metric export.
	MetricsExportConfig *MetricsExportConfig `locationName:"metricsExportConfig" type:"structure"`

	// A description of the security profile.
	SecurityProfileDescription *string `locationName:"securityProfileDescription" type:"string"`

	// The name of the security profile you want to update.
	//
	// SecurityProfileName is a required field
	SecurityProfileName *string `location:"uri" locationName:"securityProfileName" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateSecurityProfileInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateSecurityProfileInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateSecurityProfileInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateSecurityProfileInput"}
	if s.SecurityProfileName == nil {
		invalidParams.Add(request.NewErrParamRequired("SecurityProfileName"))
	}
	if s.SecurityProfileName != nil && len(*s.SecurityProfileName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SecurityProfileName", 1))
	}
	if s.AdditionalMetricsToRetainV2 != nil {
		for i, v := range s.AdditionalMetricsToRetainV2 {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "AdditionalMetricsToRetainV2", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.AlertTargets != nil {
		for i, v := range s.AlertTargets {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "AlertTargets", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Behaviors != nil {
		for i, v := range s.Behaviors {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Behaviors", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.MetricsExportConfig != nil {
		if err := s.MetricsExportConfig.Validate(); err != nil {
			invalidParams.AddNested("MetricsExportConfig", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAdditionalMetricsToRetain sets the AdditionalMetricsToRetain field's value.
func (s *UpdateSecurityProfileInput) SetAdditionalMetricsToRetain(v []*string) *UpdateSecurityProfileInput {
	s.AdditionalMetricsToRetain = v
	return s
}

// SetAdditionalMetricsToRetainV2 sets the AdditionalMetricsToRetainV2 field's value.
func (s *UpdateSecurityProfileInput) SetAdditionalMetricsToRetainV2(v []*MetricToRetain) *UpdateSecurityProfileInput {
	s.AdditionalMetricsToRetainV2 = v
	return s
}

// SetAlertTargets sets the AlertTargets field's value.
func (s *UpdateSecurityProfileInput) SetAlertTargets(v map[string]*AlertTarget) *UpdateSecurityProfileInput {
	s.AlertTargets = v
	return s
}

// SetBehaviors sets the Behaviors field's value.
func (s *UpdateSecurityProfileInput) SetBehaviors(v []*Behavior) *UpdateSecurityProfileInput {
	s.Behaviors = v
	return s
}

// SetDeleteAdditionalMetricsToRetain sets the DeleteAdditionalMetricsToRetain field's value.
func (s *UpdateSecurityProfileInput) SetDeleteAdditionalMetricsToRetain(v bool) *UpdateSecurityProfileInput {
	s.DeleteAdditionalMetricsToRetain = &v
	return s
}

// SetDeleteAlertTargets sets the DeleteAlertTargets field's value.
func (s *UpdateSecurityProfileInput) SetDeleteAlertTargets(v bool) *UpdateSecurityProfileInput {
	s.DeleteAlertTargets = &v
	return s
}

// SetDeleteBehaviors sets the DeleteBehaviors field's value.
func (s *UpdateSecurityProfileInput) SetDeleteBehaviors(v bool) *UpdateSecurityProfileInput {
	s.DeleteBehaviors = &v
	return s
}

// SetDeleteMetricsExportConfig sets the DeleteMetricsExportConfig field's value.
func (s *UpdateSecurityProfileInput) SetDeleteMetricsExportConfig(v bool) *UpdateSecurityProfileInput {
	s.DeleteMetricsExportConfig = &v
	return s
}

// SetExpectedVersion sets the ExpectedVersion field's value.
func (s *UpdateSecurityProfileInput) SetExpectedVersion(v int64) *UpdateSecurityProfileInput {
	s.ExpectedVersion = &v
	return s
}

// SetMetricsExportConfig sets the MetricsExportConfig field's value.
func (s *UpdateSecurityProfileInput) SetMetricsExportConfig(v *MetricsExportConfig) *UpdateSecurityProfileInput {
	s.MetricsExportConfig = v
	return s
}

// SetSecurityProfileDescription sets the SecurityProfileDescription field's value.
func (s *UpdateSecurityProfileInput) SetSecurityProfileDescription(v string) *UpdateSecurityProfileInput {
	s.SecurityProfileDescription = &v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *UpdateSecurityProfileInput) SetSecurityProfileName(v string) *UpdateSecurityProfileInput {
	s.SecurityProfileName = &v
	return s
}

type UpdateSecurityProfileOutput struct {
	_ struct{} `type:"structure"`

	// Please use UpdateSecurityProfileResponse$additionalMetricsToRetainV2 instead.
	//
	// A list of metrics whose data is retained (stored). By default, data is retained
	// for any metric used in the security profile's behaviors, but it is also retained
	// for any metric specified here.
	//
	// Deprecated: Use additionalMetricsToRetainV2.
	AdditionalMetricsToRetain []*string `locationName:"additionalMetricsToRetain" deprecated:"true" type:"list"`

	// A list of metrics whose data is retained (stored). By default, data is retained
	// for any metric used in the profile's behaviors, but it is also retained for
	// any metric specified here. Can be used with custom metrics; cannot be used
	// with dimensions.
	AdditionalMetricsToRetainV2 []*MetricToRetain `locationName:"additionalMetricsToRetainV2" type:"list"`

	// Where the alerts are sent. (Alerts are always sent to the console.)
	AlertTargets map[string]*AlertTarget `locationName:"alertTargets" type:"map"`

	// Specifies the behaviors that, when violated by a device (thing), cause an
	// alert.
	Behaviors []*Behavior `locationName:"behaviors" type:"list"`

	// The time the security profile was created.
	CreationDate *time.Time `locationName:"creationDate" type:"timestamp"`

	// The time the security profile was last modified.
	LastModifiedDate *time.Time `locationName:"lastModifiedDate" type:"timestamp"`

	// Specifies the MQTT topic and role ARN required for metric export.
	MetricsExportConfig *MetricsExportConfig `locationName:"metricsExportConfig" type:"structure"`

	// The ARN of the security profile that was updated.
	SecurityProfileArn *string `locationName:"securityProfileArn" type:"string"`

	// The description of the security profile.
	SecurityProfileDescription *string `locationName:"securityProfileDescription" type:"string"`

	// The name of the security profile that was updated.
	SecurityProfileName *string `locationName:"securityProfileName" min:"1" type:"string"`

	// The updated version of the security profile.
	Version *int64 `locationName:"version" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateSecurityProfileOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateSecurityProfileOutput) GoString() string {
	return s.String()
}

// SetAdditionalMetricsToRetain sets the AdditionalMetricsToRetain field's value.
func (s *UpdateSecurityProfileOutput) SetAdditionalMetricsToRetain(v []*string) *UpdateSecurityProfileOutput {
	s.AdditionalMetricsToRetain = v
	return s
}

// SetAdditionalMetricsToRetainV2 sets the AdditionalMetricsToRetainV2 field's value.
func (s *UpdateSecurityProfileOutput) SetAdditionalMetricsToRetainV2(v []*MetricToRetain) *UpdateSecurityProfileOutput {
	s.AdditionalMetricsToRetainV2 = v
	return s
}

// SetAlertTargets sets the AlertTargets field's value.
func (s *UpdateSecurityProfileOutput) SetAlertTargets(v map[string]*AlertTarget) *UpdateSecurityProfileOutput {
	s.AlertTargets = v
	return s
}

// SetBehaviors sets the Behaviors field's value.
func (s *UpdateSecurityProfileOutput) SetBehaviors(v []*Behavior) *UpdateSecurityProfileOutput {
	s.Behaviors = v
	return s
}

// SetCreationDate sets the CreationDate field's value.
func (s *UpdateSecurityProfileOutput) SetCreationDate(v time.Time) *UpdateSecurityProfileOutput {
	s.CreationDate = &v
	return s
}

// SetLastModifiedDate sets the LastModifiedDate field's value.
func (s *UpdateSecurityProfileOutput) SetLastModifiedDate(v time.Time) *UpdateSecurityProfileOutput {
	s.LastModifiedDate = &v
	return s
}

// SetMetricsExportConfig sets the MetricsExportConfig field's value.
func (s *UpdateSecurityProfileOutput) SetMetricsExportConfig(v *MetricsExportConfig) *UpdateSecurityProfileOutput {
	s.MetricsExportConfig = v
	return s
}

// SetSecurityProfileArn sets the SecurityProfileArn field's value.
func (s *UpdateSecurityProfileOutput) SetSecurityProfileArn(v string) *UpdateSecurityProfileOutput {
	s.SecurityProfileArn = &v
	return s
}

// SetSecurityProfileDescription sets the SecurityProfileDescription field's value.
func (s *UpdateSecurityProfileOutput) SetSecurityProfileDescription(v string) *UpdateSecurityProfileOutput {
	s.SecurityProfileDescription = &v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *UpdateSecurityProfileOutput) SetSecurityProfileName(v string) *UpdateSecurityProfileOutput {
	s.SecurityProfileName = &v
	return s
}

// SetVersion sets the Version field's value.
func (s *UpdateSecurityProfileOutput) SetVersion(v int64) *UpdateSecurityProfileOutput {
	s.Version = &v
	return s
}

type UpdateStreamInput struct {
	_ struct{} `type:"structure"`

	// The description of the stream.
	Description *string `locationName:"description" type:"string"`

	// The files associated with the stream.
	Files []*StreamFile `locationName:"files" min:"1" type:"list"`

	// An IAM role that allows the IoT service principal assumes to access your
	// S3 files.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`

	// The stream ID.
	//
	// StreamId is a required field
	StreamId *string `location:"uri" locationName:"streamId" min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateStreamInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateStreamInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateStreamInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateStreamInput"}
	if s.Files != nil && len(s.Files) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Files", 1))
	}
	if s.RoleArn != nil && len(*s.RoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20))
	}
	if s.StreamId == nil {
		invalidParams.Add(request.NewErrParamRequired("StreamId"))
	}
	if s.StreamId != nil && len(*s.StreamId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("StreamId", 1))
	}
	if s.Files != nil {
		for i, v := range s.Files {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Files", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDescription sets the Description field's value.
func (s *UpdateStreamInput) SetDescription(v string) *UpdateStreamInput {
	s.Description = &v
	return s
}

// SetFiles sets the Files field's value.
func (s *UpdateStreamInput) SetFiles(v []*StreamFile) *UpdateStreamInput {
	s.Files = v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *UpdateStreamInput) SetRoleArn(v string) *UpdateStreamInput {
	s.RoleArn = &v
	return s
}

// SetStreamId sets the StreamId field's value.
func (s *UpdateStreamInput) SetStreamId(v string) *UpdateStreamInput {
	s.StreamId = &v
	return s
}

type UpdateStreamOutput struct {
	_ struct{} `type:"structure"`

	// A description of the stream.
	Description *string `locationName:"description" type:"string"`

	// The stream ARN.
	StreamArn *string `locationName:"streamArn" type:"string"`

	// The stream ID.
	StreamId *string `locationName:"streamId" min:"1" type:"string"`

	// The stream version.
	StreamVersion *int64 `locationName:"streamVersion" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateStreamOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateStreamOutput) GoString() string {
	return s.String()
}

// SetDescription sets the Description field's value.
func (s *UpdateStreamOutput) SetDescription(v string) *UpdateStreamOutput {
	s.Description = &v
	return s
}

// SetStreamArn sets the StreamArn field's value.
func (s *UpdateStreamOutput) SetStreamArn(v string) *UpdateStreamOutput {
	s.StreamArn = &v
	return s
}

// SetStreamId sets the StreamId field's value.
func (s *UpdateStreamOutput) SetStreamId(v string) *UpdateStreamOutput {
	s.StreamId = &v
	return s
}

// SetStreamVersion sets the StreamVersion field's value.
func (s *UpdateStreamOutput) SetStreamVersion(v int64) *UpdateStreamOutput {
	s.StreamVersion = &v
	return s
}

type UpdateThingGroupInput struct {
	_ struct{} `type:"structure"`

	// The expected version of the thing group. If this does not match the version
	// of the thing group being updated, the update will fail.
	ExpectedVersion *int64 `locationName:"expectedVersion" type:"long"`

	// The thing group to update.
	//
	// ThingGroupName is a required field
	ThingGroupName *string `location:"uri" locationName:"thingGroupName" min:"1" type:"string" required:"true"`

	// The thing group properties.
	//
	// ThingGroupProperties is a required field
	ThingGroupProperties *ThingGroupProperties `locationName:"thingGroupProperties" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateThingGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateThingGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateThingGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateThingGroupInput"}
	if s.ThingGroupName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingGroupName"))
	}
	if s.ThingGroupName != nil && len(*s.ThingGroupName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingGroupName", 1))
	}
	if s.ThingGroupProperties == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingGroupProperties"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExpectedVersion sets the ExpectedVersion field's value.
func (s *UpdateThingGroupInput) SetExpectedVersion(v int64) *UpdateThingGroupInput {
	s.ExpectedVersion = &v
	return s
}

// SetThingGroupName sets the ThingGroupName field's value.
func (s *UpdateThingGroupInput) SetThingGroupName(v string) *UpdateThingGroupInput {
	s.ThingGroupName = &v
	return s
}

// SetThingGroupProperties sets the ThingGroupProperties field's value.
func (s *UpdateThingGroupInput) SetThingGroupProperties(v *ThingGroupProperties) *UpdateThingGroupInput {
	s.ThingGroupProperties = v
	return s
}

type UpdateThingGroupOutput struct {
	_ struct{} `type:"structure"`

	// The version of the updated thing group.
	Version *int64 `locationName:"version" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateThingGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateThingGroupOutput) GoString() string {
	return s.String()
}

// SetVersion sets the Version field's value.
func (s *UpdateThingGroupOutput) SetVersion(v int64) *UpdateThingGroupOutput {
	s.Version = &v
	return s
}

type UpdateThingGroupsForThingInput struct {
	_ struct{} `type:"structure"`

	// Override dynamic thing groups with static thing groups when 10-group limit
	// is reached. If a thing belongs to 10 thing groups, and one or more of those
	// groups are dynamic thing groups, adding a thing to a static group removes
	// the thing from the last dynamic group.
	OverrideDynamicGroups *bool `locationName:"overrideDynamicGroups" type:"boolean"`

	// The groups to which the thing will be added.
	ThingGroupsToAdd []*string `locationName:"thingGroupsToAdd" type:"list"`

	// The groups from which the thing will be removed.
	ThingGroupsToRemove []*string `locationName:"thingGroupsToRemove" type:"list"`

	// The thing whose group memberships will be updated.
	ThingName *string `locationName:"thingName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateThingGroupsForThingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateThingGroupsForThingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateThingGroupsForThingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateThingGroupsForThingInput"}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetOverrideDynamicGroups sets the OverrideDynamicGroups field's value.
func (s *UpdateThingGroupsForThingInput) SetOverrideDynamicGroups(v bool) *UpdateThingGroupsForThingInput {
	s.OverrideDynamicGroups = &v
	return s
}

// SetThingGroupsToAdd sets the ThingGroupsToAdd field's value.
func (s *UpdateThingGroupsForThingInput) SetThingGroupsToAdd(v []*string) *UpdateThingGroupsForThingInput {
	s.ThingGroupsToAdd = v
	return s
}

// SetThingGroupsToRemove sets the ThingGroupsToRemove field's value.
func (s *UpdateThingGroupsForThingInput) SetThingGroupsToRemove(v []*string) *UpdateThingGroupsForThingInput {
	s.ThingGroupsToRemove = v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *UpdateThingGroupsForThingInput) SetThingName(v string) *UpdateThingGroupsForThingInput {
	s.ThingName = &v
	return s
}

type UpdateThingGroupsForThingOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateThingGroupsForThingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateThingGroupsForThingOutput) GoString() string {
	return s.String()
}

// The input for the UpdateThing operation.
type UpdateThingInput struct {
	_ struct{} `type:"structure"`

	// A list of thing attributes, a JSON string containing name-value pairs. For
	// example:
	//
	// {\"attributes\":{\"name1\":\"value2\"}}
	//
	// This data is used to add new attributes or update existing attributes.
	AttributePayload *AttributePayload `locationName:"attributePayload" type:"structure"`

	// The expected version of the thing record in the registry. If the version
	// of the record in the registry does not match the expected version specified
	// in the request, the UpdateThing request is rejected with a VersionConflictException.
	ExpectedVersion *int64 `locationName:"expectedVersion" type:"long"`

	// Remove a thing type association. If true, the association is removed.
	RemoveThingType *bool `locationName:"removeThingType" type:"boolean"`

	// The name of the thing to update.
	//
	// You can't change a thing's name. To change a thing's name, you must create
	// a new thing, give it the new name, and then delete the old thing.
	//
	// ThingName is a required field
	ThingName *string `location:"uri" locationName:"thingName" min:"1" type:"string" required:"true"`

	// The name of the thing type.
	ThingTypeName *string `locationName:"thingTypeName" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateThingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateThingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateThingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateThingInput"}
	if s.ThingName == nil {
		invalidParams.Add(request.NewErrParamRequired("ThingName"))
	}
	if s.ThingName != nil && len(*s.ThingName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingName", 1))
	}
	if s.ThingTypeName != nil && len(*s.ThingTypeName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ThingTypeName", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAttributePayload sets the AttributePayload field's value.
func (s *UpdateThingInput) SetAttributePayload(v *AttributePayload) *UpdateThingInput {
	s.AttributePayload = v
	return s
}

// SetExpectedVersion sets the ExpectedVersion field's value.
func (s *UpdateThingInput) SetExpectedVersion(v int64) *UpdateThingInput {
	s.ExpectedVersion = &v
	return s
}

// SetRemoveThingType sets the RemoveThingType field's value.
func (s *UpdateThingInput) SetRemoveThingType(v bool) *UpdateThingInput {
	s.RemoveThingType = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *UpdateThingInput) SetThingName(v string) *UpdateThingInput {
	s.ThingName = &v
	return s
}

// SetThingTypeName sets the ThingTypeName field's value.
func (s *UpdateThingInput) SetThingTypeName(v string) *UpdateThingInput {
	s.ThingTypeName = &v
	return s
}

// The output from the UpdateThing operation.
type UpdateThingOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateThingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateThingOutput) GoString() string {
	return s.String()
}

type UpdateTopicRuleDestinationInput struct {
	_ struct{} `type:"structure"`

	// The ARN of the topic rule destination.
	//
	// Arn is a required field
	Arn *string `locationName:"arn" type:"string" required:"true"`

	// The status of the topic rule destination. Valid values are:
	//
	// IN_PROGRESS
	//
	// A topic rule destination was created but has not been confirmed. You can
	// set status to IN_PROGRESS by calling UpdateTopicRuleDestination. Calling
	// UpdateTopicRuleDestination causes a new confirmation challenge to be sent
	// to your confirmation endpoint.
	//
	// ENABLED
	//
	// Confirmation was completed, and traffic to this destination is allowed. You
	// can set status to DISABLED by calling UpdateTopicRuleDestination.
	//
	// DISABLED
	//
	// Confirmation was completed, and traffic to this destination is not allowed.
	// You can set status to ENABLED by calling UpdateTopicRuleDestination.
	//
	// ERROR
	//
	// Confirmation could not be completed, for example if the confirmation timed
	// out. You can call GetTopicRuleDestination for details about the error. You
	// can set status to IN_PROGRESS by calling UpdateTopicRuleDestination. Calling
	// UpdateTopicRuleDestination causes a new confirmation challenge to be sent
	// to your confirmation endpoint.
	//
	// Status is a required field
	Status *string `locationName:"status" type:"string" required:"true" enum:"TopicRuleDestinationStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateTopicRuleDestinationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateTopicRuleDestinationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateTopicRuleDestinationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateTopicRuleDestinationInput"}
	if s.Arn == nil {
		invalidParams.Add(request.NewErrParamRequired("Arn"))
	}
	if s.Status == nil {
		invalidParams.Add(request.NewErrParamRequired("Status"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetArn sets the Arn field's value.
func (s *UpdateTopicRuleDestinationInput) SetArn(v string) *UpdateTopicRuleDestinationInput {
	s.Arn = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *UpdateTopicRuleDestinationInput) SetStatus(v string) *UpdateTopicRuleDestinationInput {
	s.Status = &v
	return s
}

type UpdateTopicRuleDestinationOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateTopicRuleDestinationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateTopicRuleDestinationOutput) GoString() string {
	return s.String()
}

// A key-value pair that you define in the header. Both the key and the value
// are either literal strings or valid substitution templates (https://docs.aws.amazon.com/iot/latest/developerguide/iot-substitution-templates.html).
type UserProperty struct {
	_ struct{} `type:"structure"`

	// A key to be specified in UserProperty.
	//
	// Key is a required field
	Key *string `locationName:"key" type:"string" required:"true"`

	// A value to be specified in UserProperty.
	//
	// Value is a required field
	Value *string `locationName:"value" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UserProperty) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UserProperty) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UserProperty) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UserProperty"}
	if s.Key == nil {
		invalidParams.Add(request.NewErrParamRequired("Key"))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetKey sets the Key field's value.
func (s *UserProperty) SetKey(v string) *UserProperty {
	s.Key = &v
	return s
}

// SetValue sets the Value field's value.
func (s *UserProperty) SetValue(v string) *UserProperty {
	s.Value = &v
	return s
}

type ValidateSecurityProfileBehaviorsInput struct {
	_ struct{} `type:"structure"`

	// Specifies the behaviors that, when violated by a device (thing), cause an
	// alert.
	//
	// Behaviors is a required field
	Behaviors []*Behavior `locationName:"behaviors" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ValidateSecurityProfileBehaviorsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ValidateSecurityProfileBehaviorsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ValidateSecurityProfileBehaviorsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ValidateSecurityProfileBehaviorsInput"}
	if s.Behaviors == nil {
		invalidParams.Add(request.NewErrParamRequired("Behaviors"))
	}
	if s.Behaviors != nil {
		for i, v := range s.Behaviors {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Behaviors", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBehaviors sets the Behaviors field's value.
func (s *ValidateSecurityProfileBehaviorsInput) SetBehaviors(v []*Behavior) *ValidateSecurityProfileBehaviorsInput {
	s.Behaviors = v
	return s
}

type ValidateSecurityProfileBehaviorsOutput struct {
	_ struct{} `type:"structure"`

	// True if the behaviors were valid.
	Valid *bool `locationName:"valid" type:"boolean"`

	// The list of any errors found in the behaviors.
	ValidationErrors []*ValidationError `locationName:"validationErrors" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ValidateSecurityProfileBehaviorsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ValidateSecurityProfileBehaviorsOutput) GoString() string {
	return s.String()
}

// SetValid sets the Valid field's value.
func (s *ValidateSecurityProfileBehaviorsOutput) SetValid(v bool) *ValidateSecurityProfileBehaviorsOutput {
	s.Valid = &v
	return s
}

// SetValidationErrors sets the ValidationErrors field's value.
func (s *ValidateSecurityProfileBehaviorsOutput) SetValidationErrors(v []*ValidationError) *ValidateSecurityProfileBehaviorsOutput {
	s.ValidationErrors = v
	return s
}

// Information about an error found in a behavior specification.
type ValidationError struct {
	_ struct{} `type:"structure"`

	// The description of an error found in the behaviors.
	ErrorMessage *string `locationName:"errorMessage" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ValidationError) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ValidationError) GoString() string {
	return s.String()
}

// SetErrorMessage sets the ErrorMessage field's value.
func (s *ValidationError) SetErrorMessage(v string) *ValidationError {
	s.ErrorMessage = &v
	return s
}

// The request is not valid.
type ValidationException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ValidationException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ValidationException) GoString() string {
	return s.String()
}

func newErrorValidationException(v protocol.ResponseMetadata) error {
	return &ValidationException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ValidationException) Code() string {
	return "ValidationException"
}

// Message returns the exception's message.
func (s *ValidationException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ValidationException) OrigErr() error {
	return nil
}

func (s *ValidationException) 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 *ValidationException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ValidationException) RequestID() string {
	return s.RespMetadata.RequestID
}

// An exception thrown when the version of an entity specified with the expectedVersion
// parameter does not match the latest version in the system.
type VersionConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VersionConflictException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VersionConflictException) GoString() string {
	return s.String()
}

func newErrorVersionConflictException(v protocol.ResponseMetadata) error {
	return &VersionConflictException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *VersionConflictException) Code() string {
	return "VersionConflictException"
}

// Message returns the exception's message.
func (s *VersionConflictException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *VersionConflictException) OrigErr() error {
	return nil
}

func (s *VersionConflictException) 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 *VersionConflictException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *VersionConflictException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Configuration to manage IoT Job's package version reporting. If configured,
// Jobs updates the thing's reserved named shadow with the package version information
// up on successful job completion.
//
// Note: For each job, the destinationPackageVersions attribute has to be set
// with the correct data for Jobs to report to the thing shadow.
type VersionUpdateByJobsConfig struct {
	_ struct{} `type:"structure"`

	// Indicates whether the Job is enabled or not.
	Enabled *bool `locationName:"enabled" type:"boolean"`

	// The Amazon Resource Name (ARN) of the role that grants permission to the
	// IoT jobs service to update the reserved named shadow when the job successfully
	// completes.
	RoleArn *string `locationName:"roleArn" min:"20" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VersionUpdateByJobsConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VersionUpdateByJobsConfig) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *VersionUpdateByJobsConfig) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "VersionUpdateByJobsConfig"}
	if s.RoleArn != nil && len(*s.RoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEnabled sets the Enabled field's value.
func (s *VersionUpdateByJobsConfig) SetEnabled(v bool) *VersionUpdateByJobsConfig {
	s.Enabled = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *VersionUpdateByJobsConfig) SetRoleArn(v string) *VersionUpdateByJobsConfig {
	s.RoleArn = &v
	return s
}

// The number of policy versions exceeds the limit.
type VersionsLimitExceededException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message for the exception.
	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VersionsLimitExceededException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VersionsLimitExceededException) GoString() string {
	return s.String()
}

func newErrorVersionsLimitExceededException(v protocol.ResponseMetadata) error {
	return &VersionsLimitExceededException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *VersionsLimitExceededException) Code() string {
	return "VersionsLimitExceededException"
}

// Message returns the exception's message.
func (s *VersionsLimitExceededException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *VersionsLimitExceededException) OrigErr() error {
	return nil
}

func (s *VersionsLimitExceededException) 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 *VersionsLimitExceededException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *VersionsLimitExceededException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Information about a Device Defender security profile behavior violation.
type ViolationEvent struct {
	_ struct{} `type:"structure"`

	// The behavior that was violated.
	Behavior *Behavior `locationName:"behavior" type:"structure"`

	// The value of the metric (the measurement).
	MetricValue *MetricValue `locationName:"metricValue" type:"structure"`

	// The name of the security profile whose behavior was violated.
	SecurityProfileName *string `locationName:"securityProfileName" min:"1" type:"string"`

	// The name of the thing responsible for the violation event.
	ThingName *string `locationName:"thingName" min:"1" type:"string"`

	// The verification state of the violation (detect alarm).
	VerificationState *string `locationName:"verificationState" type:"string" enum:"VerificationState"`

	// The description of the verification state of the violation.
	VerificationStateDescription *string `locationName:"verificationStateDescription" type:"string"`

	// The details of a violation event.
	ViolationEventAdditionalInfo *ViolationEventAdditionalInfo `locationName:"violationEventAdditionalInfo" type:"structure"`

	// The time the violation event occurred.
	ViolationEventTime *time.Time `locationName:"violationEventTime" type:"timestamp"`

	// The type of violation event.
	ViolationEventType *string `locationName:"violationEventType" type:"string" enum:"ViolationEventType"`

	// The ID of the violation event.
	ViolationId *string `locationName:"violationId" min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ViolationEvent) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ViolationEvent) GoString() string {
	return s.String()
}

// SetBehavior sets the Behavior field's value.
func (s *ViolationEvent) SetBehavior(v *Behavior) *ViolationEvent {
	s.Behavior = v
	return s
}

// SetMetricValue sets the MetricValue field's value.
func (s *ViolationEvent) SetMetricValue(v *MetricValue) *ViolationEvent {
	s.MetricValue = v
	return s
}

// SetSecurityProfileName sets the SecurityProfileName field's value.
func (s *ViolationEvent) SetSecurityProfileName(v string) *ViolationEvent {
	s.SecurityProfileName = &v
	return s
}

// SetThingName sets the ThingName field's value.
func (s *ViolationEvent) SetThingName(v string) *ViolationEvent {
	s.ThingName = &v
	return s
}

// SetVerificationState sets the VerificationState field's value.
func (s *ViolationEvent) SetVerificationState(v string) *ViolationEvent {
	s.VerificationState = &v
	return s
}

// SetVerificationStateDescription sets the VerificationStateDescription field's value.
func (s *ViolationEvent) SetVerificationStateDescription(v string) *ViolationEvent {
	s.VerificationStateDescription = &v
	return s
}

// SetViolationEventAdditionalInfo sets the ViolationEventAdditionalInfo field's value.
func (s *ViolationEvent) SetViolationEventAdditionalInfo(v *ViolationEventAdditionalInfo) *ViolationEvent {
	s.ViolationEventAdditionalInfo = v
	return s
}

// SetViolationEventTime sets the ViolationEventTime field's value.
func (s *ViolationEvent) SetViolationEventTime(v time.Time) *ViolationEvent {
	s.ViolationEventTime = &v
	return s
}

// SetViolationEventType sets the ViolationEventType field's value.
func (s *ViolationEvent) SetViolationEventType(v string) *ViolationEvent {
	s.ViolationEventType = &v
	return s
}

// SetViolationId sets the ViolationId field's value.
func (s *ViolationEvent) SetViolationId(v string) *ViolationEvent {
	s.ViolationId = &v
	return s
}

// The details of a violation event.
type ViolationEventAdditionalInfo struct {
	_ struct{} `type:"structure"`

	// The sensitivity of anomalous behavior evaluation. Can be Low, Medium, or
	// High.
	ConfidenceLevel *string `locationName:"confidenceLevel" type:"string" enum:"ConfidenceLevel"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ViolationEventAdditionalInfo) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ViolationEventAdditionalInfo) GoString() string {
	return s.String()
}

// SetConfidenceLevel sets the ConfidenceLevel field's value.
func (s *ViolationEventAdditionalInfo) SetConfidenceLevel(v string) *ViolationEventAdditionalInfo {
	s.ConfidenceLevel = &v
	return s
}

// Specifies the time period of which violation events occurred between.
type ViolationEventOccurrenceRange struct {
	_ struct{} `type:"structure"`

	// The end date and time of a time period in which violation events occurred.
	//
	// EndTime is a required field
	EndTime *time.Time `locationName:"endTime" type:"timestamp" required:"true"`

	// The start date and time of a time period in which violation events occurred.
	//
	// StartTime is a required field
	StartTime *time.Time `locationName:"startTime" type:"timestamp" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ViolationEventOccurrenceRange) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ViolationEventOccurrenceRange) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ViolationEventOccurrenceRange) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ViolationEventOccurrenceRange"}
	if s.EndTime == nil {
		invalidParams.Add(request.NewErrParamRequired("EndTime"))
	}
	if s.StartTime == nil {
		invalidParams.Add(request.NewErrParamRequired("StartTime"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEndTime sets the EndTime field's value.
func (s *ViolationEventOccurrenceRange) SetEndTime(v time.Time) *ViolationEventOccurrenceRange {
	s.EndTime = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *ViolationEventOccurrenceRange) SetStartTime(v time.Time) *ViolationEventOccurrenceRange {
	s.StartTime = &v
	return s
}

// The configuration information for a virtual private cloud (VPC) destination.
type VpcDestinationConfiguration struct {
	_ struct{} `type:"structure"`

	// The ARN of a role that has permission to create and attach to elastic network
	// interfaces (ENIs).
	//
	// RoleArn is a required field
	RoleArn *string `locationName:"roleArn" type:"string" required:"true"`

	// The security groups of the VPC destination.
	SecurityGroups []*string `locationName:"securityGroups" type:"list"`

	// The subnet IDs of the VPC destination.
	//
	// SubnetIds is a required field
	SubnetIds []*string `locationName:"subnetIds" type:"list" required:"true"`

	// The ID of the VPC.
	//
	// VpcId is a required field
	VpcId *string `locationName:"vpcId" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VpcDestinationConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VpcDestinationConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *VpcDestinationConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "VpcDestinationConfiguration"}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.SubnetIds == nil {
		invalidParams.Add(request.NewErrParamRequired("SubnetIds"))
	}
	if s.VpcId == nil {
		invalidParams.Add(request.NewErrParamRequired("VpcId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetRoleArn sets the RoleArn field's value.
func (s *VpcDestinationConfiguration) SetRoleArn(v string) *VpcDestinationConfiguration {
	s.RoleArn = &v
	return s
}

// SetSecurityGroups sets the SecurityGroups field's value.
func (s *VpcDestinationConfiguration) SetSecurityGroups(v []*string) *VpcDestinationConfiguration {
	s.SecurityGroups = v
	return s
}

// SetSubnetIds sets the SubnetIds field's value.
func (s *VpcDestinationConfiguration) SetSubnetIds(v []*string) *VpcDestinationConfiguration {
	s.SubnetIds = v
	return s
}

// SetVpcId sets the VpcId field's value.
func (s *VpcDestinationConfiguration) SetVpcId(v string) *VpcDestinationConfiguration {
	s.VpcId = &v
	return s
}

// The properties of a virtual private cloud (VPC) destination.
type VpcDestinationProperties struct {
	_ struct{} `type:"structure"`

	// The ARN of a role that has permission to create and attach to elastic network
	// interfaces (ENIs).
	RoleArn *string `locationName:"roleArn" type:"string"`

	// The security groups of the VPC destination.
	SecurityGroups []*string `locationName:"securityGroups" type:"list"`

	// The subnet IDs of the VPC destination.
	SubnetIds []*string `locationName:"subnetIds" type:"list"`

	// The ID of the VPC.
	VpcId *string `locationName:"vpcId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VpcDestinationProperties) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VpcDestinationProperties) GoString() string {
	return s.String()
}

// SetRoleArn sets the RoleArn field's value.
func (s *VpcDestinationProperties) SetRoleArn(v string) *VpcDestinationProperties {
	s.RoleArn = &v
	return s
}

// SetSecurityGroups sets the SecurityGroups field's value.
func (s *VpcDestinationProperties) SetSecurityGroups(v []*string) *VpcDestinationProperties {
	s.SecurityGroups = v
	return s
}

// SetSubnetIds sets the SubnetIds field's value.
func (s *VpcDestinationProperties) SetSubnetIds(v []*string) *VpcDestinationProperties {
	s.SubnetIds = v
	return s
}

// SetVpcId sets the VpcId field's value.
func (s *VpcDestinationProperties) SetVpcId(v string) *VpcDestinationProperties {
	s.VpcId = &v
	return s
}

// The summary of a virtual private cloud (VPC) destination.
type VpcDestinationSummary struct {
	_ struct{} `type:"structure"`

	// The ARN of a role that has permission to create and attach to elastic network
	// interfaces (ENIs).
	RoleArn *string `locationName:"roleArn" type:"string"`

	// The security groups of the VPC destination.
	SecurityGroups []*string `locationName:"securityGroups" type:"list"`

	// The subnet IDs of the VPC destination.
	SubnetIds []*string `locationName:"subnetIds" type:"list"`

	// The ID of the VPC.
	VpcId *string `locationName:"vpcId" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VpcDestinationSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VpcDestinationSummary) GoString() string {
	return s.String()
}

// SetRoleArn sets the RoleArn field's value.
func (s *VpcDestinationSummary) SetRoleArn(v string) *VpcDestinationSummary {
	s.RoleArn = &v
	return s
}

// SetSecurityGroups sets the SecurityGroups field's value.
func (s *VpcDestinationSummary) SetSecurityGroups(v []*string) *VpcDestinationSummary {
	s.SecurityGroups = v
	return s
}

// SetSubnetIds sets the SubnetIds field's value.
func (s *VpcDestinationSummary) SetSubnetIds(v []*string) *VpcDestinationSummary {
	s.SubnetIds = v
	return s
}

// SetVpcId sets the VpcId field's value.
func (s *VpcDestinationSummary) SetVpcId(v string) *VpcDestinationSummary {
	s.VpcId = &v
	return s
}

const (
	// AbortActionCancel is a AbortAction enum value
	AbortActionCancel = "CANCEL"
)

// AbortAction_Values returns all elements of the AbortAction enum
func AbortAction_Values() []string {
	return []string{
		AbortActionCancel,
	}
}

const (
	// ActionTypePublish is a ActionType enum value
	ActionTypePublish = "PUBLISH"

	// ActionTypeSubscribe is a ActionType enum value
	ActionTypeSubscribe = "SUBSCRIBE"

	// ActionTypeReceive is a ActionType enum value
	ActionTypeReceive = "RECEIVE"

	// ActionTypeConnect is a ActionType enum value
	ActionTypeConnect = "CONNECT"
)

// ActionType_Values returns all elements of the ActionType enum
func ActionType_Values() []string {
	return []string{
		ActionTypePublish,
		ActionTypeSubscribe,
		ActionTypeReceive,
		ActionTypeConnect,
	}
}

const (
	// AggregationTypeNameStatistics is a AggregationTypeName enum value
	AggregationTypeNameStatistics = "Statistics"

	// AggregationTypeNamePercentiles is a AggregationTypeName enum value
	AggregationTypeNamePercentiles = "Percentiles"

	// AggregationTypeNameCardinality is a AggregationTypeName enum value
	AggregationTypeNameCardinality = "Cardinality"
)

// AggregationTypeName_Values returns all elements of the AggregationTypeName enum
func AggregationTypeName_Values() []string {
	return []string{
		AggregationTypeNameStatistics,
		AggregationTypeNamePercentiles,
		AggregationTypeNameCardinality,
	}
}

// The type of alert target: one of "SNS".
const (
	// AlertTargetTypeSns is a AlertTargetType enum value
	AlertTargetTypeSns = "SNS"
)

// AlertTargetType_Values returns all elements of the AlertTargetType enum
func AlertTargetType_Values() []string {
	return []string{
		AlertTargetTypeSns,
	}
}

const (
	// AuditCheckRunStatusInProgress is a AuditCheckRunStatus enum value
	AuditCheckRunStatusInProgress = "IN_PROGRESS"

	// AuditCheckRunStatusWaitingForDataCollection is a AuditCheckRunStatus enum value
	AuditCheckRunStatusWaitingForDataCollection = "WAITING_FOR_DATA_COLLECTION"

	// AuditCheckRunStatusCanceled is a AuditCheckRunStatus enum value
	AuditCheckRunStatusCanceled = "CANCELED"

	// AuditCheckRunStatusCompletedCompliant is a AuditCheckRunStatus enum value
	AuditCheckRunStatusCompletedCompliant = "COMPLETED_COMPLIANT"

	// AuditCheckRunStatusCompletedNonCompliant is a AuditCheckRunStatus enum value
	AuditCheckRunStatusCompletedNonCompliant = "COMPLETED_NON_COMPLIANT"

	// AuditCheckRunStatusFailed is a AuditCheckRunStatus enum value
	AuditCheckRunStatusFailed = "FAILED"
)

// AuditCheckRunStatus_Values returns all elements of the AuditCheckRunStatus enum
func AuditCheckRunStatus_Values() []string {
	return []string{
		AuditCheckRunStatusInProgress,
		AuditCheckRunStatusWaitingForDataCollection,
		AuditCheckRunStatusCanceled,
		AuditCheckRunStatusCompletedCompliant,
		AuditCheckRunStatusCompletedNonCompliant,
		AuditCheckRunStatusFailed,
	}
}

const (
	// AuditFindingSeverityCritical is a AuditFindingSeverity enum value
	AuditFindingSeverityCritical = "CRITICAL"

	// AuditFindingSeverityHigh is a AuditFindingSeverity enum value
	AuditFindingSeverityHigh = "HIGH"

	// AuditFindingSeverityMedium is a AuditFindingSeverity enum value
	AuditFindingSeverityMedium = "MEDIUM"

	// AuditFindingSeverityLow is a AuditFindingSeverity enum value
	AuditFindingSeverityLow = "LOW"
)

// AuditFindingSeverity_Values returns all elements of the AuditFindingSeverity enum
func AuditFindingSeverity_Values() []string {
	return []string{
		AuditFindingSeverityCritical,
		AuditFindingSeverityHigh,
		AuditFindingSeverityMedium,
		AuditFindingSeverityLow,
	}
}

const (
	// AuditFrequencyDaily is a AuditFrequency enum value
	AuditFrequencyDaily = "DAILY"

	// AuditFrequencyWeekly is a AuditFrequency enum value
	AuditFrequencyWeekly = "WEEKLY"

	// AuditFrequencyBiweekly is a AuditFrequency enum value
	AuditFrequencyBiweekly = "BIWEEKLY"

	// AuditFrequencyMonthly is a AuditFrequency enum value
	AuditFrequencyMonthly = "MONTHLY"
)

// AuditFrequency_Values returns all elements of the AuditFrequency enum
func AuditFrequency_Values() []string {
	return []string{
		AuditFrequencyDaily,
		AuditFrequencyWeekly,
		AuditFrequencyBiweekly,
		AuditFrequencyMonthly,
	}
}

const (
	// AuditMitigationActionsExecutionStatusInProgress is a AuditMitigationActionsExecutionStatus enum value
	AuditMitigationActionsExecutionStatusInProgress = "IN_PROGRESS"

	// AuditMitigationActionsExecutionStatusCompleted is a AuditMitigationActionsExecutionStatus enum value
	AuditMitigationActionsExecutionStatusCompleted = "COMPLETED"

	// AuditMitigationActionsExecutionStatusFailed is a AuditMitigationActionsExecutionStatus enum value
	AuditMitigationActionsExecutionStatusFailed = "FAILED"

	// AuditMitigationActionsExecutionStatusCanceled is a AuditMitigationActionsExecutionStatus enum value
	AuditMitigationActionsExecutionStatusCanceled = "CANCELED"

	// AuditMitigationActionsExecutionStatusSkipped is a AuditMitigationActionsExecutionStatus enum value
	AuditMitigationActionsExecutionStatusSkipped = "SKIPPED"

	// AuditMitigationActionsExecutionStatusPending is a AuditMitigationActionsExecutionStatus enum value
	AuditMitigationActionsExecutionStatusPending = "PENDING"
)

// AuditMitigationActionsExecutionStatus_Values returns all elements of the AuditMitigationActionsExecutionStatus enum
func AuditMitigationActionsExecutionStatus_Values() []string {
	return []string{
		AuditMitigationActionsExecutionStatusInProgress,
		AuditMitigationActionsExecutionStatusCompleted,
		AuditMitigationActionsExecutionStatusFailed,
		AuditMitigationActionsExecutionStatusCanceled,
		AuditMitigationActionsExecutionStatusSkipped,
		AuditMitigationActionsExecutionStatusPending,
	}
}

const (
	// AuditMitigationActionsTaskStatusInProgress is a AuditMitigationActionsTaskStatus enum value
	AuditMitigationActionsTaskStatusInProgress = "IN_PROGRESS"

	// AuditMitigationActionsTaskStatusCompleted is a AuditMitigationActionsTaskStatus enum value
	AuditMitigationActionsTaskStatusCompleted = "COMPLETED"

	// AuditMitigationActionsTaskStatusFailed is a AuditMitigationActionsTaskStatus enum value
	AuditMitigationActionsTaskStatusFailed = "FAILED"

	// AuditMitigationActionsTaskStatusCanceled is a AuditMitigationActionsTaskStatus enum value
	AuditMitigationActionsTaskStatusCanceled = "CANCELED"
)

// AuditMitigationActionsTaskStatus_Values returns all elements of the AuditMitigationActionsTaskStatus enum
func AuditMitigationActionsTaskStatus_Values() []string {
	return []string{
		AuditMitigationActionsTaskStatusInProgress,
		AuditMitigationActionsTaskStatusCompleted,
		AuditMitigationActionsTaskStatusFailed,
		AuditMitigationActionsTaskStatusCanceled,
	}
}

const (
	// AuditNotificationTypeSns is a AuditNotificationType enum value
	AuditNotificationTypeSns = "SNS"
)

// AuditNotificationType_Values returns all elements of the AuditNotificationType enum
func AuditNotificationType_Values() []string {
	return []string{
		AuditNotificationTypeSns,
	}
}

const (
	// AuditTaskStatusInProgress is a AuditTaskStatus enum value
	AuditTaskStatusInProgress = "IN_PROGRESS"

	// AuditTaskStatusCompleted is a AuditTaskStatus enum value
	AuditTaskStatusCompleted = "COMPLETED"

	// AuditTaskStatusFailed is a AuditTaskStatus enum value
	AuditTaskStatusFailed = "FAILED"

	// AuditTaskStatusCanceled is a AuditTaskStatus enum value
	AuditTaskStatusCanceled = "CANCELED"
)

// AuditTaskStatus_Values returns all elements of the AuditTaskStatus enum
func AuditTaskStatus_Values() []string {
	return []string{
		AuditTaskStatusInProgress,
		AuditTaskStatusCompleted,
		AuditTaskStatusFailed,
		AuditTaskStatusCanceled,
	}
}

const (
	// AuditTaskTypeOnDemandAuditTask is a AuditTaskType enum value
	AuditTaskTypeOnDemandAuditTask = "ON_DEMAND_AUDIT_TASK"

	// AuditTaskTypeScheduledAuditTask is a AuditTaskType enum value
	AuditTaskTypeScheduledAuditTask = "SCHEDULED_AUDIT_TASK"
)

// AuditTaskType_Values returns all elements of the AuditTaskType enum
func AuditTaskType_Values() []string {
	return []string{
		AuditTaskTypeOnDemandAuditTask,
		AuditTaskTypeScheduledAuditTask,
	}
}

const (
	// AuthDecisionAllowed is a AuthDecision enum value
	AuthDecisionAllowed = "ALLOWED"

	// AuthDecisionExplicitDeny is a AuthDecision enum value
	AuthDecisionExplicitDeny = "EXPLICIT_DENY"

	// AuthDecisionImplicitDeny is a AuthDecision enum value
	AuthDecisionImplicitDeny = "IMPLICIT_DENY"
)

// AuthDecision_Values returns all elements of the AuthDecision enum
func AuthDecision_Values() []string {
	return []string{
		AuthDecisionAllowed,
		AuthDecisionExplicitDeny,
		AuthDecisionImplicitDeny,
	}
}

const (
	// AuthorizerStatusActive is a AuthorizerStatus enum value
	AuthorizerStatusActive = "ACTIVE"

	// AuthorizerStatusInactive is a AuthorizerStatus enum value
	AuthorizerStatusInactive = "INACTIVE"
)

// AuthorizerStatus_Values returns all elements of the AuthorizerStatus enum
func AuthorizerStatus_Values() []string {
	return []string{
		AuthorizerStatusActive,
		AuthorizerStatusInactive,
	}
}

const (
	// AutoRegistrationStatusEnable is a AutoRegistrationStatus enum value
	AutoRegistrationStatusEnable = "ENABLE"

	// AutoRegistrationStatusDisable is a AutoRegistrationStatus enum value
	AutoRegistrationStatusDisable = "DISABLE"
)

// AutoRegistrationStatus_Values returns all elements of the AutoRegistrationStatus enum
func AutoRegistrationStatus_Values() []string {
	return []string{
		AutoRegistrationStatusEnable,
		AutoRegistrationStatusDisable,
	}
}

const (
	// AwsJobAbortCriteriaAbortActionCancel is a AwsJobAbortCriteriaAbortAction enum value
	AwsJobAbortCriteriaAbortActionCancel = "CANCEL"
)

// AwsJobAbortCriteriaAbortAction_Values returns all elements of the AwsJobAbortCriteriaAbortAction enum
func AwsJobAbortCriteriaAbortAction_Values() []string {
	return []string{
		AwsJobAbortCriteriaAbortActionCancel,
	}
}

const (
	// AwsJobAbortCriteriaFailureTypeFailed is a AwsJobAbortCriteriaFailureType enum value
	AwsJobAbortCriteriaFailureTypeFailed = "FAILED"

	// AwsJobAbortCriteriaFailureTypeRejected is a AwsJobAbortCriteriaFailureType enum value
	AwsJobAbortCriteriaFailureTypeRejected = "REJECTED"

	// AwsJobAbortCriteriaFailureTypeTimedOut is a AwsJobAbortCriteriaFailureType enum value
	AwsJobAbortCriteriaFailureTypeTimedOut = "TIMED_OUT"

	// AwsJobAbortCriteriaFailureTypeAll is a AwsJobAbortCriteriaFailureType enum value
	AwsJobAbortCriteriaFailureTypeAll = "ALL"
)

// AwsJobAbortCriteriaFailureType_Values returns all elements of the AwsJobAbortCriteriaFailureType enum
func AwsJobAbortCriteriaFailureType_Values() []string {
	return []string{
		AwsJobAbortCriteriaFailureTypeFailed,
		AwsJobAbortCriteriaFailureTypeRejected,
		AwsJobAbortCriteriaFailureTypeTimedOut,
		AwsJobAbortCriteriaFailureTypeAll,
	}
}

const (
	// BehaviorCriteriaTypeStatic is a BehaviorCriteriaType enum value
	BehaviorCriteriaTypeStatic = "STATIC"

	// BehaviorCriteriaTypeStatistical is a BehaviorCriteriaType enum value
	BehaviorCriteriaTypeStatistical = "STATISTICAL"

	// BehaviorCriteriaTypeMachineLearning is a BehaviorCriteriaType enum value
	BehaviorCriteriaTypeMachineLearning = "MACHINE_LEARNING"
)

// BehaviorCriteriaType_Values returns all elements of the BehaviorCriteriaType enum
func BehaviorCriteriaType_Values() []string {
	return []string{
		BehaviorCriteriaTypeStatic,
		BehaviorCriteriaTypeStatistical,
		BehaviorCriteriaTypeMachineLearning,
	}
}

const (
	// CACertificateStatusActive is a CACertificateStatus enum value
	CACertificateStatusActive = "ACTIVE"

	// CACertificateStatusInactive is a CACertificateStatus enum value
	CACertificateStatusInactive = "INACTIVE"
)

// CACertificateStatus_Values returns all elements of the CACertificateStatus enum
func CACertificateStatus_Values() []string {
	return []string{
		CACertificateStatusActive,
		CACertificateStatusInactive,
	}
}

const (
	// CACertificateUpdateActionDeactivate is a CACertificateUpdateAction enum value
	CACertificateUpdateActionDeactivate = "DEACTIVATE"
)

// CACertificateUpdateAction_Values returns all elements of the CACertificateUpdateAction enum
func CACertificateUpdateAction_Values() []string {
	return []string{
		CACertificateUpdateActionDeactivate,
	}
}

const (
	// CannedAccessControlListPrivate is a CannedAccessControlList enum value
	CannedAccessControlListPrivate = "private"

	// CannedAccessControlListPublicRead is a CannedAccessControlList enum value
	CannedAccessControlListPublicRead = "public-read"

	// CannedAccessControlListPublicReadWrite is a CannedAccessControlList enum value
	CannedAccessControlListPublicReadWrite = "public-read-write"

	// CannedAccessControlListAwsExecRead is a CannedAccessControlList enum value
	CannedAccessControlListAwsExecRead = "aws-exec-read"

	// CannedAccessControlListAuthenticatedRead is a CannedAccessControlList enum value
	CannedAccessControlListAuthenticatedRead = "authenticated-read"

	// CannedAccessControlListBucketOwnerRead is a CannedAccessControlList enum value
	CannedAccessControlListBucketOwnerRead = "bucket-owner-read"

	// CannedAccessControlListBucketOwnerFullControl is a CannedAccessControlList enum value
	CannedAccessControlListBucketOwnerFullControl = "bucket-owner-full-control"

	// CannedAccessControlListLogDeliveryWrite is a CannedAccessControlList enum value
	CannedAccessControlListLogDeliveryWrite = "log-delivery-write"
)

// CannedAccessControlList_Values returns all elements of the CannedAccessControlList enum
func CannedAccessControlList_Values() []string {
	return []string{
		CannedAccessControlListPrivate,
		CannedAccessControlListPublicRead,
		CannedAccessControlListPublicReadWrite,
		CannedAccessControlListAwsExecRead,
		CannedAccessControlListAuthenticatedRead,
		CannedAccessControlListBucketOwnerRead,
		CannedAccessControlListBucketOwnerFullControl,
		CannedAccessControlListLogDeliveryWrite,
	}
}

const (
	// CertificateModeDefault is a CertificateMode enum value
	CertificateModeDefault = "DEFAULT"

	// CertificateModeSniOnly is a CertificateMode enum value
	CertificateModeSniOnly = "SNI_ONLY"
)

// CertificateMode_Values returns all elements of the CertificateMode enum
func CertificateMode_Values() []string {
	return []string{
		CertificateModeDefault,
		CertificateModeSniOnly,
	}
}

const (
	// CertificateProviderOperationCreateCertificateFromCsr is a CertificateProviderOperation enum value
	CertificateProviderOperationCreateCertificateFromCsr = "CreateCertificateFromCsr"
)

// CertificateProviderOperation_Values returns all elements of the CertificateProviderOperation enum
func CertificateProviderOperation_Values() []string {
	return []string{
		CertificateProviderOperationCreateCertificateFromCsr,
	}
}

const (
	// CertificateStatusActive is a CertificateStatus enum value
	CertificateStatusActive = "ACTIVE"

	// CertificateStatusInactive is a CertificateStatus enum value
	CertificateStatusInactive = "INACTIVE"

	// CertificateStatusRevoked is a CertificateStatus enum value
	CertificateStatusRevoked = "REVOKED"

	// CertificateStatusPendingTransfer is a CertificateStatus enum value
	CertificateStatusPendingTransfer = "PENDING_TRANSFER"

	// CertificateStatusRegisterInactive is a CertificateStatus enum value
	CertificateStatusRegisterInactive = "REGISTER_INACTIVE"

	// CertificateStatusPendingActivation is a CertificateStatus enum value
	CertificateStatusPendingActivation = "PENDING_ACTIVATION"
)

// CertificateStatus_Values returns all elements of the CertificateStatus enum
func CertificateStatus_Values() []string {
	return []string{
		CertificateStatusActive,
		CertificateStatusInactive,
		CertificateStatusRevoked,
		CertificateStatusPendingTransfer,
		CertificateStatusRegisterInactive,
		CertificateStatusPendingActivation,
	}
}

const (
	// ComparisonOperatorLessThan is a ComparisonOperator enum value
	ComparisonOperatorLessThan = "less-than"

	// ComparisonOperatorLessThanEquals is a ComparisonOperator enum value
	ComparisonOperatorLessThanEquals = "less-than-equals"

	// ComparisonOperatorGreaterThan is a ComparisonOperator enum value
	ComparisonOperatorGreaterThan = "greater-than"

	// ComparisonOperatorGreaterThanEquals is a ComparisonOperator enum value
	ComparisonOperatorGreaterThanEquals = "greater-than-equals"

	// ComparisonOperatorInCidrSet is a ComparisonOperator enum value
	ComparisonOperatorInCidrSet = "in-cidr-set"

	// ComparisonOperatorNotInCidrSet is a ComparisonOperator enum value
	ComparisonOperatorNotInCidrSet = "not-in-cidr-set"

	// ComparisonOperatorInPortSet is a ComparisonOperator enum value
	ComparisonOperatorInPortSet = "in-port-set"

	// ComparisonOperatorNotInPortSet is a ComparisonOperator enum value
	ComparisonOperatorNotInPortSet = "not-in-port-set"

	// ComparisonOperatorInSet is a ComparisonOperator enum value
	ComparisonOperatorInSet = "in-set"

	// ComparisonOperatorNotInSet is a ComparisonOperator enum value
	ComparisonOperatorNotInSet = "not-in-set"
)

// ComparisonOperator_Values returns all elements of the ComparisonOperator enum
func ComparisonOperator_Values() []string {
	return []string{
		ComparisonOperatorLessThan,
		ComparisonOperatorLessThanEquals,
		ComparisonOperatorGreaterThan,
		ComparisonOperatorGreaterThanEquals,
		ComparisonOperatorInCidrSet,
		ComparisonOperatorNotInCidrSet,
		ComparisonOperatorInPortSet,
		ComparisonOperatorNotInPortSet,
		ComparisonOperatorInSet,
		ComparisonOperatorNotInSet,
	}
}

const (
	// ConfidenceLevelLow is a ConfidenceLevel enum value
	ConfidenceLevelLow = "LOW"

	// ConfidenceLevelMedium is a ConfidenceLevel enum value
	ConfidenceLevelMedium = "MEDIUM"

	// ConfidenceLevelHigh is a ConfidenceLevel enum value
	ConfidenceLevelHigh = "HIGH"
)

// ConfidenceLevel_Values returns all elements of the ConfidenceLevel enum
func ConfidenceLevel_Values() []string {
	return []string{
		ConfidenceLevelLow,
		ConfidenceLevelMedium,
		ConfidenceLevelHigh,
	}
}

const (
	// CustomMetricTypeStringList is a CustomMetricType enum value
	CustomMetricTypeStringList = "string-list"

	// CustomMetricTypeIpAddressList is a CustomMetricType enum value
	CustomMetricTypeIpAddressList = "ip-address-list"

	// CustomMetricTypeNumberList is a CustomMetricType enum value
	CustomMetricTypeNumberList = "number-list"

	// CustomMetricTypeNumber is a CustomMetricType enum value
	CustomMetricTypeNumber = "number"
)

// CustomMetricType_Values returns all elements of the CustomMetricType enum
func CustomMetricType_Values() []string {
	return []string{
		CustomMetricTypeStringList,
		CustomMetricTypeIpAddressList,
		CustomMetricTypeNumberList,
		CustomMetricTypeNumber,
	}
}

const (
	// DayOfWeekSun is a DayOfWeek enum value
	DayOfWeekSun = "SUN"

	// DayOfWeekMon is a DayOfWeek enum value
	DayOfWeekMon = "MON"

	// DayOfWeekTue is a DayOfWeek enum value
	DayOfWeekTue = "TUE"

	// DayOfWeekWed is a DayOfWeek enum value
	DayOfWeekWed = "WED"

	// DayOfWeekThu is a DayOfWeek enum value
	DayOfWeekThu = "THU"

	// DayOfWeekFri is a DayOfWeek enum value
	DayOfWeekFri = "FRI"

	// DayOfWeekSat is a DayOfWeek enum value
	DayOfWeekSat = "SAT"
)

// DayOfWeek_Values returns all elements of the DayOfWeek enum
func DayOfWeek_Values() []string {
	return []string{
		DayOfWeekSun,
		DayOfWeekMon,
		DayOfWeekTue,
		DayOfWeekWed,
		DayOfWeekThu,
		DayOfWeekFri,
		DayOfWeekSat,
	}
}

const (
	// DetectMitigationActionExecutionStatusInProgress is a DetectMitigationActionExecutionStatus enum value
	DetectMitigationActionExecutionStatusInProgress = "IN_PROGRESS"

	// DetectMitigationActionExecutionStatusSuccessful is a DetectMitigationActionExecutionStatus enum value
	DetectMitigationActionExecutionStatusSuccessful = "SUCCESSFUL"

	// DetectMitigationActionExecutionStatusFailed is a DetectMitigationActionExecutionStatus enum value
	DetectMitigationActionExecutionStatusFailed = "FAILED"

	// DetectMitigationActionExecutionStatusSkipped is a DetectMitigationActionExecutionStatus enum value
	DetectMitigationActionExecutionStatusSkipped = "SKIPPED"
)

// DetectMitigationActionExecutionStatus_Values returns all elements of the DetectMitigationActionExecutionStatus enum
func DetectMitigationActionExecutionStatus_Values() []string {
	return []string{
		DetectMitigationActionExecutionStatusInProgress,
		DetectMitigationActionExecutionStatusSuccessful,
		DetectMitigationActionExecutionStatusFailed,
		DetectMitigationActionExecutionStatusSkipped,
	}
}

const (
	// DetectMitigationActionsTaskStatusInProgress is a DetectMitigationActionsTaskStatus enum value
	DetectMitigationActionsTaskStatusInProgress = "IN_PROGRESS"

	// DetectMitigationActionsTaskStatusSuccessful is a DetectMitigationActionsTaskStatus enum value
	DetectMitigationActionsTaskStatusSuccessful = "SUCCESSFUL"

	// DetectMitigationActionsTaskStatusFailed is a DetectMitigationActionsTaskStatus enum value
	DetectMitigationActionsTaskStatusFailed = "FAILED"

	// DetectMitigationActionsTaskStatusCanceled is a DetectMitigationActionsTaskStatus enum value
	DetectMitigationActionsTaskStatusCanceled = "CANCELED"
)

// DetectMitigationActionsTaskStatus_Values returns all elements of the DetectMitigationActionsTaskStatus enum
func DetectMitigationActionsTaskStatus_Values() []string {
	return []string{
		DetectMitigationActionsTaskStatusInProgress,
		DetectMitigationActionsTaskStatusSuccessful,
		DetectMitigationActionsTaskStatusFailed,
		DetectMitigationActionsTaskStatusCanceled,
	}
}

const (
	// DeviceCertificateUpdateActionDeactivate is a DeviceCertificateUpdateAction enum value
	DeviceCertificateUpdateActionDeactivate = "DEACTIVATE"
)

// DeviceCertificateUpdateAction_Values returns all elements of the DeviceCertificateUpdateAction enum
func DeviceCertificateUpdateAction_Values() []string {
	return []string{
		DeviceCertificateUpdateActionDeactivate,
	}
}

const (
	// DeviceDefenderIndexingModeOff is a DeviceDefenderIndexingMode enum value
	DeviceDefenderIndexingModeOff = "OFF"

	// DeviceDefenderIndexingModeViolations is a DeviceDefenderIndexingMode enum value
	DeviceDefenderIndexingModeViolations = "VIOLATIONS"
)

// DeviceDefenderIndexingMode_Values returns all elements of the DeviceDefenderIndexingMode enum
func DeviceDefenderIndexingMode_Values() []string {
	return []string{
		DeviceDefenderIndexingModeOff,
		DeviceDefenderIndexingModeViolations,
	}
}

const (
	// DimensionTypeTopicFilter is a DimensionType enum value
	DimensionTypeTopicFilter = "TOPIC_FILTER"
)

// DimensionType_Values returns all elements of the DimensionType enum
func DimensionType_Values() []string {
	return []string{
		DimensionTypeTopicFilter,
	}
}

const (
	// DimensionValueOperatorIn is a DimensionValueOperator enum value
	DimensionValueOperatorIn = "IN"

	// DimensionValueOperatorNotIn is a DimensionValueOperator enum value
	DimensionValueOperatorNotIn = "NOT_IN"
)

// DimensionValueOperator_Values returns all elements of the DimensionValueOperator enum
func DimensionValueOperator_Values() []string {
	return []string{
		DimensionValueOperatorIn,
		DimensionValueOperatorNotIn,
	}
}

const (
	// DomainConfigurationStatusEnabled is a DomainConfigurationStatus enum value
	DomainConfigurationStatusEnabled = "ENABLED"

	// DomainConfigurationStatusDisabled is a DomainConfigurationStatus enum value
	DomainConfigurationStatusDisabled = "DISABLED"
)

// DomainConfigurationStatus_Values returns all elements of the DomainConfigurationStatus enum
func DomainConfigurationStatus_Values() []string {
	return []string{
		DomainConfigurationStatusEnabled,
		DomainConfigurationStatusDisabled,
	}
}

const (
	// DomainTypeEndpoint is a DomainType enum value
	DomainTypeEndpoint = "ENDPOINT"

	// DomainTypeAwsManaged is a DomainType enum value
	DomainTypeAwsManaged = "AWS_MANAGED"

	// DomainTypeCustomerManaged is a DomainType enum value
	DomainTypeCustomerManaged = "CUSTOMER_MANAGED"
)

// DomainType_Values returns all elements of the DomainType enum
func DomainType_Values() []string {
	return []string{
		DomainTypeEndpoint,
		DomainTypeAwsManaged,
		DomainTypeCustomerManaged,
	}
}

const (
	// DynamicGroupStatusActive is a DynamicGroupStatus enum value
	DynamicGroupStatusActive = "ACTIVE"

	// DynamicGroupStatusBuilding is a DynamicGroupStatus enum value
	DynamicGroupStatusBuilding = "BUILDING"

	// DynamicGroupStatusRebuilding is a DynamicGroupStatus enum value
	DynamicGroupStatusRebuilding = "REBUILDING"
)

// DynamicGroupStatus_Values returns all elements of the DynamicGroupStatus enum
func DynamicGroupStatus_Values() []string {
	return []string{
		DynamicGroupStatusActive,
		DynamicGroupStatusBuilding,
		DynamicGroupStatusRebuilding,
	}
}

const (
	// DynamoKeyTypeString is a DynamoKeyType enum value
	DynamoKeyTypeString = "STRING"

	// DynamoKeyTypeNumber is a DynamoKeyType enum value
	DynamoKeyTypeNumber = "NUMBER"
)

// DynamoKeyType_Values returns all elements of the DynamoKeyType enum
func DynamoKeyType_Values() []string {
	return []string{
		DynamoKeyTypeString,
		DynamoKeyTypeNumber,
	}
}

const (
	// EventTypeThing is a EventType enum value
	EventTypeThing = "THING"

	// EventTypeThingGroup is a EventType enum value
	EventTypeThingGroup = "THING_GROUP"

	// EventTypeThingType is a EventType enum value
	EventTypeThingType = "THING_TYPE"

	// EventTypeThingGroupMembership is a EventType enum value
	EventTypeThingGroupMembership = "THING_GROUP_MEMBERSHIP"

	// EventTypeThingGroupHierarchy is a EventType enum value
	EventTypeThingGroupHierarchy = "THING_GROUP_HIERARCHY"

	// EventTypeThingTypeAssociation is a EventType enum value
	EventTypeThingTypeAssociation = "THING_TYPE_ASSOCIATION"

	// EventTypeJob is a EventType enum value
	EventTypeJob = "JOB"

	// EventTypeJobExecution is a EventType enum value
	EventTypeJobExecution = "JOB_EXECUTION"

	// EventTypePolicy is a EventType enum value
	EventTypePolicy = "POLICY"

	// EventTypeCertificate is a EventType enum value
	EventTypeCertificate = "CERTIFICATE"

	// EventTypeCaCertificate is a EventType enum value
	EventTypeCaCertificate = "CA_CERTIFICATE"
)

// EventType_Values returns all elements of the EventType enum
func EventType_Values() []string {
	return []string{
		EventTypeThing,
		EventTypeThingGroup,
		EventTypeThingType,
		EventTypeThingGroupMembership,
		EventTypeThingGroupHierarchy,
		EventTypeThingTypeAssociation,
		EventTypeJob,
		EventTypeJobExecution,
		EventTypePolicy,
		EventTypeCertificate,
		EventTypeCaCertificate,
	}
}

const (
	// FieldTypeNumber is a FieldType enum value
	FieldTypeNumber = "Number"

	// FieldTypeString is a FieldType enum value
	FieldTypeString = "String"

	// FieldTypeBoolean is a FieldType enum value
	FieldTypeBoolean = "Boolean"
)

// FieldType_Values returns all elements of the FieldType enum
func FieldType_Values() []string {
	return []string{
		FieldTypeNumber,
		FieldTypeString,
		FieldTypeBoolean,
	}
}

const (
	// FleetMetricUnitSeconds is a FleetMetricUnit enum value
	FleetMetricUnitSeconds = "Seconds"

	// FleetMetricUnitMicroseconds is a FleetMetricUnit enum value
	FleetMetricUnitMicroseconds = "Microseconds"

	// FleetMetricUnitMilliseconds is a FleetMetricUnit enum value
	FleetMetricUnitMilliseconds = "Milliseconds"

	// FleetMetricUnitBytes is a FleetMetricUnit enum value
	FleetMetricUnitBytes = "Bytes"

	// FleetMetricUnitKilobytes is a FleetMetricUnit enum value
	FleetMetricUnitKilobytes = "Kilobytes"

	// FleetMetricUnitMegabytes is a FleetMetricUnit enum value
	FleetMetricUnitMegabytes = "Megabytes"

	// FleetMetricUnitGigabytes is a FleetMetricUnit enum value
	FleetMetricUnitGigabytes = "Gigabytes"

	// FleetMetricUnitTerabytes is a FleetMetricUnit enum value
	FleetMetricUnitTerabytes = "Terabytes"

	// FleetMetricUnitBits is a FleetMetricUnit enum value
	FleetMetricUnitBits = "Bits"

	// FleetMetricUnitKilobits is a FleetMetricUnit enum value
	FleetMetricUnitKilobits = "Kilobits"

	// FleetMetricUnitMegabits is a FleetMetricUnit enum value
	FleetMetricUnitMegabits = "Megabits"

	// FleetMetricUnitGigabits is a FleetMetricUnit enum value
	FleetMetricUnitGigabits = "Gigabits"

	// FleetMetricUnitTerabits is a FleetMetricUnit enum value
	FleetMetricUnitTerabits = "Terabits"

	// FleetMetricUnitPercent is a FleetMetricUnit enum value
	FleetMetricUnitPercent = "Percent"

	// FleetMetricUnitCount is a FleetMetricUnit enum value
	FleetMetricUnitCount = "Count"

	// FleetMetricUnitBytesSecond is a FleetMetricUnit enum value
	FleetMetricUnitBytesSecond = "Bytes/Second"

	// FleetMetricUnitKilobytesSecond is a FleetMetricUnit enum value
	FleetMetricUnitKilobytesSecond = "Kilobytes/Second"

	// FleetMetricUnitMegabytesSecond is a FleetMetricUnit enum value
	FleetMetricUnitMegabytesSecond = "Megabytes/Second"

	// FleetMetricUnitGigabytesSecond is a FleetMetricUnit enum value
	FleetMetricUnitGigabytesSecond = "Gigabytes/Second"

	// FleetMetricUnitTerabytesSecond is a FleetMetricUnit enum value
	FleetMetricUnitTerabytesSecond = "Terabytes/Second"

	// FleetMetricUnitBitsSecond is a FleetMetricUnit enum value
	FleetMetricUnitBitsSecond = "Bits/Second"

	// FleetMetricUnitKilobitsSecond is a FleetMetricUnit enum value
	FleetMetricUnitKilobitsSecond = "Kilobits/Second"

	// FleetMetricUnitMegabitsSecond is a FleetMetricUnit enum value
	FleetMetricUnitMegabitsSecond = "Megabits/Second"

	// FleetMetricUnitGigabitsSecond is a FleetMetricUnit enum value
	FleetMetricUnitGigabitsSecond = "Gigabits/Second"

	// FleetMetricUnitTerabitsSecond is a FleetMetricUnit enum value
	FleetMetricUnitTerabitsSecond = "Terabits/Second"

	// FleetMetricUnitCountSecond is a FleetMetricUnit enum value
	FleetMetricUnitCountSecond = "Count/Second"

	// FleetMetricUnitNone is a FleetMetricUnit enum value
	FleetMetricUnitNone = "None"
)

// FleetMetricUnit_Values returns all elements of the FleetMetricUnit enum
func FleetMetricUnit_Values() []string {
	return []string{
		FleetMetricUnitSeconds,
		FleetMetricUnitMicroseconds,
		FleetMetricUnitMilliseconds,
		FleetMetricUnitBytes,
		FleetMetricUnitKilobytes,
		FleetMetricUnitMegabytes,
		FleetMetricUnitGigabytes,
		FleetMetricUnitTerabytes,
		FleetMetricUnitBits,
		FleetMetricUnitKilobits,
		FleetMetricUnitMegabits,
		FleetMetricUnitGigabits,
		FleetMetricUnitTerabits,
		FleetMetricUnitPercent,
		FleetMetricUnitCount,
		FleetMetricUnitBytesSecond,
		FleetMetricUnitKilobytesSecond,
		FleetMetricUnitMegabytesSecond,
		FleetMetricUnitGigabytesSecond,
		FleetMetricUnitTerabytesSecond,
		FleetMetricUnitBitsSecond,
		FleetMetricUnitKilobitsSecond,
		FleetMetricUnitMegabitsSecond,
		FleetMetricUnitGigabitsSecond,
		FleetMetricUnitTerabitsSecond,
		FleetMetricUnitCountSecond,
		FleetMetricUnitNone,
	}
}

const (
	// IndexStatusActive is a IndexStatus enum value
	IndexStatusActive = "ACTIVE"

	// IndexStatusBuilding is a IndexStatus enum value
	IndexStatusBuilding = "BUILDING"

	// IndexStatusRebuilding is a IndexStatus enum value
	IndexStatusRebuilding = "REBUILDING"
)

// IndexStatus_Values returns all elements of the IndexStatus enum
func IndexStatus_Values() []string {
	return []string{
		IndexStatusActive,
		IndexStatusBuilding,
		IndexStatusRebuilding,
	}
}

const (
	// JobEndBehaviorStopRollout is a JobEndBehavior enum value
	JobEndBehaviorStopRollout = "STOP_ROLLOUT"

	// JobEndBehaviorCancel is a JobEndBehavior enum value
	JobEndBehaviorCancel = "CANCEL"

	// JobEndBehaviorForceCancel is a JobEndBehavior enum value
	JobEndBehaviorForceCancel = "FORCE_CANCEL"
)

// JobEndBehavior_Values returns all elements of the JobEndBehavior enum
func JobEndBehavior_Values() []string {
	return []string{
		JobEndBehaviorStopRollout,
		JobEndBehaviorCancel,
		JobEndBehaviorForceCancel,
	}
}

const (
	// JobExecutionFailureTypeFailed is a JobExecutionFailureType enum value
	JobExecutionFailureTypeFailed = "FAILED"

	// JobExecutionFailureTypeRejected is a JobExecutionFailureType enum value
	JobExecutionFailureTypeRejected = "REJECTED"

	// JobExecutionFailureTypeTimedOut is a JobExecutionFailureType enum value
	JobExecutionFailureTypeTimedOut = "TIMED_OUT"

	// JobExecutionFailureTypeAll is a JobExecutionFailureType enum value
	JobExecutionFailureTypeAll = "ALL"
)

// JobExecutionFailureType_Values returns all elements of the JobExecutionFailureType enum
func JobExecutionFailureType_Values() []string {
	return []string{
		JobExecutionFailureTypeFailed,
		JobExecutionFailureTypeRejected,
		JobExecutionFailureTypeTimedOut,
		JobExecutionFailureTypeAll,
	}
}

const (
	// JobExecutionStatusQueued is a JobExecutionStatus enum value
	JobExecutionStatusQueued = "QUEUED"

	// JobExecutionStatusInProgress is a JobExecutionStatus enum value
	JobExecutionStatusInProgress = "IN_PROGRESS"

	// JobExecutionStatusSucceeded is a JobExecutionStatus enum value
	JobExecutionStatusSucceeded = "SUCCEEDED"

	// JobExecutionStatusFailed is a JobExecutionStatus enum value
	JobExecutionStatusFailed = "FAILED"

	// JobExecutionStatusTimedOut is a JobExecutionStatus enum value
	JobExecutionStatusTimedOut = "TIMED_OUT"

	// JobExecutionStatusRejected is a JobExecutionStatus enum value
	JobExecutionStatusRejected = "REJECTED"

	// JobExecutionStatusRemoved is a JobExecutionStatus enum value
	JobExecutionStatusRemoved = "REMOVED"

	// JobExecutionStatusCanceled is a JobExecutionStatus enum value
	JobExecutionStatusCanceled = "CANCELED"
)

// JobExecutionStatus_Values returns all elements of the JobExecutionStatus enum
func JobExecutionStatus_Values() []string {
	return []string{
		JobExecutionStatusQueued,
		JobExecutionStatusInProgress,
		JobExecutionStatusSucceeded,
		JobExecutionStatusFailed,
		JobExecutionStatusTimedOut,
		JobExecutionStatusRejected,
		JobExecutionStatusRemoved,
		JobExecutionStatusCanceled,
	}
}

const (
	// JobStatusInProgress is a JobStatus enum value
	JobStatusInProgress = "IN_PROGRESS"

	// JobStatusCanceled is a JobStatus enum value
	JobStatusCanceled = "CANCELED"

	// JobStatusCompleted is a JobStatus enum value
	JobStatusCompleted = "COMPLETED"

	// JobStatusDeletionInProgress is a JobStatus enum value
	JobStatusDeletionInProgress = "DELETION_IN_PROGRESS"

	// JobStatusScheduled is a JobStatus enum value
	JobStatusScheduled = "SCHEDULED"
)

// JobStatus_Values returns all elements of the JobStatus enum
func JobStatus_Values() []string {
	return []string{
		JobStatusInProgress,
		JobStatusCanceled,
		JobStatusCompleted,
		JobStatusDeletionInProgress,
		JobStatusScheduled,
	}
}

const (
	// LogLevelDebug is a LogLevel enum value
	LogLevelDebug = "DEBUG"

	// LogLevelInfo is a LogLevel enum value
	LogLevelInfo = "INFO"

	// LogLevelError is a LogLevel enum value
	LogLevelError = "ERROR"

	// LogLevelWarn is a LogLevel enum value
	LogLevelWarn = "WARN"

	// LogLevelDisabled is a LogLevel enum value
	LogLevelDisabled = "DISABLED"
)

// LogLevel_Values returns all elements of the LogLevel enum
func LogLevel_Values() []string {
	return []string{
		LogLevelDebug,
		LogLevelInfo,
		LogLevelError,
		LogLevelWarn,
		LogLevelDisabled,
	}
}

const (
	// LogTargetTypeDefault is a LogTargetType enum value
	LogTargetTypeDefault = "DEFAULT"

	// LogTargetTypeThingGroup is a LogTargetType enum value
	LogTargetTypeThingGroup = "THING_GROUP"

	// LogTargetTypeClientId is a LogTargetType enum value
	LogTargetTypeClientId = "CLIENT_ID"

	// LogTargetTypeSourceIp is a LogTargetType enum value
	LogTargetTypeSourceIp = "SOURCE_IP"

	// LogTargetTypePrincipalId is a LogTargetType enum value
	LogTargetTypePrincipalId = "PRINCIPAL_ID"
)

// LogTargetType_Values returns all elements of the LogTargetType enum
func LogTargetType_Values() []string {
	return []string{
		LogTargetTypeDefault,
		LogTargetTypeThingGroup,
		LogTargetTypeClientId,
		LogTargetTypeSourceIp,
		LogTargetTypePrincipalId,
	}
}

const (
	// MessageFormatRaw is a MessageFormat enum value
	MessageFormatRaw = "RAW"

	// MessageFormatJson is a MessageFormat enum value
	MessageFormatJson = "JSON"
)

// MessageFormat_Values returns all elements of the MessageFormat enum
func MessageFormat_Values() []string {
	return []string{
		MessageFormatRaw,
		MessageFormatJson,
	}
}

const (
	// MitigationActionTypeUpdateDeviceCertificate is a MitigationActionType enum value
	MitigationActionTypeUpdateDeviceCertificate = "UPDATE_DEVICE_CERTIFICATE"

	// MitigationActionTypeUpdateCaCertificate is a MitigationActionType enum value
	MitigationActionTypeUpdateCaCertificate = "UPDATE_CA_CERTIFICATE"

	// MitigationActionTypeAddThingsToThingGroup is a MitigationActionType enum value
	MitigationActionTypeAddThingsToThingGroup = "ADD_THINGS_TO_THING_GROUP"

	// MitigationActionTypeReplaceDefaultPolicyVersion is a MitigationActionType enum value
	MitigationActionTypeReplaceDefaultPolicyVersion = "REPLACE_DEFAULT_POLICY_VERSION"

	// MitigationActionTypeEnableIotLogging is a MitigationActionType enum value
	MitigationActionTypeEnableIotLogging = "ENABLE_IOT_LOGGING"

	// MitigationActionTypePublishFindingToSns is a MitigationActionType enum value
	MitigationActionTypePublishFindingToSns = "PUBLISH_FINDING_TO_SNS"
)

// MitigationActionType_Values returns all elements of the MitigationActionType enum
func MitigationActionType_Values() []string {
	return []string{
		MitigationActionTypeUpdateDeviceCertificate,
		MitigationActionTypeUpdateCaCertificate,
		MitigationActionTypeAddThingsToThingGroup,
		MitigationActionTypeReplaceDefaultPolicyVersion,
		MitigationActionTypeEnableIotLogging,
		MitigationActionTypePublishFindingToSns,
	}
}

const (
	// ModelStatusPendingBuild is a ModelStatus enum value
	ModelStatusPendingBuild = "PENDING_BUILD"

	// ModelStatusActive is a ModelStatus enum value
	ModelStatusActive = "ACTIVE"

	// ModelStatusExpired is a ModelStatus enum value
	ModelStatusExpired = "EXPIRED"
)

// ModelStatus_Values returns all elements of the ModelStatus enum
func ModelStatus_Values() []string {
	return []string{
		ModelStatusPendingBuild,
		ModelStatusActive,
		ModelStatusExpired,
	}
}

const (
	// NamedShadowIndexingModeOff is a NamedShadowIndexingMode enum value
	NamedShadowIndexingModeOff = "OFF"

	// NamedShadowIndexingModeOn is a NamedShadowIndexingMode enum value
	NamedShadowIndexingModeOn = "ON"
)

// NamedShadowIndexingMode_Values returns all elements of the NamedShadowIndexingMode enum
func NamedShadowIndexingMode_Values() []string {
	return []string{
		NamedShadowIndexingModeOff,
		NamedShadowIndexingModeOn,
	}
}

const (
	// OTAUpdateStatusCreatePending is a OTAUpdateStatus enum value
	OTAUpdateStatusCreatePending = "CREATE_PENDING"

	// OTAUpdateStatusCreateInProgress is a OTAUpdateStatus enum value
	OTAUpdateStatusCreateInProgress = "CREATE_IN_PROGRESS"

	// OTAUpdateStatusCreateComplete is a OTAUpdateStatus enum value
	OTAUpdateStatusCreateComplete = "CREATE_COMPLETE"

	// OTAUpdateStatusCreateFailed is a OTAUpdateStatus enum value
	OTAUpdateStatusCreateFailed = "CREATE_FAILED"

	// OTAUpdateStatusDeleteInProgress is a OTAUpdateStatus enum value
	OTAUpdateStatusDeleteInProgress = "DELETE_IN_PROGRESS"

	// OTAUpdateStatusDeleteFailed is a OTAUpdateStatus enum value
	OTAUpdateStatusDeleteFailed = "DELETE_FAILED"
)

// OTAUpdateStatus_Values returns all elements of the OTAUpdateStatus enum
func OTAUpdateStatus_Values() []string {
	return []string{
		OTAUpdateStatusCreatePending,
		OTAUpdateStatusCreateInProgress,
		OTAUpdateStatusCreateComplete,
		OTAUpdateStatusCreateFailed,
		OTAUpdateStatusDeleteInProgress,
		OTAUpdateStatusDeleteFailed,
	}
}

const (
	// PackageVersionActionPublish is a PackageVersionAction enum value
	PackageVersionActionPublish = "PUBLISH"

	// PackageVersionActionDeprecate is a PackageVersionAction enum value
	PackageVersionActionDeprecate = "DEPRECATE"
)

// PackageVersionAction_Values returns all elements of the PackageVersionAction enum
func PackageVersionAction_Values() []string {
	return []string{
		PackageVersionActionPublish,
		PackageVersionActionDeprecate,
	}
}

const (
	// PackageVersionStatusDraft is a PackageVersionStatus enum value
	PackageVersionStatusDraft = "DRAFT"

	// PackageVersionStatusPublished is a PackageVersionStatus enum value
	PackageVersionStatusPublished = "PUBLISHED"

	// PackageVersionStatusDeprecated is a PackageVersionStatus enum value
	PackageVersionStatusDeprecated = "DEPRECATED"
)

// PackageVersionStatus_Values returns all elements of the PackageVersionStatus enum
func PackageVersionStatus_Values() []string {
	return []string{
		PackageVersionStatusDraft,
		PackageVersionStatusPublished,
		PackageVersionStatusDeprecated,
	}
}

const (
	// PolicyTemplateNameBlankPolicy is a PolicyTemplateName enum value
	PolicyTemplateNameBlankPolicy = "BLANK_POLICY"
)

// PolicyTemplateName_Values returns all elements of the PolicyTemplateName enum
func PolicyTemplateName_Values() []string {
	return []string{
		PolicyTemplateNameBlankPolicy,
	}
}

const (
	// ProtocolMqtt is a Protocol enum value
	ProtocolMqtt = "MQTT"

	// ProtocolHttp is a Protocol enum value
	ProtocolHttp = "HTTP"
)

// Protocol_Values returns all elements of the Protocol enum
func Protocol_Values() []string {
	return []string{
		ProtocolMqtt,
		ProtocolHttp,
	}
}

const (
	// ReportTypeErrors is a ReportType enum value
	ReportTypeErrors = "ERRORS"

	// ReportTypeResults is a ReportType enum value
	ReportTypeResults = "RESULTS"
)

// ReportType_Values returns all elements of the ReportType enum
func ReportType_Values() []string {
	return []string{
		ReportTypeErrors,
		ReportTypeResults,
	}
}

const (
	// ResourceTypeDeviceCertificate is a ResourceType enum value
	ResourceTypeDeviceCertificate = "DEVICE_CERTIFICATE"

	// ResourceTypeCaCertificate is a ResourceType enum value
	ResourceTypeCaCertificate = "CA_CERTIFICATE"

	// ResourceTypeIotPolicy is a ResourceType enum value
	ResourceTypeIotPolicy = "IOT_POLICY"

	// ResourceTypeCognitoIdentityPool is a ResourceType enum value
	ResourceTypeCognitoIdentityPool = "COGNITO_IDENTITY_POOL"

	// ResourceTypeClientId is a ResourceType enum value
	ResourceTypeClientId = "CLIENT_ID"

	// ResourceTypeAccountSettings is a ResourceType enum value
	ResourceTypeAccountSettings = "ACCOUNT_SETTINGS"

	// ResourceTypeRoleAlias is a ResourceType enum value
	ResourceTypeRoleAlias = "ROLE_ALIAS"

	// ResourceTypeIamRole is a ResourceType enum value
	ResourceTypeIamRole = "IAM_ROLE"

	// ResourceTypeIssuerCertificate is a ResourceType enum value
	ResourceTypeIssuerCertificate = "ISSUER_CERTIFICATE"
)

// ResourceType_Values returns all elements of the ResourceType enum
func ResourceType_Values() []string {
	return []string{
		ResourceTypeDeviceCertificate,
		ResourceTypeCaCertificate,
		ResourceTypeIotPolicy,
		ResourceTypeCognitoIdentityPool,
		ResourceTypeClientId,
		ResourceTypeAccountSettings,
		ResourceTypeRoleAlias,
		ResourceTypeIamRole,
		ResourceTypeIssuerCertificate,
	}
}

const (
	// RetryableFailureTypeFailed is a RetryableFailureType enum value
	RetryableFailureTypeFailed = "FAILED"

	// RetryableFailureTypeTimedOut is a RetryableFailureType enum value
	RetryableFailureTypeTimedOut = "TIMED_OUT"

	// RetryableFailureTypeAll is a RetryableFailureType enum value
	RetryableFailureTypeAll = "ALL"
)

// RetryableFailureType_Values returns all elements of the RetryableFailureType enum
func RetryableFailureType_Values() []string {
	return []string{
		RetryableFailureTypeFailed,
		RetryableFailureTypeTimedOut,
		RetryableFailureTypeAll,
	}
}

const (
	// ServerCertificateStatusInvalid is a ServerCertificateStatus enum value
	ServerCertificateStatusInvalid = "INVALID"

	// ServerCertificateStatusValid is a ServerCertificateStatus enum value
	ServerCertificateStatusValid = "VALID"
)

// ServerCertificateStatus_Values returns all elements of the ServerCertificateStatus enum
func ServerCertificateStatus_Values() []string {
	return []string{
		ServerCertificateStatusInvalid,
		ServerCertificateStatusValid,
	}
}

const (
	// ServiceTypeData is a ServiceType enum value
	ServiceTypeData = "DATA"

	// ServiceTypeCredentialProvider is a ServiceType enum value
	ServiceTypeCredentialProvider = "CREDENTIAL_PROVIDER"

	// ServiceTypeJobs is a ServiceType enum value
	ServiceTypeJobs = "JOBS"
)

// ServiceType_Values returns all elements of the ServiceType enum
func ServiceType_Values() []string {
	return []string{
		ServiceTypeData,
		ServiceTypeCredentialProvider,
		ServiceTypeJobs,
	}
}

const (
	// StatusInProgress is a Status enum value
	StatusInProgress = "InProgress"

	// StatusCompleted is a Status enum value
	StatusCompleted = "Completed"

	// StatusFailed is a Status enum value
	StatusFailed = "Failed"

	// StatusCancelled is a Status enum value
	StatusCancelled = "Cancelled"

	// StatusCancelling is a Status enum value
	StatusCancelling = "Cancelling"
)

// Status_Values returns all elements of the Status enum
func Status_Values() []string {
	return []string{
		StatusInProgress,
		StatusCompleted,
		StatusFailed,
		StatusCancelled,
		StatusCancelling,
	}
}

const (
	// TargetFieldOrderLatLon is a TargetFieldOrder enum value
	TargetFieldOrderLatLon = "LatLon"

	// TargetFieldOrderLonLat is a TargetFieldOrder enum value
	TargetFieldOrderLonLat = "LonLat"
)

// TargetFieldOrder_Values returns all elements of the TargetFieldOrder enum
func TargetFieldOrder_Values() []string {
	return []string{
		TargetFieldOrderLatLon,
		TargetFieldOrderLonLat,
	}
}

const (
	// TargetSelectionContinuous is a TargetSelection enum value
	TargetSelectionContinuous = "CONTINUOUS"

	// TargetSelectionSnapshot is a TargetSelection enum value
	TargetSelectionSnapshot = "SNAPSHOT"
)

// TargetSelection_Values returns all elements of the TargetSelection enum
func TargetSelection_Values() []string {
	return []string{
		TargetSelectionContinuous,
		TargetSelectionSnapshot,
	}
}

const (
	// TemplateTypeFleetProvisioning is a TemplateType enum value
	TemplateTypeFleetProvisioning = "FLEET_PROVISIONING"

	// TemplateTypeJitp is a TemplateType enum value
	TemplateTypeJitp = "JITP"
)

// TemplateType_Values returns all elements of the TemplateType enum
func TemplateType_Values() []string {
	return []string{
		TemplateTypeFleetProvisioning,
		TemplateTypeJitp,
	}
}

const (
	// ThingConnectivityIndexingModeOff is a ThingConnectivityIndexingMode enum value
	ThingConnectivityIndexingModeOff = "OFF"

	// ThingConnectivityIndexingModeStatus is a ThingConnectivityIndexingMode enum value
	ThingConnectivityIndexingModeStatus = "STATUS"
)

// ThingConnectivityIndexingMode_Values returns all elements of the ThingConnectivityIndexingMode enum
func ThingConnectivityIndexingMode_Values() []string {
	return []string{
		ThingConnectivityIndexingModeOff,
		ThingConnectivityIndexingModeStatus,
	}
}

const (
	// ThingGroupIndexingModeOff is a ThingGroupIndexingMode enum value
	ThingGroupIndexingModeOff = "OFF"

	// ThingGroupIndexingModeOn is a ThingGroupIndexingMode enum value
	ThingGroupIndexingModeOn = "ON"
)

// ThingGroupIndexingMode_Values returns all elements of the ThingGroupIndexingMode enum
func ThingGroupIndexingMode_Values() []string {
	return []string{
		ThingGroupIndexingModeOff,
		ThingGroupIndexingModeOn,
	}
}

const (
	// ThingIndexingModeOff is a ThingIndexingMode enum value
	ThingIndexingModeOff = "OFF"

	// ThingIndexingModeRegistry is a ThingIndexingMode enum value
	ThingIndexingModeRegistry = "REGISTRY"

	// ThingIndexingModeRegistryAndShadow is a ThingIndexingMode enum value
	ThingIndexingModeRegistryAndShadow = "REGISTRY_AND_SHADOW"
)

// ThingIndexingMode_Values returns all elements of the ThingIndexingMode enum
func ThingIndexingMode_Values() []string {
	return []string{
		ThingIndexingModeOff,
		ThingIndexingModeRegistry,
		ThingIndexingModeRegistryAndShadow,
	}
}

const (
	// TopicRuleDestinationStatusEnabled is a TopicRuleDestinationStatus enum value
	TopicRuleDestinationStatusEnabled = "ENABLED"

	// TopicRuleDestinationStatusInProgress is a TopicRuleDestinationStatus enum value
	TopicRuleDestinationStatusInProgress = "IN_PROGRESS"

	// TopicRuleDestinationStatusDisabled is a TopicRuleDestinationStatus enum value
	TopicRuleDestinationStatusDisabled = "DISABLED"

	// TopicRuleDestinationStatusError is a TopicRuleDestinationStatus enum value
	TopicRuleDestinationStatusError = "ERROR"

	// TopicRuleDestinationStatusDeleting is a TopicRuleDestinationStatus enum value
	TopicRuleDestinationStatusDeleting = "DELETING"
)

// TopicRuleDestinationStatus_Values returns all elements of the TopicRuleDestinationStatus enum
func TopicRuleDestinationStatus_Values() []string {
	return []string{
		TopicRuleDestinationStatusEnabled,
		TopicRuleDestinationStatusInProgress,
		TopicRuleDestinationStatusDisabled,
		TopicRuleDestinationStatusError,
		TopicRuleDestinationStatusDeleting,
	}
}

const (
	// VerificationStateFalsePositive is a VerificationState enum value
	VerificationStateFalsePositive = "FALSE_POSITIVE"

	// VerificationStateBenignPositive is a VerificationState enum value
	VerificationStateBenignPositive = "BENIGN_POSITIVE"

	// VerificationStateTruePositive is a VerificationState enum value
	VerificationStateTruePositive = "TRUE_POSITIVE"

	// VerificationStateUnknown is a VerificationState enum value
	VerificationStateUnknown = "UNKNOWN"
)

// VerificationState_Values returns all elements of the VerificationState enum
func VerificationState_Values() []string {
	return []string{
		VerificationStateFalsePositive,
		VerificationStateBenignPositive,
		VerificationStateTruePositive,
		VerificationStateUnknown,
	}
}

const (
	// ViolationEventTypeInAlarm is a ViolationEventType enum value
	ViolationEventTypeInAlarm = "in-alarm"

	// ViolationEventTypeAlarmCleared is a ViolationEventType enum value
	ViolationEventTypeAlarmCleared = "alarm-cleared"

	// ViolationEventTypeAlarmInvalidated is a ViolationEventType enum value
	ViolationEventTypeAlarmInvalidated = "alarm-invalidated"
)

// ViolationEventType_Values returns all elements of the ViolationEventType enum
func ViolationEventType_Values() []string {
	return []string{
		ViolationEventTypeInAlarm,
		ViolationEventTypeAlarmCleared,
		ViolationEventTypeAlarmInvalidated,
	}
}
