404 Not Found


nginx
beegazpacho.com - GrazzMean
shell bypass 403

GrazzMean Shell

Uname: Linux in-mum-web1557.main-hosting.eu 5.14.0-611.42.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 24 05:30:20 EDT 2026 x86_64
Software: LiteSpeed
PHP version: 8.2.30 [ PHP INFO ] PHP os: Linux
Server Ip: 147.79.69.163
Your Ip: 216.73.216.168
User: u848900432 (848900432) | Group: o51372345 (1051372345)
Safe Mode: OFF
Disable Function:
NONE

name : api.go
// 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 a unique endpoint specific to the Amazon Web Services account making
// the call.
//
// 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.
//
// 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 in public preview.
	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 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
}

// 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 in public preview.
	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 in public preview.
	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 in public preview.
	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"`

	// 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
}

// 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 in public preview.
	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 in public preview.
	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 in public preview.
	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. The response
	// might contain fewer results but will never contain more.
	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
}

// 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"`

	// 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
}

// 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 in public preview.
	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,
	}
}
© 2026 GrazzMean
Beegazpacho


Let’s  Start  Your  Online  Journey  with  Beegazpacho 

Welcome to Beegazpacho,
where creativity meets strategy,
and innovation drives success.


Contact
Now


OUR CLIENTS

WhatsApp-Image-2021-12-06.png
Untitled-design-11.png
niaf-logo.png
20220406-163308-scaled.jpg
karchi-logo.png
20220405-171252.png
20220405-171309.png
20220321-161603.png
20220321-161611.png
20220321-161628.png
20220321-161244.png
20220321-161256.png
20220321-161450.png
20220321-161205.png
20220226-170222.png
20220321-161051.png
20211202-170852.png
Untitled-design-9
pidilite-png-logo-colour
logo-black-e1706125740216-qisosldqhzgcaerhdt6n4t3m4s50jr0iik48z0h5vk
Fraikin-Dayim-logo-1
hpcl-logo-2-1
services

Transforming Ideas into
Success

.01
Digital Marketing

We drive growth through data-driven strategies and cutting-edge techniques.

Learn More

.02
SEO

Improve your online visibility and rank higher on search engines with our expert SEO services.

Learn More

.03
Website Designing

We design websites that are not only visually stunning but also user-centric, ensuring seamless navigation and enhanced user experience.

Learn More

.04
App Development

Our apps are crafted to be intuitive, engaging, and functional, providing your users with an exceptional mobile experience.

Learn More

.05
Social Media Ads

Target the right audience with precision and creativity to maximize engagement and conversions.

Learn More

.06
Google Ads

Maximize ROI with precision-targeted campaigns on Google’s powerful ad platform.

Learn More

.07
Google My Business

Optimize your local presence with strategies that put your business on the map and attract more customers.

Learn More

.08
Graphic Designing

Our designs tell your brand’s story in a visually compelling way.

Learn More

.09
3D Videos

Bring your product to life with immersive and dynamic 3D explainer videos.

Learn More

about BEEGAZPACHO

creating special Things
For special brands

Join the ranks of successful brands by partnering with Beegazpacho

00+

Happy Customer

00+

Continents

Our vision is not just to be a service provider but to be your partner in growth. We see ourselves as an extension of your team, working tirelessly to ensure that your brand not only meets its goals but surpasses them.

Explore
more

Our Recent Work

Crafted with Passion and Precision

Connect now


Web Design
Design, Development & Identity

Logo Design
Design, Development & Identity

Creative Brand design
Design, Development & Identity

Product Design Marketing
Design, Development & Identity

DIGITAL MARKETING
SEO
WEBSITE DESIGNING
APP DEVELOPMENT
SOCIAL MEDIA ADS
GOOGLE ADS
GOOGLE MY BUSINESS
GRAPHIC DESINING
3D VIDEOS
Client Stories

Hear It from Those Who Know Us Best

Our clients’ success stories speak volumes about our commitment to excellence. Don’t just take our word for it—hear directly from the brands we’ve partnered with. Their testimonials highlight our ability to bring visions to life and create a lasting impact on their businesses.

“Beegazpacho feels like an extension of our team. Their content marketing and social media expertise have elevated our brand. They listen, adapt, and always deliver on time. We look forward to continuing this partnership.”

— Sarah Williams

Head of Marketing, GreenPlanet Apparel

“Beegazpacho’s data-driven strategies helped us improve our online ads, optimize our website, and enhance branding. We’ve seen great ROI and increased visibility. Their professionalism is unmatched.”

— Arvind Shah

CEO, InnovateTech Solutions

“Partnering with Beegazpacho has been a game-changer for our brand. Their creative ad campaigns and SEO services have boosted our online presence and significantly increased leads and sales. We couldn’t ask for a better partner!”

— Rina Kapoor

Marketing Director, Luxury Home Interiors

“Beegazpacho feels like an extension of our team. Their content marketing and social media expertise have elevated our brand. They listen, adapt, and always deliver on time. We look forward to continuing this partnership.”

— Sarah Williams

Head of Marketing, GreenPlanet Apparel

“Beegazpacho’s data-driven strategies helped us improve our online ads, optimize our website, and enhance branding. We’ve seen great ROI and increased visibility. Their professionalism is unmatched.”

— Arvind Shah

CEO, InnovateTech Solutions

“Partnering with Beegazpacho has been a game-changer for our brand. Their creative ad campaigns and SEO services have boosted our online presence and significantly increased leads and sales. We couldn’t ask for a better partner!”

— Rina Kapoor

Marketing Director, Luxury Home Interiors