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

package appconfig

import (
	"fmt"
	"time"

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

const opCreateApplication = "CreateApplication"

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

	if input == nil {
		input = &CreateApplicationInput{}
	}

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

// CreateApplication API operation for Amazon AppConfig.
//
// An application in AppConfig is a logical unit of code that provides capabilities
// for your customers. For example, an application can be a microservice that
// runs on Amazon EC2 instances, a mobile application installed by your users,
// a serverless application using Amazon API Gateway and AWS Lambda, or any
// system you run on behalf of others.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation CreateApplication for usage and error information.
//
// Returned Error Types:
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/CreateApplication
func (c *AppConfig) CreateApplication(input *CreateApplicationInput) (*CreateApplicationOutput, error) {
	req, out := c.CreateApplicationRequest(input)
	return out, req.Send()
}

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

const opCreateConfigurationProfile = "CreateConfigurationProfile"

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

	if input == nil {
		input = &CreateConfigurationProfileInput{}
	}

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

// CreateConfigurationProfile API operation for Amazon AppConfig.
//
// Information that enables AppConfig to access the configuration source. Valid
// configuration sources include Systems Manager (SSM) documents and SSM Parameter
// Store parameters. A configuration profile includes the following information.
//
//    * The Uri location of the configuration data.
//
//    * The AWS Identity and Access Management (IAM) role that provides access
//    to the configuration data.
//
//    * A validator for the configuration data. Available validators include
//    either a JSON Schema or an AWS Lambda function.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation CreateConfigurationProfile for usage and error information.
//
// Returned Error Types:
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/CreateConfigurationProfile
func (c *AppConfig) CreateConfigurationProfile(input *CreateConfigurationProfileInput) (*CreateConfigurationProfileOutput, error) {
	req, out := c.CreateConfigurationProfileRequest(input)
	return out, req.Send()
}

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

const opCreateDeploymentStrategy = "CreateDeploymentStrategy"

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

	if input == nil {
		input = &CreateDeploymentStrategyInput{}
	}

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

// CreateDeploymentStrategy API operation for Amazon AppConfig.
//
// A deployment strategy defines important criteria for rolling out your configuration
// to the designated targets. A deployment strategy includes: the overall duration
// required, a percentage of targets to receive the deployment during each interval,
// an algorithm that defines how percentage grows, and bake time.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation CreateDeploymentStrategy for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/CreateDeploymentStrategy
func (c *AppConfig) CreateDeploymentStrategy(input *CreateDeploymentStrategyInput) (*CreateDeploymentStrategyOutput, error) {
	req, out := c.CreateDeploymentStrategyRequest(input)
	return out, req.Send()
}

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

const opCreateEnvironment = "CreateEnvironment"

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

	if input == nil {
		input = &CreateEnvironmentInput{}
	}

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

// CreateEnvironment API operation for Amazon AppConfig.
//
// For each application, you define one or more environments. An environment
// is a logical deployment group of AppConfig targets, such as applications
// in a Beta or Production environment. You can also define environments for
// application subcomponents such as the Web, Mobile and Back-end components
// for your application. You can configure Amazon CloudWatch alarms for each
// environment. The system monitors alarms during a configuration deployment.
// If an alarm is triggered, the system rolls back the 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 Amazon AppConfig's
// API operation CreateEnvironment for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/CreateEnvironment
func (c *AppConfig) CreateEnvironment(input *CreateEnvironmentInput) (*CreateEnvironmentOutput, error) {
	req, out := c.CreateEnvironmentRequest(input)
	return out, req.Send()
}

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

const opDeleteApplication = "DeleteApplication"

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

	if input == nil {
		input = &DeleteApplicationInput{}
	}

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

// DeleteApplication API operation for Amazon AppConfig.
//
// Delete an application. Deleting an application does not delete a configuration
// from a host.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation DeleteApplication for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/DeleteApplication
func (c *AppConfig) DeleteApplication(input *DeleteApplicationInput) (*DeleteApplicationOutput, error) {
	req, out := c.DeleteApplicationRequest(input)
	return out, req.Send()
}

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

const opDeleteConfigurationProfile = "DeleteConfigurationProfile"

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

	if input == nil {
		input = &DeleteConfigurationProfileInput{}
	}

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

// DeleteConfigurationProfile API operation for Amazon AppConfig.
//
// Delete a configuration profile. Deleting a configuration profile does not
// delete a configuration from a host.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation DeleteConfigurationProfile for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * ConflictException
//   The request could not be processed because of conflict in the current state
//   of the resource.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/DeleteConfigurationProfile
func (c *AppConfig) DeleteConfigurationProfile(input *DeleteConfigurationProfileInput) (*DeleteConfigurationProfileOutput, error) {
	req, out := c.DeleteConfigurationProfileRequest(input)
	return out, req.Send()
}

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

const opDeleteDeploymentStrategy = "DeleteDeploymentStrategy"

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

	if input == nil {
		input = &DeleteDeploymentStrategyInput{}
	}

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

// DeleteDeploymentStrategy API operation for Amazon AppConfig.
//
// Delete a deployment strategy. Deleting a deployment strategy does not delete
// a configuration from a host.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation DeleteDeploymentStrategy for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/DeleteDeploymentStrategy
func (c *AppConfig) DeleteDeploymentStrategy(input *DeleteDeploymentStrategyInput) (*DeleteDeploymentStrategyOutput, error) {
	req, out := c.DeleteDeploymentStrategyRequest(input)
	return out, req.Send()
}

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

const opDeleteEnvironment = "DeleteEnvironment"

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

	if input == nil {
		input = &DeleteEnvironmentInput{}
	}

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

// DeleteEnvironment API operation for Amazon AppConfig.
//
// Delete an environment. Deleting an environment does not delete a configuration
// from a host.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation DeleteEnvironment for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * ConflictException
//   The request could not be processed because of conflict in the current state
//   of the resource.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/DeleteEnvironment
func (c *AppConfig) DeleteEnvironment(input *DeleteEnvironmentInput) (*DeleteEnvironmentOutput, error) {
	req, out := c.DeleteEnvironmentRequest(input)
	return out, req.Send()
}

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

const opGetApplication = "GetApplication"

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

	if input == nil {
		input = &GetApplicationInput{}
	}

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

// GetApplication API operation for Amazon AppConfig.
//
// Retrieve information about an application.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation GetApplication for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/GetApplication
func (c *AppConfig) GetApplication(input *GetApplicationInput) (*GetApplicationOutput, error) {
	req, out := c.GetApplicationRequest(input)
	return out, req.Send()
}

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

const opGetConfiguration = "GetConfiguration"

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

	if input == nil {
		input = &GetConfigurationInput{}
	}

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

// GetConfiguration API operation for Amazon AppConfig.
//
// Retrieve information about a 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 Amazon AppConfig's
// API operation GetConfiguration for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/GetConfiguration
func (c *AppConfig) GetConfiguration(input *GetConfigurationInput) (*GetConfigurationOutput, error) {
	req, out := c.GetConfigurationRequest(input)
	return out, req.Send()
}

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

const opGetConfigurationProfile = "GetConfigurationProfile"

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

	if input == nil {
		input = &GetConfigurationProfileInput{}
	}

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

// GetConfigurationProfile API operation for Amazon AppConfig.
//
// Retrieve information about a configuration profile.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation GetConfigurationProfile for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/GetConfigurationProfile
func (c *AppConfig) GetConfigurationProfile(input *GetConfigurationProfileInput) (*GetConfigurationProfileOutput, error) {
	req, out := c.GetConfigurationProfileRequest(input)
	return out, req.Send()
}

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

const opGetDeployment = "GetDeployment"

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

	if input == nil {
		input = &GetDeploymentInput{}
	}

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

// GetDeployment API operation for Amazon AppConfig.
//
// Retrieve information about a configuration deployment.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation GetDeployment for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/GetDeployment
func (c *AppConfig) GetDeployment(input *GetDeploymentInput) (*GetDeploymentOutput, error) {
	req, out := c.GetDeploymentRequest(input)
	return out, req.Send()
}

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

const opGetDeploymentStrategy = "GetDeploymentStrategy"

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

	if input == nil {
		input = &GetDeploymentStrategyInput{}
	}

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

// GetDeploymentStrategy API operation for Amazon AppConfig.
//
// Retrieve information about a deployment strategy. A deployment strategy defines
// important criteria for rolling out your configuration to the designated targets.
// A deployment strategy includes: the overall duration required, a percentage
// of targets to receive the deployment during each interval, an algorithm that
// defines how percentage grows, and bake time.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation GetDeploymentStrategy for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/GetDeploymentStrategy
func (c *AppConfig) GetDeploymentStrategy(input *GetDeploymentStrategyInput) (*GetDeploymentStrategyOutput, error) {
	req, out := c.GetDeploymentStrategyRequest(input)
	return out, req.Send()
}

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

const opGetEnvironment = "GetEnvironment"

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

	if input == nil {
		input = &GetEnvironmentInput{}
	}

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

// GetEnvironment API operation for Amazon AppConfig.
//
// Retrieve information about an environment. An environment is a logical deployment
// group of AppConfig applications, such as applications in a Production environment
// or in an EU_Region environment. Each configuration deployment targets an
// environment. You can enable one or more Amazon CloudWatch alarms for an environment.
// If an alarm is triggered during a deployment, AppConfig roles back the 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 Amazon AppConfig's
// API operation GetEnvironment for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/GetEnvironment
func (c *AppConfig) GetEnvironment(input *GetEnvironmentInput) (*GetEnvironmentOutput, error) {
	req, out := c.GetEnvironmentRequest(input)
	return out, req.Send()
}

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

const opListApplications = "ListApplications"

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

	if input == nil {
		input = &ListApplicationsInput{}
	}

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

// ListApplications API operation for Amazon AppConfig.
//
// List all applications in your AWS account.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation ListApplications for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/ListApplications
func (c *AppConfig) ListApplications(input *ListApplicationsInput) (*ListApplicationsOutput, error) {
	req, out := c.ListApplicationsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListConfigurationProfiles = "ListConfigurationProfiles"

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

	if input == nil {
		input = &ListConfigurationProfilesInput{}
	}

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

// ListConfigurationProfiles API operation for Amazon AppConfig.
//
// Lists the configuration profiles for an application.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation ListConfigurationProfiles for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/ListConfigurationProfiles
func (c *AppConfig) ListConfigurationProfiles(input *ListConfigurationProfilesInput) (*ListConfigurationProfilesOutput, error) {
	req, out := c.ListConfigurationProfilesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListDeploymentStrategies = "ListDeploymentStrategies"

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

	if input == nil {
		input = &ListDeploymentStrategiesInput{}
	}

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

// ListDeploymentStrategies API operation for Amazon AppConfig.
//
// List deployment strategies.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation ListDeploymentStrategies for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/ListDeploymentStrategies
func (c *AppConfig) ListDeploymentStrategies(input *ListDeploymentStrategiesInput) (*ListDeploymentStrategiesOutput, error) {
	req, out := c.ListDeploymentStrategiesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListDeployments = "ListDeployments"

// ListDeploymentsRequest generates a "aws/request.Request" representing the
// client's request for the ListDeployments operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListDeployments for more information on using the ListDeployments
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the ListDeploymentsRequest method.
//    req, resp := client.ListDeploymentsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/ListDeployments
func (c *AppConfig) ListDeploymentsRequest(input *ListDeploymentsInput) (req *request.Request, output *ListDeploymentsOutput) {
	op := &request.Operation{
		Name:       opListDeployments,
		HTTPMethod: "GET",
		HTTPPath:   "/applications/{ApplicationId}/environments/{EnvironmentId}/deployments",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListDeploymentsInput{}
	}

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

// ListDeployments API operation for Amazon AppConfig.
//
// Lists the deployments for an environment.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation ListDeployments for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/ListDeployments
func (c *AppConfig) ListDeployments(input *ListDeploymentsInput) (*ListDeploymentsOutput, error) {
	req, out := c.ListDeploymentsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListEnvironments = "ListEnvironments"

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

	if input == nil {
		input = &ListEnvironmentsInput{}
	}

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

// ListEnvironments API operation for Amazon AppConfig.
//
// List the environments for an application.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation ListEnvironments for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/ListEnvironments
func (c *AppConfig) ListEnvironments(input *ListEnvironmentsInput) (*ListEnvironmentsOutput, error) {
	req, out := c.ListEnvironmentsRequest(input)
	return out, req.Send()
}

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

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

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

	for p.Next() {
		if !fn(p.Page().(*ListEnvironmentsOutput), !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/appconfig-2019-10-09/ListTagsForResource
func (c *AppConfig) 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 Amazon AppConfig.
//
// Retrieves the list of key-value tags assigned to the 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 Amazon AppConfig's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/ListTagsForResource
func (c *AppConfig) 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 *AppConfig) 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 opStartDeployment = "StartDeployment"

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

	if input == nil {
		input = &StartDeploymentInput{}
	}

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

// StartDeployment API operation for Amazon AppConfig.
//
// Starts a deployment.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation StartDeployment for usage and error information.
//
// Returned Error Types:
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * ConflictException
//   The request could not be processed because of conflict in the current state
//   of the resource.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/StartDeployment
func (c *AppConfig) StartDeployment(input *StartDeploymentInput) (*StartDeploymentOutput, error) {
	req, out := c.StartDeploymentRequest(input)
	return out, req.Send()
}

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

const opStopDeployment = "StopDeployment"

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

	if input == nil {
		input = &StopDeploymentInput{}
	}

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

// StopDeployment API operation for Amazon AppConfig.
//
// Stops a deployment. This API action works only on deployments that have a
// status of DEPLOYING. This action moves the deployment to a status of ROLLED_BACK.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation StopDeployment for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/StopDeployment
func (c *AppConfig) StopDeployment(input *StopDeploymentInput) (*StopDeploymentOutput, error) {
	req, out := c.StopDeploymentRequest(input)
	return out, req.Send()
}

// StopDeploymentWithContext is the same as StopDeployment with the addition of
// the ability to pass a context and additional request options.
//
// See StopDeployment for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *AppConfig) StopDeploymentWithContext(ctx aws.Context, input *StopDeploymentInput, opts ...request.Option) (*StopDeploymentOutput, error) {
	req, out := c.StopDeploymentRequest(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/appconfig-2019-10-09/TagResource
func (c *AppConfig) 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 Amazon AppConfig.
//
// Metadata to assign to an AppConfig resource. Tags help organize and categorize
// your AppConfig resources. Each tag consists of a key and an optional value,
// both of which you define. You can specify a maximum of 50 tags for 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 Amazon AppConfig's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/TagResource
func (c *AppConfig) 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 *AppConfig) 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/appconfig-2019-10-09/UntagResource
func (c *AppConfig) 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 Amazon AppConfig.
//
// Deletes a tag key and value from an AppConfig 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 Amazon AppConfig's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/UntagResource
func (c *AppConfig) 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 *AppConfig) 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 opUpdateApplication = "UpdateApplication"

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

	if input == nil {
		input = &UpdateApplicationInput{}
	}

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

// UpdateApplication API operation for Amazon AppConfig.
//
// Updates an application.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation UpdateApplication for usage and error information.
//
// Returned Error Types:
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/UpdateApplication
func (c *AppConfig) UpdateApplication(input *UpdateApplicationInput) (*UpdateApplicationOutput, error) {
	req, out := c.UpdateApplicationRequest(input)
	return out, req.Send()
}

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

const opUpdateConfigurationProfile = "UpdateConfigurationProfile"

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

	if input == nil {
		input = &UpdateConfigurationProfileInput{}
	}

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

// UpdateConfigurationProfile API operation for Amazon AppConfig.
//
// Updates a configuration profile.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation UpdateConfigurationProfile for usage and error information.
//
// Returned Error Types:
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/UpdateConfigurationProfile
func (c *AppConfig) UpdateConfigurationProfile(input *UpdateConfigurationProfileInput) (*UpdateConfigurationProfileOutput, error) {
	req, out := c.UpdateConfigurationProfileRequest(input)
	return out, req.Send()
}

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

const opUpdateDeploymentStrategy = "UpdateDeploymentStrategy"

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

	if input == nil {
		input = &UpdateDeploymentStrategyInput{}
	}

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

// UpdateDeploymentStrategy API operation for Amazon AppConfig.
//
// Updates a deployment strategy.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation UpdateDeploymentStrategy for usage and error information.
//
// Returned Error Types:
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/UpdateDeploymentStrategy
func (c *AppConfig) UpdateDeploymentStrategy(input *UpdateDeploymentStrategyInput) (*UpdateDeploymentStrategyOutput, error) {
	req, out := c.UpdateDeploymentStrategyRequest(input)
	return out, req.Send()
}

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

const opUpdateEnvironment = "UpdateEnvironment"

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

	if input == nil {
		input = &UpdateEnvironmentInput{}
	}

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

// UpdateEnvironment API operation for Amazon AppConfig.
//
// Updates an environment.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon AppConfig's
// API operation UpdateEnvironment for usage and error information.
//
// Returned Error Types:
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/UpdateEnvironment
func (c *AppConfig) UpdateEnvironment(input *UpdateEnvironmentInput) (*UpdateEnvironmentOutput, error) {
	req, out := c.UpdateEnvironmentRequest(input)
	return out, req.Send()
}

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

const opValidateConfiguration = "ValidateConfiguration"

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

	if input == nil {
		input = &ValidateConfigurationInput{}
	}

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

// ValidateConfiguration API operation for Amazon AppConfig.
//
// Uses the validators in a configuration profile to validate a 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 Amazon AppConfig's
// API operation ValidateConfiguration for usage and error information.
//
// Returned Error Types:
//   * BadRequestException
//   The input fails to satisfy the constraints specified by an AWS service.
//
//   * ResourceNotFoundException
//   The requested resource could not be found.
//
//   * InternalServerException
//   There was an internal failure in the AppConfig service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/appconfig-2019-10-09/ValidateConfiguration
func (c *AppConfig) ValidateConfiguration(input *ValidateConfigurationInput) (*ValidateConfigurationOutput, error) {
	req, out := c.ValidateConfigurationRequest(input)
	return out, req.Send()
}

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

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

	// The description of the application.
	Description *string `type:"string"`

	// The application ID.
	Id *string `type:"string"`

	// The application name.
	Name *string `min:"1" type:"string"`
}

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

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

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

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

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

// The input fails to satisfy the constraints specified by an AWS service.
type BadRequestException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorBadRequestException(v protocol.ResponseMetadata) error {
	return &BadRequestException{
		respMetadata: v,
	}
}

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

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

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

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

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

// A summary of a configuration profile.
type ConfigurationProfileSummary struct {
	_ struct{} `type:"structure"`

	// The application ID.
	ApplicationId *string `type:"string"`

	// The ID of the configuration profile.
	Id *string `type:"string"`

	// The URI location of the configuration.
	LocationUri *string `min:"1" type:"string"`

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

	// The types of validators in the configuration profile.
	ValidatorTypes []*string `type:"list"`
}

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *ConfigurationProfileSummary) SetApplicationId(v string) *ConfigurationProfileSummary {
	s.ApplicationId = &v
	return s
}

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

// SetLocationUri sets the LocationUri field's value.
func (s *ConfigurationProfileSummary) SetLocationUri(v string) *ConfigurationProfileSummary {
	s.LocationUri = &v
	return s
}

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

// SetValidatorTypes sets the ValidatorTypes field's value.
func (s *ConfigurationProfileSummary) SetValidatorTypes(v []*string) *ConfigurationProfileSummary {
	s.ValidatorTypes = v
	return s
}

// The request could not be processed because of conflict in the current state
// of the resource.
type ConflictException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorConflictException(v protocol.ResponseMetadata) error {
	return &ConflictException{
		respMetadata: v,
	}
}

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

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

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

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

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

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

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

	// A description of the application.
	Description *string `type:"string"`

	// A name for the application.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// Metadata to assign to the application. Tags help organize and categorize
	// your AppConfig resources. Each tag consists of a key and an optional value,
	// both of which you define.
	Tags map[string]*string `type:"map"`
}

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

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

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

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

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

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

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

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

	// The description of the application.
	Description *string `type:"string"`

	// The application ID.
	Id *string `type:"string"`

	// The application name.
	Name *string `min:"1" type:"string"`
}

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

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

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

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

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

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

	// The application ID.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// A description of the configuration profile.
	Description *string `type:"string"`

	// A URI to locate the configuration. You can specify either a Systems Manager
	// (SSM) document or an SSM Parameter Store parameter. For an SSM document,
	// specify either the document name in the format ssm-document://<Document name>
	// or the Amazon Resource Name (ARN). For a parameter, specify either the parameter
	// name in the format ssm-parameter://<Parameter name> or the ARN.
	//
	// LocationUri is a required field
	LocationUri *string `min:"1" type:"string" required:"true"`

	// A name for the configuration profile.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// The ARN of an IAM role with permission to access the configuration at the
	// specified LocationUri.
	//
	// RetrievalRoleArn is a required field
	RetrievalRoleArn *string `min:"20" type:"string" required:"true"`

	// Metadata to assign to the configuration profile. Tags help organize and categorize
	// your AppConfig resources. Each tag consists of a key and an optional value,
	// both of which you define.
	Tags map[string]*string `type:"map"`

	// A list of methods for validating the configuration.
	Validators []*Validator `type:"list"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *CreateConfigurationProfileInput) SetApplicationId(v string) *CreateConfigurationProfileInput {
	s.ApplicationId = &v
	return s
}

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

// SetLocationUri sets the LocationUri field's value.
func (s *CreateConfigurationProfileInput) SetLocationUri(v string) *CreateConfigurationProfileInput {
	s.LocationUri = &v
	return s
}

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

// SetRetrievalRoleArn sets the RetrievalRoleArn field's value.
func (s *CreateConfigurationProfileInput) SetRetrievalRoleArn(v string) *CreateConfigurationProfileInput {
	s.RetrievalRoleArn = &v
	return s
}

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

// SetValidators sets the Validators field's value.
func (s *CreateConfigurationProfileInput) SetValidators(v []*Validator) *CreateConfigurationProfileInput {
	s.Validators = v
	return s
}

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

	// The application ID.
	ApplicationId *string `type:"string"`

	// The configuration profile description.
	Description *string `type:"string"`

	// The configuration profile ID.
	Id *string `type:"string"`

	// The URI location of the configuration.
	LocationUri *string `min:"1" type:"string"`

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

	// The ARN of an IAM role with permission to access the configuration at the
	// specified LocationUri.
	RetrievalRoleArn *string `min:"20" type:"string"`

	// A list of methods for validating the configuration.
	Validators []*Validator `type:"list"`
}

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *CreateConfigurationProfileOutput) SetApplicationId(v string) *CreateConfigurationProfileOutput {
	s.ApplicationId = &v
	return s
}

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

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

// SetLocationUri sets the LocationUri field's value.
func (s *CreateConfigurationProfileOutput) SetLocationUri(v string) *CreateConfigurationProfileOutput {
	s.LocationUri = &v
	return s
}

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

// SetRetrievalRoleArn sets the RetrievalRoleArn field's value.
func (s *CreateConfigurationProfileOutput) SetRetrievalRoleArn(v string) *CreateConfigurationProfileOutput {
	s.RetrievalRoleArn = &v
	return s
}

// SetValidators sets the Validators field's value.
func (s *CreateConfigurationProfileOutput) SetValidators(v []*Validator) *CreateConfigurationProfileOutput {
	s.Validators = v
	return s
}

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

	// Total amount of time for a deployment to last.
	//
	// DeploymentDurationInMinutes is a required field
	DeploymentDurationInMinutes *int64 `type:"integer" required:"true"`

	// A description of the deployment strategy.
	Description *string `type:"string"`

	// The amount of time AppConfig monitors for alarms before considering the deployment
	// to be complete and no longer eligible for automatic roll back.
	FinalBakeTimeInMinutes *int64 `type:"integer"`

	// The percentage of targets to receive a deployed configuration during each
	// interval.
	//
	// GrowthFactor is a required field
	GrowthFactor *float64 `min:"1" type:"float" required:"true"`

	// The algorithm used to define how percentage grows over time.
	GrowthType *string `type:"string" enum:"GrowthType"`

	// A name for the deployment strategy.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// Save the deployment strategy to a Systems Manager (SSM) document.
	//
	// ReplicateTo is a required field
	ReplicateTo *string `type:"string" required:"true" enum:"ReplicateTo"`

	// Metadata to assign to the deployment strategy. Tags help organize and categorize
	// your AppConfig resources. Each tag consists of a key and an optional value,
	// both of which you define.
	Tags map[string]*string `type:"map"`
}

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

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

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

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

// SetDeploymentDurationInMinutes sets the DeploymentDurationInMinutes field's value.
func (s *CreateDeploymentStrategyInput) SetDeploymentDurationInMinutes(v int64) *CreateDeploymentStrategyInput {
	s.DeploymentDurationInMinutes = &v
	return s
}

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

// SetFinalBakeTimeInMinutes sets the FinalBakeTimeInMinutes field's value.
func (s *CreateDeploymentStrategyInput) SetFinalBakeTimeInMinutes(v int64) *CreateDeploymentStrategyInput {
	s.FinalBakeTimeInMinutes = &v
	return s
}

// SetGrowthFactor sets the GrowthFactor field's value.
func (s *CreateDeploymentStrategyInput) SetGrowthFactor(v float64) *CreateDeploymentStrategyInput {
	s.GrowthFactor = &v
	return s
}

// SetGrowthType sets the GrowthType field's value.
func (s *CreateDeploymentStrategyInput) SetGrowthType(v string) *CreateDeploymentStrategyInput {
	s.GrowthType = &v
	return s
}

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

// SetReplicateTo sets the ReplicateTo field's value.
func (s *CreateDeploymentStrategyInput) SetReplicateTo(v string) *CreateDeploymentStrategyInput {
	s.ReplicateTo = &v
	return s
}

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

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

	// Total amount of time the deployment lasted.
	DeploymentDurationInMinutes *int64 `type:"integer"`

	// The description of the deployment strategy.
	Description *string `type:"string"`

	// The amount of time AppConfig monitored for alarms before considering the
	// deployment to be complete and no longer eligible for automatic roll back.
	FinalBakeTimeInMinutes *int64 `type:"integer"`

	// The percentage of targets that received a deployed configuration during each
	// interval.
	GrowthFactor *float64 `min:"1" type:"float"`

	// The algorithm used to define how percentage grew over time.
	GrowthType *string `type:"string" enum:"GrowthType"`

	// The deployment strategy ID.
	Id *string `type:"string"`

	// The name of the deployment strategy.
	Name *string `min:"1" type:"string"`

	// Save the deployment strategy to a Systems Manager (SSM) document.
	ReplicateTo *string `type:"string" enum:"ReplicateTo"`
}

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

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

// SetDeploymentDurationInMinutes sets the DeploymentDurationInMinutes field's value.
func (s *CreateDeploymentStrategyOutput) SetDeploymentDurationInMinutes(v int64) *CreateDeploymentStrategyOutput {
	s.DeploymentDurationInMinutes = &v
	return s
}

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

// SetFinalBakeTimeInMinutes sets the FinalBakeTimeInMinutes field's value.
func (s *CreateDeploymentStrategyOutput) SetFinalBakeTimeInMinutes(v int64) *CreateDeploymentStrategyOutput {
	s.FinalBakeTimeInMinutes = &v
	return s
}

// SetGrowthFactor sets the GrowthFactor field's value.
func (s *CreateDeploymentStrategyOutput) SetGrowthFactor(v float64) *CreateDeploymentStrategyOutput {
	s.GrowthFactor = &v
	return s
}

// SetGrowthType sets the GrowthType field's value.
func (s *CreateDeploymentStrategyOutput) SetGrowthType(v string) *CreateDeploymentStrategyOutput {
	s.GrowthType = &v
	return s
}

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

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

// SetReplicateTo sets the ReplicateTo field's value.
func (s *CreateDeploymentStrategyOutput) SetReplicateTo(v string) *CreateDeploymentStrategyOutput {
	s.ReplicateTo = &v
	return s
}

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

	// The application ID.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// A description of the environment.
	Description *string `type:"string"`

	// Amazon CloudWatch alarms to monitor during the deployment process.
	Monitors []*Monitor `type:"list"`

	// A name for the environment.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// Metadata to assign to the environment. Tags help organize and categorize
	// your AppConfig resources. Each tag consists of a key and an optional value,
	// both of which you define.
	Tags map[string]*string `type:"map"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *CreateEnvironmentInput) SetApplicationId(v string) *CreateEnvironmentInput {
	s.ApplicationId = &v
	return s
}

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

// SetMonitors sets the Monitors field's value.
func (s *CreateEnvironmentInput) SetMonitors(v []*Monitor) *CreateEnvironmentInput {
	s.Monitors = v
	return s
}

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

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

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

	// The application ID.
	ApplicationId *string `type:"string"`

	// The description of the environment.
	Description *string `type:"string"`

	// The environment ID.
	Id *string `type:"string"`

	// Amazon CloudWatch alarms monitored during the deployment.
	Monitors []*Monitor `type:"list"`

	// The name of the environment.
	Name *string `min:"1" type:"string"`

	// The state of the environment. An environment can be in one of the following
	// states: READY_FOR_DEPLOYMENT, DEPLOYING, ROLLING_BACK, or ROLLED_BACK
	State *string `type:"string" enum:"EnvironmentState"`
}

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *CreateEnvironmentOutput) SetApplicationId(v string) *CreateEnvironmentOutput {
	s.ApplicationId = &v
	return s
}

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

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

// SetMonitors sets the Monitors field's value.
func (s *CreateEnvironmentOutput) SetMonitors(v []*Monitor) *CreateEnvironmentOutput {
	s.Monitors = v
	return s
}

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

// SetState sets the State field's value.
func (s *CreateEnvironmentOutput) SetState(v string) *CreateEnvironmentOutput {
	s.State = &v
	return s
}

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

	// The ID of the application to delete.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *DeleteApplicationInput) SetApplicationId(v string) *DeleteApplicationInput {
	s.ApplicationId = &v
	return s
}

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

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

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

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

	// The application ID that includes the configuration profile you want to delete.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// The ID of the configuration profile you want to delete.
	//
	// ConfigurationProfileId is a required field
	ConfigurationProfileId *string `location:"uri" locationName:"ConfigurationProfileId" type:"string" required:"true"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *DeleteConfigurationProfileInput) SetApplicationId(v string) *DeleteConfigurationProfileInput {
	s.ApplicationId = &v
	return s
}

// SetConfigurationProfileId sets the ConfigurationProfileId field's value.
func (s *DeleteConfigurationProfileInput) SetConfigurationProfileId(v string) *DeleteConfigurationProfileInput {
	s.ConfigurationProfileId = &v
	return s
}

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

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

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

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

	// The ID of the deployment strategy you want to delete.
	//
	// DeploymentStrategyId is a required field
	DeploymentStrategyId *string `location:"uri" locationName:"DeploymentStrategyId" type:"string" required:"true"`
}

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

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

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

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

// SetDeploymentStrategyId sets the DeploymentStrategyId field's value.
func (s *DeleteDeploymentStrategyInput) SetDeploymentStrategyId(v string) *DeleteDeploymentStrategyInput {
	s.DeploymentStrategyId = &v
	return s
}

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

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

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

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

	// The application ID that includes the environment you want to delete.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// The ID of the environment you want to delete.
	//
	// EnvironmentId is a required field
	EnvironmentId *string `location:"uri" locationName:"EnvironmentId" type:"string" required:"true"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *DeleteEnvironmentInput) SetApplicationId(v string) *DeleteEnvironmentInput {
	s.ApplicationId = &v
	return s
}

// SetEnvironmentId sets the EnvironmentId field's value.
func (s *DeleteEnvironmentInput) SetEnvironmentId(v string) *DeleteEnvironmentInput {
	s.EnvironmentId = &v
	return s
}

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

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

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

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

	// Total amount of time the deployment lasted.
	DeploymentDurationInMinutes *int64 `type:"integer"`

	// The description of the deployment strategy.
	Description *string `type:"string"`

	// The amount of time AppConfig monitored for alarms before considering the
	// deployment to be complete and no longer eligible for automatic roll back.
	FinalBakeTimeInMinutes *int64 `type:"integer"`

	// The percentage of targets that received a deployed configuration during each
	// interval.
	GrowthFactor *float64 `min:"1" type:"float"`

	// The algorithm used to define how percentage grew over time.
	GrowthType *string `type:"string" enum:"GrowthType"`

	// The deployment strategy ID.
	Id *string `type:"string"`

	// The name of the deployment strategy.
	Name *string `min:"1" type:"string"`

	// Save the deployment strategy to a Systems Manager (SSM) document.
	ReplicateTo *string `type:"string" enum:"ReplicateTo"`
}

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

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

// SetDeploymentDurationInMinutes sets the DeploymentDurationInMinutes field's value.
func (s *DeploymentStrategy) SetDeploymentDurationInMinutes(v int64) *DeploymentStrategy {
	s.DeploymentDurationInMinutes = &v
	return s
}

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

// SetFinalBakeTimeInMinutes sets the FinalBakeTimeInMinutes field's value.
func (s *DeploymentStrategy) SetFinalBakeTimeInMinutes(v int64) *DeploymentStrategy {
	s.FinalBakeTimeInMinutes = &v
	return s
}

// SetGrowthFactor sets the GrowthFactor field's value.
func (s *DeploymentStrategy) SetGrowthFactor(v float64) *DeploymentStrategy {
	s.GrowthFactor = &v
	return s
}

// SetGrowthType sets the GrowthType field's value.
func (s *DeploymentStrategy) SetGrowthType(v string) *DeploymentStrategy {
	s.GrowthType = &v
	return s
}

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

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

// SetReplicateTo sets the ReplicateTo field's value.
func (s *DeploymentStrategy) SetReplicateTo(v string) *DeploymentStrategy {
	s.ReplicateTo = &v
	return s
}

// Information about the deployment.
type DeploymentSummary struct {
	_ struct{} `type:"structure"`

	// Time the deployment completed.
	CompletedAt *time.Time `type:"timestamp" timestampFormat:"iso8601"`

	// The name of the configuration.
	ConfigurationName *string `min:"1" type:"string"`

	// The version of the configuration.
	ConfigurationVersion *string `min:"1" type:"string"`

	// Total amount of time the deployment lasted.
	DeploymentDurationInMinutes *int64 `type:"integer"`

	// The sequence number of the deployment.
	DeploymentNumber *int64 `type:"integer"`

	// The amount of time AppConfig monitors for alarms before considering the deployment
	// to be complete and no longer eligible for automatic roll back.
	FinalBakeTimeInMinutes *int64 `type:"integer"`

	// The percentage of targets to receive a deployed configuration during each
	// interval.
	GrowthFactor *float64 `min:"1" type:"float"`

	// The algorithm used to define how percentage grows over time.
	GrowthType *string `type:"string" enum:"GrowthType"`

	// The percentage of targets for which the deployment is available.
	PercentageComplete *float64 `min:"1" type:"float"`

	// Time the deployment started.
	StartedAt *time.Time `type:"timestamp" timestampFormat:"iso8601"`

	// The state of the deployment.
	State *string `type:"string" enum:"DeploymentState"`
}

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

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

// SetCompletedAt sets the CompletedAt field's value.
func (s *DeploymentSummary) SetCompletedAt(v time.Time) *DeploymentSummary {
	s.CompletedAt = &v
	return s
}

// SetConfigurationName sets the ConfigurationName field's value.
func (s *DeploymentSummary) SetConfigurationName(v string) *DeploymentSummary {
	s.ConfigurationName = &v
	return s
}

// SetConfigurationVersion sets the ConfigurationVersion field's value.
func (s *DeploymentSummary) SetConfigurationVersion(v string) *DeploymentSummary {
	s.ConfigurationVersion = &v
	return s
}

// SetDeploymentDurationInMinutes sets the DeploymentDurationInMinutes field's value.
func (s *DeploymentSummary) SetDeploymentDurationInMinutes(v int64) *DeploymentSummary {
	s.DeploymentDurationInMinutes = &v
	return s
}

// SetDeploymentNumber sets the DeploymentNumber field's value.
func (s *DeploymentSummary) SetDeploymentNumber(v int64) *DeploymentSummary {
	s.DeploymentNumber = &v
	return s
}

// SetFinalBakeTimeInMinutes sets the FinalBakeTimeInMinutes field's value.
func (s *DeploymentSummary) SetFinalBakeTimeInMinutes(v int64) *DeploymentSummary {
	s.FinalBakeTimeInMinutes = &v
	return s
}

// SetGrowthFactor sets the GrowthFactor field's value.
func (s *DeploymentSummary) SetGrowthFactor(v float64) *DeploymentSummary {
	s.GrowthFactor = &v
	return s
}

// SetGrowthType sets the GrowthType field's value.
func (s *DeploymentSummary) SetGrowthType(v string) *DeploymentSummary {
	s.GrowthType = &v
	return s
}

// SetPercentageComplete sets the PercentageComplete field's value.
func (s *DeploymentSummary) SetPercentageComplete(v float64) *DeploymentSummary {
	s.PercentageComplete = &v
	return s
}

// SetStartedAt sets the StartedAt field's value.
func (s *DeploymentSummary) SetStartedAt(v time.Time) *DeploymentSummary {
	s.StartedAt = &v
	return s
}

// SetState sets the State field's value.
func (s *DeploymentSummary) SetState(v string) *DeploymentSummary {
	s.State = &v
	return s
}

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

	// The application ID.
	ApplicationId *string `type:"string"`

	// The description of the environment.
	Description *string `type:"string"`

	// The environment ID.
	Id *string `type:"string"`

	// Amazon CloudWatch alarms monitored during the deployment.
	Monitors []*Monitor `type:"list"`

	// The name of the environment.
	Name *string `min:"1" type:"string"`

	// The state of the environment. An environment can be in one of the following
	// states: READY_FOR_DEPLOYMENT, DEPLOYING, ROLLING_BACK, or ROLLED_BACK
	State *string `type:"string" enum:"EnvironmentState"`
}

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *Environment) SetApplicationId(v string) *Environment {
	s.ApplicationId = &v
	return s
}

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

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

// SetMonitors sets the Monitors field's value.
func (s *Environment) SetMonitors(v []*Monitor) *Environment {
	s.Monitors = v
	return s
}

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

// SetState sets the State field's value.
func (s *Environment) SetState(v string) *Environment {
	s.State = &v
	return s
}

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

	// The ID of the application you want to get.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *GetApplicationInput) SetApplicationId(v string) *GetApplicationInput {
	s.ApplicationId = &v
	return s
}

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

	// The description of the application.
	Description *string `type:"string"`

	// The application ID.
	Id *string `type:"string"`

	// The application name.
	Name *string `min:"1" type:"string"`
}

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

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

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

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

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

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

	// The application to get.
	//
	// Application is a required field
	Application *string `location:"uri" locationName:"Application" min:"1" type:"string" required:"true"`

	// The configuration version returned in the most recent GetConfiguration response.
	ClientConfigurationVersion *string `location:"querystring" locationName:"client_configuration_version" min:"1" type:"string"`

	// A unique ID to identify the client for the configuration. This ID enables
	// AppConfig to deploy the configuration in intervals, as defined in the deployment
	// strategy.
	//
	// ClientId is a required field
	ClientId *string `location:"querystring" locationName:"client_id" min:"1" type:"string" required:"true"`

	// The configuration to get.
	//
	// Configuration is a required field
	Configuration *string `location:"uri" locationName:"Configuration" min:"1" type:"string" required:"true"`

	// The environment to get.
	//
	// Environment is a required field
	Environment *string `location:"uri" locationName:"Environment" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetApplication sets the Application field's value.
func (s *GetConfigurationInput) SetApplication(v string) *GetConfigurationInput {
	s.Application = &v
	return s
}

// SetClientConfigurationVersion sets the ClientConfigurationVersion field's value.
func (s *GetConfigurationInput) SetClientConfigurationVersion(v string) *GetConfigurationInput {
	s.ClientConfigurationVersion = &v
	return s
}

// SetClientId sets the ClientId field's value.
func (s *GetConfigurationInput) SetClientId(v string) *GetConfigurationInput {
	s.ClientId = &v
	return s
}

// SetConfiguration sets the Configuration field's value.
func (s *GetConfigurationInput) SetConfiguration(v string) *GetConfigurationInput {
	s.Configuration = &v
	return s
}

// SetEnvironment sets the Environment field's value.
func (s *GetConfigurationInput) SetEnvironment(v string) *GetConfigurationInput {
	s.Environment = &v
	return s
}

type GetConfigurationOutput struct {
	_ struct{} `type:"structure" payload:"Content"`

	// The configuration version.
	ConfigurationVersion *string `location:"header" locationName:"Configuration-Version" min:"1" type:"string"`

	// The content of the configuration or the configuration data.
	Content []byte `type:"blob"`

	// A standard MIME type describing the format of the configuration content.
	// For more information, see Content-Type (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17).
	ContentType *string `location:"header" locationName:"Content-Type" type:"string"`
}

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

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

// SetConfigurationVersion sets the ConfigurationVersion field's value.
func (s *GetConfigurationOutput) SetConfigurationVersion(v string) *GetConfigurationOutput {
	s.ConfigurationVersion = &v
	return s
}

// SetContent sets the Content field's value.
func (s *GetConfigurationOutput) SetContent(v []byte) *GetConfigurationOutput {
	s.Content = v
	return s
}

// SetContentType sets the ContentType field's value.
func (s *GetConfigurationOutput) SetContentType(v string) *GetConfigurationOutput {
	s.ContentType = &v
	return s
}

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

	// The ID of the application that includes the configuration profile you want
	// to get.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// The ID of the configuration profile you want to get.
	//
	// ConfigurationProfileId is a required field
	ConfigurationProfileId *string `location:"uri" locationName:"ConfigurationProfileId" type:"string" required:"true"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *GetConfigurationProfileInput) SetApplicationId(v string) *GetConfigurationProfileInput {
	s.ApplicationId = &v
	return s
}

// SetConfigurationProfileId sets the ConfigurationProfileId field's value.
func (s *GetConfigurationProfileInput) SetConfigurationProfileId(v string) *GetConfigurationProfileInput {
	s.ConfigurationProfileId = &v
	return s
}

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

	// The application ID.
	ApplicationId *string `type:"string"`

	// The configuration profile description.
	Description *string `type:"string"`

	// The configuration profile ID.
	Id *string `type:"string"`

	// The URI location of the configuration.
	LocationUri *string `min:"1" type:"string"`

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

	// The ARN of an IAM role with permission to access the configuration at the
	// specified LocationUri.
	RetrievalRoleArn *string `min:"20" type:"string"`

	// A list of methods for validating the configuration.
	Validators []*Validator `type:"list"`
}

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *GetConfigurationProfileOutput) SetApplicationId(v string) *GetConfigurationProfileOutput {
	s.ApplicationId = &v
	return s
}

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

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

// SetLocationUri sets the LocationUri field's value.
func (s *GetConfigurationProfileOutput) SetLocationUri(v string) *GetConfigurationProfileOutput {
	s.LocationUri = &v
	return s
}

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

// SetRetrievalRoleArn sets the RetrievalRoleArn field's value.
func (s *GetConfigurationProfileOutput) SetRetrievalRoleArn(v string) *GetConfigurationProfileOutput {
	s.RetrievalRoleArn = &v
	return s
}

// SetValidators sets the Validators field's value.
func (s *GetConfigurationProfileOutput) SetValidators(v []*Validator) *GetConfigurationProfileOutput {
	s.Validators = v
	return s
}

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

	// The ID of the application that includes the deployment you want to get.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// The sequence number of the deployment.
	//
	// DeploymentNumber is a required field
	DeploymentNumber *int64 `location:"uri" locationName:"DeploymentNumber" type:"integer" required:"true"`

	// The ID of the environment that includes the deployment you want to get.
	//
	// EnvironmentId is a required field
	EnvironmentId *string `location:"uri" locationName:"EnvironmentId" type:"string" required:"true"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *GetDeploymentInput) SetApplicationId(v string) *GetDeploymentInput {
	s.ApplicationId = &v
	return s
}

// SetDeploymentNumber sets the DeploymentNumber field's value.
func (s *GetDeploymentInput) SetDeploymentNumber(v int64) *GetDeploymentInput {
	s.DeploymentNumber = &v
	return s
}

// SetEnvironmentId sets the EnvironmentId field's value.
func (s *GetDeploymentInput) SetEnvironmentId(v string) *GetDeploymentInput {
	s.EnvironmentId = &v
	return s
}

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

	// The ID of the application that was deployed.
	ApplicationId *string `type:"string"`

	// The time the deployment completed.
	CompletedAt *time.Time `type:"timestamp" timestampFormat:"iso8601"`

	// Information about the source location of the configuration.
	ConfigurationLocationUri *string `min:"1" type:"string"`

	// The name of the configuration.
	ConfigurationName *string `min:"1" type:"string"`

	// The ID of the configuration profile that was deployed.
	ConfigurationProfileId *string `type:"string"`

	// The configuration version that was deployed.
	ConfigurationVersion *string `min:"1" type:"string"`

	// Total amount of time the deployment lasted.
	DeploymentDurationInMinutes *int64 `type:"integer"`

	// The sequence number of the deployment.
	DeploymentNumber *int64 `type:"integer"`

	// The ID of the deployment strategy that was deployed.
	DeploymentStrategyId *string `type:"string"`

	// The description of the deployment.
	Description *string `type:"string"`

	// The ID of the environment that was deployed.
	EnvironmentId *string `type:"string"`

	// The amount of time AppConfig monitored for alarms before considering the
	// deployment to be complete and no longer eligible for automatic roll back.
	FinalBakeTimeInMinutes *int64 `type:"integer"`

	// The percentage of targets to receive a deployed configuration during each
	// interval.
	GrowthFactor *float64 `min:"1" type:"float"`

	// The algorithm used to define how percentage grew over time.
	GrowthType *string `type:"string" enum:"GrowthType"`

	// The percentage of targets for which the deployment is available.
	PercentageComplete *float64 `min:"1" type:"float"`

	// The time the deployment started.
	StartedAt *time.Time `type:"timestamp" timestampFormat:"iso8601"`

	// The state of the deployment.
	State *string `type:"string" enum:"DeploymentState"`
}

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *GetDeploymentOutput) SetApplicationId(v string) *GetDeploymentOutput {
	s.ApplicationId = &v
	return s
}

// SetCompletedAt sets the CompletedAt field's value.
func (s *GetDeploymentOutput) SetCompletedAt(v time.Time) *GetDeploymentOutput {
	s.CompletedAt = &v
	return s
}

// SetConfigurationLocationUri sets the ConfigurationLocationUri field's value.
func (s *GetDeploymentOutput) SetConfigurationLocationUri(v string) *GetDeploymentOutput {
	s.ConfigurationLocationUri = &v
	return s
}

// SetConfigurationName sets the ConfigurationName field's value.
func (s *GetDeploymentOutput) SetConfigurationName(v string) *GetDeploymentOutput {
	s.ConfigurationName = &v
	return s
}

// SetConfigurationProfileId sets the ConfigurationProfileId field's value.
func (s *GetDeploymentOutput) SetConfigurationProfileId(v string) *GetDeploymentOutput {
	s.ConfigurationProfileId = &v
	return s
}

// SetConfigurationVersion sets the ConfigurationVersion field's value.
func (s *GetDeploymentOutput) SetConfigurationVersion(v string) *GetDeploymentOutput {
	s.ConfigurationVersion = &v
	return s
}

// SetDeploymentDurationInMinutes sets the DeploymentDurationInMinutes field's value.
func (s *GetDeploymentOutput) SetDeploymentDurationInMinutes(v int64) *GetDeploymentOutput {
	s.DeploymentDurationInMinutes = &v
	return s
}

// SetDeploymentNumber sets the DeploymentNumber field's value.
func (s *GetDeploymentOutput) SetDeploymentNumber(v int64) *GetDeploymentOutput {
	s.DeploymentNumber = &v
	return s
}

// SetDeploymentStrategyId sets the DeploymentStrategyId field's value.
func (s *GetDeploymentOutput) SetDeploymentStrategyId(v string) *GetDeploymentOutput {
	s.DeploymentStrategyId = &v
	return s
}

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

// SetEnvironmentId sets the EnvironmentId field's value.
func (s *GetDeploymentOutput) SetEnvironmentId(v string) *GetDeploymentOutput {
	s.EnvironmentId = &v
	return s
}

// SetFinalBakeTimeInMinutes sets the FinalBakeTimeInMinutes field's value.
func (s *GetDeploymentOutput) SetFinalBakeTimeInMinutes(v int64) *GetDeploymentOutput {
	s.FinalBakeTimeInMinutes = &v
	return s
}

// SetGrowthFactor sets the GrowthFactor field's value.
func (s *GetDeploymentOutput) SetGrowthFactor(v float64) *GetDeploymentOutput {
	s.GrowthFactor = &v
	return s
}

// SetGrowthType sets the GrowthType field's value.
func (s *GetDeploymentOutput) SetGrowthType(v string) *GetDeploymentOutput {
	s.GrowthType = &v
	return s
}

// SetPercentageComplete sets the PercentageComplete field's value.
func (s *GetDeploymentOutput) SetPercentageComplete(v float64) *GetDeploymentOutput {
	s.PercentageComplete = &v
	return s
}

// SetStartedAt sets the StartedAt field's value.
func (s *GetDeploymentOutput) SetStartedAt(v time.Time) *GetDeploymentOutput {
	s.StartedAt = &v
	return s
}

// SetState sets the State field's value.
func (s *GetDeploymentOutput) SetState(v string) *GetDeploymentOutput {
	s.State = &v
	return s
}

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

	// The ID of the deployment strategy to get.
	//
	// DeploymentStrategyId is a required field
	DeploymentStrategyId *string `location:"uri" locationName:"DeploymentStrategyId" type:"string" required:"true"`
}

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

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

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

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

// SetDeploymentStrategyId sets the DeploymentStrategyId field's value.
func (s *GetDeploymentStrategyInput) SetDeploymentStrategyId(v string) *GetDeploymentStrategyInput {
	s.DeploymentStrategyId = &v
	return s
}

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

	// Total amount of time the deployment lasted.
	DeploymentDurationInMinutes *int64 `type:"integer"`

	// The description of the deployment strategy.
	Description *string `type:"string"`

	// The amount of time AppConfig monitored for alarms before considering the
	// deployment to be complete and no longer eligible for automatic roll back.
	FinalBakeTimeInMinutes *int64 `type:"integer"`

	// The percentage of targets that received a deployed configuration during each
	// interval.
	GrowthFactor *float64 `min:"1" type:"float"`

	// The algorithm used to define how percentage grew over time.
	GrowthType *string `type:"string" enum:"GrowthType"`

	// The deployment strategy ID.
	Id *string `type:"string"`

	// The name of the deployment strategy.
	Name *string `min:"1" type:"string"`

	// Save the deployment strategy to a Systems Manager (SSM) document.
	ReplicateTo *string `type:"string" enum:"ReplicateTo"`
}

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

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

// SetDeploymentDurationInMinutes sets the DeploymentDurationInMinutes field's value.
func (s *GetDeploymentStrategyOutput) SetDeploymentDurationInMinutes(v int64) *GetDeploymentStrategyOutput {
	s.DeploymentDurationInMinutes = &v
	return s
}

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

// SetFinalBakeTimeInMinutes sets the FinalBakeTimeInMinutes field's value.
func (s *GetDeploymentStrategyOutput) SetFinalBakeTimeInMinutes(v int64) *GetDeploymentStrategyOutput {
	s.FinalBakeTimeInMinutes = &v
	return s
}

// SetGrowthFactor sets the GrowthFactor field's value.
func (s *GetDeploymentStrategyOutput) SetGrowthFactor(v float64) *GetDeploymentStrategyOutput {
	s.GrowthFactor = &v
	return s
}

// SetGrowthType sets the GrowthType field's value.
func (s *GetDeploymentStrategyOutput) SetGrowthType(v string) *GetDeploymentStrategyOutput {
	s.GrowthType = &v
	return s
}

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

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

// SetReplicateTo sets the ReplicateTo field's value.
func (s *GetDeploymentStrategyOutput) SetReplicateTo(v string) *GetDeploymentStrategyOutput {
	s.ReplicateTo = &v
	return s
}

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

	// The ID of the application that includes the environment you want to get.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// The ID of the environment you wnat to get.
	//
	// EnvironmentId is a required field
	EnvironmentId *string `location:"uri" locationName:"EnvironmentId" type:"string" required:"true"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *GetEnvironmentInput) SetApplicationId(v string) *GetEnvironmentInput {
	s.ApplicationId = &v
	return s
}

// SetEnvironmentId sets the EnvironmentId field's value.
func (s *GetEnvironmentInput) SetEnvironmentId(v string) *GetEnvironmentInput {
	s.EnvironmentId = &v
	return s
}

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

	// The application ID.
	ApplicationId *string `type:"string"`

	// The description of the environment.
	Description *string `type:"string"`

	// The environment ID.
	Id *string `type:"string"`

	// Amazon CloudWatch alarms monitored during the deployment.
	Monitors []*Monitor `type:"list"`

	// The name of the environment.
	Name *string `min:"1" type:"string"`

	// The state of the environment. An environment can be in one of the following
	// states: READY_FOR_DEPLOYMENT, DEPLOYING, ROLLING_BACK, or ROLLED_BACK
	State *string `type:"string" enum:"EnvironmentState"`
}

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *GetEnvironmentOutput) SetApplicationId(v string) *GetEnvironmentOutput {
	s.ApplicationId = &v
	return s
}

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

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

// SetMonitors sets the Monitors field's value.
func (s *GetEnvironmentOutput) SetMonitors(v []*Monitor) *GetEnvironmentOutput {
	s.Monitors = v
	return s
}

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

// SetState sets the State field's value.
func (s *GetEnvironmentOutput) SetState(v string) *GetEnvironmentOutput {
	s.State = &v
	return s
}

// There was an internal failure in the AppConfig service.
type InternalServerException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorInternalServerException(v protocol.ResponseMetadata) error {
	return &InternalServerException{
		respMetadata: v,
	}
}

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

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

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

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

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

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

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

	// The maximum number of items to return for this call. The call also returns
	// a token that you can specify in a subsequent call to get the next set of
	// results.
	MaxResults *int64 `location:"querystring" locationName:"max_results" min:"1" type:"integer"`

	// A token to start the list. Use this token to get the next set of results.
	NextToken *string `location:"querystring" locationName:"next_token" min:"1" type:"string"`
}

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

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

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

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

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

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

	// The elements from this collection.
	Items []*Application `type:"list"`

	// The token for the next set of items to return. Use this token to get the
	// next set of results.
	NextToken *string `min:"1" type:"string"`
}

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

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

// SetItems sets the Items field's value.
func (s *ListApplicationsOutput) SetItems(v []*Application) *ListApplicationsOutput {
	s.Items = v
	return s
}

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

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

	// The application ID.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// The maximum number of items to return for this call. The call also returns
	// a token that you can specify in a subsequent call to get the next set of
	// results.
	MaxResults *int64 `location:"querystring" locationName:"max_results" min:"1" type:"integer"`

	// A token to start the list. Use this token to get the next set of results.
	NextToken *string `location:"querystring" locationName:"next_token" min:"1" type:"string"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListConfigurationProfilesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListConfigurationProfilesInput"}
	if s.ApplicationId == nil {
		invalidParams.Add(request.NewErrParamRequired("ApplicationId"))
	}
	if s.ApplicationId != nil && len(*s.ApplicationId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ApplicationId", 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 invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetApplicationId sets the ApplicationId field's value.
func (s *ListConfigurationProfilesInput) SetApplicationId(v string) *ListConfigurationProfilesInput {
	s.ApplicationId = &v
	return s
}

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

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

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

	// The elements from this collection.
	Items []*ConfigurationProfileSummary `type:"list"`

	// The token for the next set of items to return. Use this token to get the
	// next set of results.
	NextToken *string `min:"1" type:"string"`
}

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

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

// SetItems sets the Items field's value.
func (s *ListConfigurationProfilesOutput) SetItems(v []*ConfigurationProfileSummary) *ListConfigurationProfilesOutput {
	s.Items = v
	return s
}

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

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

	// The maximum number of items to return for this call. The call also returns
	// a token that you can specify in a subsequent call to get the next set of
	// results.
	MaxResults *int64 `location:"querystring" locationName:"max_results" min:"1" type:"integer"`

	// A token to start the list. Use this token to get the next set of results.
	NextToken *string `location:"querystring" locationName:"next_token" min:"1" type:"string"`
}

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

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

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

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

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

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

	// The elements from this collection.
	Items []*DeploymentStrategy `type:"list"`

	// The token for the next set of items to return. Use this token to get the
	// next set of results.
	NextToken *string `min:"1" type:"string"`
}

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

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

// SetItems sets the Items field's value.
func (s *ListDeploymentStrategiesOutput) SetItems(v []*DeploymentStrategy) *ListDeploymentStrategiesOutput {
	s.Items = v
	return s
}

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

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

	// The application ID.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// The environment ID.
	//
	// EnvironmentId is a required field
	EnvironmentId *string `location:"uri" locationName:"EnvironmentId" type:"string" required:"true"`

	// The maximum number of items to return for this call. The call also returns
	// a token that you can specify in a subsequent call to get the next set of
	// results.
	MaxResults *int64 `location:"querystring" locationName:"max_results" min:"1" type:"integer"`

	// A token to start the list. Use this token to get the next set of results.
	NextToken *string `location:"querystring" locationName:"next_token" min:"1" type:"string"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListDeploymentsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListDeploymentsInput"}
	if s.ApplicationId == nil {
		invalidParams.Add(request.NewErrParamRequired("ApplicationId"))
	}
	if s.ApplicationId != nil && len(*s.ApplicationId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ApplicationId", 1))
	}
	if s.EnvironmentId == nil {
		invalidParams.Add(request.NewErrParamRequired("EnvironmentId"))
	}
	if s.EnvironmentId != nil && len(*s.EnvironmentId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("EnvironmentId", 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 invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetApplicationId sets the ApplicationId field's value.
func (s *ListDeploymentsInput) SetApplicationId(v string) *ListDeploymentsInput {
	s.ApplicationId = &v
	return s
}

// SetEnvironmentId sets the EnvironmentId field's value.
func (s *ListDeploymentsInput) SetEnvironmentId(v string) *ListDeploymentsInput {
	s.EnvironmentId = &v
	return s
}

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

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

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

	// The elements from this collection.
	Items []*DeploymentSummary `type:"list"`

	// The token for the next set of items to return. Use this token to get the
	// next set of results.
	NextToken *string `min:"1" type:"string"`
}

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

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

// SetItems sets the Items field's value.
func (s *ListDeploymentsOutput) SetItems(v []*DeploymentSummary) *ListDeploymentsOutput {
	s.Items = v
	return s
}

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

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

	// The application ID.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// The maximum number of items to return for this call. The call also returns
	// a token that you can specify in a subsequent call to get the next set of
	// results.
	MaxResults *int64 `location:"querystring" locationName:"max_results" min:"1" type:"integer"`

	// A token to start the list. Use this token to get the next set of results.
	NextToken *string `location:"querystring" locationName:"next_token" min:"1" type:"string"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListEnvironmentsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListEnvironmentsInput"}
	if s.ApplicationId == nil {
		invalidParams.Add(request.NewErrParamRequired("ApplicationId"))
	}
	if s.ApplicationId != nil && len(*s.ApplicationId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ApplicationId", 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 invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetApplicationId sets the ApplicationId field's value.
func (s *ListEnvironmentsInput) SetApplicationId(v string) *ListEnvironmentsInput {
	s.ApplicationId = &v
	return s
}

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

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

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

	// The elements from this collection.
	Items []*Environment `type:"list"`

	// The token for the next set of items to return. Use this token to get the
	// next set of results.
	NextToken *string `min:"1" type:"string"`
}

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

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

// SetItems sets the Items field's value.
func (s *ListEnvironmentsOutput) SetItems(v []*Environment) *ListEnvironmentsOutput {
	s.Items = v
	return s
}

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

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

	// The resource ARN.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"ResourceArn" min:"20" 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) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 20))
	}

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

	// Metadata to assign to AppConfig resources. Tags help organize and categorize
	// your AppConfig resources. Each tag consists of a key and an optional value,
	// both of which you define.
	Tags map[string]*string `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
}

// Amazon CloudWatch alarms to monitor during the deployment process.
type Monitor struct {
	_ struct{} `type:"structure"`

	// ARN of the Amazon CloudWatch alarm.
	AlarmArn *string `min:"20" type:"string"`

	// ARN of an IAM role for AppConfig to monitor AlarmArn.
	AlarmRoleArn *string `min:"20" type:"string"`
}

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

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

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

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

// SetAlarmArn sets the AlarmArn field's value.
func (s *Monitor) SetAlarmArn(v string) *Monitor {
	s.AlarmArn = &v
	return s
}

// SetAlarmRoleArn sets the AlarmRoleArn field's value.
func (s *Monitor) SetAlarmRoleArn(v string) *Monitor {
	s.AlarmRoleArn = &v
	return s
}

// The requested resource could not be found.
type ResourceNotFoundException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

	ResourceName *string `type:"string"`
}

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

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

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

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

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

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

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

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

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

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

	// The application ID.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// The configuration profile ID.
	//
	// ConfigurationProfileId is a required field
	ConfigurationProfileId *string `type:"string" required:"true"`

	// The configuration version to deploy.
	//
	// ConfigurationVersion is a required field
	ConfigurationVersion *string `min:"1" type:"string" required:"true"`

	// The deployment strategy ID.
	//
	// DeploymentStrategyId is a required field
	DeploymentStrategyId *string `type:"string" required:"true"`

	// A description of the deployment.
	Description *string `type:"string"`

	// The environment ID.
	//
	// EnvironmentId is a required field
	EnvironmentId *string `location:"uri" locationName:"EnvironmentId" type:"string" required:"true"`

	// Metadata to assign to the deployment. Tags help organize and categorize your
	// AppConfig resources. Each tag consists of a key and an optional value, both
	// of which you define.
	Tags map[string]*string `type:"map"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *StartDeploymentInput) SetApplicationId(v string) *StartDeploymentInput {
	s.ApplicationId = &v
	return s
}

// SetConfigurationProfileId sets the ConfigurationProfileId field's value.
func (s *StartDeploymentInput) SetConfigurationProfileId(v string) *StartDeploymentInput {
	s.ConfigurationProfileId = &v
	return s
}

// SetConfigurationVersion sets the ConfigurationVersion field's value.
func (s *StartDeploymentInput) SetConfigurationVersion(v string) *StartDeploymentInput {
	s.ConfigurationVersion = &v
	return s
}

// SetDeploymentStrategyId sets the DeploymentStrategyId field's value.
func (s *StartDeploymentInput) SetDeploymentStrategyId(v string) *StartDeploymentInput {
	s.DeploymentStrategyId = &v
	return s
}

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

// SetEnvironmentId sets the EnvironmentId field's value.
func (s *StartDeploymentInput) SetEnvironmentId(v string) *StartDeploymentInput {
	s.EnvironmentId = &v
	return s
}

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

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

	// The ID of the application that was deployed.
	ApplicationId *string `type:"string"`

	// The time the deployment completed.
	CompletedAt *time.Time `type:"timestamp" timestampFormat:"iso8601"`

	// Information about the source location of the configuration.
	ConfigurationLocationUri *string `min:"1" type:"string"`

	// The name of the configuration.
	ConfigurationName *string `min:"1" type:"string"`

	// The ID of the configuration profile that was deployed.
	ConfigurationProfileId *string `type:"string"`

	// The configuration version that was deployed.
	ConfigurationVersion *string `min:"1" type:"string"`

	// Total amount of time the deployment lasted.
	DeploymentDurationInMinutes *int64 `type:"integer"`

	// The sequence number of the deployment.
	DeploymentNumber *int64 `type:"integer"`

	// The ID of the deployment strategy that was deployed.
	DeploymentStrategyId *string `type:"string"`

	// The description of the deployment.
	Description *string `type:"string"`

	// The ID of the environment that was deployed.
	EnvironmentId *string `type:"string"`

	// The amount of time AppConfig monitored for alarms before considering the
	// deployment to be complete and no longer eligible for automatic roll back.
	FinalBakeTimeInMinutes *int64 `type:"integer"`

	// The percentage of targets to receive a deployed configuration during each
	// interval.
	GrowthFactor *float64 `min:"1" type:"float"`

	// The algorithm used to define how percentage grew over time.
	GrowthType *string `type:"string" enum:"GrowthType"`

	// The percentage of targets for which the deployment is available.
	PercentageComplete *float64 `min:"1" type:"float"`

	// The time the deployment started.
	StartedAt *time.Time `type:"timestamp" timestampFormat:"iso8601"`

	// The state of the deployment.
	State *string `type:"string" enum:"DeploymentState"`
}

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *StartDeploymentOutput) SetApplicationId(v string) *StartDeploymentOutput {
	s.ApplicationId = &v
	return s
}

// SetCompletedAt sets the CompletedAt field's value.
func (s *StartDeploymentOutput) SetCompletedAt(v time.Time) *StartDeploymentOutput {
	s.CompletedAt = &v
	return s
}

// SetConfigurationLocationUri sets the ConfigurationLocationUri field's value.
func (s *StartDeploymentOutput) SetConfigurationLocationUri(v string) *StartDeploymentOutput {
	s.ConfigurationLocationUri = &v
	return s
}

// SetConfigurationName sets the ConfigurationName field's value.
func (s *StartDeploymentOutput) SetConfigurationName(v string) *StartDeploymentOutput {
	s.ConfigurationName = &v
	return s
}

// SetConfigurationProfileId sets the ConfigurationProfileId field's value.
func (s *StartDeploymentOutput) SetConfigurationProfileId(v string) *StartDeploymentOutput {
	s.ConfigurationProfileId = &v
	return s
}

// SetConfigurationVersion sets the ConfigurationVersion field's value.
func (s *StartDeploymentOutput) SetConfigurationVersion(v string) *StartDeploymentOutput {
	s.ConfigurationVersion = &v
	return s
}

// SetDeploymentDurationInMinutes sets the DeploymentDurationInMinutes field's value.
func (s *StartDeploymentOutput) SetDeploymentDurationInMinutes(v int64) *StartDeploymentOutput {
	s.DeploymentDurationInMinutes = &v
	return s
}

// SetDeploymentNumber sets the DeploymentNumber field's value.
func (s *StartDeploymentOutput) SetDeploymentNumber(v int64) *StartDeploymentOutput {
	s.DeploymentNumber = &v
	return s
}

// SetDeploymentStrategyId sets the DeploymentStrategyId field's value.
func (s *StartDeploymentOutput) SetDeploymentStrategyId(v string) *StartDeploymentOutput {
	s.DeploymentStrategyId = &v
	return s
}

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

// SetEnvironmentId sets the EnvironmentId field's value.
func (s *StartDeploymentOutput) SetEnvironmentId(v string) *StartDeploymentOutput {
	s.EnvironmentId = &v
	return s
}

// SetFinalBakeTimeInMinutes sets the FinalBakeTimeInMinutes field's value.
func (s *StartDeploymentOutput) SetFinalBakeTimeInMinutes(v int64) *StartDeploymentOutput {
	s.FinalBakeTimeInMinutes = &v
	return s
}

// SetGrowthFactor sets the GrowthFactor field's value.
func (s *StartDeploymentOutput) SetGrowthFactor(v float64) *StartDeploymentOutput {
	s.GrowthFactor = &v
	return s
}

// SetGrowthType sets the GrowthType field's value.
func (s *StartDeploymentOutput) SetGrowthType(v string) *StartDeploymentOutput {
	s.GrowthType = &v
	return s
}

// SetPercentageComplete sets the PercentageComplete field's value.
func (s *StartDeploymentOutput) SetPercentageComplete(v float64) *StartDeploymentOutput {
	s.PercentageComplete = &v
	return s
}

// SetStartedAt sets the StartedAt field's value.
func (s *StartDeploymentOutput) SetStartedAt(v time.Time) *StartDeploymentOutput {
	s.StartedAt = &v
	return s
}

// SetState sets the State field's value.
func (s *StartDeploymentOutput) SetState(v string) *StartDeploymentOutput {
	s.State = &v
	return s
}

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

	// The application ID.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// The sequence number of the deployment.
	//
	// DeploymentNumber is a required field
	DeploymentNumber *int64 `location:"uri" locationName:"DeploymentNumber" type:"integer" required:"true"`

	// The environment ID.
	//
	// EnvironmentId is a required field
	EnvironmentId *string `location:"uri" locationName:"EnvironmentId" type:"string" required:"true"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *StopDeploymentInput) SetApplicationId(v string) *StopDeploymentInput {
	s.ApplicationId = &v
	return s
}

// SetDeploymentNumber sets the DeploymentNumber field's value.
func (s *StopDeploymentInput) SetDeploymentNumber(v int64) *StopDeploymentInput {
	s.DeploymentNumber = &v
	return s
}

// SetEnvironmentId sets the EnvironmentId field's value.
func (s *StopDeploymentInput) SetEnvironmentId(v string) *StopDeploymentInput {
	s.EnvironmentId = &v
	return s
}

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

	// The ID of the application that was deployed.
	ApplicationId *string `type:"string"`

	// The time the deployment completed.
	CompletedAt *time.Time `type:"timestamp" timestampFormat:"iso8601"`

	// Information about the source location of the configuration.
	ConfigurationLocationUri *string `min:"1" type:"string"`

	// The name of the configuration.
	ConfigurationName *string `min:"1" type:"string"`

	// The ID of the configuration profile that was deployed.
	ConfigurationProfileId *string `type:"string"`

	// The configuration version that was deployed.
	ConfigurationVersion *string `min:"1" type:"string"`

	// Total amount of time the deployment lasted.
	DeploymentDurationInMinutes *int64 `type:"integer"`

	// The sequence number of the deployment.
	DeploymentNumber *int64 `type:"integer"`

	// The ID of the deployment strategy that was deployed.
	DeploymentStrategyId *string `type:"string"`

	// The description of the deployment.
	Description *string `type:"string"`

	// The ID of the environment that was deployed.
	EnvironmentId *string `type:"string"`

	// The amount of time AppConfig monitored for alarms before considering the
	// deployment to be complete and no longer eligible for automatic roll back.
	FinalBakeTimeInMinutes *int64 `type:"integer"`

	// The percentage of targets to receive a deployed configuration during each
	// interval.
	GrowthFactor *float64 `min:"1" type:"float"`

	// The algorithm used to define how percentage grew over time.
	GrowthType *string `type:"string" enum:"GrowthType"`

	// The percentage of targets for which the deployment is available.
	PercentageComplete *float64 `min:"1" type:"float"`

	// The time the deployment started.
	StartedAt *time.Time `type:"timestamp" timestampFormat:"iso8601"`

	// The state of the deployment.
	State *string `type:"string" enum:"DeploymentState"`
}

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *StopDeploymentOutput) SetApplicationId(v string) *StopDeploymentOutput {
	s.ApplicationId = &v
	return s
}

// SetCompletedAt sets the CompletedAt field's value.
func (s *StopDeploymentOutput) SetCompletedAt(v time.Time) *StopDeploymentOutput {
	s.CompletedAt = &v
	return s
}

// SetConfigurationLocationUri sets the ConfigurationLocationUri field's value.
func (s *StopDeploymentOutput) SetConfigurationLocationUri(v string) *StopDeploymentOutput {
	s.ConfigurationLocationUri = &v
	return s
}

// SetConfigurationName sets the ConfigurationName field's value.
func (s *StopDeploymentOutput) SetConfigurationName(v string) *StopDeploymentOutput {
	s.ConfigurationName = &v
	return s
}

// SetConfigurationProfileId sets the ConfigurationProfileId field's value.
func (s *StopDeploymentOutput) SetConfigurationProfileId(v string) *StopDeploymentOutput {
	s.ConfigurationProfileId = &v
	return s
}

// SetConfigurationVersion sets the ConfigurationVersion field's value.
func (s *StopDeploymentOutput) SetConfigurationVersion(v string) *StopDeploymentOutput {
	s.ConfigurationVersion = &v
	return s
}

// SetDeploymentDurationInMinutes sets the DeploymentDurationInMinutes field's value.
func (s *StopDeploymentOutput) SetDeploymentDurationInMinutes(v int64) *StopDeploymentOutput {
	s.DeploymentDurationInMinutes = &v
	return s
}

// SetDeploymentNumber sets the DeploymentNumber field's value.
func (s *StopDeploymentOutput) SetDeploymentNumber(v int64) *StopDeploymentOutput {
	s.DeploymentNumber = &v
	return s
}

// SetDeploymentStrategyId sets the DeploymentStrategyId field's value.
func (s *StopDeploymentOutput) SetDeploymentStrategyId(v string) *StopDeploymentOutput {
	s.DeploymentStrategyId = &v
	return s
}

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

// SetEnvironmentId sets the EnvironmentId field's value.
func (s *StopDeploymentOutput) SetEnvironmentId(v string) *StopDeploymentOutput {
	s.EnvironmentId = &v
	return s
}

// SetFinalBakeTimeInMinutes sets the FinalBakeTimeInMinutes field's value.
func (s *StopDeploymentOutput) SetFinalBakeTimeInMinutes(v int64) *StopDeploymentOutput {
	s.FinalBakeTimeInMinutes = &v
	return s
}

// SetGrowthFactor sets the GrowthFactor field's value.
func (s *StopDeploymentOutput) SetGrowthFactor(v float64) *StopDeploymentOutput {
	s.GrowthFactor = &v
	return s
}

// SetGrowthType sets the GrowthType field's value.
func (s *StopDeploymentOutput) SetGrowthType(v string) *StopDeploymentOutput {
	s.GrowthType = &v
	return s
}

// SetPercentageComplete sets the PercentageComplete field's value.
func (s *StopDeploymentOutput) SetPercentageComplete(v float64) *StopDeploymentOutput {
	s.PercentageComplete = &v
	return s
}

// SetStartedAt sets the StartedAt field's value.
func (s *StopDeploymentOutput) SetStartedAt(v time.Time) *StopDeploymentOutput {
	s.StartedAt = &v
	return s
}

// SetState sets the State field's value.
func (s *StopDeploymentOutput) SetState(v string) *StopDeploymentOutput {
	s.State = &v
	return s
}

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

	// The ARN of the resource for which to retrieve tags.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"ResourceArn" min:"20" type:"string" required:"true"`

	// The key-value string map. The valid character set is [a-zA-Z+-=._:/]. The
	// tag key can be up to 128 characters and must not start with aws:. The tag
	// value can be up to 256 characters.
	//
	// Tags is a required field
	Tags map[string]*string `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) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 20))
	}
	if s.Tags == nil {
		invalidParams.Add(request.NewErrParamRequired("Tags"))
	}

	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 ARN of the resource for which to remove tags.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"ResourceArn" min:"20" type:"string" required:"true"`

	// The tag keys to delete.
	//
	// TagKeys is a required field
	TagKeys []*string `location:"querystring" locationName:"tagKeys" 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) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 20))
	}
	if s.TagKeys == nil {
		invalidParams.Add(request.NewErrParamRequired("TagKeys"))
	}

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

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

// SetTagKeys sets the TagKeys field's value.
func (s *UntagResourceInput) SetTagKeys(v []*string) *UntagResourceInput {
	s.TagKeys = v
	return s
}

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

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

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

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

	// The application ID.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// A description of the application.
	Description *string `type:"string"`

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

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *UpdateApplicationInput) SetApplicationId(v string) *UpdateApplicationInput {
	s.ApplicationId = &v
	return s
}

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

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

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

	// The description of the application.
	Description *string `type:"string"`

	// The application ID.
	Id *string `type:"string"`

	// The application name.
	Name *string `min:"1" type:"string"`
}

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

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

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

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

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

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

	// The application ID.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// The ID of the configuration profile.
	//
	// ConfigurationProfileId is a required field
	ConfigurationProfileId *string `location:"uri" locationName:"ConfigurationProfileId" type:"string" required:"true"`

	// A description of the configuration profile.
	Description *string `type:"string"`

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

	// The ARN of an IAM role with permission to access the configuration at the
	// specified LocationUri.
	RetrievalRoleArn *string `min:"20" type:"string"`

	// A list of methods for validating the configuration.
	Validators []*Validator `type:"list"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *UpdateConfigurationProfileInput) SetApplicationId(v string) *UpdateConfigurationProfileInput {
	s.ApplicationId = &v
	return s
}

// SetConfigurationProfileId sets the ConfigurationProfileId field's value.
func (s *UpdateConfigurationProfileInput) SetConfigurationProfileId(v string) *UpdateConfigurationProfileInput {
	s.ConfigurationProfileId = &v
	return s
}

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

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

// SetRetrievalRoleArn sets the RetrievalRoleArn field's value.
func (s *UpdateConfigurationProfileInput) SetRetrievalRoleArn(v string) *UpdateConfigurationProfileInput {
	s.RetrievalRoleArn = &v
	return s
}

// SetValidators sets the Validators field's value.
func (s *UpdateConfigurationProfileInput) SetValidators(v []*Validator) *UpdateConfigurationProfileInput {
	s.Validators = v
	return s
}

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

	// The application ID.
	ApplicationId *string `type:"string"`

	// The configuration profile description.
	Description *string `type:"string"`

	// The configuration profile ID.
	Id *string `type:"string"`

	// The URI location of the configuration.
	LocationUri *string `min:"1" type:"string"`

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

	// The ARN of an IAM role with permission to access the configuration at the
	// specified LocationUri.
	RetrievalRoleArn *string `min:"20" type:"string"`

	// A list of methods for validating the configuration.
	Validators []*Validator `type:"list"`
}

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *UpdateConfigurationProfileOutput) SetApplicationId(v string) *UpdateConfigurationProfileOutput {
	s.ApplicationId = &v
	return s
}

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

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

// SetLocationUri sets the LocationUri field's value.
func (s *UpdateConfigurationProfileOutput) SetLocationUri(v string) *UpdateConfigurationProfileOutput {
	s.LocationUri = &v
	return s
}

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

// SetRetrievalRoleArn sets the RetrievalRoleArn field's value.
func (s *UpdateConfigurationProfileOutput) SetRetrievalRoleArn(v string) *UpdateConfigurationProfileOutput {
	s.RetrievalRoleArn = &v
	return s
}

// SetValidators sets the Validators field's value.
func (s *UpdateConfigurationProfileOutput) SetValidators(v []*Validator) *UpdateConfigurationProfileOutput {
	s.Validators = v
	return s
}

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

	// Total amount of time for a deployment to last.
	DeploymentDurationInMinutes *int64 `type:"integer"`

	// The deployment strategy ID.
	//
	// DeploymentStrategyId is a required field
	DeploymentStrategyId *string `location:"uri" locationName:"DeploymentStrategyId" type:"string" required:"true"`

	// A description of the deployment strategy.
	Description *string `type:"string"`

	// The amount of time AppConfig monitors for alarms before considering the deployment
	// to be complete and no longer eligible for automatic roll back.
	FinalBakeTimeInMinutes *int64 `type:"integer"`

	// The percentage of targets to receive a deployed configuration during each
	// interval.
	GrowthFactor *float64 `min:"1" type:"float"`

	// The algorithm used to define how percentage grows over time.
	GrowthType *string `type:"string" enum:"GrowthType"`
}

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

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

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

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

// SetDeploymentDurationInMinutes sets the DeploymentDurationInMinutes field's value.
func (s *UpdateDeploymentStrategyInput) SetDeploymentDurationInMinutes(v int64) *UpdateDeploymentStrategyInput {
	s.DeploymentDurationInMinutes = &v
	return s
}

// SetDeploymentStrategyId sets the DeploymentStrategyId field's value.
func (s *UpdateDeploymentStrategyInput) SetDeploymentStrategyId(v string) *UpdateDeploymentStrategyInput {
	s.DeploymentStrategyId = &v
	return s
}

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

// SetFinalBakeTimeInMinutes sets the FinalBakeTimeInMinutes field's value.
func (s *UpdateDeploymentStrategyInput) SetFinalBakeTimeInMinutes(v int64) *UpdateDeploymentStrategyInput {
	s.FinalBakeTimeInMinutes = &v
	return s
}

// SetGrowthFactor sets the GrowthFactor field's value.
func (s *UpdateDeploymentStrategyInput) SetGrowthFactor(v float64) *UpdateDeploymentStrategyInput {
	s.GrowthFactor = &v
	return s
}

// SetGrowthType sets the GrowthType field's value.
func (s *UpdateDeploymentStrategyInput) SetGrowthType(v string) *UpdateDeploymentStrategyInput {
	s.GrowthType = &v
	return s
}

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

	// Total amount of time the deployment lasted.
	DeploymentDurationInMinutes *int64 `type:"integer"`

	// The description of the deployment strategy.
	Description *string `type:"string"`

	// The amount of time AppConfig monitored for alarms before considering the
	// deployment to be complete and no longer eligible for automatic roll back.
	FinalBakeTimeInMinutes *int64 `type:"integer"`

	// The percentage of targets that received a deployed configuration during each
	// interval.
	GrowthFactor *float64 `min:"1" type:"float"`

	// The algorithm used to define how percentage grew over time.
	GrowthType *string `type:"string" enum:"GrowthType"`

	// The deployment strategy ID.
	Id *string `type:"string"`

	// The name of the deployment strategy.
	Name *string `min:"1" type:"string"`

	// Save the deployment strategy to a Systems Manager (SSM) document.
	ReplicateTo *string `type:"string" enum:"ReplicateTo"`
}

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

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

// SetDeploymentDurationInMinutes sets the DeploymentDurationInMinutes field's value.
func (s *UpdateDeploymentStrategyOutput) SetDeploymentDurationInMinutes(v int64) *UpdateDeploymentStrategyOutput {
	s.DeploymentDurationInMinutes = &v
	return s
}

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

// SetFinalBakeTimeInMinutes sets the FinalBakeTimeInMinutes field's value.
func (s *UpdateDeploymentStrategyOutput) SetFinalBakeTimeInMinutes(v int64) *UpdateDeploymentStrategyOutput {
	s.FinalBakeTimeInMinutes = &v
	return s
}

// SetGrowthFactor sets the GrowthFactor field's value.
func (s *UpdateDeploymentStrategyOutput) SetGrowthFactor(v float64) *UpdateDeploymentStrategyOutput {
	s.GrowthFactor = &v
	return s
}

// SetGrowthType sets the GrowthType field's value.
func (s *UpdateDeploymentStrategyOutput) SetGrowthType(v string) *UpdateDeploymentStrategyOutput {
	s.GrowthType = &v
	return s
}

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

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

// SetReplicateTo sets the ReplicateTo field's value.
func (s *UpdateDeploymentStrategyOutput) SetReplicateTo(v string) *UpdateDeploymentStrategyOutput {
	s.ReplicateTo = &v
	return s
}

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

	// The application ID.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// A description of the environment.
	Description *string `type:"string"`

	// The environment ID.
	//
	// EnvironmentId is a required field
	EnvironmentId *string `location:"uri" locationName:"EnvironmentId" type:"string" required:"true"`

	// Amazon CloudWatch alarms to monitor during the deployment process.
	Monitors []*Monitor `type:"list"`

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

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *UpdateEnvironmentInput) SetApplicationId(v string) *UpdateEnvironmentInput {
	s.ApplicationId = &v
	return s
}

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

// SetEnvironmentId sets the EnvironmentId field's value.
func (s *UpdateEnvironmentInput) SetEnvironmentId(v string) *UpdateEnvironmentInput {
	s.EnvironmentId = &v
	return s
}

// SetMonitors sets the Monitors field's value.
func (s *UpdateEnvironmentInput) SetMonitors(v []*Monitor) *UpdateEnvironmentInput {
	s.Monitors = v
	return s
}

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

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

	// The application ID.
	ApplicationId *string `type:"string"`

	// The description of the environment.
	Description *string `type:"string"`

	// The environment ID.
	Id *string `type:"string"`

	// Amazon CloudWatch alarms monitored during the deployment.
	Monitors []*Monitor `type:"list"`

	// The name of the environment.
	Name *string `min:"1" type:"string"`

	// The state of the environment. An environment can be in one of the following
	// states: READY_FOR_DEPLOYMENT, DEPLOYING, ROLLING_BACK, or ROLLED_BACK
	State *string `type:"string" enum:"EnvironmentState"`
}

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *UpdateEnvironmentOutput) SetApplicationId(v string) *UpdateEnvironmentOutput {
	s.ApplicationId = &v
	return s
}

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

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

// SetMonitors sets the Monitors field's value.
func (s *UpdateEnvironmentOutput) SetMonitors(v []*Monitor) *UpdateEnvironmentOutput {
	s.Monitors = v
	return s
}

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

// SetState sets the State field's value.
func (s *UpdateEnvironmentOutput) SetState(v string) *UpdateEnvironmentOutput {
	s.State = &v
	return s
}

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

	// The application ID.
	//
	// ApplicationId is a required field
	ApplicationId *string `location:"uri" locationName:"ApplicationId" type:"string" required:"true"`

	// The configuration profile ID.
	//
	// ConfigurationProfileId is a required field
	ConfigurationProfileId *string `location:"uri" locationName:"ConfigurationProfileId" type:"string" required:"true"`

	// The version of the configuration to validate.
	//
	// ConfigurationVersion is a required field
	ConfigurationVersion *string `location:"querystring" locationName:"configuration_version" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *ValidateConfigurationInput) SetApplicationId(v string) *ValidateConfigurationInput {
	s.ApplicationId = &v
	return s
}

// SetConfigurationProfileId sets the ConfigurationProfileId field's value.
func (s *ValidateConfigurationInput) SetConfigurationProfileId(v string) *ValidateConfigurationInput {
	s.ConfigurationProfileId = &v
	return s
}

// SetConfigurationVersion sets the ConfigurationVersion field's value.
func (s *ValidateConfigurationInput) SetConfigurationVersion(v string) *ValidateConfigurationInput {
	s.ConfigurationVersion = &v
	return s
}

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

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

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

// A validator provides a syntactic or semantic check to ensure the configuration
// you want to deploy functions as intended. To validate your application configuration
// data, you provide a schema or a Lambda function that runs against the configuration.
// The configuration deployment or update can only proceed when the configuration
// data is valid.
type Validator struct {
	_ struct{} `type:"structure"`

	// Either the JSON Schema content or an AWS Lambda function name.
	//
	// Content is a required field
	Content *string `type:"string" required:"true"`

	// AppConfig supports validators of type JSON_SCHEMA and LAMBDA
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"ValidatorType"`
}

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

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

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

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

// SetContent sets the Content field's value.
func (s *Validator) SetContent(v string) *Validator {
	s.Content = &v
	return s
}

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

const (
	// DeploymentStateBaking is a DeploymentState enum value
	DeploymentStateBaking = "BAKING"

	// DeploymentStateValidating is a DeploymentState enum value
	DeploymentStateValidating = "VALIDATING"

	// DeploymentStateDeploying is a DeploymentState enum value
	DeploymentStateDeploying = "DEPLOYING"

	// DeploymentStateComplete is a DeploymentState enum value
	DeploymentStateComplete = "COMPLETE"

	// DeploymentStateRollingBack is a DeploymentState enum value
	DeploymentStateRollingBack = "ROLLING_BACK"

	// DeploymentStateRolledBack is a DeploymentState enum value
	DeploymentStateRolledBack = "ROLLED_BACK"
)

const (
	// EnvironmentStateReadyForDeployment is a EnvironmentState enum value
	EnvironmentStateReadyForDeployment = "READY_FOR_DEPLOYMENT"

	// EnvironmentStateDeploying is a EnvironmentState enum value
	EnvironmentStateDeploying = "DEPLOYING"

	// EnvironmentStateRollingBack is a EnvironmentState enum value
	EnvironmentStateRollingBack = "ROLLING_BACK"

	// EnvironmentStateRolledBack is a EnvironmentState enum value
	EnvironmentStateRolledBack = "ROLLED_BACK"
)

const (
	// GrowthTypeLinear is a GrowthType enum value
	GrowthTypeLinear = "LINEAR"
)

const (
	// ReplicateToNone is a ReplicateTo enum value
	ReplicateToNone = "NONE"

	// ReplicateToSsmDocument is a ReplicateTo enum value
	ReplicateToSsmDocument = "SSM_DOCUMENT"
)

const (
	// ValidatorTypeJsonSchema is a ValidatorType enum value
	ValidatorTypeJsonSchema = "JSON_SCHEMA"

	// ValidatorTypeLambda is a ValidatorType enum value
	ValidatorTypeLambda = "LAMBDA"
)
