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

package imagebuilder

import (
	"fmt"

	"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 opCancelImageCreation = "CancelImageCreation"

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

	if input == nil {
		input = &CancelImageCreationInput{}
	}

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

// CancelImageCreation API operation for EC2 Image Builder.
//
// CancelImageCreation cancels the creation of Image. This operation may only
// be used on images in a non-terminal state.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation CancelImageCreation for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * IdempotentParameterMismatchException
//   You have specified an client token for an operation using parameter values
//   that differ from a previous request that used the same client token.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceInUseException
//   The resource that you are trying to operate on is currently in use. Review
//   the message details, and retry later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/CancelImageCreation
func (c *Imagebuilder) CancelImageCreation(input *CancelImageCreationInput) (*CancelImageCreationOutput, error) {
	req, out := c.CancelImageCreationRequest(input)
	return out, req.Send()
}

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

const opCreateComponent = "CreateComponent"

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

	if input == nil {
		input = &CreateComponentInput{}
	}

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

// CreateComponent API operation for EC2 Image Builder.
//
// Creates a new component that can be used to build, validate, test and assess
// your image.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation CreateComponent for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * IdempotentParameterMismatchException
//   You have specified an client token for an operation using parameter values
//   that differ from a previous request that used the same client token.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * InvalidVersionNumberException
//   Your version number is out of bounds or does not follow the required syntax.
//
//   * ResourceInUseException
//   The resource that you are trying to operate on is currently in use. Review
//   the message details, and retry later.
//
//   * InvalidParameterCombinationException
//   You have specified two or more mutually exclusive parameters. Review the
//   error message for details.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/CreateComponent
func (c *Imagebuilder) CreateComponent(input *CreateComponentInput) (*CreateComponentOutput, error) {
	req, out := c.CreateComponentRequest(input)
	return out, req.Send()
}

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

const opCreateDistributionConfiguration = "CreateDistributionConfiguration"

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

	if input == nil {
		input = &CreateDistributionConfigurationInput{}
	}

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

// CreateDistributionConfiguration API operation for EC2 Image Builder.
//
// Creates a new distribution configuration. Distribution configurations define
// and configure the outputs of your pipeline.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation CreateDistributionConfiguration for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * IdempotentParameterMismatchException
//   You have specified an client token for an operation using parameter values
//   that differ from a previous request that used the same client token.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceInUseException
//   The resource that you are trying to operate on is currently in use. Review
//   the message details, and retry later.
//
//   * ResourceAlreadyExistsException
//   The resource that you are trying to create already exists.
//
//   * InvalidParameterCombinationException
//   You have specified two or more mutually exclusive parameters. Review the
//   error message for details.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/CreateDistributionConfiguration
func (c *Imagebuilder) CreateDistributionConfiguration(input *CreateDistributionConfigurationInput) (*CreateDistributionConfigurationOutput, error) {
	req, out := c.CreateDistributionConfigurationRequest(input)
	return out, req.Send()
}

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

const opCreateImage = "CreateImage"

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

	if input == nil {
		input = &CreateImageInput{}
	}

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

// CreateImage API operation for EC2 Image Builder.
//
// Creates a new image. This request will create a new image along with all
// of the configured output resources defined in the distribution configuration.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation CreateImage for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * IdempotentParameterMismatchException
//   You have specified an client token for an operation using parameter values
//   that differ from a previous request that used the same client token.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceInUseException
//   The resource that you are trying to operate on is currently in use. Review
//   the message details, and retry later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/CreateImage
func (c *Imagebuilder) CreateImage(input *CreateImageInput) (*CreateImageOutput, error) {
	req, out := c.CreateImageRequest(input)
	return out, req.Send()
}

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

const opCreateImagePipeline = "CreateImagePipeline"

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

	if input == nil {
		input = &CreateImagePipelineInput{}
	}

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

// CreateImagePipeline API operation for EC2 Image Builder.
//
// Creates a new image pipeline. Image pipelines enable you to automate the
// creation and distribution of images.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation CreateImagePipeline for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * IdempotentParameterMismatchException
//   You have specified an client token for an operation using parameter values
//   that differ from a previous request that used the same client token.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceInUseException
//   The resource that you are trying to operate on is currently in use. Review
//   the message details, and retry later.
//
//   * ResourceAlreadyExistsException
//   The resource that you are trying to create already exists.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/CreateImagePipeline
func (c *Imagebuilder) CreateImagePipeline(input *CreateImagePipelineInput) (*CreateImagePipelineOutput, error) {
	req, out := c.CreateImagePipelineRequest(input)
	return out, req.Send()
}

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

const opCreateImageRecipe = "CreateImageRecipe"

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

	if input == nil {
		input = &CreateImageRecipeInput{}
	}

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

// CreateImageRecipe API operation for EC2 Image Builder.
//
// Creates a new image recipe. Image Recipes defines how images are configured,
// tested and assessed.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation CreateImageRecipe for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * IdempotentParameterMismatchException
//   You have specified an client token for an operation using parameter values
//   that differ from a previous request that used the same client token.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * InvalidVersionNumberException
//   Your version number is out of bounds or does not follow the required syntax.
//
//   * ResourceInUseException
//   The resource that you are trying to operate on is currently in use. Review
//   the message details, and retry later.
//
//   * ResourceAlreadyExistsException
//   The resource that you are trying to create already exists.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/CreateImageRecipe
func (c *Imagebuilder) CreateImageRecipe(input *CreateImageRecipeInput) (*CreateImageRecipeOutput, error) {
	req, out := c.CreateImageRecipeRequest(input)
	return out, req.Send()
}

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

const opCreateInfrastructureConfiguration = "CreateInfrastructureConfiguration"

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

	if input == nil {
		input = &CreateInfrastructureConfigurationInput{}
	}

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

// CreateInfrastructureConfiguration API operation for EC2 Image Builder.
//
// Creates a new infrastructure configuration. An infrastructure configuration
// defines the environment in which your image will be built and tested.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation CreateInfrastructureConfiguration for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * IdempotentParameterMismatchException
//   You have specified an client token for an operation using parameter values
//   that differ from a previous request that used the same client token.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceInUseException
//   The resource that you are trying to operate on is currently in use. Review
//   the message details, and retry later.
//
//   * ResourceAlreadyExistsException
//   The resource that you are trying to create already exists.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/CreateInfrastructureConfiguration
func (c *Imagebuilder) CreateInfrastructureConfiguration(input *CreateInfrastructureConfigurationInput) (*CreateInfrastructureConfigurationOutput, error) {
	req, out := c.CreateInfrastructureConfigurationRequest(input)
	return out, req.Send()
}

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

const opDeleteComponent = "DeleteComponent"

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

	if input == nil {
		input = &DeleteComponentInput{}
	}

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

// DeleteComponent API operation for EC2 Image Builder.
//
// Deletes a component build version.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation DeleteComponent for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceDependencyException
//   You have attempted to mutate or delete a resource with a dependency that
//   is prohibitting this action. See the error message for more details.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/DeleteComponent
func (c *Imagebuilder) DeleteComponent(input *DeleteComponentInput) (*DeleteComponentOutput, error) {
	req, out := c.DeleteComponentRequest(input)
	return out, req.Send()
}

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

const opDeleteDistributionConfiguration = "DeleteDistributionConfiguration"

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

	if input == nil {
		input = &DeleteDistributionConfigurationInput{}
	}

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

// DeleteDistributionConfiguration API operation for EC2 Image Builder.
//
// Deletes a distribution configuration.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation DeleteDistributionConfiguration for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceDependencyException
//   You have attempted to mutate or delete a resource with a dependency that
//   is prohibitting this action. See the error message for more details.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/DeleteDistributionConfiguration
func (c *Imagebuilder) DeleteDistributionConfiguration(input *DeleteDistributionConfigurationInput) (*DeleteDistributionConfigurationOutput, error) {
	req, out := c.DeleteDistributionConfigurationRequest(input)
	return out, req.Send()
}

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

const opDeleteImage = "DeleteImage"

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

	if input == nil {
		input = &DeleteImageInput{}
	}

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

// DeleteImage API operation for EC2 Image Builder.
//
// Deletes an image.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation DeleteImage for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceDependencyException
//   You have attempted to mutate or delete a resource with a dependency that
//   is prohibitting this action. See the error message for more details.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/DeleteImage
func (c *Imagebuilder) DeleteImage(input *DeleteImageInput) (*DeleteImageOutput, error) {
	req, out := c.DeleteImageRequest(input)
	return out, req.Send()
}

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

const opDeleteImagePipeline = "DeleteImagePipeline"

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

	if input == nil {
		input = &DeleteImagePipelineInput{}
	}

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

// DeleteImagePipeline API operation for EC2 Image Builder.
//
// Deletes an image pipeline.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation DeleteImagePipeline for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceDependencyException
//   You have attempted to mutate or delete a resource with a dependency that
//   is prohibitting this action. See the error message for more details.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/DeleteImagePipeline
func (c *Imagebuilder) DeleteImagePipeline(input *DeleteImagePipelineInput) (*DeleteImagePipelineOutput, error) {
	req, out := c.DeleteImagePipelineRequest(input)
	return out, req.Send()
}

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

const opDeleteImageRecipe = "DeleteImageRecipe"

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

	if input == nil {
		input = &DeleteImageRecipeInput{}
	}

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

// DeleteImageRecipe API operation for EC2 Image Builder.
//
// Deletes an image recipe.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation DeleteImageRecipe for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceDependencyException
//   You have attempted to mutate or delete a resource with a dependency that
//   is prohibitting this action. See the error message for more details.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/DeleteImageRecipe
func (c *Imagebuilder) DeleteImageRecipe(input *DeleteImageRecipeInput) (*DeleteImageRecipeOutput, error) {
	req, out := c.DeleteImageRecipeRequest(input)
	return out, req.Send()
}

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

const opDeleteInfrastructureConfiguration = "DeleteInfrastructureConfiguration"

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

	if input == nil {
		input = &DeleteInfrastructureConfigurationInput{}
	}

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

// DeleteInfrastructureConfiguration API operation for EC2 Image Builder.
//
// Deletes an infrastructure configuration.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation DeleteInfrastructureConfiguration for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceDependencyException
//   You have attempted to mutate or delete a resource with a dependency that
//   is prohibitting this action. See the error message for more details.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/DeleteInfrastructureConfiguration
func (c *Imagebuilder) DeleteInfrastructureConfiguration(input *DeleteInfrastructureConfigurationInput) (*DeleteInfrastructureConfigurationOutput, error) {
	req, out := c.DeleteInfrastructureConfigurationRequest(input)
	return out, req.Send()
}

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

const opGetComponent = "GetComponent"

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

	if input == nil {
		input = &GetComponentInput{}
	}

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

// GetComponent API operation for EC2 Image Builder.
//
// Gets a component object.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation GetComponent for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/GetComponent
func (c *Imagebuilder) GetComponent(input *GetComponentInput) (*GetComponentOutput, error) {
	req, out := c.GetComponentRequest(input)
	return out, req.Send()
}

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

const opGetComponentPolicy = "GetComponentPolicy"

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

	if input == nil {
		input = &GetComponentPolicyInput{}
	}

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

// GetComponentPolicy API operation for EC2 Image Builder.
//
// Gets a component policy.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation GetComponentPolicy for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * ResourceNotFoundException
//   At least one of the resources referenced by your request does not exist.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/GetComponentPolicy
func (c *Imagebuilder) GetComponentPolicy(input *GetComponentPolicyInput) (*GetComponentPolicyOutput, error) {
	req, out := c.GetComponentPolicyRequest(input)
	return out, req.Send()
}

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

const opGetDistributionConfiguration = "GetDistributionConfiguration"

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

	if input == nil {
		input = &GetDistributionConfigurationInput{}
	}

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

// GetDistributionConfiguration API operation for EC2 Image Builder.
//
// Gets a distribution configuration.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation GetDistributionConfiguration for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/GetDistributionConfiguration
func (c *Imagebuilder) GetDistributionConfiguration(input *GetDistributionConfigurationInput) (*GetDistributionConfigurationOutput, error) {
	req, out := c.GetDistributionConfigurationRequest(input)
	return out, req.Send()
}

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

const opGetImage = "GetImage"

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

	if input == nil {
		input = &GetImageInput{}
	}

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

// GetImage API operation for EC2 Image Builder.
//
// Gets an image.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation GetImage for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/GetImage
func (c *Imagebuilder) GetImage(input *GetImageInput) (*GetImageOutput, error) {
	req, out := c.GetImageRequest(input)
	return out, req.Send()
}

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

const opGetImagePipeline = "GetImagePipeline"

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

	if input == nil {
		input = &GetImagePipelineInput{}
	}

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

// GetImagePipeline API operation for EC2 Image Builder.
//
// Gets an image pipeline.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation GetImagePipeline for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/GetImagePipeline
func (c *Imagebuilder) GetImagePipeline(input *GetImagePipelineInput) (*GetImagePipelineOutput, error) {
	req, out := c.GetImagePipelineRequest(input)
	return out, req.Send()
}

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

const opGetImagePolicy = "GetImagePolicy"

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

	if input == nil {
		input = &GetImagePolicyInput{}
	}

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

// GetImagePolicy API operation for EC2 Image Builder.
//
// Gets an image policy.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation GetImagePolicy for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * ResourceNotFoundException
//   At least one of the resources referenced by your request does not exist.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/GetImagePolicy
func (c *Imagebuilder) GetImagePolicy(input *GetImagePolicyInput) (*GetImagePolicyOutput, error) {
	req, out := c.GetImagePolicyRequest(input)
	return out, req.Send()
}

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

const opGetImageRecipe = "GetImageRecipe"

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

	if input == nil {
		input = &GetImageRecipeInput{}
	}

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

// GetImageRecipe API operation for EC2 Image Builder.
//
// Gets an image recipe.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation GetImageRecipe for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/GetImageRecipe
func (c *Imagebuilder) GetImageRecipe(input *GetImageRecipeInput) (*GetImageRecipeOutput, error) {
	req, out := c.GetImageRecipeRequest(input)
	return out, req.Send()
}

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

const opGetImageRecipePolicy = "GetImageRecipePolicy"

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

	if input == nil {
		input = &GetImageRecipePolicyInput{}
	}

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

// GetImageRecipePolicy API operation for EC2 Image Builder.
//
// Gets an image recipe policy.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation GetImageRecipePolicy for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ResourceNotFoundException
//   At least one of the resources referenced by your request does not exist.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/GetImageRecipePolicy
func (c *Imagebuilder) GetImageRecipePolicy(input *GetImageRecipePolicyInput) (*GetImageRecipePolicyOutput, error) {
	req, out := c.GetImageRecipePolicyRequest(input)
	return out, req.Send()
}

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

const opGetInfrastructureConfiguration = "GetInfrastructureConfiguration"

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

	if input == nil {
		input = &GetInfrastructureConfigurationInput{}
	}

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

// GetInfrastructureConfiguration API operation for EC2 Image Builder.
//
// Gets a infrastructure configuration.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation GetInfrastructureConfiguration for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/GetInfrastructureConfiguration
func (c *Imagebuilder) GetInfrastructureConfiguration(input *GetInfrastructureConfigurationInput) (*GetInfrastructureConfigurationOutput, error) {
	req, out := c.GetInfrastructureConfigurationRequest(input)
	return out, req.Send()
}

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

const opImportComponent = "ImportComponent"

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

	if input == nil {
		input = &ImportComponentInput{}
	}

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

// ImportComponent API operation for EC2 Image Builder.
//
// Imports a component and transforms its data into a component document.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation ImportComponent for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * IdempotentParameterMismatchException
//   You have specified an client token for an operation using parameter values
//   that differ from a previous request that used the same client token.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * InvalidVersionNumberException
//   Your version number is out of bounds or does not follow the required syntax.
//
//   * ResourceInUseException
//   The resource that you are trying to operate on is currently in use. Review
//   the message details, and retry later.
//
//   * InvalidParameterCombinationException
//   You have specified two or more mutually exclusive parameters. Review the
//   error message for details.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ImportComponent
func (c *Imagebuilder) ImportComponent(input *ImportComponentInput) (*ImportComponentOutput, error) {
	req, out := c.ImportComponentRequest(input)
	return out, req.Send()
}

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

const opListComponentBuildVersions = "ListComponentBuildVersions"

// ListComponentBuildVersionsRequest generates a "aws/request.Request" representing the
// client's request for the ListComponentBuildVersions operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListComponentBuildVersions for more information on using the ListComponentBuildVersions
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListComponentBuildVersionsRequest method.
//    req, resp := client.ListComponentBuildVersionsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListComponentBuildVersions
func (c *Imagebuilder) ListComponentBuildVersionsRequest(input *ListComponentBuildVersionsInput) (req *request.Request, output *ListComponentBuildVersionsOutput) {
	op := &request.Operation{
		Name:       opListComponentBuildVersions,
		HTTPMethod: "POST",
		HTTPPath:   "/ListComponentBuildVersions",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListComponentBuildVersionsInput{}
	}

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

// ListComponentBuildVersions API operation for EC2 Image Builder.
//
// Returns the list of component build versions for the specified semantic version.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation ListComponentBuildVersions for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * InvalidPaginationTokenException
//   You have provided an invalid pagination token in your request.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListComponentBuildVersions
func (c *Imagebuilder) ListComponentBuildVersions(input *ListComponentBuildVersionsInput) (*ListComponentBuildVersionsOutput, error) {
	req, out := c.ListComponentBuildVersionsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListComponents = "ListComponents"

// ListComponentsRequest generates a "aws/request.Request" representing the
// client's request for the ListComponents operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListComponents for more information on using the ListComponents
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListComponentsRequest method.
//    req, resp := client.ListComponentsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListComponents
func (c *Imagebuilder) ListComponentsRequest(input *ListComponentsInput) (req *request.Request, output *ListComponentsOutput) {
	op := &request.Operation{
		Name:       opListComponents,
		HTTPMethod: "POST",
		HTTPPath:   "/ListComponents",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListComponentsInput{}
	}

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

// ListComponents API operation for EC2 Image Builder.
//
// Returns the list of component build versions for the specified semantic version.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation ListComponents for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * InvalidPaginationTokenException
//   You have provided an invalid pagination token in your request.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListComponents
func (c *Imagebuilder) ListComponents(input *ListComponentsInput) (*ListComponentsOutput, error) {
	req, out := c.ListComponentsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListDistributionConfigurations = "ListDistributionConfigurations"

// ListDistributionConfigurationsRequest generates a "aws/request.Request" representing the
// client's request for the ListDistributionConfigurations operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListDistributionConfigurations for more information on using the ListDistributionConfigurations
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListDistributionConfigurationsRequest method.
//    req, resp := client.ListDistributionConfigurationsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListDistributionConfigurations
func (c *Imagebuilder) ListDistributionConfigurationsRequest(input *ListDistributionConfigurationsInput) (req *request.Request, output *ListDistributionConfigurationsOutput) {
	op := &request.Operation{
		Name:       opListDistributionConfigurations,
		HTTPMethod: "POST",
		HTTPPath:   "/ListDistributionConfigurations",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListDistributionConfigurationsInput{}
	}

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

// ListDistributionConfigurations API operation for EC2 Image Builder.
//
// Returns a list of distribution configurations.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation ListDistributionConfigurations for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * InvalidPaginationTokenException
//   You have provided an invalid pagination token in your request.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListDistributionConfigurations
func (c *Imagebuilder) ListDistributionConfigurations(input *ListDistributionConfigurationsInput) (*ListDistributionConfigurationsOutput, error) {
	req, out := c.ListDistributionConfigurationsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListImageBuildVersions = "ListImageBuildVersions"

// ListImageBuildVersionsRequest generates a "aws/request.Request" representing the
// client's request for the ListImageBuildVersions operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListImageBuildVersions for more information on using the ListImageBuildVersions
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListImageBuildVersionsRequest method.
//    req, resp := client.ListImageBuildVersionsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListImageBuildVersions
func (c *Imagebuilder) ListImageBuildVersionsRequest(input *ListImageBuildVersionsInput) (req *request.Request, output *ListImageBuildVersionsOutput) {
	op := &request.Operation{
		Name:       opListImageBuildVersions,
		HTTPMethod: "POST",
		HTTPPath:   "/ListImageBuildVersions",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListImageBuildVersionsInput{}
	}

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

// ListImageBuildVersions API operation for EC2 Image Builder.
//
// Returns a list of distribution configurations.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation ListImageBuildVersions for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * InvalidPaginationTokenException
//   You have provided an invalid pagination token in your request.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListImageBuildVersions
func (c *Imagebuilder) ListImageBuildVersions(input *ListImageBuildVersionsInput) (*ListImageBuildVersionsOutput, error) {
	req, out := c.ListImageBuildVersionsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListImagePipelineImages = "ListImagePipelineImages"

// ListImagePipelineImagesRequest generates a "aws/request.Request" representing the
// client's request for the ListImagePipelineImages operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListImagePipelineImages for more information on using the ListImagePipelineImages
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListImagePipelineImagesRequest method.
//    req, resp := client.ListImagePipelineImagesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListImagePipelineImages
func (c *Imagebuilder) ListImagePipelineImagesRequest(input *ListImagePipelineImagesInput) (req *request.Request, output *ListImagePipelineImagesOutput) {
	op := &request.Operation{
		Name:       opListImagePipelineImages,
		HTTPMethod: "POST",
		HTTPPath:   "/ListImagePipelineImages",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListImagePipelineImagesInput{}
	}

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

// ListImagePipelineImages API operation for EC2 Image Builder.
//
// Returns a list of images created by the specified pipeline.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation ListImagePipelineImages for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * InvalidPaginationTokenException
//   You have provided an invalid pagination token in your request.
//
//   * ResourceNotFoundException
//   At least one of the resources referenced by your request does not exist.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListImagePipelineImages
func (c *Imagebuilder) ListImagePipelineImages(input *ListImagePipelineImagesInput) (*ListImagePipelineImagesOutput, error) {
	req, out := c.ListImagePipelineImagesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListImagePipelines = "ListImagePipelines"

// ListImagePipelinesRequest generates a "aws/request.Request" representing the
// client's request for the ListImagePipelines operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListImagePipelines for more information on using the ListImagePipelines
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListImagePipelinesRequest method.
//    req, resp := client.ListImagePipelinesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListImagePipelines
func (c *Imagebuilder) ListImagePipelinesRequest(input *ListImagePipelinesInput) (req *request.Request, output *ListImagePipelinesOutput) {
	op := &request.Operation{
		Name:       opListImagePipelines,
		HTTPMethod: "POST",
		HTTPPath:   "/ListImagePipelines",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListImagePipelinesInput{}
	}

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

// ListImagePipelines API operation for EC2 Image Builder.
//
// Returns a list of image pipelines.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation ListImagePipelines for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * InvalidPaginationTokenException
//   You have provided an invalid pagination token in your request.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListImagePipelines
func (c *Imagebuilder) ListImagePipelines(input *ListImagePipelinesInput) (*ListImagePipelinesOutput, error) {
	req, out := c.ListImagePipelinesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListImageRecipes = "ListImageRecipes"

// ListImageRecipesRequest generates a "aws/request.Request" representing the
// client's request for the ListImageRecipes operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListImageRecipes for more information on using the ListImageRecipes
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListImageRecipesRequest method.
//    req, resp := client.ListImageRecipesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListImageRecipes
func (c *Imagebuilder) ListImageRecipesRequest(input *ListImageRecipesInput) (req *request.Request, output *ListImageRecipesOutput) {
	op := &request.Operation{
		Name:       opListImageRecipes,
		HTTPMethod: "POST",
		HTTPPath:   "/ListImageRecipes",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListImageRecipesInput{}
	}

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

// ListImageRecipes API operation for EC2 Image Builder.
//
// Returns a list of image recipes.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation ListImageRecipes for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * InvalidPaginationTokenException
//   You have provided an invalid pagination token in your request.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListImageRecipes
func (c *Imagebuilder) ListImageRecipes(input *ListImageRecipesInput) (*ListImageRecipesOutput, error) {
	req, out := c.ListImageRecipesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListImages = "ListImages"

// ListImagesRequest generates a "aws/request.Request" representing the
// client's request for the ListImages operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListImages for more information on using the ListImages
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListImagesRequest method.
//    req, resp := client.ListImagesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListImages
func (c *Imagebuilder) ListImagesRequest(input *ListImagesInput) (req *request.Request, output *ListImagesOutput) {
	op := &request.Operation{
		Name:       opListImages,
		HTTPMethod: "POST",
		HTTPPath:   "/ListImages",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListImagesInput{}
	}

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

// ListImages API operation for EC2 Image Builder.
//
// Returns the list of image build versions for the specified semantic version.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation ListImages for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * InvalidPaginationTokenException
//   You have provided an invalid pagination token in your request.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListImages
func (c *Imagebuilder) ListImages(input *ListImagesInput) (*ListImagesOutput, error) {
	req, out := c.ListImagesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListInfrastructureConfigurations = "ListInfrastructureConfigurations"

// ListInfrastructureConfigurationsRequest generates a "aws/request.Request" representing the
// client's request for the ListInfrastructureConfigurations operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListInfrastructureConfigurations for more information on using the ListInfrastructureConfigurations
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListInfrastructureConfigurationsRequest method.
//    req, resp := client.ListInfrastructureConfigurationsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListInfrastructureConfigurations
func (c *Imagebuilder) ListInfrastructureConfigurationsRequest(input *ListInfrastructureConfigurationsInput) (req *request.Request, output *ListInfrastructureConfigurationsOutput) {
	op := &request.Operation{
		Name:       opListInfrastructureConfigurations,
		HTTPMethod: "POST",
		HTTPPath:   "/ListInfrastructureConfigurations",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListInfrastructureConfigurationsInput{}
	}

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

// ListInfrastructureConfigurations API operation for EC2 Image Builder.
//
// Returns a list of infrastructure configurations.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation ListInfrastructureConfigurations for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * InvalidPaginationTokenException
//   You have provided an invalid pagination token in your request.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListInfrastructureConfigurations
func (c *Imagebuilder) ListInfrastructureConfigurations(input *ListInfrastructureConfigurationsInput) (*ListInfrastructureConfigurationsOutput, error) {
	req, out := c.ListInfrastructureConfigurationsRequest(input)
	return out, req.Send()
}

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

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

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

	for p.Next() {
		if !fn(p.Page().(*ListInfrastructureConfigurationsOutput), !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)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListTagsForResource
func (c *Imagebuilder) ListTagsForResourceRequest(input *ListTagsForResourceInput) (req *request.Request, output *ListTagsForResourceOutput) {
	op := &request.Operation{
		Name:       opListTagsForResource,
		HTTPMethod: "GET",
		HTTPPath:   "/tags/{resourceArn}",
	}

	if input == nil {
		input = &ListTagsForResourceInput{}
	}

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

// ListTagsForResource API operation for EC2 Image Builder.
//
// Returns the list of tags for the specified resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * InvalidParameterException
//   The specified parameter is invalid. Review the available parameters for the
//   API request.
//
//   * ResourceNotFoundException
//   At least one of the resources referenced by your request does not exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/ListTagsForResource
func (c *Imagebuilder) 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 *Imagebuilder) 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()
}

const opPutComponentPolicy = "PutComponentPolicy"

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

	if input == nil {
		input = &PutComponentPolicyInput{}
	}

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

// PutComponentPolicy API operation for EC2 Image Builder.
//
// Applies a policy to a component.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation PutComponentPolicy for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * InvalidParameterValueException
//   The value that you provided for the specified parameter is invalid.
//
//   * ResourceNotFoundException
//   At least one of the resources referenced by your request does not exist.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/PutComponentPolicy
func (c *Imagebuilder) PutComponentPolicy(input *PutComponentPolicyInput) (*PutComponentPolicyOutput, error) {
	req, out := c.PutComponentPolicyRequest(input)
	return out, req.Send()
}

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

const opPutImagePolicy = "PutImagePolicy"

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

	if input == nil {
		input = &PutImagePolicyInput{}
	}

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

// PutImagePolicy API operation for EC2 Image Builder.
//
// Applies a policy to an image.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation PutImagePolicy for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * InvalidParameterValueException
//   The value that you provided for the specified parameter is invalid.
//
//   * ResourceNotFoundException
//   At least one of the resources referenced by your request does not exist.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/PutImagePolicy
func (c *Imagebuilder) PutImagePolicy(input *PutImagePolicyInput) (*PutImagePolicyOutput, error) {
	req, out := c.PutImagePolicyRequest(input)
	return out, req.Send()
}

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

const opPutImageRecipePolicy = "PutImageRecipePolicy"

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

	if input == nil {
		input = &PutImageRecipePolicyInput{}
	}

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

// PutImageRecipePolicy API operation for EC2 Image Builder.
//
// Applies a policy to an image recipe.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation PutImageRecipePolicy for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * InvalidParameterValueException
//   The value that you provided for the specified parameter is invalid.
//
//   * ResourceNotFoundException
//   At least one of the resources referenced by your request does not exist.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/PutImageRecipePolicy
func (c *Imagebuilder) PutImageRecipePolicy(input *PutImageRecipePolicyInput) (*PutImageRecipePolicyOutput, error) {
	req, out := c.PutImageRecipePolicyRequest(input)
	return out, req.Send()
}

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

const opStartImagePipelineExecution = "StartImagePipelineExecution"

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

	if input == nil {
		input = &StartImagePipelineExecutionInput{}
	}

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

// StartImagePipelineExecution API operation for EC2 Image Builder.
//
// Manually triggers a pipeline to create an image.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation StartImagePipelineExecution for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * ResourceNotFoundException
//   At least one of the resources referenced by your request does not exist.
//
//   * IdempotentParameterMismatchException
//   You have specified an client token for an operation using parameter values
//   that differ from a previous request that used the same client token.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceInUseException
//   The resource that you are trying to operate on is currently in use. Review
//   the message details, and retry later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/StartImagePipelineExecution
func (c *Imagebuilder) StartImagePipelineExecution(input *StartImagePipelineExecutionInput) (*StartImagePipelineExecutionOutput, error) {
	req, out := c.StartImagePipelineExecutionRequest(input)
	return out, req.Send()
}

// StartImagePipelineExecutionWithContext is the same as StartImagePipelineExecution with the addition of
// the ability to pass a context and additional request options.
//
// See StartImagePipelineExecution for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Imagebuilder) StartImagePipelineExecutionWithContext(ctx aws.Context, input *StartImagePipelineExecutionInput, opts ...request.Option) (*StartImagePipelineExecutionOutput, error) {
	req, out := c.StartImagePipelineExecutionRequest(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)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/TagResource
func (c *Imagebuilder) TagResourceRequest(input *TagResourceInput) (req *request.Request, output *TagResourceOutput) {
	op := &request.Operation{
		Name:       opTagResource,
		HTTPMethod: "POST",
		HTTPPath:   "/tags/{resourceArn}",
	}

	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 EC2 Image Builder.
//
// Adds a tag to a resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * InvalidParameterException
//   The specified parameter is invalid. Review the available parameters for the
//   API request.
//
//   * ResourceNotFoundException
//   At least one of the resources referenced by your request does not exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/TagResource
func (c *Imagebuilder) 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 *Imagebuilder) 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 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)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/UntagResource
func (c *Imagebuilder) UntagResourceRequest(input *UntagResourceInput) (req *request.Request, output *UntagResourceOutput) {
	op := &request.Operation{
		Name:       opUntagResource,
		HTTPMethod: "DELETE",
		HTTPPath:   "/tags/{resourceArn}",
	}

	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 EC2 Image Builder.
//
// Removes a tag from a resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * InvalidParameterException
//   The specified parameter is invalid. Review the available parameters for the
//   API request.
//
//   * ResourceNotFoundException
//   At least one of the resources referenced by your request does not exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/UntagResource
func (c *Imagebuilder) 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 *Imagebuilder) 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 opUpdateDistributionConfiguration = "UpdateDistributionConfiguration"

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

	if input == nil {
		input = &UpdateDistributionConfigurationInput{}
	}

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

// UpdateDistributionConfiguration API operation for EC2 Image Builder.
//
// Updates a new distribution configuration. Distribution configurations define
// and configure the outputs of your pipeline.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation UpdateDistributionConfiguration for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * IdempotentParameterMismatchException
//   You have specified an client token for an operation using parameter values
//   that differ from a previous request that used the same client token.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceInUseException
//   The resource that you are trying to operate on is currently in use. Review
//   the message details, and retry later.
//
//   * InvalidParameterCombinationException
//   You have specified two or more mutually exclusive parameters. Review the
//   error message for details.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/UpdateDistributionConfiguration
func (c *Imagebuilder) UpdateDistributionConfiguration(input *UpdateDistributionConfigurationInput) (*UpdateDistributionConfigurationOutput, error) {
	req, out := c.UpdateDistributionConfigurationRequest(input)
	return out, req.Send()
}

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

const opUpdateImagePipeline = "UpdateImagePipeline"

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

	if input == nil {
		input = &UpdateImagePipelineInput{}
	}

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

// UpdateImagePipeline API operation for EC2 Image Builder.
//
// Updates a new image pipeline. Image pipelines enable you to automate the
// creation and distribution of images.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation UpdateImagePipeline for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * IdempotentParameterMismatchException
//   You have specified an client token for an operation using parameter values
//   that differ from a previous request that used the same client token.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceInUseException
//   The resource that you are trying to operate on is currently in use. Review
//   the message details, and retry later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/UpdateImagePipeline
func (c *Imagebuilder) UpdateImagePipeline(input *UpdateImagePipelineInput) (*UpdateImagePipelineOutput, error) {
	req, out := c.UpdateImagePipelineRequest(input)
	return out, req.Send()
}

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

const opUpdateInfrastructureConfiguration = "UpdateInfrastructureConfiguration"

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

	if input == nil {
		input = &UpdateInfrastructureConfigurationInput{}
	}

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

// UpdateInfrastructureConfiguration API operation for EC2 Image Builder.
//
// Updates a new infrastructure configuration. An infrastructure configuration
// defines the environment in which your image will be built and tested.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for EC2 Image Builder's
// API operation UpdateInfrastructureConfiguration for usage and error information.
//
// Returned Error Types:
//   * ServiceException
//   This exception is thrown when the service encounters an unrecoverable exception.
//
//   * ClientException
//   These errors are usually caused by a client action, such as using an action
//   or resource on behalf of a user that doesn't have permissions to use the
//   action or resource, or specifying an invalid resource identifier.
//
//   * ServiceUnavailableException
//   The service is unable to process your request at this time.
//
//   * InvalidRequestException
//   You have made a request for an action that is not supported by the service.
//
//   * IdempotentParameterMismatchException
//   You have specified an client token for an operation using parameter values
//   that differ from a previous request that used the same client token.
//
//   * ForbiddenException
//   You are not authorized to perform the requested operation.
//
//   * CallRateLimitExceededException
//   You have exceeded the permitted request rate for the specific operation.
//
//   * ResourceInUseException
//   The resource that you are trying to operate on is currently in use. Review
//   the message details, and retry later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/imagebuilder-2019-12-02/UpdateInfrastructureConfiguration
func (c *Imagebuilder) UpdateInfrastructureConfiguration(input *UpdateInfrastructureConfigurationInput) (*UpdateInfrastructureConfigurationOutput, error) {
	req, out := c.UpdateInfrastructureConfigurationRequest(input)
	return out, req.Send()
}

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

// Details of an EC2 AMI.
type Ami struct {
	_ struct{} `type:"structure"`

	// The description of the EC2 AMI.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The AMI ID of the EC2 AMI.
	Image *string `locationName:"image" min:"1" type:"string"`

	// The name of the EC2 AMI.
	Name *string `locationName:"name" min:"1" type:"string"`

	// The region of the EC2 AMI.
	Region *string `locationName:"region" min:"1" type:"string"`

	// Image state shows the images status and the reason for that status.
	State *ImageState `locationName:"state" type:"structure"`
}

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

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

// SetDescription sets the Description field's value.
func (s *Ami) SetDescription(v string) *Ami {
	s.Description = &v
	return s
}

// SetImage sets the Image field's value.
func (s *Ami) SetImage(v string) *Ami {
	s.Image = &v
	return s
}

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

// SetRegion sets the Region field's value.
func (s *Ami) SetRegion(v string) *Ami {
	s.Region = &v
	return s
}

// SetState sets the State field's value.
func (s *Ami) SetState(v *ImageState) *Ami {
	s.State = v
	return s
}

// Define and configure the outputs AMIs of the pipeline.
type AmiDistributionConfiguration struct {
	_ struct{} `type:"structure"`

	// The tags to apply to AMIs distributed to this region.
	AmiTags map[string]*string `locationName:"amiTags" min:"1" type:"map"`

	// The description of the distribution configuration.
	Description *string `locationName:"description" min:"1" type:"string"`

	// Launch permissions can be used to configure which AWS accounts can use the
	// AMI to launch instances.
	LaunchPermission *LaunchPermissionConfiguration `locationName:"launchPermission" type:"structure"`

	// The name of the distribution configuration.
	Name *string `locationName:"name" min:"1" type:"string"`
}

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

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

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

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

// SetAmiTags sets the AmiTags field's value.
func (s *AmiDistributionConfiguration) SetAmiTags(v map[string]*string) *AmiDistributionConfiguration {
	s.AmiTags = v
	return s
}

// SetDescription sets the Description field's value.
func (s *AmiDistributionConfiguration) SetDescription(v string) *AmiDistributionConfiguration {
	s.Description = &v
	return s
}

// SetLaunchPermission sets the LaunchPermission field's value.
func (s *AmiDistributionConfiguration) SetLaunchPermission(v *LaunchPermissionConfiguration) *AmiDistributionConfiguration {
	s.LaunchPermission = v
	return s
}

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

// You have exceeded the permitted request rate for the specific operation.
type CallRateLimitExceededException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorCallRateLimitExceededException(v protocol.ResponseMetadata) error {
	return &CallRateLimitExceededException{
		respMetadata: v,
	}
}

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

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

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

func (s CallRateLimitExceededException) 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 CallRateLimitExceededException) StatusCode() int {
	return s.respMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s CallRateLimitExceededException) RequestID() string {
	return s.respMetadata.RequestID
}

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

	// The idempotency token used to make this request idempotent.
	//
	// ClientToken is a required field
	ClientToken *string `locationName:"clientToken" min:"1" type:"string" required:"true"`

	// The Amazon Resource Name (ARN) of the image whose creation you wish to cancel.
	//
	// ImageBuildVersionArn is a required field
	ImageBuildVersionArn *string `locationName:"imageBuildVersionArn" type:"string" required:"true"`
}

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

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

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

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

// SetClientToken sets the ClientToken field's value.
func (s *CancelImageCreationInput) SetClientToken(v string) *CancelImageCreationInput {
	s.ClientToken = &v
	return s
}

// SetImageBuildVersionArn sets the ImageBuildVersionArn field's value.
func (s *CancelImageCreationInput) SetImageBuildVersionArn(v string) *CancelImageCreationInput {
	s.ImageBuildVersionArn = &v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the image whose creation has been cancelled.
	ImageBuildVersionArn *string `locationName:"imageBuildVersionArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetClientToken sets the ClientToken field's value.
func (s *CancelImageCreationOutput) SetClientToken(v string) *CancelImageCreationOutput {
	s.ClientToken = &v
	return s
}

// SetImageBuildVersionArn sets the ImageBuildVersionArn field's value.
func (s *CancelImageCreationOutput) SetImageBuildVersionArn(v string) *CancelImageCreationOutput {
	s.ImageBuildVersionArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *CancelImageCreationOutput) SetRequestId(v string) *CancelImageCreationOutput {
	s.RequestId = &v
	return s
}

// These errors are usually caused by a client action, such as using an action
// or resource on behalf of a user that doesn't have permissions to use the
// action or resource, or specifying an invalid resource identifier.
type ClientException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorClientException(v protocol.ResponseMetadata) error {
	return &ClientException{
		respMetadata: v,
	}
}

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

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

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

func (s ClientException) 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 ClientException) StatusCode() int {
	return s.respMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s ClientException) RequestID() string {
	return s.respMetadata.RequestID
}

// A detailed view of a component.
type Component struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the component.
	Arn *string `locationName:"arn" type:"string"`

	// The change description of the component.
	ChangeDescription *string `locationName:"changeDescription" min:"1" type:"string"`

	// The data of the component.
	Data *string `locationName:"data" type:"string"`

	// The date that the component was created.
	DateCreated *string `locationName:"dateCreated" type:"string"`

	// The description of the component.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The encryption status of the component.
	Encrypted *bool `locationName:"encrypted" type:"boolean"`

	// The KMS key identifier used to encrypt the component.
	KmsKeyId *string `locationName:"kmsKeyId" min:"1" type:"string"`

	// The name of the component.
	Name *string `locationName:"name" type:"string"`

	// The owner of the component.
	Owner *string `locationName:"owner" min:"1" type:"string"`

	// The platform of the component.
	Platform *string `locationName:"platform" type:"string" enum:"Platform"`

	// The tags associated with the component.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`

	// The type of the component denotes whether the component is used to build
	// the image or only to test it.
	Type *string `locationName:"type" type:"string" enum:"ComponentType"`

	// The version of the component.
	Version *string `locationName:"version" type:"string"`
}

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

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

// SetArn sets the Arn field's value.
func (s *Component) SetArn(v string) *Component {
	s.Arn = &v
	return s
}

// SetChangeDescription sets the ChangeDescription field's value.
func (s *Component) SetChangeDescription(v string) *Component {
	s.ChangeDescription = &v
	return s
}

// SetData sets the Data field's value.
func (s *Component) SetData(v string) *Component {
	s.Data = &v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *Component) SetDateCreated(v string) *Component {
	s.DateCreated = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *Component) SetDescription(v string) *Component {
	s.Description = &v
	return s
}

// SetEncrypted sets the Encrypted field's value.
func (s *Component) SetEncrypted(v bool) *Component {
	s.Encrypted = &v
	return s
}

// SetKmsKeyId sets the KmsKeyId field's value.
func (s *Component) SetKmsKeyId(v string) *Component {
	s.KmsKeyId = &v
	return s
}

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

// SetOwner sets the Owner field's value.
func (s *Component) SetOwner(v string) *Component {
	s.Owner = &v
	return s
}

// SetPlatform sets the Platform field's value.
func (s *Component) SetPlatform(v string) *Component {
	s.Platform = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *Component) SetTags(v map[string]*string) *Component {
	s.Tags = v
	return s
}

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

// SetVersion sets the Version field's value.
func (s *Component) SetVersion(v string) *Component {
	s.Version = &v
	return s
}

// Configuration details of the component.
type ComponentConfiguration struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the component.
	//
	// ComponentArn is a required field
	ComponentArn *string `locationName:"componentArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ComponentConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ComponentConfiguration"}
	if s.ComponentArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ComponentArn"))
	}

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

// SetComponentArn sets the ComponentArn field's value.
func (s *ComponentConfiguration) SetComponentArn(v string) *ComponentConfiguration {
	s.ComponentArn = &v
	return s
}

// A high level summary of a component.
type ComponentSummary struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the component.
	Arn *string `locationName:"arn" type:"string"`

	// The change description of the component.
	ChangeDescription *string `locationName:"changeDescription" min:"1" type:"string"`

	// The date that the component was created.
	DateCreated *string `locationName:"dateCreated" type:"string"`

	// The description of the component.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The name of the component.
	Name *string `locationName:"name" type:"string"`

	// The owner of the component.
	Owner *string `locationName:"owner" min:"1" type:"string"`

	// The platform of the component.
	Platform *string `locationName:"platform" type:"string" enum:"Platform"`

	// The tags associated with the component.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`

	// The type of the component denotes whether the component is used to build
	// the image or only to test it.
	Type *string `locationName:"type" type:"string" enum:"ComponentType"`

	// The version of the component.
	Version *string `locationName:"version" type:"string"`
}

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

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

// SetArn sets the Arn field's value.
func (s *ComponentSummary) SetArn(v string) *ComponentSummary {
	s.Arn = &v
	return s
}

// SetChangeDescription sets the ChangeDescription field's value.
func (s *ComponentSummary) SetChangeDescription(v string) *ComponentSummary {
	s.ChangeDescription = &v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *ComponentSummary) SetDateCreated(v string) *ComponentSummary {
	s.DateCreated = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *ComponentSummary) SetDescription(v string) *ComponentSummary {
	s.Description = &v
	return s
}

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

// SetOwner sets the Owner field's value.
func (s *ComponentSummary) SetOwner(v string) *ComponentSummary {
	s.Owner = &v
	return s
}

// SetPlatform sets the Platform field's value.
func (s *ComponentSummary) SetPlatform(v string) *ComponentSummary {
	s.Platform = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *ComponentSummary) SetTags(v map[string]*string) *ComponentSummary {
	s.Tags = v
	return s
}

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

// SetVersion sets the Version field's value.
func (s *ComponentSummary) SetVersion(v string) *ComponentSummary {
	s.Version = &v
	return s
}

// A high level overview of a component semantic version.
type ComponentVersion struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the component.
	Arn *string `locationName:"arn" type:"string"`

	// The date that the component was created.
	DateCreated *string `locationName:"dateCreated" type:"string"`

	// The description of the component.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The name of the component.
	Name *string `locationName:"name" type:"string"`

	// The owner of the component.
	Owner *string `locationName:"owner" min:"1" type:"string"`

	// The platform of the component.
	Platform *string `locationName:"platform" type:"string" enum:"Platform"`

	// The type of the component denotes whether the component is used to build
	// the image or only to test it.
	Type *string `locationName:"type" type:"string" enum:"ComponentType"`

	// The semantic version of the component.
	Version *string `locationName:"version" type:"string"`
}

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

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

// SetArn sets the Arn field's value.
func (s *ComponentVersion) SetArn(v string) *ComponentVersion {
	s.Arn = &v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *ComponentVersion) SetDateCreated(v string) *ComponentVersion {
	s.DateCreated = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *ComponentVersion) SetDescription(v string) *ComponentVersion {
	s.Description = &v
	return s
}

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

// SetOwner sets the Owner field's value.
func (s *ComponentVersion) SetOwner(v string) *ComponentVersion {
	s.Owner = &v
	return s
}

// SetPlatform sets the Platform field's value.
func (s *ComponentVersion) SetPlatform(v string) *ComponentVersion {
	s.Platform = &v
	return s
}

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

// SetVersion sets the Version field's value.
func (s *ComponentVersion) SetVersion(v string) *ComponentVersion {
	s.Version = &v
	return s
}

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

	// CThe change description of the component. Describes what change has been
	// made in this version. In other words what makes this version different from
	// other versions of this component.
	ChangeDescription *string `locationName:"changeDescription" min:"1" type:"string"`

	// CThe idempotency token of the component.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string" idempotencyToken:"true"`

	// CThe data of the component.
	Data *string `locationName:"data" min:"1" type:"string"`

	// CThe description of the component. Describes the contents of the component.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The ID of the KMS key that should be used to encrypt this component.
	KmsKeyId *string `locationName:"kmsKeyId" min:"1" type:"string"`

	// The name of the component.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`

	// CThe platform of the component.
	//
	// Platform is a required field
	Platform *string `locationName:"platform" type:"string" required:"true" enum:"Platform"`

	// The semantic version of the component. This version to follow the semantic
	// version syntax. i.e. major.minor.patch. This could be versioned like software
	// 2.0.1 or date like 2019.12.01.
	//
	// SemanticVersion is a required field
	SemanticVersion *string `locationName:"semanticVersion" type:"string" required:"true"`

	// CThe tags of the component.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`

	// CThe uri of the component.
	Uri *string `locationName:"uri" type:"string"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateComponentInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateComponentInput"}
	if s.ChangeDescription != nil && len(*s.ChangeDescription) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeDescription", 1))
	}
	if s.ClientToken != nil && len(*s.ClientToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 1))
	}
	if s.Data != nil && len(*s.Data) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Data", 1))
	}
	if s.Description != nil && len(*s.Description) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Description", 1))
	}
	if s.KmsKeyId != nil && len(*s.KmsKeyId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("KmsKeyId", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Platform == nil {
		invalidParams.Add(request.NewErrParamRequired("Platform"))
	}
	if s.SemanticVersion == nil {
		invalidParams.Add(request.NewErrParamRequired("SemanticVersion"))
	}
	if s.Tags != nil && len(s.Tags) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Tags", 1))
	}

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

// SetChangeDescription sets the ChangeDescription field's value.
func (s *CreateComponentInput) SetChangeDescription(v string) *CreateComponentInput {
	s.ChangeDescription = &v
	return s
}

// SetClientToken sets the ClientToken field's value.
func (s *CreateComponentInput) SetClientToken(v string) *CreateComponentInput {
	s.ClientToken = &v
	return s
}

// SetData sets the Data field's value.
func (s *CreateComponentInput) SetData(v string) *CreateComponentInput {
	s.Data = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreateComponentInput) SetDescription(v string) *CreateComponentInput {
	s.Description = &v
	return s
}

// SetKmsKeyId sets the KmsKeyId field's value.
func (s *CreateComponentInput) SetKmsKeyId(v string) *CreateComponentInput {
	s.KmsKeyId = &v
	return s
}

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

// SetPlatform sets the Platform field's value.
func (s *CreateComponentInput) SetPlatform(v string) *CreateComponentInput {
	s.Platform = &v
	return s
}

// SetSemanticVersion sets the SemanticVersion field's value.
func (s *CreateComponentInput) SetSemanticVersion(v string) *CreateComponentInput {
	s.SemanticVersion = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateComponentInput) SetTags(v map[string]*string) *CreateComponentInput {
	s.Tags = v
	return s
}

// SetUri sets the Uri field's value.
func (s *CreateComponentInput) SetUri(v string) *CreateComponentInput {
	s.Uri = &v
	return s
}

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

	// CThe idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string"`

	// CThe Amazon Resource Name (ARN) of the component that was created by this
	// request.
	ComponentBuildVersionArn *string `locationName:"componentBuildVersionArn" type:"string"`

	// CThe request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetClientToken sets the ClientToken field's value.
func (s *CreateComponentOutput) SetClientToken(v string) *CreateComponentOutput {
	s.ClientToken = &v
	return s
}

// SetComponentBuildVersionArn sets the ComponentBuildVersionArn field's value.
func (s *CreateComponentOutput) SetComponentBuildVersionArn(v string) *CreateComponentOutput {
	s.ComponentBuildVersionArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *CreateComponentOutput) SetRequestId(v string) *CreateComponentOutput {
	s.RequestId = &v
	return s
}

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

	// The idempotency token of the distribution configuration.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string" idempotencyToken:"true"`

	// The description of the distribution configuration.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The distributions of the distribution configuration.
	//
	// Distributions is a required field
	Distributions []*Distribution `locationName:"distributions" type:"list" required:"true"`

	// The name of the distribution configuration.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`

	// The tags of the distribution configuration.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`
}

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

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

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

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

// SetClientToken sets the ClientToken field's value.
func (s *CreateDistributionConfigurationInput) SetClientToken(v string) *CreateDistributionConfigurationInput {
	s.ClientToken = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreateDistributionConfigurationInput) SetDescription(v string) *CreateDistributionConfigurationInput {
	s.Description = &v
	return s
}

// SetDistributions sets the Distributions field's value.
func (s *CreateDistributionConfigurationInput) SetDistributions(v []*Distribution) *CreateDistributionConfigurationInput {
	s.Distributions = v
	return s
}

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

// SetTags sets the Tags field's value.
func (s *CreateDistributionConfigurationInput) SetTags(v map[string]*string) *CreateDistributionConfigurationInput {
	s.Tags = v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the distribution configuration that was
	// created by this request.
	DistributionConfigurationArn *string `locationName:"distributionConfigurationArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetClientToken sets the ClientToken field's value.
func (s *CreateDistributionConfigurationOutput) SetClientToken(v string) *CreateDistributionConfigurationOutput {
	s.ClientToken = &v
	return s
}

// SetDistributionConfigurationArn sets the DistributionConfigurationArn field's value.
func (s *CreateDistributionConfigurationOutput) SetDistributionConfigurationArn(v string) *CreateDistributionConfigurationOutput {
	s.DistributionConfigurationArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *CreateDistributionConfigurationOutput) SetRequestId(v string) *CreateDistributionConfigurationOutput {
	s.RequestId = &v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string" idempotencyToken:"true"`

	// The Amazon Resource Name (ARN) of the distribution configuration that defines
	// and configures the outputs of your pipeline.
	DistributionConfigurationArn *string `locationName:"distributionConfigurationArn" type:"string"`

	// The Amazon Resource Name (ARN) of the image recipe that defines how images
	// are configured, tested and assessed.
	//
	// ImageRecipeArn is a required field
	ImageRecipeArn *string `locationName:"imageRecipeArn" type:"string" required:"true"`

	// The image tests configuration of the image.
	ImageTestsConfiguration *ImageTestsConfiguration `locationName:"imageTestsConfiguration" type:"structure"`

	// The Amazon Resource Name (ARN) of the infrastructure configuration that defines
	// the environment in which your image will be built and tested.
	//
	// InfrastructureConfigurationArn is a required field
	InfrastructureConfigurationArn *string `locationName:"infrastructureConfigurationArn" type:"string" required:"true"`

	// The tags of the image.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateImageInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateImageInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 1))
	}
	if s.ImageRecipeArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ImageRecipeArn"))
	}
	if s.InfrastructureConfigurationArn == nil {
		invalidParams.Add(request.NewErrParamRequired("InfrastructureConfigurationArn"))
	}
	if s.Tags != nil && len(s.Tags) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Tags", 1))
	}
	if s.ImageTestsConfiguration != nil {
		if err := s.ImageTestsConfiguration.Validate(); err != nil {
			invalidParams.AddNested("ImageTestsConfiguration", err.(request.ErrInvalidParams))
		}
	}

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

// SetClientToken sets the ClientToken field's value.
func (s *CreateImageInput) SetClientToken(v string) *CreateImageInput {
	s.ClientToken = &v
	return s
}

// SetDistributionConfigurationArn sets the DistributionConfigurationArn field's value.
func (s *CreateImageInput) SetDistributionConfigurationArn(v string) *CreateImageInput {
	s.DistributionConfigurationArn = &v
	return s
}

// SetImageRecipeArn sets the ImageRecipeArn field's value.
func (s *CreateImageInput) SetImageRecipeArn(v string) *CreateImageInput {
	s.ImageRecipeArn = &v
	return s
}

// SetImageTestsConfiguration sets the ImageTestsConfiguration field's value.
func (s *CreateImageInput) SetImageTestsConfiguration(v *ImageTestsConfiguration) *CreateImageInput {
	s.ImageTestsConfiguration = v
	return s
}

// SetInfrastructureConfigurationArn sets the InfrastructureConfigurationArn field's value.
func (s *CreateImageInput) SetInfrastructureConfigurationArn(v string) *CreateImageInput {
	s.InfrastructureConfigurationArn = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateImageInput) SetTags(v map[string]*string) *CreateImageInput {
	s.Tags = v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the image that was created by this request.
	ImageBuildVersionArn *string `locationName:"imageBuildVersionArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetClientToken sets the ClientToken field's value.
func (s *CreateImageOutput) SetClientToken(v string) *CreateImageOutput {
	s.ClientToken = &v
	return s
}

// SetImageBuildVersionArn sets the ImageBuildVersionArn field's value.
func (s *CreateImageOutput) SetImageBuildVersionArn(v string) *CreateImageOutput {
	s.ImageBuildVersionArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *CreateImageOutput) SetRequestId(v string) *CreateImageOutput {
	s.RequestId = &v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string" idempotencyToken:"true"`

	// The description of the image pipeline.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the distribution configuration that will
	// be used to configure and distribute images created by this image pipeline.
	DistributionConfigurationArn *string `locationName:"distributionConfigurationArn" type:"string"`

	// The Amazon Resource Name (ARN) of the image recipe that will be used to configure
	// images created by this image pipeline.
	//
	// ImageRecipeArn is a required field
	ImageRecipeArn *string `locationName:"imageRecipeArn" type:"string" required:"true"`

	// The image test configuration of the image pipeline.
	ImageTestsConfiguration *ImageTestsConfiguration `locationName:"imageTestsConfiguration" type:"structure"`

	// The Amazon Resource Name (ARN) of the infrastructure configuration that will
	// be used to build images created by this image pipeline.
	//
	// InfrastructureConfigurationArn is a required field
	InfrastructureConfigurationArn *string `locationName:"infrastructureConfigurationArn" type:"string" required:"true"`

	// The name of the image pipeline.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`

	// The schedule of the image pipeline.
	Schedule *Schedule `locationName:"schedule" type:"structure"`

	// The status of the image pipeline.
	Status *string `locationName:"status" type:"string" enum:"PipelineStatus"`

	// The tags of the image pipeline.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateImagePipelineInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateImagePipelineInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 1))
	}
	if s.Description != nil && len(*s.Description) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Description", 1))
	}
	if s.ImageRecipeArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ImageRecipeArn"))
	}
	if s.InfrastructureConfigurationArn == nil {
		invalidParams.Add(request.NewErrParamRequired("InfrastructureConfigurationArn"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Tags != nil && len(s.Tags) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Tags", 1))
	}
	if s.ImageTestsConfiguration != nil {
		if err := s.ImageTestsConfiguration.Validate(); err != nil {
			invalidParams.AddNested("ImageTestsConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.Schedule != nil {
		if err := s.Schedule.Validate(); err != nil {
			invalidParams.AddNested("Schedule", err.(request.ErrInvalidParams))
		}
	}

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

// SetClientToken sets the ClientToken field's value.
func (s *CreateImagePipelineInput) SetClientToken(v string) *CreateImagePipelineInput {
	s.ClientToken = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreateImagePipelineInput) SetDescription(v string) *CreateImagePipelineInput {
	s.Description = &v
	return s
}

// SetDistributionConfigurationArn sets the DistributionConfigurationArn field's value.
func (s *CreateImagePipelineInput) SetDistributionConfigurationArn(v string) *CreateImagePipelineInput {
	s.DistributionConfigurationArn = &v
	return s
}

// SetImageRecipeArn sets the ImageRecipeArn field's value.
func (s *CreateImagePipelineInput) SetImageRecipeArn(v string) *CreateImagePipelineInput {
	s.ImageRecipeArn = &v
	return s
}

// SetImageTestsConfiguration sets the ImageTestsConfiguration field's value.
func (s *CreateImagePipelineInput) SetImageTestsConfiguration(v *ImageTestsConfiguration) *CreateImagePipelineInput {
	s.ImageTestsConfiguration = v
	return s
}

// SetInfrastructureConfigurationArn sets the InfrastructureConfigurationArn field's value.
func (s *CreateImagePipelineInput) SetInfrastructureConfigurationArn(v string) *CreateImagePipelineInput {
	s.InfrastructureConfigurationArn = &v
	return s
}

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

// SetSchedule sets the Schedule field's value.
func (s *CreateImagePipelineInput) SetSchedule(v *Schedule) *CreateImagePipelineInput {
	s.Schedule = v
	return s
}

// SetStatus sets the Status field's value.
func (s *CreateImagePipelineInput) SetStatus(v string) *CreateImagePipelineInput {
	s.Status = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateImagePipelineInput) SetTags(v map[string]*string) *CreateImagePipelineInput {
	s.Tags = v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the image pipeline that was created by
	// this request.
	ImagePipelineArn *string `locationName:"imagePipelineArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetClientToken sets the ClientToken field's value.
func (s *CreateImagePipelineOutput) SetClientToken(v string) *CreateImagePipelineOutput {
	s.ClientToken = &v
	return s
}

// SetImagePipelineArn sets the ImagePipelineArn field's value.
func (s *CreateImagePipelineOutput) SetImagePipelineArn(v string) *CreateImagePipelineOutput {
	s.ImagePipelineArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *CreateImagePipelineOutput) SetRequestId(v string) *CreateImagePipelineOutput {
	s.RequestId = &v
	return s
}

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

	// The block device mappings of the image recipe.
	BlockDeviceMappings []*InstanceBlockDeviceMapping `locationName:"blockDeviceMappings" type:"list"`

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string" idempotencyToken:"true"`

	// The components of the image recipe.
	//
	// Components is a required field
	Components []*ComponentConfiguration `locationName:"components" min:"1" type:"list" required:"true"`

	// The description of the image recipe.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The name of the image recipe.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`

	// The parent image of the image recipe.
	//
	// ParentImage is a required field
	ParentImage *string `locationName:"parentImage" min:"1" type:"string" required:"true"`

	// The semantic version of the image recipe.
	//
	// SemanticVersion is a required field
	SemanticVersion *string `locationName:"semanticVersion" type:"string" required:"true"`

	// The tags of the image recipe.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateImageRecipeInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateImageRecipeInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 1))
	}
	if s.Components == nil {
		invalidParams.Add(request.NewErrParamRequired("Components"))
	}
	if s.Components != nil && len(s.Components) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Components", 1))
	}
	if s.Description != nil && len(*s.Description) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Description", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.ParentImage == nil {
		invalidParams.Add(request.NewErrParamRequired("ParentImage"))
	}
	if s.ParentImage != nil && len(*s.ParentImage) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ParentImage", 1))
	}
	if s.SemanticVersion == nil {
		invalidParams.Add(request.NewErrParamRequired("SemanticVersion"))
	}
	if s.Tags != nil && len(s.Tags) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Tags", 1))
	}
	if s.BlockDeviceMappings != nil {
		for i, v := range s.BlockDeviceMappings {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "BlockDeviceMappings", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Components != nil {
		for i, v := range s.Components {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Components", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetBlockDeviceMappings sets the BlockDeviceMappings field's value.
func (s *CreateImageRecipeInput) SetBlockDeviceMappings(v []*InstanceBlockDeviceMapping) *CreateImageRecipeInput {
	s.BlockDeviceMappings = v
	return s
}

// SetClientToken sets the ClientToken field's value.
func (s *CreateImageRecipeInput) SetClientToken(v string) *CreateImageRecipeInput {
	s.ClientToken = &v
	return s
}

// SetComponents sets the Components field's value.
func (s *CreateImageRecipeInput) SetComponents(v []*ComponentConfiguration) *CreateImageRecipeInput {
	s.Components = v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreateImageRecipeInput) SetDescription(v string) *CreateImageRecipeInput {
	s.Description = &v
	return s
}

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

// SetParentImage sets the ParentImage field's value.
func (s *CreateImageRecipeInput) SetParentImage(v string) *CreateImageRecipeInput {
	s.ParentImage = &v
	return s
}

// SetSemanticVersion sets the SemanticVersion field's value.
func (s *CreateImageRecipeInput) SetSemanticVersion(v string) *CreateImageRecipeInput {
	s.SemanticVersion = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateImageRecipeInput) SetTags(v map[string]*string) *CreateImageRecipeInput {
	s.Tags = v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the image recipe that was created by this
	// request.
	ImageRecipeArn *string `locationName:"imageRecipeArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetClientToken sets the ClientToken field's value.
func (s *CreateImageRecipeOutput) SetClientToken(v string) *CreateImageRecipeOutput {
	s.ClientToken = &v
	return s
}

// SetImageRecipeArn sets the ImageRecipeArn field's value.
func (s *CreateImageRecipeOutput) SetImageRecipeArn(v string) *CreateImageRecipeOutput {
	s.ImageRecipeArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *CreateImageRecipeOutput) SetRequestId(v string) *CreateImageRecipeOutput {
	s.RequestId = &v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string" idempotencyToken:"true"`

	// The description of the infrastructure configuration.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The instance profile to associate with the instance used to customize your
	// EC2 AMI.
	//
	// InstanceProfileName is a required field
	InstanceProfileName *string `locationName:"instanceProfileName" min:"1" type:"string" required:"true"`

	// The instance types of the infrastructure configuration. You may specify one
	// or more instance types to use for this build, the service will pick one of
	// these instance types based on availability.
	InstanceTypes []*string `locationName:"instanceTypes" type:"list"`

	// The key pair of the infrastructure configuration. This can be used to log
	// onto and debug the instance used to create your image.
	KeyPair *string `locationName:"keyPair" min:"1" type:"string"`

	// The logging configuration of the infrastructure configuration.
	Logging *Logging `locationName:"logging" type:"structure"`

	// The name of the infrastructure configuration.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`

	// The security group IDs to associate with the instance used to customize your
	// EC2 AMI.
	SecurityGroupIds []*string `locationName:"securityGroupIds" type:"list"`

	// The SNS topic on which to send image build events.
	SnsTopicArn *string `locationName:"snsTopicArn" min:"1" type:"string"`

	// The subnet ID to place the instance used to customize your EC2 AMI in.
	SubnetId *string `locationName:"subnetId" min:"1" type:"string"`

	// The tags of the infrastructure configuration.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`

	// The terminate instance on failure setting of the infrastructure configuration.
	// Set to false if you wish for Image Builder to retain the instance used to
	// configure your AMI in the event that the build or test phase of your workflow
	// failed.
	TerminateInstanceOnFailure *bool `locationName:"terminateInstanceOnFailure" type:"boolean"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateInfrastructureConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateInfrastructureConfigurationInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 1))
	}
	if s.Description != nil && len(*s.Description) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Description", 1))
	}
	if s.InstanceProfileName == nil {
		invalidParams.Add(request.NewErrParamRequired("InstanceProfileName"))
	}
	if s.InstanceProfileName != nil && len(*s.InstanceProfileName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("InstanceProfileName", 1))
	}
	if s.KeyPair != nil && len(*s.KeyPair) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("KeyPair", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.SnsTopicArn != nil && len(*s.SnsTopicArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SnsTopicArn", 1))
	}
	if s.SubnetId != nil && len(*s.SubnetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SubnetId", 1))
	}
	if s.Tags != nil && len(s.Tags) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Tags", 1))
	}
	if s.Logging != nil {
		if err := s.Logging.Validate(); err != nil {
			invalidParams.AddNested("Logging", err.(request.ErrInvalidParams))
		}
	}

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

// SetClientToken sets the ClientToken field's value.
func (s *CreateInfrastructureConfigurationInput) SetClientToken(v string) *CreateInfrastructureConfigurationInput {
	s.ClientToken = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreateInfrastructureConfigurationInput) SetDescription(v string) *CreateInfrastructureConfigurationInput {
	s.Description = &v
	return s
}

// SetInstanceProfileName sets the InstanceProfileName field's value.
func (s *CreateInfrastructureConfigurationInput) SetInstanceProfileName(v string) *CreateInfrastructureConfigurationInput {
	s.InstanceProfileName = &v
	return s
}

// SetInstanceTypes sets the InstanceTypes field's value.
func (s *CreateInfrastructureConfigurationInput) SetInstanceTypes(v []*string) *CreateInfrastructureConfigurationInput {
	s.InstanceTypes = v
	return s
}

// SetKeyPair sets the KeyPair field's value.
func (s *CreateInfrastructureConfigurationInput) SetKeyPair(v string) *CreateInfrastructureConfigurationInput {
	s.KeyPair = &v
	return s
}

// SetLogging sets the Logging field's value.
func (s *CreateInfrastructureConfigurationInput) SetLogging(v *Logging) *CreateInfrastructureConfigurationInput {
	s.Logging = v
	return s
}

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

// SetSecurityGroupIds sets the SecurityGroupIds field's value.
func (s *CreateInfrastructureConfigurationInput) SetSecurityGroupIds(v []*string) *CreateInfrastructureConfigurationInput {
	s.SecurityGroupIds = v
	return s
}

// SetSnsTopicArn sets the SnsTopicArn field's value.
func (s *CreateInfrastructureConfigurationInput) SetSnsTopicArn(v string) *CreateInfrastructureConfigurationInput {
	s.SnsTopicArn = &v
	return s
}

// SetSubnetId sets the SubnetId field's value.
func (s *CreateInfrastructureConfigurationInput) SetSubnetId(v string) *CreateInfrastructureConfigurationInput {
	s.SubnetId = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *CreateInfrastructureConfigurationInput) SetTags(v map[string]*string) *CreateInfrastructureConfigurationInput {
	s.Tags = v
	return s
}

// SetTerminateInstanceOnFailure sets the TerminateInstanceOnFailure field's value.
func (s *CreateInfrastructureConfigurationInput) SetTerminateInstanceOnFailure(v bool) *CreateInfrastructureConfigurationInput {
	s.TerminateInstanceOnFailure = &v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the infrastructure configuration that was
	// created by this request.
	InfrastructureConfigurationArn *string `locationName:"infrastructureConfigurationArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetClientToken sets the ClientToken field's value.
func (s *CreateInfrastructureConfigurationOutput) SetClientToken(v string) *CreateInfrastructureConfigurationOutput {
	s.ClientToken = &v
	return s
}

// SetInfrastructureConfigurationArn sets the InfrastructureConfigurationArn field's value.
func (s *CreateInfrastructureConfigurationOutput) SetInfrastructureConfigurationArn(v string) *CreateInfrastructureConfigurationOutput {
	s.InfrastructureConfigurationArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *CreateInfrastructureConfigurationOutput) SetRequestId(v string) *CreateInfrastructureConfigurationOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the component build version to delete.
	//
	// ComponentBuildVersionArn is a required field
	ComponentBuildVersionArn *string `location:"querystring" locationName:"componentBuildVersionArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteComponentInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteComponentInput"}
	if s.ComponentBuildVersionArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ComponentBuildVersionArn"))
	}

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

// SetComponentBuildVersionArn sets the ComponentBuildVersionArn field's value.
func (s *DeleteComponentInput) SetComponentBuildVersionArn(v string) *DeleteComponentInput {
	s.ComponentBuildVersionArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the component build version that was deleted.
	ComponentBuildVersionArn *string `locationName:"componentBuildVersionArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetComponentBuildVersionArn sets the ComponentBuildVersionArn field's value.
func (s *DeleteComponentOutput) SetComponentBuildVersionArn(v string) *DeleteComponentOutput {
	s.ComponentBuildVersionArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *DeleteComponentOutput) SetRequestId(v string) *DeleteComponentOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the distribution configuration to delete.
	//
	// DistributionConfigurationArn is a required field
	DistributionConfigurationArn *string `location:"querystring" locationName:"distributionConfigurationArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteDistributionConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteDistributionConfigurationInput"}
	if s.DistributionConfigurationArn == nil {
		invalidParams.Add(request.NewErrParamRequired("DistributionConfigurationArn"))
	}

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

// SetDistributionConfigurationArn sets the DistributionConfigurationArn field's value.
func (s *DeleteDistributionConfigurationInput) SetDistributionConfigurationArn(v string) *DeleteDistributionConfigurationInput {
	s.DistributionConfigurationArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the distribution configuration that was
	// deleted.
	DistributionConfigurationArn *string `locationName:"distributionConfigurationArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetDistributionConfigurationArn sets the DistributionConfigurationArn field's value.
func (s *DeleteDistributionConfigurationOutput) SetDistributionConfigurationArn(v string) *DeleteDistributionConfigurationOutput {
	s.DistributionConfigurationArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *DeleteDistributionConfigurationOutput) SetRequestId(v string) *DeleteDistributionConfigurationOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image to delete.
	//
	// ImageBuildVersionArn is a required field
	ImageBuildVersionArn *string `location:"querystring" locationName:"imageBuildVersionArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteImageInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteImageInput"}
	if s.ImageBuildVersionArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ImageBuildVersionArn"))
	}

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

// SetImageBuildVersionArn sets the ImageBuildVersionArn field's value.
func (s *DeleteImageInput) SetImageBuildVersionArn(v string) *DeleteImageInput {
	s.ImageBuildVersionArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image that was deleted.
	ImageBuildVersionArn *string `locationName:"imageBuildVersionArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetImageBuildVersionArn sets the ImageBuildVersionArn field's value.
func (s *DeleteImageOutput) SetImageBuildVersionArn(v string) *DeleteImageOutput {
	s.ImageBuildVersionArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *DeleteImageOutput) SetRequestId(v string) *DeleteImageOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image pipeline to delete.
	//
	// ImagePipelineArn is a required field
	ImagePipelineArn *string `location:"querystring" locationName:"imagePipelineArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteImagePipelineInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteImagePipelineInput"}
	if s.ImagePipelineArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ImagePipelineArn"))
	}

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

// SetImagePipelineArn sets the ImagePipelineArn field's value.
func (s *DeleteImagePipelineInput) SetImagePipelineArn(v string) *DeleteImagePipelineInput {
	s.ImagePipelineArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image pipeline that was deleted.
	ImagePipelineArn *string `locationName:"imagePipelineArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetImagePipelineArn sets the ImagePipelineArn field's value.
func (s *DeleteImagePipelineOutput) SetImagePipelineArn(v string) *DeleteImagePipelineOutput {
	s.ImagePipelineArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *DeleteImagePipelineOutput) SetRequestId(v string) *DeleteImagePipelineOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image recipe to delete.
	//
	// ImageRecipeArn is a required field
	ImageRecipeArn *string `location:"querystring" locationName:"imageRecipeArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteImageRecipeInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteImageRecipeInput"}
	if s.ImageRecipeArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ImageRecipeArn"))
	}

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

// SetImageRecipeArn sets the ImageRecipeArn field's value.
func (s *DeleteImageRecipeInput) SetImageRecipeArn(v string) *DeleteImageRecipeInput {
	s.ImageRecipeArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image recipe that was deleted.
	ImageRecipeArn *string `locationName:"imageRecipeArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetImageRecipeArn sets the ImageRecipeArn field's value.
func (s *DeleteImageRecipeOutput) SetImageRecipeArn(v string) *DeleteImageRecipeOutput {
	s.ImageRecipeArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *DeleteImageRecipeOutput) SetRequestId(v string) *DeleteImageRecipeOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the infrastructure configuration to delete.
	//
	// InfrastructureConfigurationArn is a required field
	InfrastructureConfigurationArn *string `location:"querystring" locationName:"infrastructureConfigurationArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteInfrastructureConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteInfrastructureConfigurationInput"}
	if s.InfrastructureConfigurationArn == nil {
		invalidParams.Add(request.NewErrParamRequired("InfrastructureConfigurationArn"))
	}

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

// SetInfrastructureConfigurationArn sets the InfrastructureConfigurationArn field's value.
func (s *DeleteInfrastructureConfigurationInput) SetInfrastructureConfigurationArn(v string) *DeleteInfrastructureConfigurationInput {
	s.InfrastructureConfigurationArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the infrastructure configuration that was
	// deleted.
	InfrastructureConfigurationArn *string `locationName:"infrastructureConfigurationArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetInfrastructureConfigurationArn sets the InfrastructureConfigurationArn field's value.
func (s *DeleteInfrastructureConfigurationOutput) SetInfrastructureConfigurationArn(v string) *DeleteInfrastructureConfigurationOutput {
	s.InfrastructureConfigurationArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *DeleteInfrastructureConfigurationOutput) SetRequestId(v string) *DeleteInfrastructureConfigurationOutput {
	s.RequestId = &v
	return s
}

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

	// Define and configure the outputs AMIs of the pipeline.
	AmiDistributionConfiguration *AmiDistributionConfiguration `locationName:"amiDistributionConfiguration" type:"structure"`

	LicenseConfigurationArns []*string `locationName:"licenseConfigurationArns" type:"list"`

	// Region is a required field
	Region *string `locationName:"region" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetAmiDistributionConfiguration sets the AmiDistributionConfiguration field's value.
func (s *Distribution) SetAmiDistributionConfiguration(v *AmiDistributionConfiguration) *Distribution {
	s.AmiDistributionConfiguration = v
	return s
}

// SetLicenseConfigurationArns sets the LicenseConfigurationArns field's value.
func (s *Distribution) SetLicenseConfigurationArns(v []*string) *Distribution {
	s.LicenseConfigurationArns = v
	return s
}

// SetRegion sets the Region field's value.
func (s *Distribution) SetRegion(v string) *Distribution {
	s.Region = &v
	return s
}

// A distribution configuration.
type DistributionConfiguration struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the distribution configuration.
	Arn *string `locationName:"arn" type:"string"`

	// The date on which this distribution configuration was created.
	DateCreated *string `locationName:"dateCreated" type:"string"`

	// The date on which this distribution configuration was last updated.
	DateUpdated *string `locationName:"dateUpdated" type:"string"`

	// The description of the distribution configuration.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The distributions of the distribution configuration.
	Distributions []*Distribution `locationName:"distributions" type:"list"`

	// The name of the distribution configuration.
	Name *string `locationName:"name" type:"string"`

	// The tags of the distribution configuration.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`

	// The maximum duration in minutes for this distribution configuration.
	//
	// TimeoutMinutes is a required field
	TimeoutMinutes *int64 `locationName:"timeoutMinutes" min:"30" type:"integer" required:"true"`
}

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

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

// SetArn sets the Arn field's value.
func (s *DistributionConfiguration) SetArn(v string) *DistributionConfiguration {
	s.Arn = &v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *DistributionConfiguration) SetDateCreated(v string) *DistributionConfiguration {
	s.DateCreated = &v
	return s
}

// SetDateUpdated sets the DateUpdated field's value.
func (s *DistributionConfiguration) SetDateUpdated(v string) *DistributionConfiguration {
	s.DateUpdated = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *DistributionConfiguration) SetDescription(v string) *DistributionConfiguration {
	s.Description = &v
	return s
}

// SetDistributions sets the Distributions field's value.
func (s *DistributionConfiguration) SetDistributions(v []*Distribution) *DistributionConfiguration {
	s.Distributions = v
	return s
}

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

// SetTags sets the Tags field's value.
func (s *DistributionConfiguration) SetTags(v map[string]*string) *DistributionConfiguration {
	s.Tags = v
	return s
}

// SetTimeoutMinutes sets the TimeoutMinutes field's value.
func (s *DistributionConfiguration) SetTimeoutMinutes(v int64) *DistributionConfiguration {
	s.TimeoutMinutes = &v
	return s
}

// A high level overview a distribution configuration.
type DistributionConfigurationSummary struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the distribution configuration.
	Arn *string `locationName:"arn" type:"string"`

	// The date on which the distribution configuration was created.
	DateCreated *string `locationName:"dateCreated" type:"string"`

	// The date on which the distribution configuration was updated.
	DateUpdated *string `locationName:"dateUpdated" type:"string"`

	// The description of the distribution configuration.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The name of the distribution configuration.
	Name *string `locationName:"name" type:"string"`

	// The tags associated with the distribution configuration.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`
}

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

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

// SetArn sets the Arn field's value.
func (s *DistributionConfigurationSummary) SetArn(v string) *DistributionConfigurationSummary {
	s.Arn = &v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *DistributionConfigurationSummary) SetDateCreated(v string) *DistributionConfigurationSummary {
	s.DateCreated = &v
	return s
}

// SetDateUpdated sets the DateUpdated field's value.
func (s *DistributionConfigurationSummary) SetDateUpdated(v string) *DistributionConfigurationSummary {
	s.DateUpdated = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *DistributionConfigurationSummary) SetDescription(v string) *DistributionConfigurationSummary {
	s.Description = &v
	return s
}

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

// SetTags sets the Tags field's value.
func (s *DistributionConfigurationSummary) SetTags(v map[string]*string) *DistributionConfigurationSummary {
	s.Tags = v
	return s
}

// EBS specific block device mapping specifications.
type EbsInstanceBlockDeviceSpecification struct {
	_ struct{} `type:"structure"`

	// Use to configure delete on termination of the associated device.
	DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"`

	// Use to configure device encryption.
	Encrypted *bool `locationName:"encrypted" type:"boolean"`

	// Use to configure device IOPS.
	Iops *int64 `locationName:"iops" min:"100" type:"integer"`

	// Use to configure the KMS key to use when encrypting the device.
	KmsKeyId *string `locationName:"kmsKeyId" min:"1" type:"string"`

	// The snapshot that defines the device contents.
	SnapshotId *string `locationName:"snapshotId" min:"1" type:"string"`

	// Use to override the device's volume size.
	VolumeSize *int64 `locationName:"volumeSize" min:"1" type:"integer"`

	// Use to override the device's volume type.
	VolumeType *string `locationName:"volumeType" type:"string" enum:"EbsVolumeType"`
}

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

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

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

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

// SetDeleteOnTermination sets the DeleteOnTermination field's value.
func (s *EbsInstanceBlockDeviceSpecification) SetDeleteOnTermination(v bool) *EbsInstanceBlockDeviceSpecification {
	s.DeleteOnTermination = &v
	return s
}

// SetEncrypted sets the Encrypted field's value.
func (s *EbsInstanceBlockDeviceSpecification) SetEncrypted(v bool) *EbsInstanceBlockDeviceSpecification {
	s.Encrypted = &v
	return s
}

// SetIops sets the Iops field's value.
func (s *EbsInstanceBlockDeviceSpecification) SetIops(v int64) *EbsInstanceBlockDeviceSpecification {
	s.Iops = &v
	return s
}

// SetKmsKeyId sets the KmsKeyId field's value.
func (s *EbsInstanceBlockDeviceSpecification) SetKmsKeyId(v string) *EbsInstanceBlockDeviceSpecification {
	s.KmsKeyId = &v
	return s
}

// SetSnapshotId sets the SnapshotId field's value.
func (s *EbsInstanceBlockDeviceSpecification) SetSnapshotId(v string) *EbsInstanceBlockDeviceSpecification {
	s.SnapshotId = &v
	return s
}

// SetVolumeSize sets the VolumeSize field's value.
func (s *EbsInstanceBlockDeviceSpecification) SetVolumeSize(v int64) *EbsInstanceBlockDeviceSpecification {
	s.VolumeSize = &v
	return s
}

// SetVolumeType sets the VolumeType field's value.
func (s *EbsInstanceBlockDeviceSpecification) SetVolumeType(v string) *EbsInstanceBlockDeviceSpecification {
	s.VolumeType = &v
	return s
}

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

	Name *string `locationName:"name" type:"string"`

	Values []*string `locationName:"values" min:"1" type:"list"`
}

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

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

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

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

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

// SetValues sets the Values field's value.
func (s *Filter) SetValues(v []*string) *Filter {
	s.Values = v
	return s
}

// You are not authorized to perform the requested operation.
type ForbiddenException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorForbiddenException(v protocol.ResponseMetadata) error {
	return &ForbiddenException{
		respMetadata: v,
	}
}

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

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

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

func (s ForbiddenException) 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 ForbiddenException) StatusCode() int {
	return s.respMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s ForbiddenException) RequestID() string {
	return s.respMetadata.RequestID
}

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

	// The Amazon Resource Name (ARN) of the component that you wish to retrieve.
	//
	// ComponentBuildVersionArn is a required field
	ComponentBuildVersionArn *string `location:"querystring" locationName:"componentBuildVersionArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetComponentInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetComponentInput"}
	if s.ComponentBuildVersionArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ComponentBuildVersionArn"))
	}

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

// SetComponentBuildVersionArn sets the ComponentBuildVersionArn field's value.
func (s *GetComponentInput) SetComponentBuildVersionArn(v string) *GetComponentInput {
	s.ComponentBuildVersionArn = &v
	return s
}

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

	// The component object associated with the specified ARN.
	Component *Component `locationName:"component" type:"structure"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetComponent sets the Component field's value.
func (s *GetComponentOutput) SetComponent(v *Component) *GetComponentOutput {
	s.Component = v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *GetComponentOutput) SetRequestId(v string) *GetComponentOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the component whose policy you wish to
	// retrieve.
	//
	// ComponentArn is a required field
	ComponentArn *string `location:"querystring" locationName:"componentArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetComponentPolicyInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetComponentPolicyInput"}
	if s.ComponentArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ComponentArn"))
	}

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

// SetComponentArn sets the ComponentArn field's value.
func (s *GetComponentPolicyInput) SetComponentArn(v string) *GetComponentPolicyInput {
	s.ComponentArn = &v
	return s
}

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

	// The component policy.
	Policy *string `locationName:"policy" min:"1" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetPolicy sets the Policy field's value.
func (s *GetComponentPolicyOutput) SetPolicy(v string) *GetComponentPolicyOutput {
	s.Policy = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *GetComponentPolicyOutput) SetRequestId(v string) *GetComponentPolicyOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the distribution configuration that you
	// wish to retrieve.
	//
	// DistributionConfigurationArn is a required field
	DistributionConfigurationArn *string `location:"querystring" locationName:"distributionConfigurationArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetDistributionConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetDistributionConfigurationInput"}
	if s.DistributionConfigurationArn == nil {
		invalidParams.Add(request.NewErrParamRequired("DistributionConfigurationArn"))
	}

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

// SetDistributionConfigurationArn sets the DistributionConfigurationArn field's value.
func (s *GetDistributionConfigurationInput) SetDistributionConfigurationArn(v string) *GetDistributionConfigurationInput {
	s.DistributionConfigurationArn = &v
	return s
}

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

	// The distribution configuration object.
	DistributionConfiguration *DistributionConfiguration `locationName:"distributionConfiguration" type:"structure"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetDistributionConfiguration sets the DistributionConfiguration field's value.
func (s *GetDistributionConfigurationOutput) SetDistributionConfiguration(v *DistributionConfiguration) *GetDistributionConfigurationOutput {
	s.DistributionConfiguration = v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *GetDistributionConfigurationOutput) SetRequestId(v string) *GetDistributionConfigurationOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image that you wish to retrieve.
	//
	// ImageBuildVersionArn is a required field
	ImageBuildVersionArn *string `location:"querystring" locationName:"imageBuildVersionArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetImageInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetImageInput"}
	if s.ImageBuildVersionArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ImageBuildVersionArn"))
	}

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

// SetImageBuildVersionArn sets the ImageBuildVersionArn field's value.
func (s *GetImageInput) SetImageBuildVersionArn(v string) *GetImageInput {
	s.ImageBuildVersionArn = &v
	return s
}

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

	// The image object.
	Image *Image `locationName:"image" type:"structure"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetImage sets the Image field's value.
func (s *GetImageOutput) SetImage(v *Image) *GetImageOutput {
	s.Image = v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *GetImageOutput) SetRequestId(v string) *GetImageOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image pipeline that you wish to retrieve.
	//
	// ImagePipelineArn is a required field
	ImagePipelineArn *string `location:"querystring" locationName:"imagePipelineArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetImagePipelineInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetImagePipelineInput"}
	if s.ImagePipelineArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ImagePipelineArn"))
	}

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

// SetImagePipelineArn sets the ImagePipelineArn field's value.
func (s *GetImagePipelineInput) SetImagePipelineArn(v string) *GetImagePipelineInput {
	s.ImagePipelineArn = &v
	return s
}

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

	// The image pipeline object.
	ImagePipeline *ImagePipeline `locationName:"imagePipeline" type:"structure"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetImagePipeline sets the ImagePipeline field's value.
func (s *GetImagePipelineOutput) SetImagePipeline(v *ImagePipeline) *GetImagePipelineOutput {
	s.ImagePipeline = v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *GetImagePipelineOutput) SetRequestId(v string) *GetImagePipelineOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image whose policy you wish to retrieve.
	//
	// ImageArn is a required field
	ImageArn *string `location:"querystring" locationName:"imageArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetImagePolicyInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetImagePolicyInput"}
	if s.ImageArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ImageArn"))
	}

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

// SetImageArn sets the ImageArn field's value.
func (s *GetImagePolicyInput) SetImageArn(v string) *GetImagePolicyInput {
	s.ImageArn = &v
	return s
}

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

	// The image policy object.
	Policy *string `locationName:"policy" min:"1" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetPolicy sets the Policy field's value.
func (s *GetImagePolicyOutput) SetPolicy(v string) *GetImagePolicyOutput {
	s.Policy = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *GetImagePolicyOutput) SetRequestId(v string) *GetImagePolicyOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image recipe that you wish to retrieve.
	//
	// ImageRecipeArn is a required field
	ImageRecipeArn *string `location:"querystring" locationName:"imageRecipeArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetImageRecipeInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetImageRecipeInput"}
	if s.ImageRecipeArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ImageRecipeArn"))
	}

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

// SetImageRecipeArn sets the ImageRecipeArn field's value.
func (s *GetImageRecipeInput) SetImageRecipeArn(v string) *GetImageRecipeInput {
	s.ImageRecipeArn = &v
	return s
}

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

	// The image recipe object.
	ImageRecipe *ImageRecipe `locationName:"imageRecipe" type:"structure"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetImageRecipe sets the ImageRecipe field's value.
func (s *GetImageRecipeOutput) SetImageRecipe(v *ImageRecipe) *GetImageRecipeOutput {
	s.ImageRecipe = v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *GetImageRecipeOutput) SetRequestId(v string) *GetImageRecipeOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image recipe whose policy you wish
	// to retrieve.
	//
	// ImageRecipeArn is a required field
	ImageRecipeArn *string `location:"querystring" locationName:"imageRecipeArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetImageRecipePolicyInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetImageRecipePolicyInput"}
	if s.ImageRecipeArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ImageRecipeArn"))
	}

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

// SetImageRecipeArn sets the ImageRecipeArn field's value.
func (s *GetImageRecipePolicyInput) SetImageRecipeArn(v string) *GetImageRecipePolicyInput {
	s.ImageRecipeArn = &v
	return s
}

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

	// The image recipe policy object.
	Policy *string `locationName:"policy" min:"1" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetPolicy sets the Policy field's value.
func (s *GetImageRecipePolicyOutput) SetPolicy(v string) *GetImageRecipePolicyOutput {
	s.Policy = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *GetImageRecipePolicyOutput) SetRequestId(v string) *GetImageRecipePolicyOutput {
	s.RequestId = &v
	return s
}

// GetInfrastructureConfiguration request object.
type GetInfrastructureConfigurationInput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the infrastructure configuration that you
	// wish to retrieve.
	//
	// InfrastructureConfigurationArn is a required field
	InfrastructureConfigurationArn *string `location:"querystring" locationName:"infrastructureConfigurationArn" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetInfrastructureConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetInfrastructureConfigurationInput"}
	if s.InfrastructureConfigurationArn == nil {
		invalidParams.Add(request.NewErrParamRequired("InfrastructureConfigurationArn"))
	}

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

// SetInfrastructureConfigurationArn sets the InfrastructureConfigurationArn field's value.
func (s *GetInfrastructureConfigurationInput) SetInfrastructureConfigurationArn(v string) *GetInfrastructureConfigurationInput {
	s.InfrastructureConfigurationArn = &v
	return s
}

// GetInfrastructureConfiguration response object.
type GetInfrastructureConfigurationOutput struct {
	_ struct{} `type:"structure"`

	// The infrastructure configuration object.
	InfrastructureConfiguration *InfrastructureConfiguration `locationName:"infrastructureConfiguration" type:"structure"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetInfrastructureConfiguration sets the InfrastructureConfiguration field's value.
func (s *GetInfrastructureConfigurationOutput) SetInfrastructureConfiguration(v *InfrastructureConfiguration) *GetInfrastructureConfigurationOutput {
	s.InfrastructureConfiguration = v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *GetInfrastructureConfigurationOutput) SetRequestId(v string) *GetInfrastructureConfigurationOutput {
	s.RequestId = &v
	return s
}

// You have specified an client token for an operation using parameter values
// that differ from a previous request that used the same client token.
type IdempotentParameterMismatchException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorIdempotentParameterMismatchException(v protocol.ResponseMetadata) error {
	return &IdempotentParameterMismatchException{
		respMetadata: v,
	}
}

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

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

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

func (s IdempotentParameterMismatchException) 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 IdempotentParameterMismatchException) StatusCode() int {
	return s.respMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s IdempotentParameterMismatchException) RequestID() string {
	return s.respMetadata.RequestID
}

// An image build version.
type Image struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the image.
	Arn *string `locationName:"arn" type:"string"`

	// The date on which this image was created.
	DateCreated *string `locationName:"dateCreated" type:"string"`

	// The distribution configuration used when creating this image.
	DistributionConfiguration *DistributionConfiguration `locationName:"distributionConfiguration" type:"structure"`

	// The image recipe used when creating the image.
	ImageRecipe *ImageRecipe `locationName:"imageRecipe" type:"structure"`

	// The image tests configuration used when creating this image.
	ImageTestsConfiguration *ImageTestsConfiguration `locationName:"imageTestsConfiguration" type:"structure"`

	// The infrastructure used when creating this image.
	InfrastructureConfiguration *InfrastructureConfiguration `locationName:"infrastructureConfiguration" type:"structure"`

	// The name of the image.
	Name *string `locationName:"name" type:"string"`

	// The output resources produced when creating this image.
	OutputResources *OutputResources `locationName:"outputResources" type:"structure"`

	// The platform of the image.
	Platform *string `locationName:"platform" type:"string" enum:"Platform"`

	// The Amazon Resource Name (ARN) of the image pipeline that created this image.
	SourcePipelineArn *string `locationName:"sourcePipelineArn" type:"string"`

	// The name of the image pipeline that created this image.
	SourcePipelineName *string `locationName:"sourcePipelineName" type:"string"`

	// The state of the image.
	State *ImageState `locationName:"state" type:"structure"`

	// The tags of the image.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`

	// The semantic version of the image.
	Version *string `locationName:"version" type:"string"`
}

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

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

// SetArn sets the Arn field's value.
func (s *Image) SetArn(v string) *Image {
	s.Arn = &v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *Image) SetDateCreated(v string) *Image {
	s.DateCreated = &v
	return s
}

// SetDistributionConfiguration sets the DistributionConfiguration field's value.
func (s *Image) SetDistributionConfiguration(v *DistributionConfiguration) *Image {
	s.DistributionConfiguration = v
	return s
}

// SetImageRecipe sets the ImageRecipe field's value.
func (s *Image) SetImageRecipe(v *ImageRecipe) *Image {
	s.ImageRecipe = v
	return s
}

// SetImageTestsConfiguration sets the ImageTestsConfiguration field's value.
func (s *Image) SetImageTestsConfiguration(v *ImageTestsConfiguration) *Image {
	s.ImageTestsConfiguration = v
	return s
}

// SetInfrastructureConfiguration sets the InfrastructureConfiguration field's value.
func (s *Image) SetInfrastructureConfiguration(v *InfrastructureConfiguration) *Image {
	s.InfrastructureConfiguration = v
	return s
}

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

// SetOutputResources sets the OutputResources field's value.
func (s *Image) SetOutputResources(v *OutputResources) *Image {
	s.OutputResources = v
	return s
}

// SetPlatform sets the Platform field's value.
func (s *Image) SetPlatform(v string) *Image {
	s.Platform = &v
	return s
}

// SetSourcePipelineArn sets the SourcePipelineArn field's value.
func (s *Image) SetSourcePipelineArn(v string) *Image {
	s.SourcePipelineArn = &v
	return s
}

// SetSourcePipelineName sets the SourcePipelineName field's value.
func (s *Image) SetSourcePipelineName(v string) *Image {
	s.SourcePipelineName = &v
	return s
}

// SetState sets the State field's value.
func (s *Image) SetState(v *ImageState) *Image {
	s.State = v
	return s
}

// SetTags sets the Tags field's value.
func (s *Image) SetTags(v map[string]*string) *Image {
	s.Tags = v
	return s
}

// SetVersion sets the Version field's value.
func (s *Image) SetVersion(v string) *Image {
	s.Version = &v
	return s
}

// Details of an image pipeline.
type ImagePipeline struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the image pipeline.
	Arn *string `locationName:"arn" type:"string"`

	// The date on which this image pipeline was created.
	DateCreated *string `locationName:"dateCreated" type:"string"`

	// The date on which this image pipeline was last run.
	DateLastRun *string `locationName:"dateLastRun" type:"string"`

	// The date on which this image pipeline will next be run.
	DateNextRun *string `locationName:"dateNextRun" type:"string"`

	// The date on which this image pipeline was last updated.
	DateUpdated *string `locationName:"dateUpdated" type:"string"`

	// The description of the image pipeline.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the distribution configuration associated
	// with this image pipeline.
	DistributionConfigurationArn *string `locationName:"distributionConfigurationArn" type:"string"`

	// The Amazon Resource Name (ARN) of the image recipe associated with this image
	// pipeline.
	ImageRecipeArn *string `locationName:"imageRecipeArn" type:"string"`

	// The image tests configuration of the image pipeline.
	ImageTestsConfiguration *ImageTestsConfiguration `locationName:"imageTestsConfiguration" type:"structure"`

	// The Amazon Resource Name (ARN) of the infrastruction configuration associated
	// with this image pipeline.
	InfrastructureConfigurationArn *string `locationName:"infrastructureConfigurationArn" type:"string"`

	// The name of the image pipeline.
	Name *string `locationName:"name" type:"string"`

	// The platform of the image pipeline.
	Platform *string `locationName:"platform" type:"string" enum:"Platform"`

	// The schedule of the image pipeline.
	Schedule *Schedule `locationName:"schedule" type:"structure"`

	// The status of the image pipeline.
	Status *string `locationName:"status" type:"string" enum:"PipelineStatus"`

	// The tags of this image pipeline.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`
}

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

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

// SetArn sets the Arn field's value.
func (s *ImagePipeline) SetArn(v string) *ImagePipeline {
	s.Arn = &v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *ImagePipeline) SetDateCreated(v string) *ImagePipeline {
	s.DateCreated = &v
	return s
}

// SetDateLastRun sets the DateLastRun field's value.
func (s *ImagePipeline) SetDateLastRun(v string) *ImagePipeline {
	s.DateLastRun = &v
	return s
}

// SetDateNextRun sets the DateNextRun field's value.
func (s *ImagePipeline) SetDateNextRun(v string) *ImagePipeline {
	s.DateNextRun = &v
	return s
}

// SetDateUpdated sets the DateUpdated field's value.
func (s *ImagePipeline) SetDateUpdated(v string) *ImagePipeline {
	s.DateUpdated = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *ImagePipeline) SetDescription(v string) *ImagePipeline {
	s.Description = &v
	return s
}

// SetDistributionConfigurationArn sets the DistributionConfigurationArn field's value.
func (s *ImagePipeline) SetDistributionConfigurationArn(v string) *ImagePipeline {
	s.DistributionConfigurationArn = &v
	return s
}

// SetImageRecipeArn sets the ImageRecipeArn field's value.
func (s *ImagePipeline) SetImageRecipeArn(v string) *ImagePipeline {
	s.ImageRecipeArn = &v
	return s
}

// SetImageTestsConfiguration sets the ImageTestsConfiguration field's value.
func (s *ImagePipeline) SetImageTestsConfiguration(v *ImageTestsConfiguration) *ImagePipeline {
	s.ImageTestsConfiguration = v
	return s
}

// SetInfrastructureConfigurationArn sets the InfrastructureConfigurationArn field's value.
func (s *ImagePipeline) SetInfrastructureConfigurationArn(v string) *ImagePipeline {
	s.InfrastructureConfigurationArn = &v
	return s
}

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

// SetPlatform sets the Platform field's value.
func (s *ImagePipeline) SetPlatform(v string) *ImagePipeline {
	s.Platform = &v
	return s
}

// SetSchedule sets the Schedule field's value.
func (s *ImagePipeline) SetSchedule(v *Schedule) *ImagePipeline {
	s.Schedule = v
	return s
}

// SetStatus sets the Status field's value.
func (s *ImagePipeline) SetStatus(v string) *ImagePipeline {
	s.Status = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *ImagePipeline) SetTags(v map[string]*string) *ImagePipeline {
	s.Tags = v
	return s
}

// An image recipe.
type ImageRecipe struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the image recipe.
	Arn *string `locationName:"arn" type:"string"`

	// The block device mappings to apply when creating images from this recipe.
	BlockDeviceMappings []*InstanceBlockDeviceMapping `locationName:"blockDeviceMappings" type:"list"`

	// The components of the image recipe.
	Components []*ComponentConfiguration `locationName:"components" min:"1" type:"list"`

	// The date on which this image recipe was created.
	DateCreated *string `locationName:"dateCreated" type:"string"`

	// The description of the image recipe.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The name of the image recipe.
	Name *string `locationName:"name" type:"string"`

	// The owner of the image recipe.
	Owner *string `locationName:"owner" min:"1" type:"string"`

	// The parent image of the image recipe.
	ParentImage *string `locationName:"parentImage" min:"1" type:"string"`

	// The platform of the image recipe.
	Platform *string `locationName:"platform" type:"string" enum:"Platform"`

	// The tags of the image recipe.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`

	// The version of the image recipe.
	Version *string `locationName:"version" type:"string"`
}

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

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

// SetArn sets the Arn field's value.
func (s *ImageRecipe) SetArn(v string) *ImageRecipe {
	s.Arn = &v
	return s
}

// SetBlockDeviceMappings sets the BlockDeviceMappings field's value.
func (s *ImageRecipe) SetBlockDeviceMappings(v []*InstanceBlockDeviceMapping) *ImageRecipe {
	s.BlockDeviceMappings = v
	return s
}

// SetComponents sets the Components field's value.
func (s *ImageRecipe) SetComponents(v []*ComponentConfiguration) *ImageRecipe {
	s.Components = v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *ImageRecipe) SetDateCreated(v string) *ImageRecipe {
	s.DateCreated = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *ImageRecipe) SetDescription(v string) *ImageRecipe {
	s.Description = &v
	return s
}

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

// SetOwner sets the Owner field's value.
func (s *ImageRecipe) SetOwner(v string) *ImageRecipe {
	s.Owner = &v
	return s
}

// SetParentImage sets the ParentImage field's value.
func (s *ImageRecipe) SetParentImage(v string) *ImageRecipe {
	s.ParentImage = &v
	return s
}

// SetPlatform sets the Platform field's value.
func (s *ImageRecipe) SetPlatform(v string) *ImageRecipe {
	s.Platform = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *ImageRecipe) SetTags(v map[string]*string) *ImageRecipe {
	s.Tags = v
	return s
}

// SetVersion sets the Version field's value.
func (s *ImageRecipe) SetVersion(v string) *ImageRecipe {
	s.Version = &v
	return s
}

// A summary of an image recipe.
type ImageRecipeSummary struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the image recipe.
	Arn *string `locationName:"arn" type:"string"`

	// The date on which this image recipe was created.
	DateCreated *string `locationName:"dateCreated" type:"string"`

	// The name of the image recipe.
	Name *string `locationName:"name" type:"string"`

	// The owner of the image recipe.
	Owner *string `locationName:"owner" min:"1" type:"string"`

	// The parent image of the image recipe.
	ParentImage *string `locationName:"parentImage" min:"1" type:"string"`

	// The platform of the image recipe.
	Platform *string `locationName:"platform" type:"string" enum:"Platform"`

	// The tags of the image recipe.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`
}

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

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

// SetArn sets the Arn field's value.
func (s *ImageRecipeSummary) SetArn(v string) *ImageRecipeSummary {
	s.Arn = &v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *ImageRecipeSummary) SetDateCreated(v string) *ImageRecipeSummary {
	s.DateCreated = &v
	return s
}

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

// SetOwner sets the Owner field's value.
func (s *ImageRecipeSummary) SetOwner(v string) *ImageRecipeSummary {
	s.Owner = &v
	return s
}

// SetParentImage sets the ParentImage field's value.
func (s *ImageRecipeSummary) SetParentImage(v string) *ImageRecipeSummary {
	s.ParentImage = &v
	return s
}

// SetPlatform sets the Platform field's value.
func (s *ImageRecipeSummary) SetPlatform(v string) *ImageRecipeSummary {
	s.Platform = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *ImageRecipeSummary) SetTags(v map[string]*string) *ImageRecipeSummary {
	s.Tags = v
	return s
}

// Image state shows the images status and the reason for that status.
type ImageState struct {
	_ struct{} `type:"structure"`

	// The reason for the image's status.
	Reason *string `locationName:"reason" min:"1" type:"string"`

	// The status of the image.
	Status *string `locationName:"status" type:"string" enum:"ImageStatus"`
}

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

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

// SetReason sets the Reason field's value.
func (s *ImageState) SetReason(v string) *ImageState {
	s.Reason = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ImageState) SetStatus(v string) *ImageState {
	s.Status = &v
	return s
}

// An image summary.
type ImageSummary struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the image.
	Arn *string `locationName:"arn" type:"string"`

	// The date on which this image was created.
	DateCreated *string `locationName:"dateCreated" type:"string"`

	// The name of the image.
	Name *string `locationName:"name" type:"string"`

	// The output resources produced when creating this image.
	OutputResources *OutputResources `locationName:"outputResources" type:"structure"`

	// The owner of the image.
	Owner *string `locationName:"owner" min:"1" type:"string"`

	// The platform of the image.
	Platform *string `locationName:"platform" type:"string" enum:"Platform"`

	// The state of the image.
	State *ImageState `locationName:"state" type:"structure"`

	// The tags of the image.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`

	// The version of the image.
	Version *string `locationName:"version" type:"string"`
}

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

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

// SetArn sets the Arn field's value.
func (s *ImageSummary) SetArn(v string) *ImageSummary {
	s.Arn = &v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *ImageSummary) SetDateCreated(v string) *ImageSummary {
	s.DateCreated = &v
	return s
}

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

// SetOutputResources sets the OutputResources field's value.
func (s *ImageSummary) SetOutputResources(v *OutputResources) *ImageSummary {
	s.OutputResources = v
	return s
}

// SetOwner sets the Owner field's value.
func (s *ImageSummary) SetOwner(v string) *ImageSummary {
	s.Owner = &v
	return s
}

// SetPlatform sets the Platform field's value.
func (s *ImageSummary) SetPlatform(v string) *ImageSummary {
	s.Platform = &v
	return s
}

// SetState sets the State field's value.
func (s *ImageSummary) SetState(v *ImageState) *ImageSummary {
	s.State = v
	return s
}

// SetTags sets the Tags field's value.
func (s *ImageSummary) SetTags(v map[string]*string) *ImageSummary {
	s.Tags = v
	return s
}

// SetVersion sets the Version field's value.
func (s *ImageSummary) SetVersion(v string) *ImageSummary {
	s.Version = &v
	return s
}

// Image tests configuration.
type ImageTestsConfiguration struct {
	_ struct{} `type:"structure"`

	// Defines if tests should be executed when building this image.
	ImageTestsEnabled *bool `locationName:"imageTestsEnabled" type:"boolean"`

	// The maximum time in minutes that tests are permitted to run for.
	TimeoutMinutes *int64 `locationName:"timeoutMinutes" min:"60" type:"integer"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ImageTestsConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ImageTestsConfiguration"}
	if s.TimeoutMinutes != nil && *s.TimeoutMinutes < 60 {
		invalidParams.Add(request.NewErrParamMinValue("TimeoutMinutes", 60))
	}

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

// SetImageTestsEnabled sets the ImageTestsEnabled field's value.
func (s *ImageTestsConfiguration) SetImageTestsEnabled(v bool) *ImageTestsConfiguration {
	s.ImageTestsEnabled = &v
	return s
}

// SetTimeoutMinutes sets the TimeoutMinutes field's value.
func (s *ImageTestsConfiguration) SetTimeoutMinutes(v int64) *ImageTestsConfiguration {
	s.TimeoutMinutes = &v
	return s
}

// An image semantic version.
type ImageVersion struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the image semantic verion.
	Arn *string `locationName:"arn" type:"string"`

	// The date at which this image semantic version was created.
	DateCreated *string `locationName:"dateCreated" type:"string"`

	// The name of the image semantic version.
	Name *string `locationName:"name" type:"string"`

	// The owner of the image semantic version.
	Owner *string `locationName:"owner" min:"1" type:"string"`

	// The platform of the image semantic version.
	Platform *string `locationName:"platform" type:"string" enum:"Platform"`

	// The semantic version of the image semantic version.
	Version *string `locationName:"version" type:"string"`
}

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

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

// SetArn sets the Arn field's value.
func (s *ImageVersion) SetArn(v string) *ImageVersion {
	s.Arn = &v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *ImageVersion) SetDateCreated(v string) *ImageVersion {
	s.DateCreated = &v
	return s
}

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

// SetOwner sets the Owner field's value.
func (s *ImageVersion) SetOwner(v string) *ImageVersion {
	s.Owner = &v
	return s
}

// SetPlatform sets the Platform field's value.
func (s *ImageVersion) SetPlatform(v string) *ImageVersion {
	s.Platform = &v
	return s
}

// SetVersion sets the Version field's value.
func (s *ImageVersion) SetVersion(v string) *ImageVersion {
	s.Version = &v
	return s
}

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

	// The change description of the component. Describes what change has been made
	// in this version. In other words what makes this version different from other
	// versions of this component.
	ChangeDescription *string `locationName:"changeDescription" min:"1" type:"string"`

	// The idempotency token of the component.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string" idempotencyToken:"true"`

	// The data of the component.
	Data *string `locationName:"data" min:"1" type:"string"`

	// The description of the component. Describes the contents of the component.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The format of the resource that you wish to import as a component.
	//
	// Format is a required field
	Format *string `locationName:"format" type:"string" required:"true" enum:"ComponentFormat"`

	// The ID of the KMS key that should be used to encrypt this component.
	KmsKeyId *string `locationName:"kmsKeyId" min:"1" type:"string"`

	// The name of the component.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`

	// The platform of the component.
	//
	// Platform is a required field
	Platform *string `locationName:"platform" type:"string" required:"true" enum:"Platform"`

	// The semantic version of the component. This version to follow the semantic
	// version syntax. i.e. major.minor.patch. This could be versioned like software
	// 2.0.1 or date like 2019.12.01.
	//
	// SemanticVersion is a required field
	SemanticVersion *string `locationName:"semanticVersion" type:"string" required:"true"`

	// The tags of the component.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`

	// The type of the component denotes whether the component is used to build
	// the image or only to test it.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true" enum:"ComponentType"`

	// The uri of the component.
	Uri *string `locationName:"uri" type:"string"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ImportComponentInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ImportComponentInput"}
	if s.ChangeDescription != nil && len(*s.ChangeDescription) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ChangeDescription", 1))
	}
	if s.ClientToken != nil && len(*s.ClientToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 1))
	}
	if s.Data != nil && len(*s.Data) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Data", 1))
	}
	if s.Description != nil && len(*s.Description) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Description", 1))
	}
	if s.Format == nil {
		invalidParams.Add(request.NewErrParamRequired("Format"))
	}
	if s.KmsKeyId != nil && len(*s.KmsKeyId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("KmsKeyId", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Platform == nil {
		invalidParams.Add(request.NewErrParamRequired("Platform"))
	}
	if s.SemanticVersion == nil {
		invalidParams.Add(request.NewErrParamRequired("SemanticVersion"))
	}
	if s.Tags != nil && len(s.Tags) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Tags", 1))
	}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}

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

// SetChangeDescription sets the ChangeDescription field's value.
func (s *ImportComponentInput) SetChangeDescription(v string) *ImportComponentInput {
	s.ChangeDescription = &v
	return s
}

// SetClientToken sets the ClientToken field's value.
func (s *ImportComponentInput) SetClientToken(v string) *ImportComponentInput {
	s.ClientToken = &v
	return s
}

// SetData sets the Data field's value.
func (s *ImportComponentInput) SetData(v string) *ImportComponentInput {
	s.Data = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *ImportComponentInput) SetDescription(v string) *ImportComponentInput {
	s.Description = &v
	return s
}

// SetFormat sets the Format field's value.
func (s *ImportComponentInput) SetFormat(v string) *ImportComponentInput {
	s.Format = &v
	return s
}

// SetKmsKeyId sets the KmsKeyId field's value.
func (s *ImportComponentInput) SetKmsKeyId(v string) *ImportComponentInput {
	s.KmsKeyId = &v
	return s
}

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

// SetPlatform sets the Platform field's value.
func (s *ImportComponentInput) SetPlatform(v string) *ImportComponentInput {
	s.Platform = &v
	return s
}

// SetSemanticVersion sets the SemanticVersion field's value.
func (s *ImportComponentInput) SetSemanticVersion(v string) *ImportComponentInput {
	s.SemanticVersion = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *ImportComponentInput) SetTags(v map[string]*string) *ImportComponentInput {
	s.Tags = v
	return s
}

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

// SetUri sets the Uri field's value.
func (s *ImportComponentInput) SetUri(v string) *ImportComponentInput {
	s.Uri = &v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the imported component.
	ComponentBuildVersionArn *string `locationName:"componentBuildVersionArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetClientToken sets the ClientToken field's value.
func (s *ImportComponentOutput) SetClientToken(v string) *ImportComponentOutput {
	s.ClientToken = &v
	return s
}

// SetComponentBuildVersionArn sets the ComponentBuildVersionArn field's value.
func (s *ImportComponentOutput) SetComponentBuildVersionArn(v string) *ImportComponentOutput {
	s.ComponentBuildVersionArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *ImportComponentOutput) SetRequestId(v string) *ImportComponentOutput {
	s.RequestId = &v
	return s
}

// Details of the infrastructure configuration.
type InfrastructureConfiguration struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the infrastruction configuration.
	Arn *string `locationName:"arn" type:"string"`

	// The date on which the infrastructure configuration was created.
	DateCreated *string `locationName:"dateCreated" type:"string"`

	// The date on which the infrastructure configuration was last updated.
	DateUpdated *string `locationName:"dateUpdated" type:"string"`

	// The description of the infrastruction configuration.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The instance profile of the infrastruction configuration.
	InstanceProfileName *string `locationName:"instanceProfileName" min:"1" type:"string"`

	// The instance types of the infrastruction configuration.
	InstanceTypes []*string `locationName:"instanceTypes" type:"list"`

	// The EC2 key pair of the infrastruction configuration.
	KeyPair *string `locationName:"keyPair" min:"1" type:"string"`

	// The logging configuration of the infrastruction configuration.
	Logging *Logging `locationName:"logging" type:"structure"`

	// The name of the infrastruction configuration.
	Name *string `locationName:"name" type:"string"`

	// The security group IDs of the infrastruction configuration.
	SecurityGroupIds []*string `locationName:"securityGroupIds" type:"list"`

	// The SNS Topic Amazon Resource Name (ARN) of the infrastruction configuration.
	SnsTopicArn *string `locationName:"snsTopicArn" min:"1" type:"string"`

	// The subnet ID of the infrastruction configuration.
	SubnetId *string `locationName:"subnetId" min:"1" type:"string"`

	// The tags of the infrastruction configuration.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`

	// The terminate instance on failure configuration of the infrastruction configuration.
	TerminateInstanceOnFailure *bool `locationName:"terminateInstanceOnFailure" type:"boolean"`
}

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

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

// SetArn sets the Arn field's value.
func (s *InfrastructureConfiguration) SetArn(v string) *InfrastructureConfiguration {
	s.Arn = &v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *InfrastructureConfiguration) SetDateCreated(v string) *InfrastructureConfiguration {
	s.DateCreated = &v
	return s
}

// SetDateUpdated sets the DateUpdated field's value.
func (s *InfrastructureConfiguration) SetDateUpdated(v string) *InfrastructureConfiguration {
	s.DateUpdated = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *InfrastructureConfiguration) SetDescription(v string) *InfrastructureConfiguration {
	s.Description = &v
	return s
}

// SetInstanceProfileName sets the InstanceProfileName field's value.
func (s *InfrastructureConfiguration) SetInstanceProfileName(v string) *InfrastructureConfiguration {
	s.InstanceProfileName = &v
	return s
}

// SetInstanceTypes sets the InstanceTypes field's value.
func (s *InfrastructureConfiguration) SetInstanceTypes(v []*string) *InfrastructureConfiguration {
	s.InstanceTypes = v
	return s
}

// SetKeyPair sets the KeyPair field's value.
func (s *InfrastructureConfiguration) SetKeyPair(v string) *InfrastructureConfiguration {
	s.KeyPair = &v
	return s
}

// SetLogging sets the Logging field's value.
func (s *InfrastructureConfiguration) SetLogging(v *Logging) *InfrastructureConfiguration {
	s.Logging = v
	return s
}

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

// SetSecurityGroupIds sets the SecurityGroupIds field's value.
func (s *InfrastructureConfiguration) SetSecurityGroupIds(v []*string) *InfrastructureConfiguration {
	s.SecurityGroupIds = v
	return s
}

// SetSnsTopicArn sets the SnsTopicArn field's value.
func (s *InfrastructureConfiguration) SetSnsTopicArn(v string) *InfrastructureConfiguration {
	s.SnsTopicArn = &v
	return s
}

// SetSubnetId sets the SubnetId field's value.
func (s *InfrastructureConfiguration) SetSubnetId(v string) *InfrastructureConfiguration {
	s.SubnetId = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *InfrastructureConfiguration) SetTags(v map[string]*string) *InfrastructureConfiguration {
	s.Tags = v
	return s
}

// SetTerminateInstanceOnFailure sets the TerminateInstanceOnFailure field's value.
func (s *InfrastructureConfiguration) SetTerminateInstanceOnFailure(v bool) *InfrastructureConfiguration {
	s.TerminateInstanceOnFailure = &v
	return s
}

// The infrastructure used when building EC2 AMIs.
type InfrastructureConfigurationSummary struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the infrastructure configuration.
	Arn *string `locationName:"arn" type:"string"`

	// The date on which the infrastructure configuration was created.
	DateCreated *string `locationName:"dateCreated" type:"string"`

	// The date on which the infrastructure configuration was last updated.
	DateUpdated *string `locationName:"dateUpdated" type:"string"`

	// The description of the infrastructure configuration.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The name of the infrastructure configuration.
	Name *string `locationName:"name" type:"string"`

	// The tags of the infrastructure configuration.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`
}

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

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

// SetArn sets the Arn field's value.
func (s *InfrastructureConfigurationSummary) SetArn(v string) *InfrastructureConfigurationSummary {
	s.Arn = &v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *InfrastructureConfigurationSummary) SetDateCreated(v string) *InfrastructureConfigurationSummary {
	s.DateCreated = &v
	return s
}

// SetDateUpdated sets the DateUpdated field's value.
func (s *InfrastructureConfigurationSummary) SetDateUpdated(v string) *InfrastructureConfigurationSummary {
	s.DateUpdated = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *InfrastructureConfigurationSummary) SetDescription(v string) *InfrastructureConfigurationSummary {
	s.Description = &v
	return s
}

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

// SetTags sets the Tags field's value.
func (s *InfrastructureConfigurationSummary) SetTags(v map[string]*string) *InfrastructureConfigurationSummary {
	s.Tags = v
	return s
}

// Defines block device mappings for the instance used to configure your image.
type InstanceBlockDeviceMapping struct {
	_ struct{} `type:"structure"`

	// The device to which these mappings apply.
	DeviceName *string `locationName:"deviceName" min:"1" type:"string"`

	// Use to manage EBS specific configuration for this mapping.
	Ebs *EbsInstanceBlockDeviceSpecification `locationName:"ebs" type:"structure"`

	// Use to remove a mapping from the parent image.
	NoDevice *string `locationName:"noDevice" min:"1" type:"string"`

	// Use to manage instance ephemeral devices.
	VirtualName *string `locationName:"virtualName" min:"1" type:"string"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *InstanceBlockDeviceMapping) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "InstanceBlockDeviceMapping"}
	if s.DeviceName != nil && len(*s.DeviceName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DeviceName", 1))
	}
	if s.NoDevice != nil && len(*s.NoDevice) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NoDevice", 1))
	}
	if s.VirtualName != nil && len(*s.VirtualName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("VirtualName", 1))
	}
	if s.Ebs != nil {
		if err := s.Ebs.Validate(); err != nil {
			invalidParams.AddNested("Ebs", err.(request.ErrInvalidParams))
		}
	}

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

// SetDeviceName sets the DeviceName field's value.
func (s *InstanceBlockDeviceMapping) SetDeviceName(v string) *InstanceBlockDeviceMapping {
	s.DeviceName = &v
	return s
}

// SetEbs sets the Ebs field's value.
func (s *InstanceBlockDeviceMapping) SetEbs(v *EbsInstanceBlockDeviceSpecification) *InstanceBlockDeviceMapping {
	s.Ebs = v
	return s
}

// SetNoDevice sets the NoDevice field's value.
func (s *InstanceBlockDeviceMapping) SetNoDevice(v string) *InstanceBlockDeviceMapping {
	s.NoDevice = &v
	return s
}

// SetVirtualName sets the VirtualName field's value.
func (s *InstanceBlockDeviceMapping) SetVirtualName(v string) *InstanceBlockDeviceMapping {
	s.VirtualName = &v
	return s
}

// You have provided an invalid pagination token in your request.
type InvalidPaginationTokenException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

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

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

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

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

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

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

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

// You have specified two or more mutually exclusive parameters. Review the
// error message for details.
type InvalidParameterCombinationException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorInvalidParameterCombinationException(v protocol.ResponseMetadata) error {
	return &InvalidParameterCombinationException{
		respMetadata: v,
	}
}

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

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

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

func (s InvalidParameterCombinationException) 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 InvalidParameterCombinationException) StatusCode() int {
	return s.respMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s InvalidParameterCombinationException) RequestID() string {
	return s.respMetadata.RequestID
}

// The specified parameter is invalid. Review the available parameters for the
// API request.
type InvalidParameterException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

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

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

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

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

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

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

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

// The value that you provided for the specified parameter is invalid.
type InvalidParameterValueException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorInvalidParameterValueException(v protocol.ResponseMetadata) error {
	return &InvalidParameterValueException{
		respMetadata: v,
	}
}

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

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

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

func (s InvalidParameterValueException) 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 InvalidParameterValueException) StatusCode() int {
	return s.respMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s InvalidParameterValueException) RequestID() string {
	return s.respMetadata.RequestID
}

// You have made a request for an action that is not supported by the service.
type InvalidRequestException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

// GoString returns the string representation
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
}

// Your version number is out of bounds or does not follow the required syntax.
type InvalidVersionNumberException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorInvalidVersionNumberException(v protocol.ResponseMetadata) error {
	return &InvalidVersionNumberException{
		respMetadata: v,
	}
}

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

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

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

func (s InvalidVersionNumberException) 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 InvalidVersionNumberException) StatusCode() int {
	return s.respMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s InvalidVersionNumberException) RequestID() string {
	return s.respMetadata.RequestID
}

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

	UserGroups []*string `locationName:"userGroups" type:"list"`

	UserIds []*string `locationName:"userIds" type:"list"`
}

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

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

// SetUserGroups sets the UserGroups field's value.
func (s *LaunchPermissionConfiguration) SetUserGroups(v []*string) *LaunchPermissionConfiguration {
	s.UserGroups = v
	return s
}

// SetUserIds sets the UserIds field's value.
func (s *LaunchPermissionConfiguration) SetUserIds(v []*string) *LaunchPermissionConfiguration {
	s.UserIds = v
	return s
}

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

	// The component version arn whose versions you wish to list.
	//
	// ComponentVersionArn is a required field
	ComponentVersionArn *string `locationName:"componentVersionArn" type:"string" required:"true"`

	// The maximum items to return in a request.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// A token to specify where to start paginating. This is the NextToken from
	// a previously truncated response.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

// SetComponentVersionArn sets the ComponentVersionArn field's value.
func (s *ListComponentBuildVersionsInput) SetComponentVersionArn(v string) *ListComponentBuildVersionsInput {
	s.ComponentVersionArn = &v
	return s
}

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

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

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

	// The list of component summaries for the specified semantic version.
	ComponentSummaryList []*ComponentSummary `locationName:"componentSummaryList" type:"list"`

	// The next token used for paginated responses. When this is not empty then
	// there are additional elements that the service that not include in this request.
	// Use this token with the next request to retrieve additional object.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetComponentSummaryList sets the ComponentSummaryList field's value.
func (s *ListComponentBuildVersionsOutput) SetComponentSummaryList(v []*ComponentSummary) *ListComponentBuildVersionsOutput {
	s.ComponentSummaryList = v
	return s
}

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

// SetRequestId sets the RequestId field's value.
func (s *ListComponentBuildVersionsOutput) SetRequestId(v string) *ListComponentBuildVersionsOutput {
	s.RequestId = &v
	return s
}

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

	Filters []*Filter `locationName:"filters" min:"1" type:"list"`

	// The maximum items to return in a request.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// A token to specify where to start paginating. This is the NextToken from
	// a previously truncated response.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The owner defines whose components you wish to list. By default this request
	// will only show components owned by your account. You may use this field to
	// specify if you wish to view components owned by yourself, Amazon, or those
	// components that have been shared with you by other customers.
	Owner *string `locationName:"owner" type:"string" enum:"Ownership"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *ListComponentsInput) SetFilters(v []*Filter) *ListComponentsInput {
	s.Filters = v
	return s
}

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

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

// SetOwner sets the Owner field's value.
func (s *ListComponentsInput) SetOwner(v string) *ListComponentsInput {
	s.Owner = &v
	return s
}

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

	// The list of component semantic versions.
	ComponentVersionList []*ComponentVersion `locationName:"componentVersionList" type:"list"`

	// The next token used for paginated responses. When this is not empty then
	// there are additional elements that the service that not include in this request.
	// Use this token with the next request to retrieve additional object.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetComponentVersionList sets the ComponentVersionList field's value.
func (s *ListComponentsOutput) SetComponentVersionList(v []*ComponentVersion) *ListComponentsOutput {
	s.ComponentVersionList = v
	return s
}

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

// SetRequestId sets the RequestId field's value.
func (s *ListComponentsOutput) SetRequestId(v string) *ListComponentsOutput {
	s.RequestId = &v
	return s
}

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

	Filters []*Filter `locationName:"filters" min:"1" type:"list"`

	// The maximum items to return in a request.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// A token to specify where to start paginating. This is the NextToken from
	// a previously truncated response.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *ListDistributionConfigurationsInput) SetFilters(v []*Filter) *ListDistributionConfigurationsInput {
	s.Filters = v
	return s
}

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

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

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

	// The list of distributions.
	DistributionConfigurationSummaryList []*DistributionConfigurationSummary `locationName:"distributionConfigurationSummaryList" type:"list"`

	// The next token used for paginated responses. When this is not empty then
	// there are additional elements that the service that not include in this request.
	// Use this token with the next request to retrieve additional object.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetDistributionConfigurationSummaryList sets the DistributionConfigurationSummaryList field's value.
func (s *ListDistributionConfigurationsOutput) SetDistributionConfigurationSummaryList(v []*DistributionConfigurationSummary) *ListDistributionConfigurationsOutput {
	s.DistributionConfigurationSummaryList = v
	return s
}

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

// SetRequestId sets the RequestId field's value.
func (s *ListDistributionConfigurationsOutput) SetRequestId(v string) *ListDistributionConfigurationsOutput {
	s.RequestId = &v
	return s
}

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

	Filters []*Filter `locationName:"filters" min:"1" type:"list"`

	// The Amazon Resource Name (ARN) of the image whose build versions you wish
	// to retrieve.
	//
	// ImageVersionArn is a required field
	ImageVersionArn *string `locationName:"imageVersionArn" type:"string" required:"true"`

	// The maximum items to return in a request.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// A token to specify where to start paginating. This is the NextToken from
	// a previously truncated response.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *ListImageBuildVersionsInput) SetFilters(v []*Filter) *ListImageBuildVersionsInput {
	s.Filters = v
	return s
}

// SetImageVersionArn sets the ImageVersionArn field's value.
func (s *ListImageBuildVersionsInput) SetImageVersionArn(v string) *ListImageBuildVersionsInput {
	s.ImageVersionArn = &v
	return s
}

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

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

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

	// The list of image build versions.
	ImageSummaryList []*ImageSummary `locationName:"imageSummaryList" type:"list"`

	// The next token used for paginated responses. When this is not empty then
	// there are additional elements that the service that not include in this request.
	// Use this token with the next request to retrieve additional object.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetImageSummaryList sets the ImageSummaryList field's value.
func (s *ListImageBuildVersionsOutput) SetImageSummaryList(v []*ImageSummary) *ListImageBuildVersionsOutput {
	s.ImageSummaryList = v
	return s
}

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

// SetRequestId sets the RequestId field's value.
func (s *ListImageBuildVersionsOutput) SetRequestId(v string) *ListImageBuildVersionsOutput {
	s.RequestId = &v
	return s
}

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

	Filters []*Filter `locationName:"filters" min:"1" type:"list"`

	// The Amazon Resource Name (ARN) of the image pipeline whose images you wish
	// to view.
	ImagePipelineArn *string `locationName:"imagePipelineArn" type:"string"`

	// The maximum items to return in a request.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// A token to specify where to start paginating. This is the NextToken from
	// a previously truncated response.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *ListImagePipelineImagesInput) SetFilters(v []*Filter) *ListImagePipelineImagesInput {
	s.Filters = v
	return s
}

// SetImagePipelineArn sets the ImagePipelineArn field's value.
func (s *ListImagePipelineImagesInput) SetImagePipelineArn(v string) *ListImagePipelineImagesInput {
	s.ImagePipelineArn = &v
	return s
}

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

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

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

	// The list of images built by this pipeline.
	ImageSummaryList []*ImageSummary `locationName:"imageSummaryList" type:"list"`

	// The next token used for paginated responses. When this is not empty then
	// there are additional elements that the service that not include in this request.
	// Use this token with the next request to retrieve additional object.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetImageSummaryList sets the ImageSummaryList field's value.
func (s *ListImagePipelineImagesOutput) SetImageSummaryList(v []*ImageSummary) *ListImagePipelineImagesOutput {
	s.ImageSummaryList = v
	return s
}

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

// SetRequestId sets the RequestId field's value.
func (s *ListImagePipelineImagesOutput) SetRequestId(v string) *ListImagePipelineImagesOutput {
	s.RequestId = &v
	return s
}

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

	Filters []*Filter `locationName:"filters" min:"1" type:"list"`

	// The maximum items to return in a request.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// A token to specify where to start paginating. This is the NextToken from
	// a previously truncated response.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *ListImagePipelinesInput) SetFilters(v []*Filter) *ListImagePipelinesInput {
	s.Filters = v
	return s
}

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

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

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

	// The list of image pipelines.
	ImagePipelineList []*ImagePipeline `locationName:"imagePipelineList" type:"list"`

	// The next token used for paginated responses. When this is not empty then
	// there are additional elements that the service that not include in this request.
	// Use this token with the next request to retrieve additional object.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetImagePipelineList sets the ImagePipelineList field's value.
func (s *ListImagePipelinesOutput) SetImagePipelineList(v []*ImagePipeline) *ListImagePipelinesOutput {
	s.ImagePipelineList = v
	return s
}

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

// SetRequestId sets the RequestId field's value.
func (s *ListImagePipelinesOutput) SetRequestId(v string) *ListImagePipelinesOutput {
	s.RequestId = &v
	return s
}

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

	Filters []*Filter `locationName:"filters" min:"1" type:"list"`

	// The maximum items to return in a request.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// A token to specify where to start paginating. This is the NextToken from
	// a previously truncated response.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The owner defines whose image recipes you wish to list. By default this request
	// will only show image recipes owned by your account. You may use this field
	// to specify if you wish to view image recipes owned by yourself, Amazon, or
	// those image recipes that have been shared with you by other customers.
	Owner *string `locationName:"owner" type:"string" enum:"Ownership"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *ListImageRecipesInput) SetFilters(v []*Filter) *ListImageRecipesInput {
	s.Filters = v
	return s
}

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

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

// SetOwner sets the Owner field's value.
func (s *ListImageRecipesInput) SetOwner(v string) *ListImageRecipesInput {
	s.Owner = &v
	return s
}

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

	// The list of image pipelines.
	ImageRecipeSummaryList []*ImageRecipeSummary `locationName:"imageRecipeSummaryList" type:"list"`

	// The next token used for paginated responses. When this is not empty then
	// there are additional elements that the service that not include in this request.
	// Use this token with the next request to retrieve additional object.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetImageRecipeSummaryList sets the ImageRecipeSummaryList field's value.
func (s *ListImageRecipesOutput) SetImageRecipeSummaryList(v []*ImageRecipeSummary) *ListImageRecipesOutput {
	s.ImageRecipeSummaryList = v
	return s
}

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

// SetRequestId sets the RequestId field's value.
func (s *ListImageRecipesOutput) SetRequestId(v string) *ListImageRecipesOutput {
	s.RequestId = &v
	return s
}

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

	Filters []*Filter `locationName:"filters" min:"1" type:"list"`

	// The maximum items to return in a request.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// A token to specify where to start paginating. This is the NextToken from
	// a previously truncated response.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The owner defines whose images you wish to list. By default this request
	// will only show images owned by your account. You may use this field to specify
	// if you wish to view images owned by yourself, Amazon, or those images that
	// have been shared with you by other customers.
	Owner *string `locationName:"owner" type:"string" enum:"Ownership"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *ListImagesInput) SetFilters(v []*Filter) *ListImagesInput {
	s.Filters = v
	return s
}

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

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

// SetOwner sets the Owner field's value.
func (s *ListImagesInput) SetOwner(v string) *ListImagesInput {
	s.Owner = &v
	return s
}

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

	// The list of image semantic versions.
	ImageVersionList []*ImageVersion `locationName:"imageVersionList" type:"list"`

	// The next token used for paginated responses. When this is not empty then
	// there are additional elements that the service that not include in this request.
	// Use this token with the next request to retrieve additional object.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetImageVersionList sets the ImageVersionList field's value.
func (s *ListImagesOutput) SetImageVersionList(v []*ImageVersion) *ListImagesOutput {
	s.ImageVersionList = v
	return s
}

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

// SetRequestId sets the RequestId field's value.
func (s *ListImagesOutput) SetRequestId(v string) *ListImagesOutput {
	s.RequestId = &v
	return s
}

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

	Filters []*Filter `locationName:"filters" min:"1" type:"list"`

	// The maximum items to return in a request.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// A token to specify where to start paginating. This is the NextToken from
	// a previously truncated response.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *ListInfrastructureConfigurationsInput) SetFilters(v []*Filter) *ListInfrastructureConfigurationsInput {
	s.Filters = v
	return s
}

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

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

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

	// The list of infrastructure configurations.
	InfrastructureConfigurationSummaryList []*InfrastructureConfigurationSummary `locationName:"infrastructureConfigurationSummaryList" type:"list"`

	// The next token used for paginated responses. When this is not empty then
	// there are additional elements that the service that not include in this request.
	// Use this token with the next request to retrieve additional object.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetInfrastructureConfigurationSummaryList sets the InfrastructureConfigurationSummaryList field's value.
func (s *ListInfrastructureConfigurationsOutput) SetInfrastructureConfigurationSummaryList(v []*InfrastructureConfigurationSummary) *ListInfrastructureConfigurationsOutput {
	s.InfrastructureConfigurationSummaryList = v
	return s
}

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

// SetRequestId sets the RequestId field's value.
func (s *ListInfrastructureConfigurationsOutput) SetRequestId(v string) *ListInfrastructureConfigurationsOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the resource whose tags you wish to retrieve.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`
}

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

// GoString returns the string representation
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 s.ResourceArn != nil && len(*s.ResourceArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 1))
	}

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

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

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

	// The tags for the specified resource.
	Tags map[string]*string `locationName:"tags" min:"1" type:"map"`
}

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

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

// SetTags sets the Tags field's value.
func (s *ListTagsForResourceOutput) SetTags(v map[string]*string) *ListTagsForResourceOutput {
	s.Tags = v
	return s
}

// Logging configuration defines where Image Builder uploads your logs to.
type Logging struct {
	_ struct{} `type:"structure"`

	// The S3 logging configuration.
	S3Logs *S3Logs `locationName:"s3Logs" type:"structure"`
}

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

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

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

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

// SetS3Logs sets the S3Logs field's value.
func (s *Logging) SetS3Logs(v *S3Logs) *Logging {
	s.S3Logs = v
	return s
}

// The resources produced by this image.
type OutputResources struct {
	_ struct{} `type:"structure"`

	// The EC2 AMIs created by this image.
	Amis []*Ami `locationName:"amis" type:"list"`
}

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

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

// SetAmis sets the Amis field's value.
func (s *OutputResources) SetAmis(v []*Ami) *OutputResources {
	s.Amis = v
	return s
}

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

	// The Amazon Resource Name (ARN) of the component that this policy should be
	// applied to.
	//
	// ComponentArn is a required field
	ComponentArn *string `locationName:"componentArn" type:"string" required:"true"`

	// The policy to apply.
	//
	// Policy is a required field
	Policy *string `locationName:"policy" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetComponentArn sets the ComponentArn field's value.
func (s *PutComponentPolicyInput) SetComponentArn(v string) *PutComponentPolicyInput {
	s.ComponentArn = &v
	return s
}

// SetPolicy sets the Policy field's value.
func (s *PutComponentPolicyInput) SetPolicy(v string) *PutComponentPolicyInput {
	s.Policy = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the component that this policy was applied
	// to.
	ComponentArn *string `locationName:"componentArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetComponentArn sets the ComponentArn field's value.
func (s *PutComponentPolicyOutput) SetComponentArn(v string) *PutComponentPolicyOutput {
	s.ComponentArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *PutComponentPolicyOutput) SetRequestId(v string) *PutComponentPolicyOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image that this policy should be applied
	// to.
	//
	// ImageArn is a required field
	ImageArn *string `locationName:"imageArn" type:"string" required:"true"`

	// The policy to apply.
	//
	// Policy is a required field
	Policy *string `locationName:"policy" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetImageArn sets the ImageArn field's value.
func (s *PutImagePolicyInput) SetImageArn(v string) *PutImagePolicyInput {
	s.ImageArn = &v
	return s
}

// SetPolicy sets the Policy field's value.
func (s *PutImagePolicyInput) SetPolicy(v string) *PutImagePolicyInput {
	s.Policy = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image that this policy was applied
	// to.
	ImageArn *string `locationName:"imageArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetImageArn sets the ImageArn field's value.
func (s *PutImagePolicyOutput) SetImageArn(v string) *PutImagePolicyOutput {
	s.ImageArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *PutImagePolicyOutput) SetRequestId(v string) *PutImagePolicyOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image recipe that this policy should
	// be applied to.
	//
	// ImageRecipeArn is a required field
	ImageRecipeArn *string `locationName:"imageRecipeArn" type:"string" required:"true"`

	// The policy to apply.
	//
	// Policy is a required field
	Policy *string `locationName:"policy" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetImageRecipeArn sets the ImageRecipeArn field's value.
func (s *PutImageRecipePolicyInput) SetImageRecipeArn(v string) *PutImageRecipePolicyInput {
	s.ImageRecipeArn = &v
	return s
}

// SetPolicy sets the Policy field's value.
func (s *PutImageRecipePolicyInput) SetPolicy(v string) *PutImageRecipePolicyInput {
	s.Policy = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the image recipe that this policy was applied
	// to.
	ImageRecipeArn *string `locationName:"imageRecipeArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetImageRecipeArn sets the ImageRecipeArn field's value.
func (s *PutImageRecipePolicyOutput) SetImageRecipeArn(v string) *PutImageRecipePolicyOutput {
	s.ImageRecipeArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *PutImageRecipePolicyOutput) SetRequestId(v string) *PutImageRecipePolicyOutput {
	s.RequestId = &v
	return s
}

// The resource that you are trying to create already exists.
type ResourceAlreadyExistsException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

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

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

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

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

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

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

// You have attempted to mutate or delete a resource with a dependency that
// is prohibitting this action. See the error message for more details.
type ResourceDependencyException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorResourceDependencyException(v protocol.ResponseMetadata) error {
	return &ResourceDependencyException{
		respMetadata: v,
	}
}

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

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

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

func (s ResourceDependencyException) 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 ResourceDependencyException) StatusCode() int {
	return s.respMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s ResourceDependencyException) RequestID() string {
	return s.respMetadata.RequestID
}

// The resource that you are trying to operate on is currently in use. Review
// the message details, and retry later.
type ResourceInUseException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorResourceInUseException(v protocol.ResponseMetadata) error {
	return &ResourceInUseException{
		respMetadata: v,
	}
}

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

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

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

func (s ResourceInUseException) 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 ResourceInUseException) StatusCode() int {
	return s.respMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s ResourceInUseException) RequestID() string {
	return s.respMetadata.RequestID
}

// At least one of the resources referenced by your request does not exist.
type ResourceNotFoundException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

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

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

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

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

func (s ResourceNotFoundException) Error() string {
	return fmt.Sprintf("%s: %s", 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
}

// S3 Logging configuration.
type S3Logs struct {
	_ struct{} `type:"structure"`

	// The S3 bucket in which to store the logs.
	S3BucketName *string `locationName:"s3BucketName" min:"1" type:"string"`

	// The S3 path in which to store the logs.
	S3KeyPrefix *string `locationName:"s3KeyPrefix" min:"1" type:"string"`
}

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

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

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

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

// SetS3BucketName sets the S3BucketName field's value.
func (s *S3Logs) SetS3BucketName(v string) *S3Logs {
	s.S3BucketName = &v
	return s
}

// SetS3KeyPrefix sets the S3KeyPrefix field's value.
func (s *S3Logs) SetS3KeyPrefix(v string) *S3Logs {
	s.S3KeyPrefix = &v
	return s
}

// A schedule configures how often and when a pipeline will automatically create
// a new image.
type Schedule struct {
	_ struct{} `type:"structure"`

	// The condition configures when the pipeline should trigger a new image build.
	PipelineExecutionStartCondition *string `locationName:"pipelineExecutionStartCondition" type:"string" enum:"PipelineExecutionStartCondition"`

	// The expression determines how often a pipeline starts the creation of new
	// images.
	ScheduleExpression *string `locationName:"scheduleExpression" min:"1" type:"string"`
}

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

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

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

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

// SetPipelineExecutionStartCondition sets the PipelineExecutionStartCondition field's value.
func (s *Schedule) SetPipelineExecutionStartCondition(v string) *Schedule {
	s.PipelineExecutionStartCondition = &v
	return s
}

// SetScheduleExpression sets the ScheduleExpression field's value.
func (s *Schedule) SetScheduleExpression(v string) *Schedule {
	s.ScheduleExpression = &v
	return s
}

// This exception is thrown when the service encounters an unrecoverable exception.
type ServiceException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorServiceException(v protocol.ResponseMetadata) error {
	return &ServiceException{
		respMetadata: v,
	}
}

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

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

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

func (s ServiceException) 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 ServiceException) StatusCode() int {
	return s.respMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s ServiceException) RequestID() string {
	return s.respMetadata.RequestID
}

// The service is unable to process your request at this time.
type ServiceUnavailableException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

// GoString returns the string representation
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 StartImagePipelineExecutionInput struct {
	_ struct{} `type:"structure"`

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string" idempotencyToken:"true"`

	// The Amazon Resource Name (ARN) of the image pipeline that you wish to manually
	// invoke.
	//
	// ImagePipelineArn is a required field
	ImagePipelineArn *string `locationName:"imagePipelineArn" type:"string" required:"true"`
}

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

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

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

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

// SetClientToken sets the ClientToken field's value.
func (s *StartImagePipelineExecutionInput) SetClientToken(v string) *StartImagePipelineExecutionInput {
	s.ClientToken = &v
	return s
}

// SetImagePipelineArn sets the ImagePipelineArn field's value.
func (s *StartImagePipelineExecutionInput) SetImagePipelineArn(v string) *StartImagePipelineExecutionInput {
	s.ImagePipelineArn = &v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the image that was created by this request.
	ImageBuildVersionArn *string `locationName:"imageBuildVersionArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetClientToken sets the ClientToken field's value.
func (s *StartImagePipelineExecutionOutput) SetClientToken(v string) *StartImagePipelineExecutionOutput {
	s.ClientToken = &v
	return s
}

// SetImageBuildVersionArn sets the ImageBuildVersionArn field's value.
func (s *StartImagePipelineExecutionOutput) SetImageBuildVersionArn(v string) *StartImagePipelineExecutionOutput {
	s.ImageBuildVersionArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *StartImagePipelineExecutionOutput) SetRequestId(v string) *StartImagePipelineExecutionOutput {
	s.RequestId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the resource that you wish to tag.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`

	// The tags to apply to the resource.
	//
	// Tags is a required field
	Tags map[string]*string `locationName:"tags" min:"1" type:"map" required:"true"`
}

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

// GoString returns the string representation
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.ResourceArn != nil && len(*s.ResourceArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 1))
	}
	if s.Tags == nil {
		invalidParams.Add(request.NewErrParamRequired("Tags"))
	}
	if s.Tags != nil && len(s.Tags) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Tags", 1))
	}

	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 map[string]*string) *TagResourceInput {
	s.Tags = v
	return s
}

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

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

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

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

	// The Amazon Resource Name (ARN) of the resource that you wish to untag.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`

	// The tag keys to remove from the resource.
	//
	// TagKeys is a required field
	TagKeys []*string `location:"querystring" locationName:"tagKeys" min:"1" type:"list" required:"true"`
}

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

// GoString returns the string representation
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.ResourceArn != nil && len(*s.ResourceArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 1))
	}
	if s.TagKeys == nil {
		invalidParams.Add(request.NewErrParamRequired("TagKeys"))
	}
	if s.TagKeys != nil && len(s.TagKeys) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TagKeys", 1))
	}

	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
func (s UntagResourceOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The idempotency token of the distribution configuration.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string" idempotencyToken:"true"`

	// The description of the distribution configuration.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the distribution configuration that you
	// wish to update.
	//
	// DistributionConfigurationArn is a required field
	DistributionConfigurationArn *string `locationName:"distributionConfigurationArn" type:"string" required:"true"`

	// The distributions of the distribution configuration.
	Distributions []*Distribution `locationName:"distributions" type:"list"`
}

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

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

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

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

// SetClientToken sets the ClientToken field's value.
func (s *UpdateDistributionConfigurationInput) SetClientToken(v string) *UpdateDistributionConfigurationInput {
	s.ClientToken = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdateDistributionConfigurationInput) SetDescription(v string) *UpdateDistributionConfigurationInput {
	s.Description = &v
	return s
}

// SetDistributionConfigurationArn sets the DistributionConfigurationArn field's value.
func (s *UpdateDistributionConfigurationInput) SetDistributionConfigurationArn(v string) *UpdateDistributionConfigurationInput {
	s.DistributionConfigurationArn = &v
	return s
}

// SetDistributions sets the Distributions field's value.
func (s *UpdateDistributionConfigurationInput) SetDistributions(v []*Distribution) *UpdateDistributionConfigurationInput {
	s.Distributions = v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the distribution configuration that was
	// updated by this request.
	DistributionConfigurationArn *string `locationName:"distributionConfigurationArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetClientToken sets the ClientToken field's value.
func (s *UpdateDistributionConfigurationOutput) SetClientToken(v string) *UpdateDistributionConfigurationOutput {
	s.ClientToken = &v
	return s
}

// SetDistributionConfigurationArn sets the DistributionConfigurationArn field's value.
func (s *UpdateDistributionConfigurationOutput) SetDistributionConfigurationArn(v string) *UpdateDistributionConfigurationOutput {
	s.DistributionConfigurationArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *UpdateDistributionConfigurationOutput) SetRequestId(v string) *UpdateDistributionConfigurationOutput {
	s.RequestId = &v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string" idempotencyToken:"true"`

	// The description of the image pipeline.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the distribution configuration that will
	// be used to configure and distribute images updated by this image pipeline.
	DistributionConfigurationArn *string `locationName:"distributionConfigurationArn" type:"string"`

	// The Amazon Resource Name (ARN) of the image pipeline that you wish to update.
	//
	// ImagePipelineArn is a required field
	ImagePipelineArn *string `locationName:"imagePipelineArn" type:"string" required:"true"`

	// The Amazon Resource Name (ARN) of the image recipe that will be used to configure
	// images updated by this image pipeline.
	ImageRecipeArn *string `locationName:"imageRecipeArn" type:"string"`

	// The image test configuration of the image pipeline.
	ImageTestsConfiguration *ImageTestsConfiguration `locationName:"imageTestsConfiguration" type:"structure"`

	// The Amazon Resource Name (ARN) of the infrastructure configuration that will
	// be used to build images updated by this image pipeline.
	InfrastructureConfigurationArn *string `locationName:"infrastructureConfigurationArn" type:"string"`

	// The schedule of the image pipeline.
	Schedule *Schedule `locationName:"schedule" type:"structure"`

	// The status of the image pipeline.
	Status *string `locationName:"status" type:"string" enum:"PipelineStatus"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateImagePipelineInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateImagePipelineInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 1))
	}
	if s.Description != nil && len(*s.Description) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Description", 1))
	}
	if s.ImagePipelineArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ImagePipelineArn"))
	}
	if s.ImageTestsConfiguration != nil {
		if err := s.ImageTestsConfiguration.Validate(); err != nil {
			invalidParams.AddNested("ImageTestsConfiguration", err.(request.ErrInvalidParams))
		}
	}
	if s.Schedule != nil {
		if err := s.Schedule.Validate(); err != nil {
			invalidParams.AddNested("Schedule", err.(request.ErrInvalidParams))
		}
	}

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

// SetClientToken sets the ClientToken field's value.
func (s *UpdateImagePipelineInput) SetClientToken(v string) *UpdateImagePipelineInput {
	s.ClientToken = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdateImagePipelineInput) SetDescription(v string) *UpdateImagePipelineInput {
	s.Description = &v
	return s
}

// SetDistributionConfigurationArn sets the DistributionConfigurationArn field's value.
func (s *UpdateImagePipelineInput) SetDistributionConfigurationArn(v string) *UpdateImagePipelineInput {
	s.DistributionConfigurationArn = &v
	return s
}

// SetImagePipelineArn sets the ImagePipelineArn field's value.
func (s *UpdateImagePipelineInput) SetImagePipelineArn(v string) *UpdateImagePipelineInput {
	s.ImagePipelineArn = &v
	return s
}

// SetImageRecipeArn sets the ImageRecipeArn field's value.
func (s *UpdateImagePipelineInput) SetImageRecipeArn(v string) *UpdateImagePipelineInput {
	s.ImageRecipeArn = &v
	return s
}

// SetImageTestsConfiguration sets the ImageTestsConfiguration field's value.
func (s *UpdateImagePipelineInput) SetImageTestsConfiguration(v *ImageTestsConfiguration) *UpdateImagePipelineInput {
	s.ImageTestsConfiguration = v
	return s
}

// SetInfrastructureConfigurationArn sets the InfrastructureConfigurationArn field's value.
func (s *UpdateImagePipelineInput) SetInfrastructureConfigurationArn(v string) *UpdateImagePipelineInput {
	s.InfrastructureConfigurationArn = &v
	return s
}

// SetSchedule sets the Schedule field's value.
func (s *UpdateImagePipelineInput) SetSchedule(v *Schedule) *UpdateImagePipelineInput {
	s.Schedule = v
	return s
}

// SetStatus sets the Status field's value.
func (s *UpdateImagePipelineInput) SetStatus(v string) *UpdateImagePipelineInput {
	s.Status = &v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the image pipeline that was updated by
	// this request.
	ImagePipelineArn *string `locationName:"imagePipelineArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetClientToken sets the ClientToken field's value.
func (s *UpdateImagePipelineOutput) SetClientToken(v string) *UpdateImagePipelineOutput {
	s.ClientToken = &v
	return s
}

// SetImagePipelineArn sets the ImagePipelineArn field's value.
func (s *UpdateImagePipelineOutput) SetImagePipelineArn(v string) *UpdateImagePipelineOutput {
	s.ImagePipelineArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *UpdateImagePipelineOutput) SetRequestId(v string) *UpdateImagePipelineOutput {
	s.RequestId = &v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string" idempotencyToken:"true"`

	// The description of the infrastructure configuration.
	Description *string `locationName:"description" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the infrastructure configuration that you
	// wish to update.
	//
	// InfrastructureConfigurationArn is a required field
	InfrastructureConfigurationArn *string `locationName:"infrastructureConfigurationArn" type:"string" required:"true"`

	// The instance profile to associate with the instance used to customize your
	// EC2 AMI.
	InstanceProfileName *string `locationName:"instanceProfileName" min:"1" type:"string"`

	// The instance types of the infrastructure configuration. You may specify one
	// or more instance types to use for this build, the service will pick one of
	// these instance types based on availability.
	InstanceTypes []*string `locationName:"instanceTypes" type:"list"`

	// The key pair of the infrastructure configuration. This can be used to log
	// onto and debug the instance used to create your image.
	KeyPair *string `locationName:"keyPair" min:"1" type:"string"`

	// The logging configuration of the infrastructure configuration.
	Logging *Logging `locationName:"logging" type:"structure"`

	// The security group IDs to associate with the instance used to customize your
	// EC2 AMI.
	SecurityGroupIds []*string `locationName:"securityGroupIds" type:"list"`

	// The SNS topic on which to send image build events.
	SnsTopicArn *string `locationName:"snsTopicArn" min:"1" type:"string"`

	// The subnet ID to place the instance used to customize your EC2 AMI in.
	SubnetId *string `locationName:"subnetId" min:"1" type:"string"`

	// The terminate instance on failure setting of the infrastructure configuration.
	// Set to false if you wish for Image Builder to retain the instance used to
	// configure your AMI in the event that the build or test phase of your workflow
	// failed.
	TerminateInstanceOnFailure *bool `locationName:"terminateInstanceOnFailure" type:"boolean"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateInfrastructureConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateInfrastructureConfigurationInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 1))
	}
	if s.Description != nil && len(*s.Description) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Description", 1))
	}
	if s.InfrastructureConfigurationArn == nil {
		invalidParams.Add(request.NewErrParamRequired("InfrastructureConfigurationArn"))
	}
	if s.InstanceProfileName != nil && len(*s.InstanceProfileName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("InstanceProfileName", 1))
	}
	if s.KeyPair != nil && len(*s.KeyPair) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("KeyPair", 1))
	}
	if s.SnsTopicArn != nil && len(*s.SnsTopicArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SnsTopicArn", 1))
	}
	if s.SubnetId != nil && len(*s.SubnetId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SubnetId", 1))
	}
	if s.Logging != nil {
		if err := s.Logging.Validate(); err != nil {
			invalidParams.AddNested("Logging", err.(request.ErrInvalidParams))
		}
	}

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

// SetClientToken sets the ClientToken field's value.
func (s *UpdateInfrastructureConfigurationInput) SetClientToken(v string) *UpdateInfrastructureConfigurationInput {
	s.ClientToken = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdateInfrastructureConfigurationInput) SetDescription(v string) *UpdateInfrastructureConfigurationInput {
	s.Description = &v
	return s
}

// SetInfrastructureConfigurationArn sets the InfrastructureConfigurationArn field's value.
func (s *UpdateInfrastructureConfigurationInput) SetInfrastructureConfigurationArn(v string) *UpdateInfrastructureConfigurationInput {
	s.InfrastructureConfigurationArn = &v
	return s
}

// SetInstanceProfileName sets the InstanceProfileName field's value.
func (s *UpdateInfrastructureConfigurationInput) SetInstanceProfileName(v string) *UpdateInfrastructureConfigurationInput {
	s.InstanceProfileName = &v
	return s
}

// SetInstanceTypes sets the InstanceTypes field's value.
func (s *UpdateInfrastructureConfigurationInput) SetInstanceTypes(v []*string) *UpdateInfrastructureConfigurationInput {
	s.InstanceTypes = v
	return s
}

// SetKeyPair sets the KeyPair field's value.
func (s *UpdateInfrastructureConfigurationInput) SetKeyPair(v string) *UpdateInfrastructureConfigurationInput {
	s.KeyPair = &v
	return s
}

// SetLogging sets the Logging field's value.
func (s *UpdateInfrastructureConfigurationInput) SetLogging(v *Logging) *UpdateInfrastructureConfigurationInput {
	s.Logging = v
	return s
}

// SetSecurityGroupIds sets the SecurityGroupIds field's value.
func (s *UpdateInfrastructureConfigurationInput) SetSecurityGroupIds(v []*string) *UpdateInfrastructureConfigurationInput {
	s.SecurityGroupIds = v
	return s
}

// SetSnsTopicArn sets the SnsTopicArn field's value.
func (s *UpdateInfrastructureConfigurationInput) SetSnsTopicArn(v string) *UpdateInfrastructureConfigurationInput {
	s.SnsTopicArn = &v
	return s
}

// SetSubnetId sets the SubnetId field's value.
func (s *UpdateInfrastructureConfigurationInput) SetSubnetId(v string) *UpdateInfrastructureConfigurationInput {
	s.SubnetId = &v
	return s
}

// SetTerminateInstanceOnFailure sets the TerminateInstanceOnFailure field's value.
func (s *UpdateInfrastructureConfigurationInput) SetTerminateInstanceOnFailure(v bool) *UpdateInfrastructureConfigurationInput {
	s.TerminateInstanceOnFailure = &v
	return s
}

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

	// The idempotency token used to make this request idempotent.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the infrastructure configuration that was
	// updated by this request.
	InfrastructureConfigurationArn *string `locationName:"infrastructureConfigurationArn" type:"string"`

	// The request ID that uniquely identifies this request.
	RequestId *string `locationName:"requestId" min:"1" type:"string"`
}

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

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

// SetClientToken sets the ClientToken field's value.
func (s *UpdateInfrastructureConfigurationOutput) SetClientToken(v string) *UpdateInfrastructureConfigurationOutput {
	s.ClientToken = &v
	return s
}

// SetInfrastructureConfigurationArn sets the InfrastructureConfigurationArn field's value.
func (s *UpdateInfrastructureConfigurationOutput) SetInfrastructureConfigurationArn(v string) *UpdateInfrastructureConfigurationOutput {
	s.InfrastructureConfigurationArn = &v
	return s
}

// SetRequestId sets the RequestId field's value.
func (s *UpdateInfrastructureConfigurationOutput) SetRequestId(v string) *UpdateInfrastructureConfigurationOutput {
	s.RequestId = &v
	return s
}

const (
	// ComponentFormatShell is a ComponentFormat enum value
	ComponentFormatShell = "SHELL"
)

const (
	// ComponentTypeBuild is a ComponentType enum value
	ComponentTypeBuild = "BUILD"

	// ComponentTypeTest is a ComponentType enum value
	ComponentTypeTest = "TEST"
)

const (
	// EbsVolumeTypeStandard is a EbsVolumeType enum value
	EbsVolumeTypeStandard = "standard"

	// EbsVolumeTypeIo1 is a EbsVolumeType enum value
	EbsVolumeTypeIo1 = "io1"

	// EbsVolumeTypeGp2 is a EbsVolumeType enum value
	EbsVolumeTypeGp2 = "gp2"

	// EbsVolumeTypeSc1 is a EbsVolumeType enum value
	EbsVolumeTypeSc1 = "sc1"

	// EbsVolumeTypeSt1 is a EbsVolumeType enum value
	EbsVolumeTypeSt1 = "st1"
)

const (
	// ImageStatusPending is a ImageStatus enum value
	ImageStatusPending = "PENDING"

	// ImageStatusCreating is a ImageStatus enum value
	ImageStatusCreating = "CREATING"

	// ImageStatusBuilding is a ImageStatus enum value
	ImageStatusBuilding = "BUILDING"

	// ImageStatusTesting is a ImageStatus enum value
	ImageStatusTesting = "TESTING"

	// ImageStatusDistributing is a ImageStatus enum value
	ImageStatusDistributing = "DISTRIBUTING"

	// ImageStatusIntegrating is a ImageStatus enum value
	ImageStatusIntegrating = "INTEGRATING"

	// ImageStatusAvailable is a ImageStatus enum value
	ImageStatusAvailable = "AVAILABLE"

	// ImageStatusCancelled is a ImageStatus enum value
	ImageStatusCancelled = "CANCELLED"

	// ImageStatusFailed is a ImageStatus enum value
	ImageStatusFailed = "FAILED"

	// ImageStatusDeprecated is a ImageStatus enum value
	ImageStatusDeprecated = "DEPRECATED"

	// ImageStatusDeleted is a ImageStatus enum value
	ImageStatusDeleted = "DELETED"
)

const (
	// OwnershipSelf is a Ownership enum value
	OwnershipSelf = "Self"

	// OwnershipShared is a Ownership enum value
	OwnershipShared = "Shared"

	// OwnershipAmazon is a Ownership enum value
	OwnershipAmazon = "Amazon"
)

const (
	// PipelineExecutionStartConditionExpressionMatchOnly is a PipelineExecutionStartCondition enum value
	PipelineExecutionStartConditionExpressionMatchOnly = "EXPRESSION_MATCH_ONLY"

	// PipelineExecutionStartConditionExpressionMatchAndDependencyUpdatesAvailable is a PipelineExecutionStartCondition enum value
	PipelineExecutionStartConditionExpressionMatchAndDependencyUpdatesAvailable = "EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE"
)

const (
	// PipelineStatusDisabled is a PipelineStatus enum value
	PipelineStatusDisabled = "DISABLED"

	// PipelineStatusEnabled is a PipelineStatus enum value
	PipelineStatusEnabled = "ENABLED"
)

const (
	// PlatformWindows is a Platform enum value
	PlatformWindows = "Windows"

	// PlatformLinux is a Platform enum value
	PlatformLinux = "Linux"
)
