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

package computeoptimizer

import (
	"fmt"
	"time"

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

const opDeleteRecommendationPreferences = "DeleteRecommendationPreferences"

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

	if input == nil {
		input = &DeleteRecommendationPreferencesInput{}
	}

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

// DeleteRecommendationPreferences API operation for AWS Compute Optimizer.
//
// Deletes a recommendation preference, such as enhanced infrastructure metrics.
//
// For more information, see Activating enhanced infrastructure metrics (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
// in the Compute Optimizer User Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation DeleteRecommendationPreferences for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - ResourceNotFoundException
//     A resource that is required for the action doesn't exist.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/DeleteRecommendationPreferences
func (c *ComputeOptimizer) DeleteRecommendationPreferences(input *DeleteRecommendationPreferencesInput) (*DeleteRecommendationPreferencesOutput, error) {
	req, out := c.DeleteRecommendationPreferencesRequest(input)
	return out, req.Send()
}

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

const opDescribeRecommendationExportJobs = "DescribeRecommendationExportJobs"

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

	if input == nil {
		input = &DescribeRecommendationExportJobsInput{}
	}

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

// DescribeRecommendationExportJobs API operation for AWS Compute Optimizer.
//
// Describes recommendation export jobs created in the last seven days.
//
// Use the ExportAutoScalingGroupRecommendations or ExportEC2InstanceRecommendations
// actions to request an export of your recommendations. Then use the DescribeRecommendationExportJobs
// action to view your export jobs.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation DescribeRecommendationExportJobs for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - ResourceNotFoundException
//     A resource that is required for the action doesn't exist.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/DescribeRecommendationExportJobs
func (c *ComputeOptimizer) DescribeRecommendationExportJobs(input *DescribeRecommendationExportJobsInput) (*DescribeRecommendationExportJobsOutput, error) {
	req, out := c.DescribeRecommendationExportJobsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opExportAutoScalingGroupRecommendations = "ExportAutoScalingGroupRecommendations"

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

	if input == nil {
		input = &ExportAutoScalingGroupRecommendationsInput{}
	}

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

// ExportAutoScalingGroupRecommendations API operation for AWS Compute Optimizer.
//
// Exports optimization recommendations for Auto Scaling groups.
//
// Recommendations are exported in a comma-separated values (.csv) file, and
// its metadata in a JavaScript Object Notation (JSON) (.json) file, to an existing
// Amazon Simple Storage Service (Amazon S3) bucket that you specify. For more
// information, see Exporting Recommendations (https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html)
// in the Compute Optimizer User Guide.
//
// You can have only one Auto Scaling group export job in progress per Amazon
// Web Services Region.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation ExportAutoScalingGroupRecommendations for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - LimitExceededException
//     The request exceeds a limit of the service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportAutoScalingGroupRecommendations
func (c *ComputeOptimizer) ExportAutoScalingGroupRecommendations(input *ExportAutoScalingGroupRecommendationsInput) (*ExportAutoScalingGroupRecommendationsOutput, error) {
	req, out := c.ExportAutoScalingGroupRecommendationsRequest(input)
	return out, req.Send()
}

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

const opExportEBSVolumeRecommendations = "ExportEBSVolumeRecommendations"

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

	if input == nil {
		input = &ExportEBSVolumeRecommendationsInput{}
	}

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

// ExportEBSVolumeRecommendations API operation for AWS Compute Optimizer.
//
// Exports optimization recommendations for Amazon EBS volumes.
//
// Recommendations are exported in a comma-separated values (.csv) file, and
// its metadata in a JavaScript Object Notation (JSON) (.json) file, to an existing
// Amazon Simple Storage Service (Amazon S3) bucket that you specify. For more
// information, see Exporting Recommendations (https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html)
// in the Compute Optimizer User Guide.
//
// You can have only one Amazon EBS volume export job in progress per Amazon
// Web Services Region.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation ExportEBSVolumeRecommendations for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - LimitExceededException
//     The request exceeds a limit of the service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportEBSVolumeRecommendations
func (c *ComputeOptimizer) ExportEBSVolumeRecommendations(input *ExportEBSVolumeRecommendationsInput) (*ExportEBSVolumeRecommendationsOutput, error) {
	req, out := c.ExportEBSVolumeRecommendationsRequest(input)
	return out, req.Send()
}

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

const opExportEC2InstanceRecommendations = "ExportEC2InstanceRecommendations"

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

	if input == nil {
		input = &ExportEC2InstanceRecommendationsInput{}
	}

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

// ExportEC2InstanceRecommendations API operation for AWS Compute Optimizer.
//
// Exports optimization recommendations for Amazon EC2 instances.
//
// Recommendations are exported in a comma-separated values (.csv) file, and
// its metadata in a JavaScript Object Notation (JSON) (.json) file, to an existing
// Amazon Simple Storage Service (Amazon S3) bucket that you specify. For more
// information, see Exporting Recommendations (https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html)
// in the Compute Optimizer User Guide.
//
// You can have only one Amazon EC2 instance export job in progress per Amazon
// Web Services Region.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation ExportEC2InstanceRecommendations for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - LimitExceededException
//     The request exceeds a limit of the service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportEC2InstanceRecommendations
func (c *ComputeOptimizer) ExportEC2InstanceRecommendations(input *ExportEC2InstanceRecommendationsInput) (*ExportEC2InstanceRecommendationsOutput, error) {
	req, out := c.ExportEC2InstanceRecommendationsRequest(input)
	return out, req.Send()
}

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

const opExportECSServiceRecommendations = "ExportECSServiceRecommendations"

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

	if input == nil {
		input = &ExportECSServiceRecommendationsInput{}
	}

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

// ExportECSServiceRecommendations API operation for AWS Compute Optimizer.
//
// Exports optimization recommendations for Amazon ECS services on Fargate.
//
// Recommendations are exported in a CSV file, and its metadata in a JSON file,
// to an existing Amazon Simple Storage Service (Amazon S3) bucket that you
// specify. For more information, see Exporting Recommendations (https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html)
// in the Compute Optimizer User Guide.
//
// You can only have one Amazon ECS service export job in progress per Amazon
// Web Services Region.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation ExportECSServiceRecommendations for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - LimitExceededException
//     The request exceeds a limit of the service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportECSServiceRecommendations
func (c *ComputeOptimizer) ExportECSServiceRecommendations(input *ExportECSServiceRecommendationsInput) (*ExportECSServiceRecommendationsOutput, error) {
	req, out := c.ExportECSServiceRecommendationsRequest(input)
	return out, req.Send()
}

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

const opExportLambdaFunctionRecommendations = "ExportLambdaFunctionRecommendations"

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

	if input == nil {
		input = &ExportLambdaFunctionRecommendationsInput{}
	}

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

// ExportLambdaFunctionRecommendations API operation for AWS Compute Optimizer.
//
// Exports optimization recommendations for Lambda functions.
//
// Recommendations are exported in a comma-separated values (.csv) file, and
// its metadata in a JavaScript Object Notation (JSON) (.json) file, to an existing
// Amazon Simple Storage Service (Amazon S3) bucket that you specify. For more
// information, see Exporting Recommendations (https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html)
// in the Compute Optimizer User Guide.
//
// You can have only one Lambda function export job in progress per Amazon Web
// Services Region.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation ExportLambdaFunctionRecommendations for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - LimitExceededException
//     The request exceeds a limit of the service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportLambdaFunctionRecommendations
func (c *ComputeOptimizer) ExportLambdaFunctionRecommendations(input *ExportLambdaFunctionRecommendationsInput) (*ExportLambdaFunctionRecommendationsOutput, error) {
	req, out := c.ExportLambdaFunctionRecommendationsRequest(input)
	return out, req.Send()
}

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

const opExportLicenseRecommendations = "ExportLicenseRecommendations"

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

	if input == nil {
		input = &ExportLicenseRecommendationsInput{}
	}

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

// ExportLicenseRecommendations API operation for AWS Compute Optimizer.
//
// Export optimization recommendations for your licenses.
//
// Recommendations are exported in a comma-separated values (CSV) file, and
// its metadata in a JavaScript Object Notation (JSON) file, to an existing
// Amazon Simple Storage Service (Amazon S3) bucket that you specify. For more
// information, see Exporting Recommendations (https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html)
// in the Compute Optimizer User Guide.
//
// You can have only one license export job in progress per Amazon Web Services
// Region.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation ExportLicenseRecommendations for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - LimitExceededException
//     The request exceeds a limit of the service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/ExportLicenseRecommendations
func (c *ComputeOptimizer) ExportLicenseRecommendations(input *ExportLicenseRecommendationsInput) (*ExportLicenseRecommendationsOutput, error) {
	req, out := c.ExportLicenseRecommendationsRequest(input)
	return out, req.Send()
}

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

const opGetAutoScalingGroupRecommendations = "GetAutoScalingGroupRecommendations"

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

	if input == nil {
		input = &GetAutoScalingGroupRecommendationsInput{}
	}

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

// GetAutoScalingGroupRecommendations API operation for AWS Compute Optimizer.
//
// Returns Auto Scaling group recommendations.
//
// Compute Optimizer generates recommendations for Amazon EC2 Auto Scaling groups
// that meet a specific set of requirements. For more information, see the Supported
// resources and requirements (https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html)
// in the Compute Optimizer User Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation GetAutoScalingGroupRecommendations for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - ResourceNotFoundException
//     A resource that is required for the action doesn't exist.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetAutoScalingGroupRecommendations
func (c *ComputeOptimizer) GetAutoScalingGroupRecommendations(input *GetAutoScalingGroupRecommendationsInput) (*GetAutoScalingGroupRecommendationsOutput, error) {
	req, out := c.GetAutoScalingGroupRecommendationsRequest(input)
	return out, req.Send()
}

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

const opGetEBSVolumeRecommendations = "GetEBSVolumeRecommendations"

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

	if input == nil {
		input = &GetEBSVolumeRecommendationsInput{}
	}

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

// GetEBSVolumeRecommendations API operation for AWS Compute Optimizer.
//
// Returns Amazon Elastic Block Store (Amazon EBS) volume recommendations.
//
// Compute Optimizer generates recommendations for Amazon EBS volumes that meet
// a specific set of requirements. For more information, see the Supported resources
// and requirements (https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html)
// in the Compute Optimizer User Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation GetEBSVolumeRecommendations for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - ResourceNotFoundException
//     A resource that is required for the action doesn't exist.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEBSVolumeRecommendations
func (c *ComputeOptimizer) GetEBSVolumeRecommendations(input *GetEBSVolumeRecommendationsInput) (*GetEBSVolumeRecommendationsOutput, error) {
	req, out := c.GetEBSVolumeRecommendationsRequest(input)
	return out, req.Send()
}

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

const opGetEC2InstanceRecommendations = "GetEC2InstanceRecommendations"

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

	if input == nil {
		input = &GetEC2InstanceRecommendationsInput{}
	}

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

// GetEC2InstanceRecommendations API operation for AWS Compute Optimizer.
//
// Returns Amazon EC2 instance recommendations.
//
// Compute Optimizer generates recommendations for Amazon Elastic Compute Cloud
// (Amazon EC2) instances that meet a specific set of requirements. For more
// information, see the Supported resources and requirements (https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html)
// in the Compute Optimizer User Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation GetEC2InstanceRecommendations for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - ResourceNotFoundException
//     A resource that is required for the action doesn't exist.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEC2InstanceRecommendations
func (c *ComputeOptimizer) GetEC2InstanceRecommendations(input *GetEC2InstanceRecommendationsInput) (*GetEC2InstanceRecommendationsOutput, error) {
	req, out := c.GetEC2InstanceRecommendationsRequest(input)
	return out, req.Send()
}

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

const opGetEC2RecommendationProjectedMetrics = "GetEC2RecommendationProjectedMetrics"

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

	if input == nil {
		input = &GetEC2RecommendationProjectedMetricsInput{}
	}

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

// GetEC2RecommendationProjectedMetrics API operation for AWS Compute Optimizer.
//
// Returns the projected utilization metrics of Amazon EC2 instance recommendations.
//
// The Cpu and Memory metrics are the only projected utilization metrics returned
// when you run this action. Additionally, the Memory metric is returned only
// for resources that have the unified CloudWatch agent installed on them. For
// more information, see Enabling Memory Utilization with the CloudWatch Agent
// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation GetEC2RecommendationProjectedMetrics for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - ResourceNotFoundException
//     A resource that is required for the action doesn't exist.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEC2RecommendationProjectedMetrics
func (c *ComputeOptimizer) GetEC2RecommendationProjectedMetrics(input *GetEC2RecommendationProjectedMetricsInput) (*GetEC2RecommendationProjectedMetricsOutput, error) {
	req, out := c.GetEC2RecommendationProjectedMetricsRequest(input)
	return out, req.Send()
}

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

const opGetECSServiceRecommendationProjectedMetrics = "GetECSServiceRecommendationProjectedMetrics"

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

	if input == nil {
		input = &GetECSServiceRecommendationProjectedMetricsInput{}
	}

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

// GetECSServiceRecommendationProjectedMetrics API operation for AWS Compute Optimizer.
//
// Returns the projected metrics of Amazon ECS service recommendations.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation GetECSServiceRecommendationProjectedMetrics for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - ResourceNotFoundException
//     A resource that is required for the action doesn't exist.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetECSServiceRecommendationProjectedMetrics
func (c *ComputeOptimizer) GetECSServiceRecommendationProjectedMetrics(input *GetECSServiceRecommendationProjectedMetricsInput) (*GetECSServiceRecommendationProjectedMetricsOutput, error) {
	req, out := c.GetECSServiceRecommendationProjectedMetricsRequest(input)
	return out, req.Send()
}

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

const opGetECSServiceRecommendations = "GetECSServiceRecommendations"

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

	if input == nil {
		input = &GetECSServiceRecommendationsInput{}
	}

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

// GetECSServiceRecommendations API operation for AWS Compute Optimizer.
//
// Returns Amazon ECS service recommendations.
//
// Compute Optimizer generates recommendations for Amazon ECS services on Fargate
// that meet a specific set of requirements. For more information, see the Supported
// resources and requirements (https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html)
// in the Compute Optimizer User Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation GetECSServiceRecommendations for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - ResourceNotFoundException
//     A resource that is required for the action doesn't exist.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetECSServiceRecommendations
func (c *ComputeOptimizer) GetECSServiceRecommendations(input *GetECSServiceRecommendationsInput) (*GetECSServiceRecommendationsOutput, error) {
	req, out := c.GetECSServiceRecommendationsRequest(input)
	return out, req.Send()
}

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

const opGetEffectiveRecommendationPreferences = "GetEffectiveRecommendationPreferences"

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

	if input == nil {
		input = &GetEffectiveRecommendationPreferencesInput{}
	}

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

// GetEffectiveRecommendationPreferences API operation for AWS Compute Optimizer.
//
// Returns the recommendation preferences that are in effect for a given resource,
// such as enhanced infrastructure metrics. Considers all applicable preferences
// that you might have set at the resource, account, and organization level.
//
// When you create a recommendation preference, you can set its status to Active
// or Inactive. Use this action to view the recommendation preferences that
// are in effect, or Active.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation GetEffectiveRecommendationPreferences for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - ResourceNotFoundException
//     A resource that is required for the action doesn't exist.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEffectiveRecommendationPreferences
func (c *ComputeOptimizer) GetEffectiveRecommendationPreferences(input *GetEffectiveRecommendationPreferencesInput) (*GetEffectiveRecommendationPreferencesOutput, error) {
	req, out := c.GetEffectiveRecommendationPreferencesRequest(input)
	return out, req.Send()
}

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

const opGetEnrollmentStatus = "GetEnrollmentStatus"

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

	if input == nil {
		input = &GetEnrollmentStatusInput{}
	}

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

// GetEnrollmentStatus API operation for AWS Compute Optimizer.
//
// Returns the enrollment (opt in) status of an account to the Compute Optimizer
// service.
//
// If the account is the management account of an organization, this action
// also confirms the enrollment status of member accounts of the organization.
// Use the GetEnrollmentStatusesForOrganization action to get detailed information
// about the enrollment status of member accounts of an organization.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation GetEnrollmentStatus for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEnrollmentStatus
func (c *ComputeOptimizer) GetEnrollmentStatus(input *GetEnrollmentStatusInput) (*GetEnrollmentStatusOutput, error) {
	req, out := c.GetEnrollmentStatusRequest(input)
	return out, req.Send()
}

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

const opGetEnrollmentStatusesForOrganization = "GetEnrollmentStatusesForOrganization"

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

	if input == nil {
		input = &GetEnrollmentStatusesForOrganizationInput{}
	}

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

// GetEnrollmentStatusesForOrganization API operation for AWS Compute Optimizer.
//
// Returns the Compute Optimizer enrollment (opt-in) status of organization
// member accounts, if your account is an organization management account.
//
// To get the enrollment status of standalone accounts, use the GetEnrollmentStatus
// action.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation GetEnrollmentStatusesForOrganization for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetEnrollmentStatusesForOrganization
func (c *ComputeOptimizer) GetEnrollmentStatusesForOrganization(input *GetEnrollmentStatusesForOrganizationInput) (*GetEnrollmentStatusesForOrganizationOutput, error) {
	req, out := c.GetEnrollmentStatusesForOrganizationRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opGetLambdaFunctionRecommendations = "GetLambdaFunctionRecommendations"

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

	if input == nil {
		input = &GetLambdaFunctionRecommendationsInput{}
	}

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

// GetLambdaFunctionRecommendations API operation for AWS Compute Optimizer.
//
// Returns Lambda function recommendations.
//
// Compute Optimizer generates recommendations for functions that meet a specific
// set of requirements. For more information, see the Supported resources and
// requirements (https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html)
// in the Compute Optimizer User Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation GetLambdaFunctionRecommendations for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - LimitExceededException
//     The request exceeds a limit of the service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetLambdaFunctionRecommendations
func (c *ComputeOptimizer) GetLambdaFunctionRecommendations(input *GetLambdaFunctionRecommendationsInput) (*GetLambdaFunctionRecommendationsOutput, error) {
	req, out := c.GetLambdaFunctionRecommendationsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opGetLicenseRecommendations = "GetLicenseRecommendations"

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

	if input == nil {
		input = &GetLicenseRecommendationsInput{}
	}

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

// GetLicenseRecommendations API operation for AWS Compute Optimizer.
//
// Returns license recommendations for Amazon EC2 instances that run on a specific
// license.
//
// Compute Optimizer generates recommendations for licenses that meet a specific
// set of requirements. For more information, see the Supported resources and
// requirements (https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html)
// in the Compute Optimizer User Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation GetLicenseRecommendations for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - ResourceNotFoundException
//     A resource that is required for the action doesn't exist.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetLicenseRecommendations
func (c *ComputeOptimizer) GetLicenseRecommendations(input *GetLicenseRecommendationsInput) (*GetLicenseRecommendationsOutput, error) {
	req, out := c.GetLicenseRecommendationsRequest(input)
	return out, req.Send()
}

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

const opGetRecommendationPreferences = "GetRecommendationPreferences"

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

	if input == nil {
		input = &GetRecommendationPreferencesInput{}
	}

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

// GetRecommendationPreferences API operation for AWS Compute Optimizer.
//
// Returns existing recommendation preferences, such as enhanced infrastructure
// metrics.
//
// Use the scope parameter to specify which preferences to return. You can specify
// to return preferences for an organization, a specific account ID, or a specific
// EC2 instance or Auto Scaling group Amazon Resource Name (ARN).
//
// For more information, see Activating enhanced infrastructure metrics (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
// in the Compute Optimizer User Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation GetRecommendationPreferences for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - ResourceNotFoundException
//     A resource that is required for the action doesn't exist.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetRecommendationPreferences
func (c *ComputeOptimizer) GetRecommendationPreferences(input *GetRecommendationPreferencesInput) (*GetRecommendationPreferencesOutput, error) {
	req, out := c.GetRecommendationPreferencesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opGetRecommendationSummaries = "GetRecommendationSummaries"

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

	if input == nil {
		input = &GetRecommendationSummariesInput{}
	}

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

// GetRecommendationSummaries API operation for AWS Compute Optimizer.
//
// Returns the optimization findings for an account.
//
// It returns the number of:
//
//   - Amazon EC2 instances in an account that are Underprovisioned, Overprovisioned,
//     or Optimized.
//
//   - Auto Scaling groups in an account that are NotOptimized, or Optimized.
//
//   - Amazon EBS volumes in an account that are NotOptimized, or Optimized.
//
//   - Lambda functions in an account that are NotOptimized, or Optimized.
//
//   - Amazon ECS services in an account that are Underprovisioned, Overprovisioned,
//     or Optimized.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation GetRecommendationSummaries for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/GetRecommendationSummaries
func (c *ComputeOptimizer) GetRecommendationSummaries(input *GetRecommendationSummariesInput) (*GetRecommendationSummariesOutput, error) {
	req, out := c.GetRecommendationSummariesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opPutRecommendationPreferences = "PutRecommendationPreferences"

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

	if input == nil {
		input = &PutRecommendationPreferencesInput{}
	}

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

// PutRecommendationPreferences API operation for AWS Compute Optimizer.
//
// Creates a new recommendation preference or updates an existing recommendation
// preference, such as enhanced infrastructure metrics.
//
// For more information, see Activating enhanced infrastructure metrics (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
// in the Compute Optimizer User Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation PutRecommendationPreferences for usage and error information.
//
// Returned Error Types:
//
//   - OptInRequiredException
//     The account is not opted in to Compute Optimizer.
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - ResourceNotFoundException
//     A resource that is required for the action doesn't exist.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/PutRecommendationPreferences
func (c *ComputeOptimizer) PutRecommendationPreferences(input *PutRecommendationPreferencesInput) (*PutRecommendationPreferencesOutput, error) {
	req, out := c.PutRecommendationPreferencesRequest(input)
	return out, req.Send()
}

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

const opUpdateEnrollmentStatus = "UpdateEnrollmentStatus"

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

	if input == nil {
		input = &UpdateEnrollmentStatusInput{}
	}

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

// UpdateEnrollmentStatus API operation for AWS Compute Optimizer.
//
// Updates the enrollment (opt in and opt out) status of an account to the Compute
// Optimizer service.
//
// If the account is a management account of an organization, this action can
// also be used to enroll member accounts of the organization.
//
// You must have the appropriate permissions to opt in to Compute Optimizer,
// to view its recommendations, and to opt out. For more information, see Controlling
// access with Amazon Web Services Identity and Access Management (https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html)
// in the Compute Optimizer User Guide.
//
// When you opt in, Compute Optimizer automatically creates a service-linked
// role in your account to access its data. For more information, see Using
// Service-Linked Roles for Compute Optimizer (https://docs.aws.amazon.com/compute-optimizer/latest/ug/using-service-linked-roles.html)
// in the Compute Optimizer User Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Compute Optimizer's
// API operation UpdateEnrollmentStatus for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Try your call again.
//
//   - ServiceUnavailableException
//     The request has failed due to a temporary failure of the server.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - InvalidParameterValueException
//     The value supplied for the input parameter is out of range or not valid.
//
//   - MissingAuthenticationToken
//     The request must contain either a valid (registered) Amazon Web Services
//     access key ID or X.509 certificate.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/compute-optimizer-2019-11-01/UpdateEnrollmentStatus
func (c *ComputeOptimizer) UpdateEnrollmentStatus(input *UpdateEnrollmentStatusInput) (*UpdateEnrollmentStatusOutput, error) {
	req, out := c.UpdateEnrollmentStatusRequest(input)
	return out, req.Send()
}

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

// You do not have sufficient access to perform this action.
type AccessDeniedException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AccessDeniedException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AccessDeniedException) GoString() string {
	return s.String()
}

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

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

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

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

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

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

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

// Describes the enrollment status of an organization's member accounts in Compute
// Optimizer.
type AccountEnrollmentStatus struct {
	_ struct{} `type:"structure"`

	// The Amazon Web Services account ID.
	AccountId *string `locationName:"accountId" type:"string"`

	// The Unix epoch timestamp, in seconds, of when the account enrollment status
	// was last updated.
	LastUpdatedTimestamp *time.Time `locationName:"lastUpdatedTimestamp" type:"timestamp"`

	// The account enrollment status.
	Status *string `locationName:"status" type:"string" enum:"Status"`

	// The reason for the account enrollment status.
	//
	// For example, an account might show a status of Pending because member accounts
	// of an organization require more time to be enrolled in the service.
	StatusReason *string `locationName:"statusReason" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AccountEnrollmentStatus) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AccountEnrollmentStatus) GoString() string {
	return s.String()
}

// SetAccountId sets the AccountId field's value.
func (s *AccountEnrollmentStatus) SetAccountId(v string) *AccountEnrollmentStatus {
	s.AccountId = &v
	return s
}

// SetLastUpdatedTimestamp sets the LastUpdatedTimestamp field's value.
func (s *AccountEnrollmentStatus) SetLastUpdatedTimestamp(v time.Time) *AccountEnrollmentStatus {
	s.LastUpdatedTimestamp = &v
	return s
}

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

// SetStatusReason sets the StatusReason field's value.
func (s *AccountEnrollmentStatus) SetStatusReason(v string) *AccountEnrollmentStatus {
	s.StatusReason = &v
	return s
}

// Describes the configuration of an Auto Scaling group.
type AutoScalingGroupConfiguration struct {
	_ struct{} `type:"structure"`

	// The desired capacity, or number of instances, for the Auto Scaling group.
	DesiredCapacity *int64 `locationName:"desiredCapacity" type:"integer"`

	// The instance type for the Auto Scaling group.
	InstanceType *string `locationName:"instanceType" type:"string"`

	// The maximum size, or maximum number of instances, for the Auto Scaling group.
	MaxSize *int64 `locationName:"maxSize" type:"integer"`

	// The minimum size, or minimum number of instances, for the Auto Scaling group.
	MinSize *int64 `locationName:"minSize" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupConfiguration) GoString() string {
	return s.String()
}

// SetDesiredCapacity sets the DesiredCapacity field's value.
func (s *AutoScalingGroupConfiguration) SetDesiredCapacity(v int64) *AutoScalingGroupConfiguration {
	s.DesiredCapacity = &v
	return s
}

// SetInstanceType sets the InstanceType field's value.
func (s *AutoScalingGroupConfiguration) SetInstanceType(v string) *AutoScalingGroupConfiguration {
	s.InstanceType = &v
	return s
}

// SetMaxSize sets the MaxSize field's value.
func (s *AutoScalingGroupConfiguration) SetMaxSize(v int64) *AutoScalingGroupConfiguration {
	s.MaxSize = &v
	return s
}

// SetMinSize sets the MinSize field's value.
func (s *AutoScalingGroupConfiguration) SetMinSize(v int64) *AutoScalingGroupConfiguration {
	s.MinSize = &v
	return s
}

// An object that describes the estimated monthly savings possible by adopting
// Compute Optimizer’s Auto Scaling group recommendations. This is based on
// the Savings Plans and Reserved Instances discounts.
type AutoScalingGroupEstimatedMonthlySavings struct {
	_ struct{} `type:"structure"`

	// The currency of the estimated monthly savings.
	Currency *string `locationName:"currency" type:"string" enum:"Currency"`

	// The value of the estimated monthly savings.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupEstimatedMonthlySavings) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupEstimatedMonthlySavings) GoString() string {
	return s.String()
}

// SetCurrency sets the Currency field's value.
func (s *AutoScalingGroupEstimatedMonthlySavings) SetCurrency(v string) *AutoScalingGroupEstimatedMonthlySavings {
	s.Currency = &v
	return s
}

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

// Describes an Auto Scaling group recommendation.
type AutoScalingGroupRecommendation struct {
	_ struct{} `type:"structure"`

	// The Amazon Web Services account ID of the Auto Scaling group.
	AccountId *string `locationName:"accountId" type:"string"`

	// The Amazon Resource Name (ARN) of the Auto Scaling group.
	AutoScalingGroupArn *string `locationName:"autoScalingGroupArn" type:"string"`

	// The name of the Auto Scaling group.
	AutoScalingGroupName *string `locationName:"autoScalingGroupName" type:"string"`

	// An array of objects that describe the current configuration of the Auto Scaling
	// group.
	CurrentConfiguration *AutoScalingGroupConfiguration `locationName:"currentConfiguration" type:"structure"`

	// Describes the GPU accelerator settings for the current instance type of the
	// Auto Scaling group.
	CurrentInstanceGpuInfo *GpuInfo `locationName:"currentInstanceGpuInfo" type:"structure"`

	// The risk of the current Auto Scaling group not meeting the performance needs
	// of its workloads. The higher the risk, the more likely the current Auto Scaling
	// group configuration has insufficient capacity and cannot meet workload requirements.
	CurrentPerformanceRisk *string `locationName:"currentPerformanceRisk" type:"string" enum:"CurrentPerformanceRisk"`

	// An object that describes the effective recommendation preferences for the
	// Auto Scaling group.
	EffectiveRecommendationPreferences *EffectiveRecommendationPreferences `locationName:"effectiveRecommendationPreferences" type:"structure"`

	// The finding classification of the Auto Scaling group.
	//
	// Findings for Auto Scaling groups include:
	//
	//    * NotOptimized —An Auto Scaling group is considered not optimized when
	//    Compute Optimizer identifies a recommendation that can provide better
	//    performance for your workload.
	//
	//    * Optimized —An Auto Scaling group is considered optimized when Compute
	//    Optimizer determines that the group is correctly provisioned to run your
	//    workload based on the chosen instance type. For optimized resources, Compute
	//    Optimizer might recommend a new generation instance type.
	Finding *string `locationName:"finding" type:"string" enum:"Finding"`

	// The applications that might be running on the instances in the Auto Scaling
	// group as inferred by Compute Optimizer.
	//
	// Compute Optimizer can infer if one of the following applications might be
	// running on the instances:
	//
	//    * AmazonEmr - Infers that Amazon EMR might be running on the instances.
	//
	//    * ApacheCassandra - Infers that Apache Cassandra might be running on the
	//    instances.
	//
	//    * ApacheHadoop - Infers that Apache Hadoop might be running on the instances.
	//
	//    * Memcached - Infers that Memcached might be running on the instances.
	//
	//    * NGINX - Infers that NGINX might be running on the instances.
	//
	//    * PostgreSql - Infers that PostgreSQL might be running on the instances.
	//
	//    * Redis - Infers that Redis might be running on the instances.
	//
	//    * Kafka - Infers that Kafka might be running on the instance.
	//
	//    * SQLServer - Infers that SQLServer might be running on the instance.
	InferredWorkloadTypes []*string `locationName:"inferredWorkloadTypes" type:"list" enum:"InferredWorkloadType"`

	// The timestamp of when the Auto Scaling group recommendation was last generated.
	LastRefreshTimestamp *time.Time `locationName:"lastRefreshTimestamp" type:"timestamp"`

	// The number of days for which utilization metrics were analyzed for the Auto
	// Scaling group.
	LookBackPeriodInDays *float64 `locationName:"lookBackPeriodInDays" type:"double"`

	// An array of objects that describe the recommendation options for the Auto
	// Scaling group.
	RecommendationOptions []*AutoScalingGroupRecommendationOption `locationName:"recommendationOptions" type:"list"`

	// An array of objects that describe the utilization metrics of the Auto Scaling
	// group.
	UtilizationMetrics []*UtilizationMetric `locationName:"utilizationMetrics" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupRecommendation) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupRecommendation) GoString() string {
	return s.String()
}

// SetAccountId sets the AccountId field's value.
func (s *AutoScalingGroupRecommendation) SetAccountId(v string) *AutoScalingGroupRecommendation {
	s.AccountId = &v
	return s
}

// SetAutoScalingGroupArn sets the AutoScalingGroupArn field's value.
func (s *AutoScalingGroupRecommendation) SetAutoScalingGroupArn(v string) *AutoScalingGroupRecommendation {
	s.AutoScalingGroupArn = &v
	return s
}

// SetAutoScalingGroupName sets the AutoScalingGroupName field's value.
func (s *AutoScalingGroupRecommendation) SetAutoScalingGroupName(v string) *AutoScalingGroupRecommendation {
	s.AutoScalingGroupName = &v
	return s
}

// SetCurrentConfiguration sets the CurrentConfiguration field's value.
func (s *AutoScalingGroupRecommendation) SetCurrentConfiguration(v *AutoScalingGroupConfiguration) *AutoScalingGroupRecommendation {
	s.CurrentConfiguration = v
	return s
}

// SetCurrentInstanceGpuInfo sets the CurrentInstanceGpuInfo field's value.
func (s *AutoScalingGroupRecommendation) SetCurrentInstanceGpuInfo(v *GpuInfo) *AutoScalingGroupRecommendation {
	s.CurrentInstanceGpuInfo = v
	return s
}

// SetCurrentPerformanceRisk sets the CurrentPerformanceRisk field's value.
func (s *AutoScalingGroupRecommendation) SetCurrentPerformanceRisk(v string) *AutoScalingGroupRecommendation {
	s.CurrentPerformanceRisk = &v
	return s
}

// SetEffectiveRecommendationPreferences sets the EffectiveRecommendationPreferences field's value.
func (s *AutoScalingGroupRecommendation) SetEffectiveRecommendationPreferences(v *EffectiveRecommendationPreferences) *AutoScalingGroupRecommendation {
	s.EffectiveRecommendationPreferences = v
	return s
}

// SetFinding sets the Finding field's value.
func (s *AutoScalingGroupRecommendation) SetFinding(v string) *AutoScalingGroupRecommendation {
	s.Finding = &v
	return s
}

// SetInferredWorkloadTypes sets the InferredWorkloadTypes field's value.
func (s *AutoScalingGroupRecommendation) SetInferredWorkloadTypes(v []*string) *AutoScalingGroupRecommendation {
	s.InferredWorkloadTypes = v
	return s
}

// SetLastRefreshTimestamp sets the LastRefreshTimestamp field's value.
func (s *AutoScalingGroupRecommendation) SetLastRefreshTimestamp(v time.Time) *AutoScalingGroupRecommendation {
	s.LastRefreshTimestamp = &v
	return s
}

// SetLookBackPeriodInDays sets the LookBackPeriodInDays field's value.
func (s *AutoScalingGroupRecommendation) SetLookBackPeriodInDays(v float64) *AutoScalingGroupRecommendation {
	s.LookBackPeriodInDays = &v
	return s
}

// SetRecommendationOptions sets the RecommendationOptions field's value.
func (s *AutoScalingGroupRecommendation) SetRecommendationOptions(v []*AutoScalingGroupRecommendationOption) *AutoScalingGroupRecommendation {
	s.RecommendationOptions = v
	return s
}

// SetUtilizationMetrics sets the UtilizationMetrics field's value.
func (s *AutoScalingGroupRecommendation) SetUtilizationMetrics(v []*UtilizationMetric) *AutoScalingGroupRecommendation {
	s.UtilizationMetrics = v
	return s
}

// Describes a recommendation option for an Auto Scaling group.
type AutoScalingGroupRecommendationOption struct {
	_ struct{} `type:"structure"`

	// An array of objects that describe an Auto Scaling group configuration.
	Configuration *AutoScalingGroupConfiguration `locationName:"configuration" type:"structure"`

	// Describes the GPU accelerator settings for the recommended instance type
	// of the Auto Scaling group.
	InstanceGpuInfo *GpuInfo `locationName:"instanceGpuInfo" type:"structure"`

	// The level of effort required to migrate from the current instance type to
	// the recommended instance type.
	//
	// For example, the migration effort is Low if Amazon EMR is the inferred workload
	// type and an Amazon Web Services Graviton instance type is recommended. The
	// migration effort is Medium if a workload type couldn't be inferred but an
	// Amazon Web Services Graviton instance type is recommended. The migration
	// effort is VeryLow if both the current and recommended instance types are
	// of the same CPU architecture.
	MigrationEffort *string `locationName:"migrationEffort" type:"string" enum:"MigrationEffort"`

	// The performance risk of the Auto Scaling group configuration recommendation.
	//
	// Performance risk indicates the likelihood of the recommended instance type
	// not meeting the resource needs of your workload. Compute Optimizer calculates
	// an individual performance risk score for each specification of the recommended
	// instance, including CPU, memory, EBS throughput, EBS IOPS, disk throughput,
	// disk IOPS, network throughput, and network PPS. The performance risk of the
	// recommended instance is calculated as the maximum performance risk score
	// across the analyzed resource specifications.
	//
	// The value ranges from 0 - 4, with 0 meaning that the recommended resource
	// is predicted to always provide enough hardware capability. The higher the
	// performance risk is, the more likely you should validate whether the recommendation
	// will meet the performance requirements of your workload before migrating
	// your resource.
	PerformanceRisk *float64 `locationName:"performanceRisk" type:"double"`

	// An array of objects that describe the projected utilization metrics of the
	// Auto Scaling group recommendation option.
	//
	// The Cpu and Memory metrics are the only projected utilization metrics returned.
	// Additionally, the Memory metric is returned only for resources that have
	// the unified CloudWatch agent installed on them. For more information, see
	// Enabling Memory Utilization with the CloudWatch Agent (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent).
	ProjectedUtilizationMetrics []*UtilizationMetric `locationName:"projectedUtilizationMetrics" type:"list"`

	// The rank of the Auto Scaling group recommendation option.
	//
	// The top recommendation option is ranked as 1.
	Rank *int64 `locationName:"rank" type:"integer"`

	// An object that describes the savings opportunity for the Auto Scaling group
	// recommendation option. Savings opportunity includes the estimated monthly
	// savings amount and percentage.
	SavingsOpportunity *SavingsOpportunity `locationName:"savingsOpportunity" type:"structure"`

	// An object that describes the savings opportunity for the Auto Scaling group
	// recommendation option that includes Savings Plans and Reserved Instances
	// discounts. Savings opportunity includes the estimated monthly savings and
	// percentage.
	SavingsOpportunityAfterDiscounts *AutoScalingGroupSavingsOpportunityAfterDiscounts `locationName:"savingsOpportunityAfterDiscounts" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupRecommendationOption) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupRecommendationOption) GoString() string {
	return s.String()
}

// SetConfiguration sets the Configuration field's value.
func (s *AutoScalingGroupRecommendationOption) SetConfiguration(v *AutoScalingGroupConfiguration) *AutoScalingGroupRecommendationOption {
	s.Configuration = v
	return s
}

// SetInstanceGpuInfo sets the InstanceGpuInfo field's value.
func (s *AutoScalingGroupRecommendationOption) SetInstanceGpuInfo(v *GpuInfo) *AutoScalingGroupRecommendationOption {
	s.InstanceGpuInfo = v
	return s
}

// SetMigrationEffort sets the MigrationEffort field's value.
func (s *AutoScalingGroupRecommendationOption) SetMigrationEffort(v string) *AutoScalingGroupRecommendationOption {
	s.MigrationEffort = &v
	return s
}

// SetPerformanceRisk sets the PerformanceRisk field's value.
func (s *AutoScalingGroupRecommendationOption) SetPerformanceRisk(v float64) *AutoScalingGroupRecommendationOption {
	s.PerformanceRisk = &v
	return s
}

// SetProjectedUtilizationMetrics sets the ProjectedUtilizationMetrics field's value.
func (s *AutoScalingGroupRecommendationOption) SetProjectedUtilizationMetrics(v []*UtilizationMetric) *AutoScalingGroupRecommendationOption {
	s.ProjectedUtilizationMetrics = v
	return s
}

// SetRank sets the Rank field's value.
func (s *AutoScalingGroupRecommendationOption) SetRank(v int64) *AutoScalingGroupRecommendationOption {
	s.Rank = &v
	return s
}

// SetSavingsOpportunity sets the SavingsOpportunity field's value.
func (s *AutoScalingGroupRecommendationOption) SetSavingsOpportunity(v *SavingsOpportunity) *AutoScalingGroupRecommendationOption {
	s.SavingsOpportunity = v
	return s
}

// SetSavingsOpportunityAfterDiscounts sets the SavingsOpportunityAfterDiscounts field's value.
func (s *AutoScalingGroupRecommendationOption) SetSavingsOpportunityAfterDiscounts(v *AutoScalingGroupSavingsOpportunityAfterDiscounts) *AutoScalingGroupRecommendationOption {
	s.SavingsOpportunityAfterDiscounts = v
	return s
}

// Describes the savings opportunity for Auto Scaling group recommendations
// after applying the Savings Plans and Reserved Instances discounts.
//
// Savings opportunity represents the estimated monthly savings you can achieve
// by implementing Compute Optimizer recommendations.
type AutoScalingGroupSavingsOpportunityAfterDiscounts struct {
	_ struct{} `type:"structure"`

	// An object that describes the estimated monthly savings possible by adopting
	// Compute Optimizer’s Auto Scaling group recommendations. This is based on
	// the Savings Plans and Reserved Instances pricing discounts.
	EstimatedMonthlySavings *AutoScalingGroupEstimatedMonthlySavings `locationName:"estimatedMonthlySavings" type:"structure"`

	// The estimated monthly savings possible as a percentage of monthly cost after
	// applying the Savings Plans and Reserved Instances discounts. This saving
	// can be achieved by adopting Compute Optimizer’s Auto Scaling group recommendations.
	SavingsOpportunityPercentage *float64 `locationName:"savingsOpportunityPercentage" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupSavingsOpportunityAfterDiscounts) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AutoScalingGroupSavingsOpportunityAfterDiscounts) GoString() string {
	return s.String()
}

// SetEstimatedMonthlySavings sets the EstimatedMonthlySavings field's value.
func (s *AutoScalingGroupSavingsOpportunityAfterDiscounts) SetEstimatedMonthlySavings(v *AutoScalingGroupEstimatedMonthlySavings) *AutoScalingGroupSavingsOpportunityAfterDiscounts {
	s.EstimatedMonthlySavings = v
	return s
}

// SetSavingsOpportunityPercentage sets the SavingsOpportunityPercentage field's value.
func (s *AutoScalingGroupSavingsOpportunityAfterDiscounts) SetSavingsOpportunityPercentage(v float64) *AutoScalingGroupSavingsOpportunityAfterDiscounts {
	s.SavingsOpportunityPercentage = &v
	return s
}

// Describes the container configurations within the tasks of your Amazon ECS
// service.
type ContainerConfiguration struct {
	_ struct{} `type:"structure"`

	// The name of the container.
	ContainerName *string `locationName:"containerName" type:"string"`

	// The number of CPU units reserved for the container.
	Cpu *int64 `locationName:"cpu" type:"integer"`

	// The memory size configurations for the container.
	MemorySizeConfiguration *MemorySizeConfiguration `locationName:"memorySizeConfiguration" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerConfiguration) GoString() string {
	return s.String()
}

// SetContainerName sets the ContainerName field's value.
func (s *ContainerConfiguration) SetContainerName(v string) *ContainerConfiguration {
	s.ContainerName = &v
	return s
}

// SetCpu sets the Cpu field's value.
func (s *ContainerConfiguration) SetCpu(v int64) *ContainerConfiguration {
	s.Cpu = &v
	return s
}

// SetMemorySizeConfiguration sets the MemorySizeConfiguration field's value.
func (s *ContainerConfiguration) SetMemorySizeConfiguration(v *MemorySizeConfiguration) *ContainerConfiguration {
	s.MemorySizeConfiguration = v
	return s
}

// The CPU and memory recommendations for a container within the tasks of your
// Amazon ECS service.
type ContainerRecommendation struct {
	_ struct{} `type:"structure"`

	// The name of the container.
	ContainerName *string `locationName:"containerName" type:"string"`

	// The recommended number of CPU units reserved for the container.
	Cpu *int64 `locationName:"cpu" type:"integer"`

	// The recommended memory size configurations for the container.
	MemorySizeConfiguration *MemorySizeConfiguration `locationName:"memorySizeConfiguration" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerRecommendation) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ContainerRecommendation) GoString() string {
	return s.String()
}

// SetContainerName sets the ContainerName field's value.
func (s *ContainerRecommendation) SetContainerName(v string) *ContainerRecommendation {
	s.ContainerName = &v
	return s
}

// SetCpu sets the Cpu field's value.
func (s *ContainerRecommendation) SetCpu(v int64) *ContainerRecommendation {
	s.Cpu = &v
	return s
}

// SetMemorySizeConfiguration sets the MemorySizeConfiguration field's value.
func (s *ContainerRecommendation) SetMemorySizeConfiguration(v *MemorySizeConfiguration) *ContainerRecommendation {
	s.MemorySizeConfiguration = v
	return s
}

// Describes the performance risk ratings for a given resource type.
//
// Resources with a high or medium rating are at risk of not meeting the performance
// needs of their workloads, while resources with a low rating are performing
// well in their workloads.
type CurrentPerformanceRiskRatings struct {
	_ struct{} `type:"structure"`

	// A count of the applicable resource types with a high performance risk rating.
	High *int64 `locationName:"high" type:"long"`

	// A count of the applicable resource types with a low performance risk rating.
	Low *int64 `locationName:"low" type:"long"`

	// A count of the applicable resource types with a medium performance risk rating.
	Medium *int64 `locationName:"medium" type:"long"`

	// A count of the applicable resource types with a very low performance risk
	// rating.
	VeryLow *int64 `locationName:"veryLow" type:"long"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CurrentPerformanceRiskRatings) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CurrentPerformanceRiskRatings) GoString() string {
	return s.String()
}

// SetHigh sets the High field's value.
func (s *CurrentPerformanceRiskRatings) SetHigh(v int64) *CurrentPerformanceRiskRatings {
	s.High = &v
	return s
}

// SetLow sets the Low field's value.
func (s *CurrentPerformanceRiskRatings) SetLow(v int64) *CurrentPerformanceRiskRatings {
	s.Low = &v
	return s
}

// SetMedium sets the Medium field's value.
func (s *CurrentPerformanceRiskRatings) SetMedium(v int64) *CurrentPerformanceRiskRatings {
	s.Medium = &v
	return s
}

// SetVeryLow sets the VeryLow field's value.
func (s *CurrentPerformanceRiskRatings) SetVeryLow(v int64) *CurrentPerformanceRiskRatings {
	s.VeryLow = &v
	return s
}

// Defines the various metric parameters that can be customized, such as threshold
// and headroom.
type CustomizableMetricParameters struct {
	_ struct{} `type:"structure"`

	// The headroom value in percentage used for the specified metric parameter.
	//
	// The following lists the valid values for CPU and memory utilization.
	//
	//    * CPU utilization: PERCENT_30 | PERCENT_20 | PERCENT_0
	//
	//    * Memory utilization: PERCENT_30 | PERCENT_20 | PERCENT_10
	Headroom *string `locationName:"headroom" type:"string" enum:"CustomizableMetricHeadroom"`

	// The threshold value used for the specified metric parameter.
	//
	// You can only specify the threshold value for CPU utilization.
	Threshold *string `locationName:"threshold" type:"string" enum:"CustomizableMetricThreshold"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CustomizableMetricParameters) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CustomizableMetricParameters) GoString() string {
	return s.String()
}

// SetHeadroom sets the Headroom field's value.
func (s *CustomizableMetricParameters) SetHeadroom(v string) *CustomizableMetricParameters {
	s.Headroom = &v
	return s
}

// SetThreshold sets the Threshold field's value.
func (s *CustomizableMetricParameters) SetThreshold(v string) *CustomizableMetricParameters {
	s.Threshold = &v
	return s
}

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

	// The name of the recommendation preference to delete.
	//
	// RecommendationPreferenceNames is a required field
	RecommendationPreferenceNames []*string `locationName:"recommendationPreferenceNames" type:"list" required:"true" enum:"RecommendationPreferenceName"`

	// The target resource type of the recommendation preference to delete.
	//
	// The Ec2Instance option encompasses standalone instances and instances that
	// are part of Auto Scaling groups. The AutoScalingGroup option encompasses
	// only instances that are part of an Auto Scaling group.
	//
	// The valid values for this parameter are Ec2Instance and AutoScalingGroup.
	//
	// ResourceType is a required field
	ResourceType *string `locationName:"resourceType" type:"string" required:"true" enum:"ResourceType"`

	// An object that describes the scope of the recommendation preference to delete.
	//
	// You can delete recommendation preferences that are created at the organization
	// level (for management accounts of an organization only), account level, and
	// resource level. For more information, see Activating enhanced infrastructure
	// metrics (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
	// in the Compute Optimizer User Guide.
	Scope *Scope `locationName:"scope" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteRecommendationPreferencesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteRecommendationPreferencesInput) GoString() string {
	return s.String()
}

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

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

// SetRecommendationPreferenceNames sets the RecommendationPreferenceNames field's value.
func (s *DeleteRecommendationPreferencesInput) SetRecommendationPreferenceNames(v []*string) *DeleteRecommendationPreferencesInput {
	s.RecommendationPreferenceNames = v
	return s
}

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

// SetScope sets the Scope field's value.
func (s *DeleteRecommendationPreferencesInput) SetScope(v *Scope) *DeleteRecommendationPreferencesInput {
	s.Scope = v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteRecommendationPreferencesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DeleteRecommendationPreferencesOutput) GoString() string {
	return s.String()
}

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

	// An array of objects to specify a filter that returns a more specific list
	// of export jobs.
	Filters []*JobFilter `locationName:"filters" type:"list"`

	// The identification numbers of the export jobs to return.
	//
	// An export job ID is returned when you create an export using the ExportAutoScalingGroupRecommendations
	// or ExportEC2InstanceRecommendations actions.
	//
	// All export jobs created in the last seven days are returned if this parameter
	// is omitted.
	JobIds []*string `locationName:"jobIds" type:"list"`

	// The maximum number of export jobs to return with a single request.
	//
	// To retrieve the remaining results, make another request with the returned
	// nextToken value.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The token to advance to the next page of export jobs.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeRecommendationExportJobsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeRecommendationExportJobsInput) GoString() string {
	return s.String()
}

// SetFilters sets the Filters field's value.
func (s *DescribeRecommendationExportJobsInput) SetFilters(v []*JobFilter) *DescribeRecommendationExportJobsInput {
	s.Filters = v
	return s
}

// SetJobIds sets the JobIds field's value.
func (s *DescribeRecommendationExportJobsInput) SetJobIds(v []*string) *DescribeRecommendationExportJobsInput {
	s.JobIds = v
	return s
}

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

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

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

	// The token to use to advance to the next page of export jobs.
	//
	// This value is null when there are no more pages of export jobs to return.
	NextToken *string `locationName:"nextToken" type:"string"`

	// An array of objects that describe recommendation export jobs.
	RecommendationExportJobs []*RecommendationExportJob `locationName:"recommendationExportJobs" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeRecommendationExportJobsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DescribeRecommendationExportJobsOutput) GoString() string {
	return s.String()
}

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

// SetRecommendationExportJobs sets the RecommendationExportJobs field's value.
func (s *DescribeRecommendationExportJobsOutput) SetRecommendationExportJobs(v []*RecommendationExportJob) *DescribeRecommendationExportJobsOutput {
	s.RecommendationExportJobs = v
	return s
}

// Describes the effective recommendation preferences for Amazon EBS volumes.
type EBSEffectiveRecommendationPreferences struct {
	_ struct{} `type:"structure"`

	// Describes the savings estimation mode preference applied for calculating
	// savings opportunity for Amazon EBS volumes.
	SavingsEstimationMode *EBSSavingsEstimationMode `locationName:"savingsEstimationMode" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EBSEffectiveRecommendationPreferences) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EBSEffectiveRecommendationPreferences) GoString() string {
	return s.String()
}

// SetSavingsEstimationMode sets the SavingsEstimationMode field's value.
func (s *EBSEffectiveRecommendationPreferences) SetSavingsEstimationMode(v *EBSSavingsEstimationMode) *EBSEffectiveRecommendationPreferences {
	s.SavingsEstimationMode = v
	return s
}

// An object that describes the estimated monthly savings possible by adopting
// Compute Optimizer’s Amazon EBS volume recommendations. This includes any
// applicable discounts.
type EBSEstimatedMonthlySavings struct {
	_ struct{} `type:"structure"`

	// The currency of the estimated monthly savings.
	Currency *string `locationName:"currency" type:"string" enum:"Currency"`

	// The value of the estimated monthly savings.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EBSEstimatedMonthlySavings) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EBSEstimatedMonthlySavings) GoString() string {
	return s.String()
}

// SetCurrency sets the Currency field's value.
func (s *EBSEstimatedMonthlySavings) SetCurrency(v string) *EBSEstimatedMonthlySavings {
	s.Currency = &v
	return s
}

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

// Describes a filter that returns a more specific list of Amazon Elastic Block
// Store (Amazon EBS) volume recommendations. Use this filter with the GetEBSVolumeRecommendations
// action.
//
// You can use LambdaFunctionRecommendationFilter with the GetLambdaFunctionRecommendations
// action, JobFilter with the DescribeRecommendationExportJobs action, and Filter
// with the GetAutoScalingGroupRecommendations and GetEC2InstanceRecommendations
// actions.
type EBSFilter struct {
	_ struct{} `type:"structure"`

	// The name of the filter.
	//
	// Specify Finding to return recommendations with a specific finding classification
	// (for example, NotOptimized).
	//
	// You can filter your Amazon EBS volume recommendations by tag:key and tag-key
	// tags.
	//
	// A tag:key is a key and value combination of a tag assigned to your Amazon
	// EBS volume recommendations. Use the tag key in the filter name and the tag
	// value as the filter value. For example, to find all Amazon EBS volume recommendations
	// that have a tag with the key of Owner and the value of TeamA, specify tag:Owner
	// for the filter name and TeamA for the filter value.
	//
	// A tag-key is the key of a tag assigned to your Amazon EBS volume recommendations.
	// Use this filter to find all of your Amazon EBS volume recommendations that
	// have a tag with a specific key. This doesn’t consider the tag value. For
	// example, you can find your Amazon EBS volume recommendations with a tag key
	// value of Owner or without any tag keys assigned.
	Name *string `locationName:"name" type:"string" enum:"EBSFilterName"`

	// The value of the filter.
	//
	// The valid values are Optimized, or NotOptimized.
	Values []*string `locationName:"values" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EBSFilter) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EBSFilter) GoString() string {
	return s.String()
}

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

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

// Describes the savings estimation mode used for calculating savings opportunity
// for Amazon EBS volumes.
type EBSSavingsEstimationMode struct {
	_ struct{} `type:"structure"`

	// Describes the source for calculating the savings opportunity for Amazon EBS
	// volumes.
	Source *string `locationName:"source" type:"string" enum:"EBSSavingsEstimationModeSource"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EBSSavingsEstimationMode) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EBSSavingsEstimationMode) GoString() string {
	return s.String()
}

// SetSource sets the Source field's value.
func (s *EBSSavingsEstimationMode) SetSource(v string) *EBSSavingsEstimationMode {
	s.Source = &v
	return s
}

// Describes the savings opportunity for Amazon EBS volume recommendations after
// applying specific discounts.
type EBSSavingsOpportunityAfterDiscounts struct {
	_ struct{} `type:"structure"`

	// The estimated monthly savings possible as a percentage of monthly cost by
	// adopting Compute Optimizer’s Amazon EBS volume recommendations. This saving
	// includes any applicable discounts.
	EstimatedMonthlySavings *EBSEstimatedMonthlySavings `locationName:"estimatedMonthlySavings" type:"structure"`

	// The estimated monthly savings possible as a percentage of monthly cost after
	// applying the specific discounts. This saving can be achieved by adopting
	// Compute Optimizer’s Amazon EBS volume recommendations.
	SavingsOpportunityPercentage *float64 `locationName:"savingsOpportunityPercentage" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EBSSavingsOpportunityAfterDiscounts) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EBSSavingsOpportunityAfterDiscounts) GoString() string {
	return s.String()
}

// SetEstimatedMonthlySavings sets the EstimatedMonthlySavings field's value.
func (s *EBSSavingsOpportunityAfterDiscounts) SetEstimatedMonthlySavings(v *EBSEstimatedMonthlySavings) *EBSSavingsOpportunityAfterDiscounts {
	s.EstimatedMonthlySavings = v
	return s
}

// SetSavingsOpportunityPercentage sets the SavingsOpportunityPercentage field's value.
func (s *EBSSavingsOpportunityAfterDiscounts) SetSavingsOpportunityPercentage(v float64) *EBSSavingsOpportunityAfterDiscounts {
	s.SavingsOpportunityPercentage = &v
	return s
}

// Describes a utilization metric of an Amazon Elastic Block Store (Amazon EBS)
// volume.
//
// Compare the utilization metric data of your resource against its projected
// utilization metric data to determine the performance difference between your
// current resource and the recommended option.
type EBSUtilizationMetric struct {
	_ struct{} `type:"structure"`

	// The name of the utilization metric.
	//
	// The following utilization metrics are available:
	//
	//    * VolumeReadOpsPerSecond - The completed read operations per second from
	//    the volume in a specified period of time. Unit: Count
	//
	//    * VolumeWriteOpsPerSecond - The completed write operations per second
	//    to the volume in a specified period of time. Unit: Count
	//
	//    * VolumeReadBytesPerSecond - The bytes read per second from the volume
	//    in a specified period of time. Unit: Bytes
	//
	//    * VolumeWriteBytesPerSecond - The bytes written to the volume in a specified
	//    period of time. Unit: Bytes
	Name *string `locationName:"name" type:"string" enum:"EBSMetricName"`

	// The statistic of the utilization metric.
	//
	// The Compute Optimizer API, Command Line Interface (CLI), and SDKs return
	// utilization metrics using only the Maximum statistic, which is the highest
	// value observed during the specified period.
	//
	// The Compute Optimizer console displays graphs for some utilization metrics
	// using the Average statistic, which is the value of Sum / SampleCount during
	// the specified period. For more information, see Viewing resource recommendations
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html)
	// in the Compute Optimizer User Guide. You can also get averaged utilization
	// metric data for your resources using Amazon CloudWatch. For more information,
	// see the Amazon CloudWatch User Guide (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html).
	Statistic *string `locationName:"statistic" type:"string" enum:"MetricStatistic"`

	// The value of the utilization metric.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EBSUtilizationMetric) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EBSUtilizationMetric) GoString() string {
	return s.String()
}

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

// SetStatistic sets the Statistic field's value.
func (s *EBSUtilizationMetric) SetStatistic(v string) *EBSUtilizationMetric {
	s.Statistic = &v
	return s
}

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

// Describes the effective recommendation preferences for Amazon ECS services.
type ECSEffectiveRecommendationPreferences struct {
	_ struct{} `type:"structure"`

	// Describes the savings estimation mode preference applied for calculating
	// savings opportunity for Amazon ECS services.
	SavingsEstimationMode *ECSSavingsEstimationMode `locationName:"savingsEstimationMode" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSEffectiveRecommendationPreferences) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSEffectiveRecommendationPreferences) GoString() string {
	return s.String()
}

// SetSavingsEstimationMode sets the SavingsEstimationMode field's value.
func (s *ECSEffectiveRecommendationPreferences) SetSavingsEstimationMode(v *ECSSavingsEstimationMode) *ECSEffectiveRecommendationPreferences {
	s.SavingsEstimationMode = v
	return s
}

// Describes the estimated monthly savings possible for Amazon ECS services
// by adopting Compute Optimizer recommendations. This is based on Amazon ECS
// service pricing after applying Savings Plans discounts.
type ECSEstimatedMonthlySavings struct {
	_ struct{} `type:"structure"`

	// The currency of the estimated monthly savings.
	Currency *string `locationName:"currency" type:"string" enum:"Currency"`

	// The value of the estimated monthly savings for Amazon ECS services.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSEstimatedMonthlySavings) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSEstimatedMonthlySavings) GoString() string {
	return s.String()
}

// SetCurrency sets the Currency field's value.
func (s *ECSEstimatedMonthlySavings) SetCurrency(v string) *ECSEstimatedMonthlySavings {
	s.Currency = &v
	return s
}

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

// Describes the savings estimation mode used for calculating savings opportunity
// for Amazon ECS services.
type ECSSavingsEstimationMode struct {
	_ struct{} `type:"structure"`

	// Describes the source for calculating the savings opportunity for Amazon ECS
	// services.
	Source *string `locationName:"source" type:"string" enum:"ECSSavingsEstimationModeSource"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSSavingsEstimationMode) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSSavingsEstimationMode) GoString() string {
	return s.String()
}

// SetSource sets the Source field's value.
func (s *ECSSavingsEstimationMode) SetSource(v string) *ECSSavingsEstimationMode {
	s.Source = &v
	return s
}

// Describes the savings opportunity for Amazon ECS service recommendations
// after applying Savings Plans discounts.
//
// Savings opportunity represents the estimated monthly savings after applying
// Savings Plans discounts. You can achieve this by implementing a given Compute
// Optimizer recommendation.
type ECSSavingsOpportunityAfterDiscounts struct {
	_ struct{} `type:"structure"`

	// The estimated monthly savings possible by adopting Compute Optimizer’s
	// Amazon ECS service recommendations. This includes any applicable Savings
	// Plans discounts.
	EstimatedMonthlySavings *ECSEstimatedMonthlySavings `locationName:"estimatedMonthlySavings" type:"structure"`

	// The estimated monthly savings possible as a percentage of monthly cost by
	// adopting Compute Optimizer’s Amazon ECS service recommendations. This includes
	// any applicable Savings Plans discounts.
	SavingsOpportunityPercentage *float64 `locationName:"savingsOpportunityPercentage" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSSavingsOpportunityAfterDiscounts) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSSavingsOpportunityAfterDiscounts) GoString() string {
	return s.String()
}

// SetEstimatedMonthlySavings sets the EstimatedMonthlySavings field's value.
func (s *ECSSavingsOpportunityAfterDiscounts) SetEstimatedMonthlySavings(v *ECSEstimatedMonthlySavings) *ECSSavingsOpportunityAfterDiscounts {
	s.EstimatedMonthlySavings = v
	return s
}

// SetSavingsOpportunityPercentage sets the SavingsOpportunityPercentage field's value.
func (s *ECSSavingsOpportunityAfterDiscounts) SetSavingsOpportunityPercentage(v float64) *ECSSavingsOpportunityAfterDiscounts {
	s.SavingsOpportunityPercentage = &v
	return s
}

// Describes the projected metrics of an Amazon ECS service recommendation option.
//
// To determine the performance difference between your current Amazon ECS service
// and the recommended option, compare the metric data of your service against
// its projected metric data.
type ECSServiceProjectedMetric struct {
	_ struct{} `type:"structure"`

	// The lower bound values for the projected metric.
	LowerBoundValues []*float64 `locationName:"lowerBoundValues" type:"list"`

	// The name of the projected metric.
	//
	// The following metrics are available:
	//
	//    * Cpu — The percentage of allocated compute units that are currently
	//    in use on the service tasks.
	//
	//    * Memory — The percentage of memory that's currently in use on the service
	//    tasks.
	Name *string `locationName:"name" type:"string" enum:"ECSServiceMetricName"`

	// The timestamps of the projected metric.
	Timestamps []*time.Time `locationName:"timestamps" type:"list"`

	// The upper bound values for the projected metric.
	UpperBoundValues []*float64 `locationName:"upperBoundValues" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceProjectedMetric) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceProjectedMetric) GoString() string {
	return s.String()
}

// SetLowerBoundValues sets the LowerBoundValues field's value.
func (s *ECSServiceProjectedMetric) SetLowerBoundValues(v []*float64) *ECSServiceProjectedMetric {
	s.LowerBoundValues = v
	return s
}

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

// SetTimestamps sets the Timestamps field's value.
func (s *ECSServiceProjectedMetric) SetTimestamps(v []*time.Time) *ECSServiceProjectedMetric {
	s.Timestamps = v
	return s
}

// SetUpperBoundValues sets the UpperBoundValues field's value.
func (s *ECSServiceProjectedMetric) SetUpperBoundValues(v []*float64) *ECSServiceProjectedMetric {
	s.UpperBoundValues = v
	return s
}

// Describes the projected utilization metrics of an Amazon ECS service recommendation
// option.
//
// To determine the performance difference between your current Amazon ECS service
// and the recommended option, compare the utilization metric data of your service
// against its projected utilization metric data.
type ECSServiceProjectedUtilizationMetric struct {
	_ struct{} `type:"structure"`

	// The lower bound values for the projected utilization metrics.
	LowerBoundValue *float64 `locationName:"lowerBoundValue" type:"double"`

	// The name of the projected utilization metric.
	//
	// The following utilization metrics are available:
	//
	//    * Cpu — The percentage of allocated compute units that are currently
	//    in use on the service tasks.
	//
	//    * Memory — The percentage of memory that's currently in use on the service
	//    tasks.
	Name *string `locationName:"name" type:"string" enum:"ECSServiceMetricName"`

	// The statistic of the projected utilization metric.
	//
	// The Compute Optimizer API, Command Line Interface (CLI), and SDKs return
	// utilization metrics using only the Maximum statistic, which is the highest
	// value observed during the specified period.
	//
	// The Compute Optimizer console displays graphs for some utilization metrics
	// using the Average statistic, which is the value of Sum / SampleCount during
	// the specified period. For more information, see Viewing resource recommendations
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html)
	// in the Compute Optimizer User Guide. You can also get averaged utilization
	// metric data for your resources using Amazon CloudWatch. For more information,
	// see the Amazon CloudWatch User Guide (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html).
	Statistic *string `locationName:"statistic" type:"string" enum:"ECSServiceMetricStatistic"`

	// The upper bound values for the projected utilization metrics.
	UpperBoundValue *float64 `locationName:"upperBoundValue" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceProjectedUtilizationMetric) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceProjectedUtilizationMetric) GoString() string {
	return s.String()
}

// SetLowerBoundValue sets the LowerBoundValue field's value.
func (s *ECSServiceProjectedUtilizationMetric) SetLowerBoundValue(v float64) *ECSServiceProjectedUtilizationMetric {
	s.LowerBoundValue = &v
	return s
}

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

// SetStatistic sets the Statistic field's value.
func (s *ECSServiceProjectedUtilizationMetric) SetStatistic(v string) *ECSServiceProjectedUtilizationMetric {
	s.Statistic = &v
	return s
}

// SetUpperBoundValue sets the UpperBoundValue field's value.
func (s *ECSServiceProjectedUtilizationMetric) SetUpperBoundValue(v float64) *ECSServiceProjectedUtilizationMetric {
	s.UpperBoundValue = &v
	return s
}

// Describes an Amazon ECS service recommendation.
type ECSServiceRecommendation struct {
	_ struct{} `type:"structure"`

	// The Amazon Web Services account ID of the Amazon ECS service.
	AccountId *string `locationName:"accountId" type:"string"`

	// The risk of the current Amazon ECS service not meeting the performance needs
	// of its workloads. The higher the risk, the more likely the current service
	// can't meet the performance requirements of its workload.
	CurrentPerformanceRisk *string `locationName:"currentPerformanceRisk" type:"string" enum:"CurrentPerformanceRisk"`

	// The configuration of the current Amazon ECS service.
	CurrentServiceConfiguration *ServiceConfiguration `locationName:"currentServiceConfiguration" type:"structure"`

	// Describes the effective recommendation preferences for Amazon ECS services.
	EffectiveRecommendationPreferences *ECSEffectiveRecommendationPreferences `locationName:"effectiveRecommendationPreferences" type:"structure"`

	// The finding classification of an Amazon ECS service.
	//
	// Findings for Amazon ECS services include:
	//
	//    * Underprovisioned — When Compute Optimizer detects that there’s not
	//    enough memory or CPU, an Amazon ECS service is considered under-provisioned.
	//    An under-provisioned service might result in poor application performance.
	//
	//    * Overprovisioned — When Compute Optimizer detects that there’s excessive
	//    memory or CPU, an Amazon ECS service is considered over-provisioned. An
	//    over-provisioned service might result in additional infrastructure costs.
	//
	//    * Optimized — When both the CPU and memory of your Amazon ECS service
	//    meet the performance requirements of your workload, the service is considered
	//    optimized.
	Finding *string `locationName:"finding" type:"string" enum:"ECSServiceRecommendationFinding"`

	// The reason for the finding classification of an Amazon ECS service.
	//
	// Finding reason codes for Amazon ECS services include:
	//
	//    * CPUUnderprovisioned — The service CPU configuration can be sized up
	//    to enhance the performance of your workload. This is identified by analyzing
	//    the CPUUtilization metric of the current service during the look-back
	//    period.
	//
	//    * CPUOverprovisioned — The service CPU configuration can be sized down
	//    while still meeting the performance requirements of your workload. This
	//    is identified by analyzing the CPUUtilization metric of the current service
	//    during the look-back period.
	//
	//    * MemoryUnderprovisioned — The service memory configuration can be sized
	//    up to enhance the performance of your workload. This is identified by
	//    analyzing the MemoryUtilization metric of the current service during the
	//    look-back period.
	//
	//    * MemoryOverprovisioned — The service memory configuration can be sized
	//    down while still meeting the performance requirements of your workload.
	//    This is identified by analyzing the MemoryUtilization metric of the current
	//    service during the look-back period.
	FindingReasonCodes []*string `locationName:"findingReasonCodes" type:"list" enum:"ECSServiceRecommendationFindingReasonCode"`

	// The timestamp of when the Amazon ECS service recommendation was last generated.
	LastRefreshTimestamp *time.Time `locationName:"lastRefreshTimestamp" type:"timestamp"`

	// The launch type the Amazon ECS service is using.
	//
	// Compute Optimizer only supports the Fargate launch type.
	LaunchType *string `locationName:"launchType" type:"string" enum:"ECSServiceLaunchType"`

	// The number of days the Amazon ECS service utilization metrics were analyzed.
	LookbackPeriodInDays *float64 `locationName:"lookbackPeriodInDays" type:"double"`

	// The Amazon Resource Name (ARN) of the current Amazon ECS service.
	//
	// The following is the format of the ARN:
	//
	// arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name
	ServiceArn *string `locationName:"serviceArn" type:"string"`

	// An array of objects that describe the recommendation options for the Amazon
	// ECS service.
	ServiceRecommendationOptions []*ECSServiceRecommendationOption `locationName:"serviceRecommendationOptions" type:"list"`

	// A list of tags assigned to your Amazon ECS service recommendations.
	Tags []*Tag `locationName:"tags" type:"list"`

	// An array of objects that describe the utilization metrics of the Amazon ECS
	// service.
	UtilizationMetrics []*ECSServiceUtilizationMetric `locationName:"utilizationMetrics" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceRecommendation) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceRecommendation) GoString() string {
	return s.String()
}

// SetAccountId sets the AccountId field's value.
func (s *ECSServiceRecommendation) SetAccountId(v string) *ECSServiceRecommendation {
	s.AccountId = &v
	return s
}

// SetCurrentPerformanceRisk sets the CurrentPerformanceRisk field's value.
func (s *ECSServiceRecommendation) SetCurrentPerformanceRisk(v string) *ECSServiceRecommendation {
	s.CurrentPerformanceRisk = &v
	return s
}

// SetCurrentServiceConfiguration sets the CurrentServiceConfiguration field's value.
func (s *ECSServiceRecommendation) SetCurrentServiceConfiguration(v *ServiceConfiguration) *ECSServiceRecommendation {
	s.CurrentServiceConfiguration = v
	return s
}

// SetEffectiveRecommendationPreferences sets the EffectiveRecommendationPreferences field's value.
func (s *ECSServiceRecommendation) SetEffectiveRecommendationPreferences(v *ECSEffectiveRecommendationPreferences) *ECSServiceRecommendation {
	s.EffectiveRecommendationPreferences = v
	return s
}

// SetFinding sets the Finding field's value.
func (s *ECSServiceRecommendation) SetFinding(v string) *ECSServiceRecommendation {
	s.Finding = &v
	return s
}

// SetFindingReasonCodes sets the FindingReasonCodes field's value.
func (s *ECSServiceRecommendation) SetFindingReasonCodes(v []*string) *ECSServiceRecommendation {
	s.FindingReasonCodes = v
	return s
}

// SetLastRefreshTimestamp sets the LastRefreshTimestamp field's value.
func (s *ECSServiceRecommendation) SetLastRefreshTimestamp(v time.Time) *ECSServiceRecommendation {
	s.LastRefreshTimestamp = &v
	return s
}

// SetLaunchType sets the LaunchType field's value.
func (s *ECSServiceRecommendation) SetLaunchType(v string) *ECSServiceRecommendation {
	s.LaunchType = &v
	return s
}

// SetLookbackPeriodInDays sets the LookbackPeriodInDays field's value.
func (s *ECSServiceRecommendation) SetLookbackPeriodInDays(v float64) *ECSServiceRecommendation {
	s.LookbackPeriodInDays = &v
	return s
}

// SetServiceArn sets the ServiceArn field's value.
func (s *ECSServiceRecommendation) SetServiceArn(v string) *ECSServiceRecommendation {
	s.ServiceArn = &v
	return s
}

// SetServiceRecommendationOptions sets the ServiceRecommendationOptions field's value.
func (s *ECSServiceRecommendation) SetServiceRecommendationOptions(v []*ECSServiceRecommendationOption) *ECSServiceRecommendation {
	s.ServiceRecommendationOptions = v
	return s
}

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

// SetUtilizationMetrics sets the UtilizationMetrics field's value.
func (s *ECSServiceRecommendation) SetUtilizationMetrics(v []*ECSServiceUtilizationMetric) *ECSServiceRecommendation {
	s.UtilizationMetrics = v
	return s
}

// Describes a filter that returns a more specific list of Amazon ECS service
// recommendations. Use this filter with the GetECSServiceRecommendations action.
type ECSServiceRecommendationFilter struct {
	_ struct{} `type:"structure"`

	// The name of the filter.
	//
	// Specify Finding to return recommendations with a specific finding classification.
	//
	// Specify FindingReasonCode to return recommendations with a specific finding
	// reason code.
	//
	// You can filter your Amazon ECS service recommendations by tag:key and tag-key
	// tags.
	//
	// A tag:key is a key and value combination of a tag assigned to your Amazon
	// ECS service recommendations. Use the tag key in the filter name and the tag
	// value as the filter value. For example, to find all Amazon ECS service recommendations
	// that have a tag with the key of Owner and the value of TeamA, specify tag:Owner
	// for the filter name and TeamA for the filter value.
	//
	// A tag-key is the key of a tag assigned to your Amazon ECS service recommendations.
	// Use this filter to find all of your Amazon ECS service recommendations that
	// have a tag with a specific key. This doesn’t consider the tag value. For
	// example, you can find your Amazon ECS service recommendations with a tag
	// key value of Owner or without any tag keys assigned.
	Name *string `locationName:"name" type:"string" enum:"ECSServiceRecommendationFilterName"`

	// The value of the filter.
	//
	// The valid values for this parameter are as follows:
	//
	//    * If you specify the name parameter as Finding, specify Optimized, NotOptimized,
	//    or Unavailable.
	//
	//    * If you specify the name parameter as FindingReasonCode, specify CPUUnderprovisioned,
	//    CPUOverprovisioned, MemoryUnderprovisioned, or MemoryOverprovisioned.
	Values []*string `locationName:"values" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceRecommendationFilter) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceRecommendationFilter) GoString() string {
	return s.String()
}

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

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

// Describes the recommendation options for an Amazon ECS service.
type ECSServiceRecommendationOption struct {
	_ struct{} `type:"structure"`

	// The CPU and memory size recommendations for the containers within the task
	// of your Amazon ECS service.
	ContainerRecommendations []*ContainerRecommendation `locationName:"containerRecommendations" type:"list"`

	// The CPU size of the Amazon ECS service recommendation option.
	Cpu *int64 `locationName:"cpu" type:"integer"`

	// The memory size of the Amazon ECS service recommendation option.
	Memory *int64 `locationName:"memory" type:"integer"`

	// An array of objects that describe the projected utilization metrics of the
	// Amazon ECS service recommendation option.
	ProjectedUtilizationMetrics []*ECSServiceProjectedUtilizationMetric `locationName:"projectedUtilizationMetrics" type:"list"`

	// Describes the savings opportunity for recommendations of a given resource
	// type or for the recommendation option of an individual resource.
	//
	// Savings opportunity represents the estimated monthly savings you can achieve
	// by implementing a given Compute Optimizer recommendation.
	//
	// Savings opportunity data requires that you opt in to Cost Explorer, as well
	// as activate Receive Amazon EC2 resource recommendations in the Cost Explorer
	// preferences page. That creates a connection between Cost Explorer and Compute
	// Optimizer. With this connection, Cost Explorer generates savings estimates
	// considering the price of existing resources, the price of recommended resources,
	// and historical usage data. Estimated monthly savings reflects the projected
	// dollar savings associated with each of the recommendations generated. For
	// more information, see Enabling Cost Explorer (https://docs.aws.amazon.com/cost-management/latest/userguide/ce-enable.html)
	// and Optimizing your cost with Rightsizing Recommendations (https://docs.aws.amazon.com/cost-management/latest/userguide/ce-rightsizing.html)
	// in the Cost Management User Guide.
	SavingsOpportunity *SavingsOpportunity `locationName:"savingsOpportunity" type:"structure"`

	// Describes the savings opportunity for Amazon ECS service recommendations
	// or for the recommendation option.
	//
	// Savings opportunity represents the estimated monthly savings after applying
	// Savings Plans discounts. You can achieve this by implementing a given Compute
	// Optimizer recommendation.
	SavingsOpportunityAfterDiscounts *ECSSavingsOpportunityAfterDiscounts `locationName:"savingsOpportunityAfterDiscounts" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceRecommendationOption) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceRecommendationOption) GoString() string {
	return s.String()
}

// SetContainerRecommendations sets the ContainerRecommendations field's value.
func (s *ECSServiceRecommendationOption) SetContainerRecommendations(v []*ContainerRecommendation) *ECSServiceRecommendationOption {
	s.ContainerRecommendations = v
	return s
}

// SetCpu sets the Cpu field's value.
func (s *ECSServiceRecommendationOption) SetCpu(v int64) *ECSServiceRecommendationOption {
	s.Cpu = &v
	return s
}

// SetMemory sets the Memory field's value.
func (s *ECSServiceRecommendationOption) SetMemory(v int64) *ECSServiceRecommendationOption {
	s.Memory = &v
	return s
}

// SetProjectedUtilizationMetrics sets the ProjectedUtilizationMetrics field's value.
func (s *ECSServiceRecommendationOption) SetProjectedUtilizationMetrics(v []*ECSServiceProjectedUtilizationMetric) *ECSServiceRecommendationOption {
	s.ProjectedUtilizationMetrics = v
	return s
}

// SetSavingsOpportunity sets the SavingsOpportunity field's value.
func (s *ECSServiceRecommendationOption) SetSavingsOpportunity(v *SavingsOpportunity) *ECSServiceRecommendationOption {
	s.SavingsOpportunity = v
	return s
}

// SetSavingsOpportunityAfterDiscounts sets the SavingsOpportunityAfterDiscounts field's value.
func (s *ECSServiceRecommendationOption) SetSavingsOpportunityAfterDiscounts(v *ECSSavingsOpportunityAfterDiscounts) *ECSServiceRecommendationOption {
	s.SavingsOpportunityAfterDiscounts = v
	return s
}

// Describes the projected metrics of an Amazon ECS service recommendation option.
//
// To determine the performance difference between your current Amazon ECS service
// and the recommended option, compare the metric data of your service against
// its projected metric data.
type ECSServiceRecommendedOptionProjectedMetric struct {
	_ struct{} `type:"structure"`

	// An array of objects that describe the projected metric.
	ProjectedMetrics []*ECSServiceProjectedMetric `locationName:"projectedMetrics" type:"list"`

	// The recommended CPU size for the Amazon ECS service.
	RecommendedCpuUnits *int64 `locationName:"recommendedCpuUnits" type:"integer"`

	// The recommended memory size for the Amazon ECS service.
	RecommendedMemorySize *int64 `locationName:"recommendedMemorySize" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceRecommendedOptionProjectedMetric) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceRecommendedOptionProjectedMetric) GoString() string {
	return s.String()
}

// SetProjectedMetrics sets the ProjectedMetrics field's value.
func (s *ECSServiceRecommendedOptionProjectedMetric) SetProjectedMetrics(v []*ECSServiceProjectedMetric) *ECSServiceRecommendedOptionProjectedMetric {
	s.ProjectedMetrics = v
	return s
}

// SetRecommendedCpuUnits sets the RecommendedCpuUnits field's value.
func (s *ECSServiceRecommendedOptionProjectedMetric) SetRecommendedCpuUnits(v int64) *ECSServiceRecommendedOptionProjectedMetric {
	s.RecommendedCpuUnits = &v
	return s
}

// SetRecommendedMemorySize sets the RecommendedMemorySize field's value.
func (s *ECSServiceRecommendedOptionProjectedMetric) SetRecommendedMemorySize(v int64) *ECSServiceRecommendedOptionProjectedMetric {
	s.RecommendedMemorySize = &v
	return s
}

// Describes the utilization metric of an Amazon ECS service.
//
// To determine the performance difference between your current Amazon ECS service
// and the recommended option, compare the utilization metric data of your service
// against its projected utilization metric data.
type ECSServiceUtilizationMetric struct {
	_ struct{} `type:"structure"`

	// The name of the utilization metric.
	//
	// The following utilization metrics are available:
	//
	//    * Cpu — The amount of CPU capacity that's used in the service.
	//
	//    * Memory — The amount of memory that's used in the service.
	Name *string `locationName:"name" type:"string" enum:"ECSServiceMetricName"`

	// The statistic of the utilization metric.
	//
	// The Compute Optimizer API, Command Line Interface (CLI), and SDKs return
	// utilization metrics using only the Maximum statistic, which is the highest
	// value observed during the specified period.
	//
	// The Compute Optimizer console displays graphs for some utilization metrics
	// using the Average statistic, which is the value of Sum / SampleCount during
	// the specified period. For more information, see Viewing resource recommendations
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html)
	// in the Compute Optimizer User Guide. You can also get averaged utilization
	// metric data for your resources using Amazon CloudWatch. For more information,
	// see the Amazon CloudWatch User Guide (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html).
	Statistic *string `locationName:"statistic" type:"string" enum:"ECSServiceMetricStatistic"`

	// The value of the utilization metric.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceUtilizationMetric) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ECSServiceUtilizationMetric) GoString() string {
	return s.String()
}

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

// SetStatistic sets the Statistic field's value.
func (s *ECSServiceUtilizationMetric) SetStatistic(v string) *ECSServiceUtilizationMetric {
	s.Statistic = &v
	return s
}

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

// Describes the effective preferred resources that Compute Optimizer considers
// as rightsizing recommendation candidates.
//
// Compute Optimizer only supports Amazon EC2 instance types.
type EffectivePreferredResource struct {
	_ struct{} `type:"structure"`

	// The expanded version of your preferred resource's include list.
	EffectiveIncludeList []*string `locationName:"effectiveIncludeList" type:"list"`

	// The list of preferred resources values that you want excluded from rightsizing
	// recommendation candidates.
	ExcludeList []*string `locationName:"excludeList" type:"list"`

	// The list of preferred resource values that you want considered as rightsizing
	// recommendation candidates.
	IncludeList []*string `locationName:"includeList" type:"list"`

	// The name of the preferred resource list.
	Name *string `locationName:"name" type:"string" enum:"PreferredResourceName"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EffectivePreferredResource) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EffectivePreferredResource) GoString() string {
	return s.String()
}

// SetEffectiveIncludeList sets the EffectiveIncludeList field's value.
func (s *EffectivePreferredResource) SetEffectiveIncludeList(v []*string) *EffectivePreferredResource {
	s.EffectiveIncludeList = v
	return s
}

// SetExcludeList sets the ExcludeList field's value.
func (s *EffectivePreferredResource) SetExcludeList(v []*string) *EffectivePreferredResource {
	s.ExcludeList = v
	return s
}

// SetIncludeList sets the IncludeList field's value.
func (s *EffectivePreferredResource) SetIncludeList(v []*string) *EffectivePreferredResource {
	s.IncludeList = v
	return s
}

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

// Describes the effective recommendation preferences for a resource.
type EffectiveRecommendationPreferences struct {
	_ struct{} `type:"structure"`

	// Describes the CPU vendor and architecture for an instance or Auto Scaling
	// group recommendations.
	//
	// For example, when you specify AWS_ARM64 with:
	//
	//    * A GetEC2InstanceRecommendations or GetAutoScalingGroupRecommendations
	//    request, Compute Optimizer returns recommendations that consist of Graviton2
	//    instance types only.
	//
	//    * A GetEC2RecommendationProjectedMetrics request, Compute Optimizer returns
	//    projected utilization metrics for Graviton2 instance type recommendations
	//    only.
	//
	//    * A ExportEC2InstanceRecommendations or ExportAutoScalingGroupRecommendations
	//    request, Compute Optimizer exports recommendations that consist of Graviton2
	//    instance types only.
	CpuVendorArchitectures []*string `locationName:"cpuVendorArchitectures" type:"list" enum:"CpuVendorArchitecture"`

	// Describes the activation status of the enhanced infrastructure metrics preference.
	//
	// A status of Active confirms that the preference is applied in the latest
	// recommendation refresh, and a status of Inactive confirms that it's not yet
	// applied to recommendations.
	//
	// For more information, see Enhanced infrastructure metrics (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
	// in the Compute Optimizer User Guide.
	EnhancedInfrastructureMetrics *string `locationName:"enhancedInfrastructureMetrics" type:"string" enum:"EnhancedInfrastructureMetrics"`

	// An object that describes the external metrics recommendation preference.
	//
	// If the preference is applied in the latest recommendation refresh, an object
	// with a valid source value appears in the response. If the preference isn't
	// applied to the recommendations already, then this object doesn't appear in
	// the response.
	ExternalMetricsPreference *ExternalMetricsPreference `locationName:"externalMetricsPreference" type:"structure"`

	// Describes the activation status of the inferred workload types preference.
	//
	// A status of Active confirms that the preference is applied in the latest
	// recommendation refresh. A status of Inactive confirms that it's not yet applied
	// to recommendations.
	InferredWorkloadTypes *string `locationName:"inferredWorkloadTypes" type:"string" enum:"InferredWorkloadTypesPreference"`

	// The number of days the utilization metrics of the Amazon Web Services resource
	// are analyzed.
	LookBackPeriod *string `locationName:"lookBackPeriod" type:"string" enum:"LookBackPeriodPreference"`

	// The resource type values that are considered as candidates when generating
	// rightsizing recommendations.
	PreferredResources []*EffectivePreferredResource `locationName:"preferredResources" type:"list"`

	// Describes the savings estimation mode applied for calculating savings opportunity
	// for a resource.
	SavingsEstimationMode *InstanceSavingsEstimationMode `locationName:"savingsEstimationMode" type:"structure"`

	// The resource’s CPU and memory utilization preferences, such as threshold
	// and headroom, that are used to generate rightsizing recommendations.
	//
	// This preference is only available for the Amazon EC2 instance resource type.
	UtilizationPreferences []*UtilizationPreference `locationName:"utilizationPreferences" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EffectiveRecommendationPreferences) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EffectiveRecommendationPreferences) GoString() string {
	return s.String()
}

// SetCpuVendorArchitectures sets the CpuVendorArchitectures field's value.
func (s *EffectiveRecommendationPreferences) SetCpuVendorArchitectures(v []*string) *EffectiveRecommendationPreferences {
	s.CpuVendorArchitectures = v
	return s
}

// SetEnhancedInfrastructureMetrics sets the EnhancedInfrastructureMetrics field's value.
func (s *EffectiveRecommendationPreferences) SetEnhancedInfrastructureMetrics(v string) *EffectiveRecommendationPreferences {
	s.EnhancedInfrastructureMetrics = &v
	return s
}

// SetExternalMetricsPreference sets the ExternalMetricsPreference field's value.
func (s *EffectiveRecommendationPreferences) SetExternalMetricsPreference(v *ExternalMetricsPreference) *EffectiveRecommendationPreferences {
	s.ExternalMetricsPreference = v
	return s
}

// SetInferredWorkloadTypes sets the InferredWorkloadTypes field's value.
func (s *EffectiveRecommendationPreferences) SetInferredWorkloadTypes(v string) *EffectiveRecommendationPreferences {
	s.InferredWorkloadTypes = &v
	return s
}

// SetLookBackPeriod sets the LookBackPeriod field's value.
func (s *EffectiveRecommendationPreferences) SetLookBackPeriod(v string) *EffectiveRecommendationPreferences {
	s.LookBackPeriod = &v
	return s
}

// SetPreferredResources sets the PreferredResources field's value.
func (s *EffectiveRecommendationPreferences) SetPreferredResources(v []*EffectivePreferredResource) *EffectiveRecommendationPreferences {
	s.PreferredResources = v
	return s
}

// SetSavingsEstimationMode sets the SavingsEstimationMode field's value.
func (s *EffectiveRecommendationPreferences) SetSavingsEstimationMode(v *InstanceSavingsEstimationMode) *EffectiveRecommendationPreferences {
	s.SavingsEstimationMode = v
	return s
}

// SetUtilizationPreferences sets the UtilizationPreferences field's value.
func (s *EffectiveRecommendationPreferences) SetUtilizationPreferences(v []*UtilizationPreference) *EffectiveRecommendationPreferences {
	s.UtilizationPreferences = v
	return s
}

// Describes a filter that returns a more specific list of account enrollment
// statuses. Use this filter with the GetEnrollmentStatusesForOrganization action.
type EnrollmentFilter struct {
	_ struct{} `type:"structure"`

	// The name of the filter.
	//
	// Specify Status to return accounts with a specific enrollment status (for
	// example, Active).
	Name *string `locationName:"name" type:"string" enum:"EnrollmentFilterName"`

	// The value of the filter.
	//
	// The valid values are Active, Inactive, Pending, and Failed.
	Values []*string `locationName:"values" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EnrollmentFilter) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EnrollmentFilter) GoString() string {
	return s.String()
}

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

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

// Describes the estimated monthly savings amount possible, based on On-Demand
// instance pricing, by adopting Compute Optimizer recommendations for a given
// resource.
//
// For more information, see Estimated monthly savings and savings opportunities
// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/view-ec2-recommendations.html#ec2-savings-calculation)
// in the Compute Optimizer User Guide.
type EstimatedMonthlySavings struct {
	_ struct{} `type:"structure"`

	// The currency of the estimated monthly savings.
	Currency *string `locationName:"currency" type:"string" enum:"Currency"`

	// The value of the estimated monthly savings.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EstimatedMonthlySavings) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EstimatedMonthlySavings) GoString() string {
	return s.String()
}

// SetCurrency sets the Currency field's value.
func (s *EstimatedMonthlySavings) SetCurrency(v string) *EstimatedMonthlySavings {
	s.Currency = &v
	return s
}

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

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

	// The IDs of the Amazon Web Services accounts for which to export Auto Scaling
	// group recommendations.
	//
	// If your account is the management account of an organization, use this parameter
	// to specify the member account for which you want to export recommendations.
	//
	// This parameter cannot be specified together with the include member accounts
	// parameter. The parameters are mutually exclusive.
	//
	// Recommendations for member accounts are not included in the export if this
	// parameter, or the include member accounts parameter, is omitted.
	//
	// You can specify multiple account IDs per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// The recommendations data to include in the export file. For more information
	// about the fields that can be exported, see Exported files (https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html#exported-files)
	// in the Compute Optimizer User Guide.
	FieldsToExport []*string `locationName:"fieldsToExport" type:"list" enum:"ExportableAutoScalingGroupField"`

	// The format of the export file.
	//
	// The only export file format currently supported is Csv.
	FileFormat *string `locationName:"fileFormat" type:"string" enum:"FileFormat"`

	// An array of objects to specify a filter that exports a more specific set
	// of Auto Scaling group recommendations.
	Filters []*Filter `locationName:"filters" type:"list"`

	// Indicates whether to include recommendations for resources in all member
	// accounts of the organization if your account is the management account of
	// an organization.
	//
	// The member accounts must also be opted in to Compute Optimizer, and trusted
	// access for Compute Optimizer must be enabled in the organization account.
	// For more information, see Compute Optimizer and Amazon Web Services Organizations
	// trusted access (https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#trusted-service-access)
	// in the Compute Optimizer User Guide.
	//
	// Recommendations for member accounts of the organization are not included
	// in the export file if this parameter is omitted.
	//
	// This parameter cannot be specified together with the account IDs parameter.
	// The parameters are mutually exclusive.
	//
	// Recommendations for member accounts are not included in the export if this
	// parameter, or the account IDs parameter, is omitted.
	IncludeMemberAccounts *bool `locationName:"includeMemberAccounts" type:"boolean"`

	// An object to specify the preferences for the Auto Scaling group recommendations
	// to export.
	RecommendationPreferences *RecommendationPreferences `locationName:"recommendationPreferences" type:"structure"`

	// An object to specify the destination Amazon Simple Storage Service (Amazon
	// S3) bucket name and key prefix for the export job.
	//
	// You must create the destination Amazon S3 bucket for your recommendations
	// export before you create the export job. Compute Optimizer does not create
	// the S3 bucket for you. After you create the S3 bucket, ensure that it has
	// the required permissions policy to allow Compute Optimizer to write the export
	// file to it. If you plan to specify an object prefix when you create the export
	// job, you must include the object prefix in the policy that you add to the
	// S3 bucket. For more information, see Amazon S3 Bucket Policy for Compute
	// Optimizer (https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html)
	// in the Compute Optimizer User Guide.
	//
	// S3DestinationConfig is a required field
	S3DestinationConfig *S3DestinationConfig `locationName:"s3DestinationConfig" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportAutoScalingGroupRecommendationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportAutoScalingGroupRecommendationsInput) GoString() string {
	return s.String()
}

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

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

// SetAccountIds sets the AccountIds field's value.
func (s *ExportAutoScalingGroupRecommendationsInput) SetAccountIds(v []*string) *ExportAutoScalingGroupRecommendationsInput {
	s.AccountIds = v
	return s
}

// SetFieldsToExport sets the FieldsToExport field's value.
func (s *ExportAutoScalingGroupRecommendationsInput) SetFieldsToExport(v []*string) *ExportAutoScalingGroupRecommendationsInput {
	s.FieldsToExport = v
	return s
}

// SetFileFormat sets the FileFormat field's value.
func (s *ExportAutoScalingGroupRecommendationsInput) SetFileFormat(v string) *ExportAutoScalingGroupRecommendationsInput {
	s.FileFormat = &v
	return s
}

// SetFilters sets the Filters field's value.
func (s *ExportAutoScalingGroupRecommendationsInput) SetFilters(v []*Filter) *ExportAutoScalingGroupRecommendationsInput {
	s.Filters = v
	return s
}

// SetIncludeMemberAccounts sets the IncludeMemberAccounts field's value.
func (s *ExportAutoScalingGroupRecommendationsInput) SetIncludeMemberAccounts(v bool) *ExportAutoScalingGroupRecommendationsInput {
	s.IncludeMemberAccounts = &v
	return s
}

// SetRecommendationPreferences sets the RecommendationPreferences field's value.
func (s *ExportAutoScalingGroupRecommendationsInput) SetRecommendationPreferences(v *RecommendationPreferences) *ExportAutoScalingGroupRecommendationsInput {
	s.RecommendationPreferences = v
	return s
}

// SetS3DestinationConfig sets the S3DestinationConfig field's value.
func (s *ExportAutoScalingGroupRecommendationsInput) SetS3DestinationConfig(v *S3DestinationConfig) *ExportAutoScalingGroupRecommendationsInput {
	s.S3DestinationConfig = v
	return s
}

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

	// The identification number of the export job.
	//
	// Use the DescribeRecommendationExportJobs action, and specify the job ID to
	// view the status of an export job.
	JobId *string `locationName:"jobId" type:"string"`

	// An object that describes the destination Amazon S3 bucket of a recommendations
	// export file.
	S3Destination *S3Destination `locationName:"s3Destination" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportAutoScalingGroupRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportAutoScalingGroupRecommendationsOutput) GoString() string {
	return s.String()
}

// SetJobId sets the JobId field's value.
func (s *ExportAutoScalingGroupRecommendationsOutput) SetJobId(v string) *ExportAutoScalingGroupRecommendationsOutput {
	s.JobId = &v
	return s
}

// SetS3Destination sets the S3Destination field's value.
func (s *ExportAutoScalingGroupRecommendationsOutput) SetS3Destination(v *S3Destination) *ExportAutoScalingGroupRecommendationsOutput {
	s.S3Destination = v
	return s
}

// Describes the destination of the recommendations export and metadata files.
type ExportDestination struct {
	_ struct{} `type:"structure"`

	// An object that describes the destination Amazon Simple Storage Service (Amazon
	// S3) bucket name and object keys of a recommendations export file, and its
	// associated metadata file.
	S3 *S3Destination `locationName:"s3" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportDestination) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportDestination) GoString() string {
	return s.String()
}

// SetS3 sets the S3 field's value.
func (s *ExportDestination) SetS3(v *S3Destination) *ExportDestination {
	s.S3 = v
	return s
}

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

	// The IDs of the Amazon Web Services accounts for which to export Amazon EBS
	// volume recommendations.
	//
	// If your account is the management account of an organization, use this parameter
	// to specify the member account for which you want to export recommendations.
	//
	// This parameter cannot be specified together with the include member accounts
	// parameter. The parameters are mutually exclusive.
	//
	// Recommendations for member accounts are not included in the export if this
	// parameter, or the include member accounts parameter, is omitted.
	//
	// You can specify multiple account IDs per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// The recommendations data to include in the export file. For more information
	// about the fields that can be exported, see Exported files (https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html#exported-files)
	// in the Compute Optimizer User Guide.
	FieldsToExport []*string `locationName:"fieldsToExport" type:"list" enum:"ExportableVolumeField"`

	// The format of the export file.
	//
	// The only export file format currently supported is Csv.
	FileFormat *string `locationName:"fileFormat" type:"string" enum:"FileFormat"`

	// An array of objects to specify a filter that exports a more specific set
	// of Amazon EBS volume recommendations.
	Filters []*EBSFilter `locationName:"filters" type:"list"`

	// Indicates whether to include recommendations for resources in all member
	// accounts of the organization if your account is the management account of
	// an organization.
	//
	// The member accounts must also be opted in to Compute Optimizer, and trusted
	// access for Compute Optimizer must be enabled in the organization account.
	// For more information, see Compute Optimizer and Amazon Web Services Organizations
	// trusted access (https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#trusted-service-access)
	// in the Compute Optimizer User Guide.
	//
	// Recommendations for member accounts of the organization are not included
	// in the export file if this parameter is omitted.
	//
	// This parameter cannot be specified together with the account IDs parameter.
	// The parameters are mutually exclusive.
	//
	// Recommendations for member accounts are not included in the export if this
	// parameter, or the account IDs parameter, is omitted.
	IncludeMemberAccounts *bool `locationName:"includeMemberAccounts" type:"boolean"`

	// Describes the destination Amazon Simple Storage Service (Amazon S3) bucket
	// name and key prefix for a recommendations export job.
	//
	// You must create the destination Amazon S3 bucket for your recommendations
	// export before you create the export job. Compute Optimizer does not create
	// the S3 bucket for you. After you create the S3 bucket, ensure that it has
	// the required permission policy to allow Compute Optimizer to write the export
	// file to it. If you plan to specify an object prefix when you create the export
	// job, you must include the object prefix in the policy that you add to the
	// S3 bucket. For more information, see Amazon S3 Bucket Policy for Compute
	// Optimizer (https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html)
	// in the Compute Optimizer User Guide.
	//
	// S3DestinationConfig is a required field
	S3DestinationConfig *S3DestinationConfig `locationName:"s3DestinationConfig" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportEBSVolumeRecommendationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportEBSVolumeRecommendationsInput) GoString() string {
	return s.String()
}

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

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

// SetAccountIds sets the AccountIds field's value.
func (s *ExportEBSVolumeRecommendationsInput) SetAccountIds(v []*string) *ExportEBSVolumeRecommendationsInput {
	s.AccountIds = v
	return s
}

// SetFieldsToExport sets the FieldsToExport field's value.
func (s *ExportEBSVolumeRecommendationsInput) SetFieldsToExport(v []*string) *ExportEBSVolumeRecommendationsInput {
	s.FieldsToExport = v
	return s
}

// SetFileFormat sets the FileFormat field's value.
func (s *ExportEBSVolumeRecommendationsInput) SetFileFormat(v string) *ExportEBSVolumeRecommendationsInput {
	s.FileFormat = &v
	return s
}

// SetFilters sets the Filters field's value.
func (s *ExportEBSVolumeRecommendationsInput) SetFilters(v []*EBSFilter) *ExportEBSVolumeRecommendationsInput {
	s.Filters = v
	return s
}

// SetIncludeMemberAccounts sets the IncludeMemberAccounts field's value.
func (s *ExportEBSVolumeRecommendationsInput) SetIncludeMemberAccounts(v bool) *ExportEBSVolumeRecommendationsInput {
	s.IncludeMemberAccounts = &v
	return s
}

// SetS3DestinationConfig sets the S3DestinationConfig field's value.
func (s *ExportEBSVolumeRecommendationsInput) SetS3DestinationConfig(v *S3DestinationConfig) *ExportEBSVolumeRecommendationsInput {
	s.S3DestinationConfig = v
	return s
}

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

	// The identification number of the export job.
	//
	// Use the DescribeRecommendationExportJobs action, and specify the job ID to
	// view the status of an export job.
	JobId *string `locationName:"jobId" type:"string"`

	// Describes the destination Amazon Simple Storage Service (Amazon S3) bucket
	// name and object keys of a recommendations export file, and its associated
	// metadata file.
	S3Destination *S3Destination `locationName:"s3Destination" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportEBSVolumeRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportEBSVolumeRecommendationsOutput) GoString() string {
	return s.String()
}

// SetJobId sets the JobId field's value.
func (s *ExportEBSVolumeRecommendationsOutput) SetJobId(v string) *ExportEBSVolumeRecommendationsOutput {
	s.JobId = &v
	return s
}

// SetS3Destination sets the S3Destination field's value.
func (s *ExportEBSVolumeRecommendationsOutput) SetS3Destination(v *S3Destination) *ExportEBSVolumeRecommendationsOutput {
	s.S3Destination = v
	return s
}

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

	// The IDs of the Amazon Web Services accounts for which to export instance
	// recommendations.
	//
	// If your account is the management account of an organization, use this parameter
	// to specify the member account for which you want to export recommendations.
	//
	// This parameter cannot be specified together with the include member accounts
	// parameter. The parameters are mutually exclusive.
	//
	// Recommendations for member accounts are not included in the export if this
	// parameter, or the include member accounts parameter, is omitted.
	//
	// You can specify multiple account IDs per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// The recommendations data to include in the export file. For more information
	// about the fields that can be exported, see Exported files (https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html#exported-files)
	// in the Compute Optimizer User Guide.
	FieldsToExport []*string `locationName:"fieldsToExport" type:"list" enum:"ExportableInstanceField"`

	// The format of the export file.
	//
	// The only export file format currently supported is Csv.
	FileFormat *string `locationName:"fileFormat" type:"string" enum:"FileFormat"`

	// An array of objects to specify a filter that exports a more specific set
	// of instance recommendations.
	Filters []*Filter `locationName:"filters" type:"list"`

	// Indicates whether to include recommendations for resources in all member
	// accounts of the organization if your account is the management account of
	// an organization.
	//
	// The member accounts must also be opted in to Compute Optimizer, and trusted
	// access for Compute Optimizer must be enabled in the organization account.
	// For more information, see Compute Optimizer and Amazon Web Services Organizations
	// trusted access (https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#trusted-service-access)
	// in the Compute Optimizer User Guide.
	//
	// Recommendations for member accounts of the organization are not included
	// in the export file if this parameter is omitted.
	//
	// Recommendations for member accounts are not included in the export if this
	// parameter, or the account IDs parameter, is omitted.
	IncludeMemberAccounts *bool `locationName:"includeMemberAccounts" type:"boolean"`

	// An object to specify the preferences for the Amazon EC2 instance recommendations
	// to export.
	RecommendationPreferences *RecommendationPreferences `locationName:"recommendationPreferences" type:"structure"`

	// An object to specify the destination Amazon Simple Storage Service (Amazon
	// S3) bucket name and key prefix for the export job.
	//
	// You must create the destination Amazon S3 bucket for your recommendations
	// export before you create the export job. Compute Optimizer does not create
	// the S3 bucket for you. After you create the S3 bucket, ensure that it has
	// the required permissions policy to allow Compute Optimizer to write the export
	// file to it. If you plan to specify an object prefix when you create the export
	// job, you must include the object prefix in the policy that you add to the
	// S3 bucket. For more information, see Amazon S3 Bucket Policy for Compute
	// Optimizer (https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html)
	// in the Compute Optimizer User Guide.
	//
	// S3DestinationConfig is a required field
	S3DestinationConfig *S3DestinationConfig `locationName:"s3DestinationConfig" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportEC2InstanceRecommendationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportEC2InstanceRecommendationsInput) GoString() string {
	return s.String()
}

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

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

// SetAccountIds sets the AccountIds field's value.
func (s *ExportEC2InstanceRecommendationsInput) SetAccountIds(v []*string) *ExportEC2InstanceRecommendationsInput {
	s.AccountIds = v
	return s
}

// SetFieldsToExport sets the FieldsToExport field's value.
func (s *ExportEC2InstanceRecommendationsInput) SetFieldsToExport(v []*string) *ExportEC2InstanceRecommendationsInput {
	s.FieldsToExport = v
	return s
}

// SetFileFormat sets the FileFormat field's value.
func (s *ExportEC2InstanceRecommendationsInput) SetFileFormat(v string) *ExportEC2InstanceRecommendationsInput {
	s.FileFormat = &v
	return s
}

// SetFilters sets the Filters field's value.
func (s *ExportEC2InstanceRecommendationsInput) SetFilters(v []*Filter) *ExportEC2InstanceRecommendationsInput {
	s.Filters = v
	return s
}

// SetIncludeMemberAccounts sets the IncludeMemberAccounts field's value.
func (s *ExportEC2InstanceRecommendationsInput) SetIncludeMemberAccounts(v bool) *ExportEC2InstanceRecommendationsInput {
	s.IncludeMemberAccounts = &v
	return s
}

// SetRecommendationPreferences sets the RecommendationPreferences field's value.
func (s *ExportEC2InstanceRecommendationsInput) SetRecommendationPreferences(v *RecommendationPreferences) *ExportEC2InstanceRecommendationsInput {
	s.RecommendationPreferences = v
	return s
}

// SetS3DestinationConfig sets the S3DestinationConfig field's value.
func (s *ExportEC2InstanceRecommendationsInput) SetS3DestinationConfig(v *S3DestinationConfig) *ExportEC2InstanceRecommendationsInput {
	s.S3DestinationConfig = v
	return s
}

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

	// The identification number of the export job.
	//
	// Use the DescribeRecommendationExportJobs action, and specify the job ID to
	// view the status of an export job.
	JobId *string `locationName:"jobId" type:"string"`

	// An object that describes the destination Amazon S3 bucket of a recommendations
	// export file.
	S3Destination *S3Destination `locationName:"s3Destination" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportEC2InstanceRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportEC2InstanceRecommendationsOutput) GoString() string {
	return s.String()
}

// SetJobId sets the JobId field's value.
func (s *ExportEC2InstanceRecommendationsOutput) SetJobId(v string) *ExportEC2InstanceRecommendationsOutput {
	s.JobId = &v
	return s
}

// SetS3Destination sets the S3Destination field's value.
func (s *ExportEC2InstanceRecommendationsOutput) SetS3Destination(v *S3Destination) *ExportEC2InstanceRecommendationsOutput {
	s.S3Destination = v
	return s
}

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

	// The Amazon Web Services account IDs for the export Amazon ECS service recommendations.
	//
	// If your account is the management account or the delegated administrator
	// of an organization, use this parameter to specify the member account you
	// want to export recommendations to.
	//
	// This parameter can't be specified together with the include member accounts
	// parameter. The parameters are mutually exclusive.
	//
	// If this parameter or the include member accounts parameter is omitted, the
	// recommendations for member accounts aren't included in the export.
	//
	// You can specify multiple account IDs per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// The recommendations data to include in the export file. For more information
	// about the fields that can be exported, see Exported files (https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html#exported-files)
	// in the Compute Optimizer User Guide.
	FieldsToExport []*string `locationName:"fieldsToExport" type:"list" enum:"ExportableECSServiceField"`

	// The format of the export file.
	//
	// The CSV file is the only export file format currently supported.
	FileFormat *string `locationName:"fileFormat" type:"string" enum:"FileFormat"`

	// An array of objects to specify a filter that exports a more specific set
	// of Amazon ECS service recommendations.
	Filters []*ECSServiceRecommendationFilter `locationName:"filters" type:"list"`

	// If your account is the management account or the delegated administrator
	// of an organization, this parameter indicates whether to include recommendations
	// for resources in all member accounts of the organization.
	//
	// The member accounts must also be opted in to Compute Optimizer, and trusted
	// access for Compute Optimizer must be enabled in the organization account.
	// For more information, see Compute Optimizer and Amazon Web Services Organizations
	// trusted access (https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#trusted-service-access)
	// in the Compute Optimizer User Guide.
	//
	// If this parameter is omitted, recommendations for member accounts of the
	// organization aren't included in the export file.
	//
	// If this parameter or the account ID parameter is omitted, recommendations
	// for member accounts aren't included in the export.
	IncludeMemberAccounts *bool `locationName:"includeMemberAccounts" type:"boolean"`

	// Describes the destination Amazon Simple Storage Service (Amazon S3) bucket
	// name and key prefix for a recommendations export job.
	//
	// You must create the destination Amazon S3 bucket for your recommendations
	// export before you create the export job. Compute Optimizer does not create
	// the S3 bucket for you. After you create the S3 bucket, ensure that it has
	// the required permission policy to allow Compute Optimizer to write the export
	// file to it. If you plan to specify an object prefix when you create the export
	// job, you must include the object prefix in the policy that you add to the
	// S3 bucket. For more information, see Amazon S3 Bucket Policy for Compute
	// Optimizer (https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html)
	// in the Compute Optimizer User Guide.
	//
	// S3DestinationConfig is a required field
	S3DestinationConfig *S3DestinationConfig `locationName:"s3DestinationConfig" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportECSServiceRecommendationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportECSServiceRecommendationsInput) GoString() string {
	return s.String()
}

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

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

// SetAccountIds sets the AccountIds field's value.
func (s *ExportECSServiceRecommendationsInput) SetAccountIds(v []*string) *ExportECSServiceRecommendationsInput {
	s.AccountIds = v
	return s
}

// SetFieldsToExport sets the FieldsToExport field's value.
func (s *ExportECSServiceRecommendationsInput) SetFieldsToExport(v []*string) *ExportECSServiceRecommendationsInput {
	s.FieldsToExport = v
	return s
}

// SetFileFormat sets the FileFormat field's value.
func (s *ExportECSServiceRecommendationsInput) SetFileFormat(v string) *ExportECSServiceRecommendationsInput {
	s.FileFormat = &v
	return s
}

// SetFilters sets the Filters field's value.
func (s *ExportECSServiceRecommendationsInput) SetFilters(v []*ECSServiceRecommendationFilter) *ExportECSServiceRecommendationsInput {
	s.Filters = v
	return s
}

// SetIncludeMemberAccounts sets the IncludeMemberAccounts field's value.
func (s *ExportECSServiceRecommendationsInput) SetIncludeMemberAccounts(v bool) *ExportECSServiceRecommendationsInput {
	s.IncludeMemberAccounts = &v
	return s
}

// SetS3DestinationConfig sets the S3DestinationConfig field's value.
func (s *ExportECSServiceRecommendationsInput) SetS3DestinationConfig(v *S3DestinationConfig) *ExportECSServiceRecommendationsInput {
	s.S3DestinationConfig = v
	return s
}

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

	// The identification number of the export job.
	//
	// To view the status of an export job, use the DescribeRecommendationExportJobs
	// action and specify the job ID.
	JobId *string `locationName:"jobId" type:"string"`

	// Describes the destination Amazon Simple Storage Service (Amazon S3) bucket
	// name and object keys of a recommendations export file, and its associated
	// metadata file.
	S3Destination *S3Destination `locationName:"s3Destination" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportECSServiceRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportECSServiceRecommendationsOutput) GoString() string {
	return s.String()
}

// SetJobId sets the JobId field's value.
func (s *ExportECSServiceRecommendationsOutput) SetJobId(v string) *ExportECSServiceRecommendationsOutput {
	s.JobId = &v
	return s
}

// SetS3Destination sets the S3Destination field's value.
func (s *ExportECSServiceRecommendationsOutput) SetS3Destination(v *S3Destination) *ExportECSServiceRecommendationsOutput {
	s.S3Destination = v
	return s
}

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

	// The IDs of the Amazon Web Services accounts for which to export Lambda function
	// recommendations.
	//
	// If your account is the management account of an organization, use this parameter
	// to specify the member account for which you want to export recommendations.
	//
	// This parameter cannot be specified together with the include member accounts
	// parameter. The parameters are mutually exclusive.
	//
	// Recommendations for member accounts are not included in the export if this
	// parameter, or the include member accounts parameter, is omitted.
	//
	// You can specify multiple account IDs per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// The recommendations data to include in the export file. For more information
	// about the fields that can be exported, see Exported files (https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html#exported-files)
	// in the Compute Optimizer User Guide.
	FieldsToExport []*string `locationName:"fieldsToExport" type:"list" enum:"ExportableLambdaFunctionField"`

	// The format of the export file.
	//
	// The only export file format currently supported is Csv.
	FileFormat *string `locationName:"fileFormat" type:"string" enum:"FileFormat"`

	// An array of objects to specify a filter that exports a more specific set
	// of Lambda function recommendations.
	Filters []*LambdaFunctionRecommendationFilter `locationName:"filters" type:"list"`

	// Indicates whether to include recommendations for resources in all member
	// accounts of the organization if your account is the management account of
	// an organization.
	//
	// The member accounts must also be opted in to Compute Optimizer, and trusted
	// access for Compute Optimizer must be enabled in the organization account.
	// For more information, see Compute Optimizer and Amazon Web Services Organizations
	// trusted access (https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#trusted-service-access)
	// in the Compute Optimizer User Guide.
	//
	// Recommendations for member accounts of the organization are not included
	// in the export file if this parameter is omitted.
	//
	// This parameter cannot be specified together with the account IDs parameter.
	// The parameters are mutually exclusive.
	//
	// Recommendations for member accounts are not included in the export if this
	// parameter, or the account IDs parameter, is omitted.
	IncludeMemberAccounts *bool `locationName:"includeMemberAccounts" type:"boolean"`

	// Describes the destination Amazon Simple Storage Service (Amazon S3) bucket
	// name and key prefix for a recommendations export job.
	//
	// You must create the destination Amazon S3 bucket for your recommendations
	// export before you create the export job. Compute Optimizer does not create
	// the S3 bucket for you. After you create the S3 bucket, ensure that it has
	// the required permission policy to allow Compute Optimizer to write the export
	// file to it. If you plan to specify an object prefix when you create the export
	// job, you must include the object prefix in the policy that you add to the
	// S3 bucket. For more information, see Amazon S3 Bucket Policy for Compute
	// Optimizer (https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html)
	// in the Compute Optimizer User Guide.
	//
	// S3DestinationConfig is a required field
	S3DestinationConfig *S3DestinationConfig `locationName:"s3DestinationConfig" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportLambdaFunctionRecommendationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportLambdaFunctionRecommendationsInput) GoString() string {
	return s.String()
}

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

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

// SetAccountIds sets the AccountIds field's value.
func (s *ExportLambdaFunctionRecommendationsInput) SetAccountIds(v []*string) *ExportLambdaFunctionRecommendationsInput {
	s.AccountIds = v
	return s
}

// SetFieldsToExport sets the FieldsToExport field's value.
func (s *ExportLambdaFunctionRecommendationsInput) SetFieldsToExport(v []*string) *ExportLambdaFunctionRecommendationsInput {
	s.FieldsToExport = v
	return s
}

// SetFileFormat sets the FileFormat field's value.
func (s *ExportLambdaFunctionRecommendationsInput) SetFileFormat(v string) *ExportLambdaFunctionRecommendationsInput {
	s.FileFormat = &v
	return s
}

// SetFilters sets the Filters field's value.
func (s *ExportLambdaFunctionRecommendationsInput) SetFilters(v []*LambdaFunctionRecommendationFilter) *ExportLambdaFunctionRecommendationsInput {
	s.Filters = v
	return s
}

// SetIncludeMemberAccounts sets the IncludeMemberAccounts field's value.
func (s *ExportLambdaFunctionRecommendationsInput) SetIncludeMemberAccounts(v bool) *ExportLambdaFunctionRecommendationsInput {
	s.IncludeMemberAccounts = &v
	return s
}

// SetS3DestinationConfig sets the S3DestinationConfig field's value.
func (s *ExportLambdaFunctionRecommendationsInput) SetS3DestinationConfig(v *S3DestinationConfig) *ExportLambdaFunctionRecommendationsInput {
	s.S3DestinationConfig = v
	return s
}

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

	// The identification number of the export job.
	//
	// Use the DescribeRecommendationExportJobs action, and specify the job ID to
	// view the status of an export job.
	JobId *string `locationName:"jobId" type:"string"`

	// Describes the destination Amazon Simple Storage Service (Amazon S3) bucket
	// name and object keys of a recommendations export file, and its associated
	// metadata file.
	S3Destination *S3Destination `locationName:"s3Destination" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportLambdaFunctionRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportLambdaFunctionRecommendationsOutput) GoString() string {
	return s.String()
}

// SetJobId sets the JobId field's value.
func (s *ExportLambdaFunctionRecommendationsOutput) SetJobId(v string) *ExportLambdaFunctionRecommendationsOutput {
	s.JobId = &v
	return s
}

// SetS3Destination sets the S3Destination field's value.
func (s *ExportLambdaFunctionRecommendationsOutput) SetS3Destination(v *S3Destination) *ExportLambdaFunctionRecommendationsOutput {
	s.S3Destination = v
	return s
}

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

	// The IDs of the Amazon Web Services accounts for which to export license recommendations.
	//
	// If your account is the management account of an organization, use this parameter
	// to specify the member account for which you want to export recommendations.
	//
	// This parameter can't be specified together with the include member accounts
	// parameter. The parameters are mutually exclusive.
	//
	// If this parameter is omitted, recommendations for member accounts aren't
	// included in the export.
	//
	// You can specify multiple account IDs per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// The recommendations data to include in the export file. For more information
	// about the fields that can be exported, see Exported files (https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html#exported-files)
	// in the Compute Optimizer User Guide.
	FieldsToExport []*string `locationName:"fieldsToExport" type:"list" enum:"ExportableLicenseField"`

	// The format of the export file.
	//
	// A CSV file is the only export format currently supported.
	FileFormat *string `locationName:"fileFormat" type:"string" enum:"FileFormat"`

	// An array of objects to specify a filter that exports a more specific set
	// of license recommendations.
	Filters []*LicenseRecommendationFilter `locationName:"filters" type:"list"`

	// Indicates whether to include recommendations for resources in all member
	// accounts of the organization if your account is the management account of
	// an organization.
	//
	// The member accounts must also be opted in to Compute Optimizer, and trusted
	// access for Compute Optimizer must be enabled in the organization account.
	// For more information, see Compute Optimizer and Amazon Web Services Organizations
	// trusted access (https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#trusted-service-access)
	// in the Compute Optimizer User Guide.
	//
	// If this parameter is omitted, recommendations for member accounts of the
	// organization aren't included in the export file .
	//
	// This parameter cannot be specified together with the account IDs parameter.
	// The parameters are mutually exclusive.
	IncludeMemberAccounts *bool `locationName:"includeMemberAccounts" type:"boolean"`

	// Describes the destination Amazon Simple Storage Service (Amazon S3) bucket
	// name and key prefix for a recommendations export job.
	//
	// You must create the destination Amazon S3 bucket for your recommendations
	// export before you create the export job. Compute Optimizer does not create
	// the S3 bucket for you. After you create the S3 bucket, ensure that it has
	// the required permission policy to allow Compute Optimizer to write the export
	// file to it. If you plan to specify an object prefix when you create the export
	// job, you must include the object prefix in the policy that you add to the
	// S3 bucket. For more information, see Amazon S3 Bucket Policy for Compute
	// Optimizer (https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html)
	// in the Compute Optimizer User Guide.
	//
	// S3DestinationConfig is a required field
	S3DestinationConfig *S3DestinationConfig `locationName:"s3DestinationConfig" type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportLicenseRecommendationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportLicenseRecommendationsInput) GoString() string {
	return s.String()
}

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

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

// SetAccountIds sets the AccountIds field's value.
func (s *ExportLicenseRecommendationsInput) SetAccountIds(v []*string) *ExportLicenseRecommendationsInput {
	s.AccountIds = v
	return s
}

// SetFieldsToExport sets the FieldsToExport field's value.
func (s *ExportLicenseRecommendationsInput) SetFieldsToExport(v []*string) *ExportLicenseRecommendationsInput {
	s.FieldsToExport = v
	return s
}

// SetFileFormat sets the FileFormat field's value.
func (s *ExportLicenseRecommendationsInput) SetFileFormat(v string) *ExportLicenseRecommendationsInput {
	s.FileFormat = &v
	return s
}

// SetFilters sets the Filters field's value.
func (s *ExportLicenseRecommendationsInput) SetFilters(v []*LicenseRecommendationFilter) *ExportLicenseRecommendationsInput {
	s.Filters = v
	return s
}

// SetIncludeMemberAccounts sets the IncludeMemberAccounts field's value.
func (s *ExportLicenseRecommendationsInput) SetIncludeMemberAccounts(v bool) *ExportLicenseRecommendationsInput {
	s.IncludeMemberAccounts = &v
	return s
}

// SetS3DestinationConfig sets the S3DestinationConfig field's value.
func (s *ExportLicenseRecommendationsInput) SetS3DestinationConfig(v *S3DestinationConfig) *ExportLicenseRecommendationsInput {
	s.S3DestinationConfig = v
	return s
}

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

	// The identification number of the export job.
	//
	// To view the status of an export job, use the DescribeRecommendationExportJobs
	// action and specify the job ID.
	JobId *string `locationName:"jobId" type:"string"`

	// Describes the destination Amazon Simple Storage Service (Amazon S3) bucket
	// name and object keys of a recommendations export file, and its associated
	// metadata file.
	S3Destination *S3Destination `locationName:"s3Destination" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportLicenseRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExportLicenseRecommendationsOutput) GoString() string {
	return s.String()
}

// SetJobId sets the JobId field's value.
func (s *ExportLicenseRecommendationsOutput) SetJobId(v string) *ExportLicenseRecommendationsOutput {
	s.JobId = &v
	return s
}

// SetS3Destination sets the S3Destination field's value.
func (s *ExportLicenseRecommendationsOutput) SetS3Destination(v *S3Destination) *ExportLicenseRecommendationsOutput {
	s.S3Destination = v
	return s
}

// Describes Compute Optimizer's integration status with your chosen external
// metric provider. For example, Datadog.
type ExternalMetricStatus struct {
	_ struct{} `type:"structure"`

	// The status code for Compute Optimizer's integration with an external metrics
	// provider.
	StatusCode *string `locationName:"statusCode" type:"string" enum:"ExternalMetricStatusCode"`

	// The reason for Compute Optimizer's integration status with your external
	// metric provider.
	StatusReason *string `locationName:"statusReason" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExternalMetricStatus) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExternalMetricStatus) GoString() string {
	return s.String()
}

// SetStatusCode sets the StatusCode field's value.
func (s *ExternalMetricStatus) SetStatusCode(v string) *ExternalMetricStatus {
	s.StatusCode = &v
	return s
}

// SetStatusReason sets the StatusReason field's value.
func (s *ExternalMetricStatus) SetStatusReason(v string) *ExternalMetricStatus {
	s.StatusReason = &v
	return s
}

// Describes the external metrics preferences for EC2 rightsizing recommendations.
type ExternalMetricsPreference struct {
	_ struct{} `type:"structure"`

	// Contains the source options for external metrics preferences.
	Source *string `locationName:"source" type:"string" enum:"ExternalMetricsSource"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExternalMetricsPreference) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ExternalMetricsPreference) GoString() string {
	return s.String()
}

// SetSource sets the Source field's value.
func (s *ExternalMetricsPreference) SetSource(v string) *ExternalMetricsPreference {
	s.Source = &v
	return s
}

// Describes a filter that returns a more specific list of recommendations.
// Use this filter with the GetAutoScalingGroupRecommendations and GetEC2InstanceRecommendations
// actions.
//
// You can use EBSFilter with the GetEBSVolumeRecommendations action, LambdaFunctionRecommendationFilter
// with the GetLambdaFunctionRecommendations action, and JobFilter with the
// DescribeRecommendationExportJobs action.
type Filter struct {
	_ struct{} `type:"structure"`

	// The name of the filter.
	//
	// Specify Finding to return recommendations with a specific finding classification.
	// For example, Underprovisioned.
	//
	// Specify RecommendationSourceType to return recommendations of a specific
	// resource type. For example, Ec2Instance.
	//
	// Specify FindingReasonCodes to return recommendations with a specific finding
	// reason code. For example, CPUUnderprovisioned.
	//
	// Specify InferredWorkloadTypes to return recommendations of a specific inferred
	// workload. For example, Redis.
	//
	// You can filter your EC2 instance recommendations by tag:key and tag-key tags.
	//
	// A tag:key is a key and value combination of a tag assigned to your recommendations.
	// Use the tag key in the filter name and the tag value as the filter value.
	// For example, to find all recommendations that have a tag with the key of
	// Owner and the value of TeamA, specify tag:Owner for the filter name and TeamA
	// for the filter value.
	//
	// A tag-key is the key of a tag assigned to your recommendations. Use this
	// filter to find all of your recommendations that have a tag with a specific
	// key. This doesn’t consider the tag value. For example, you can find your
	// recommendations with a tag key value of Owner or without any tag keys assigned.
	Name *string `locationName:"name" type:"string" enum:"FilterName"`

	// The value of the filter.
	//
	// The valid values for this parameter are as follows, depending on what you
	// specify for the name parameter and the resource type that you wish to filter
	// results for:
	//
	//    * Specify Optimized or NotOptimized if you specify the name parameter
	//    as Finding and you want to filter results for Auto Scaling groups.
	//
	//    * Specify Underprovisioned, Overprovisioned, or Optimized if you specify
	//    the name parameter as Finding and you want to filter results for EC2 instances.
	//
	//    * Specify Ec2Instance or AutoScalingGroup if you specify the name parameter
	//    as RecommendationSourceType.
	//
	//    * Specify one of the following options if you specify the name parameter
	//    as FindingReasonCodes: CPUOverprovisioned — The instance’s CPU configuration
	//    can be sized down while still meeting the performance requirements of
	//    your workload. CPUUnderprovisioned — The instance’s CPU configuration
	//    doesn't meet the performance requirements of your workload and there is
	//    an alternative instance type that provides better CPU performance. MemoryOverprovisioned
	//    — The instance’s memory configuration can be sized down while still
	//    meeting the performance requirements of your workload. MemoryUnderprovisioned
	//    — The instance’s memory configuration doesn't meet the performance
	//    requirements of your workload and there is an alternative instance type
	//    that provides better memory performance. EBSThroughputOverprovisioned
	//    — The instance’s EBS throughput configuration can be sized down while
	//    still meeting the performance requirements of your workload. EBSThroughputUnderprovisioned
	//    — The instance’s EBS throughput configuration doesn't meet the performance
	//    requirements of your workload and there is an alternative instance type
	//    that provides better EBS throughput performance. EBSIOPSOverprovisioned
	//    — The instance’s EBS IOPS configuration can be sized down while still
	//    meeting the performance requirements of your workload. EBSIOPSUnderprovisioned
	//    — The instance’s EBS IOPS configuration doesn't meet the performance
	//    requirements of your workload and there is an alternative instance type
	//    that provides better EBS IOPS performance. NetworkBandwidthOverprovisioned
	//    — The instance’s network bandwidth configuration can be sized down
	//    while still meeting the performance requirements of your workload. NetworkBandwidthUnderprovisioned
	//    — The instance’s network bandwidth configuration doesn't meet the
	//    performance requirements of your workload and there is an alternative
	//    instance type that provides better network bandwidth performance. This
	//    finding reason happens when the NetworkIn or NetworkOut performance of
	//    an instance is impacted. NetworkPPSOverprovisioned — The instance’s
	//    network PPS (packets per second) configuration can be sized down while
	//    still meeting the performance requirements of your workload. NetworkPPSUnderprovisioned
	//    — The instance’s network PPS (packets per second) configuration doesn't
	//    meet the performance requirements of your workload and there is an alternative
	//    instance type that provides better network PPS performance. DiskIOPSOverprovisioned
	//    — The instance’s disk IOPS configuration can be sized down while still
	//    meeting the performance requirements of your workload. DiskIOPSUnderprovisioned
	//    — The instance’s disk IOPS configuration doesn't meet the performance
	//    requirements of your workload and there is an alternative instance type
	//    that provides better disk IOPS performance. DiskThroughputOverprovisioned
	//    — The instance’s disk throughput configuration can be sized down while
	//    still meeting the performance requirements of your workload. DiskThroughputUnderprovisioned
	//    — The instance’s disk throughput configuration doesn't meet the performance
	//    requirements of your workload and there is an alternative instance type
	//    that provides better disk throughput performance.
	Values []*string `locationName:"values" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Filter) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Filter) GoString() string {
	return s.String()
}

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

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

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

	// The ID of the Amazon Web Services account for which to return Auto Scaling
	// group recommendations.
	//
	// If your account is the management account of an organization, use this parameter
	// to specify the member account for which you want to return Auto Scaling group
	// recommendations.
	//
	// Only one account ID can be specified per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// The Amazon Resource Name (ARN) of the Auto Scaling groups for which to return
	// recommendations.
	AutoScalingGroupArns []*string `locationName:"autoScalingGroupArns" type:"list"`

	// An array of objects to specify a filter that returns a more specific list
	// of Auto Scaling group recommendations.
	Filters []*Filter `locationName:"filters" type:"list"`

	// The maximum number of Auto Scaling group recommendations to return with a
	// single request.
	//
	// To retrieve the remaining results, make another request with the returned
	// nextToken value.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The token to advance to the next page of Auto Scaling group recommendations.
	NextToken *string `locationName:"nextToken" type:"string"`

	// An object to specify the preferences for the Auto Scaling group recommendations
	// to return in the response.
	RecommendationPreferences *RecommendationPreferences `locationName:"recommendationPreferences" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetAutoScalingGroupRecommendationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetAutoScalingGroupRecommendationsInput) GoString() string {
	return s.String()
}

// SetAccountIds sets the AccountIds field's value.
func (s *GetAutoScalingGroupRecommendationsInput) SetAccountIds(v []*string) *GetAutoScalingGroupRecommendationsInput {
	s.AccountIds = v
	return s
}

// SetAutoScalingGroupArns sets the AutoScalingGroupArns field's value.
func (s *GetAutoScalingGroupRecommendationsInput) SetAutoScalingGroupArns(v []*string) *GetAutoScalingGroupRecommendationsInput {
	s.AutoScalingGroupArns = v
	return s
}

// SetFilters sets the Filters field's value.
func (s *GetAutoScalingGroupRecommendationsInput) SetFilters(v []*Filter) *GetAutoScalingGroupRecommendationsInput {
	s.Filters = v
	return s
}

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

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

// SetRecommendationPreferences sets the RecommendationPreferences field's value.
func (s *GetAutoScalingGroupRecommendationsInput) SetRecommendationPreferences(v *RecommendationPreferences) *GetAutoScalingGroupRecommendationsInput {
	s.RecommendationPreferences = v
	return s
}

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

	// An array of objects that describe Auto Scaling group recommendations.
	AutoScalingGroupRecommendations []*AutoScalingGroupRecommendation `locationName:"autoScalingGroupRecommendations" type:"list"`

	// An array of objects that describe errors of the request.
	//
	// For example, an error is returned if you request recommendations for an unsupported
	// Auto Scaling group.
	Errors []*GetRecommendationError `locationName:"errors" type:"list"`

	// The token to use to advance to the next page of Auto Scaling group recommendations.
	//
	// This value is null when there are no more pages of Auto Scaling group recommendations
	// to return.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetAutoScalingGroupRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetAutoScalingGroupRecommendationsOutput) GoString() string {
	return s.String()
}

// SetAutoScalingGroupRecommendations sets the AutoScalingGroupRecommendations field's value.
func (s *GetAutoScalingGroupRecommendationsOutput) SetAutoScalingGroupRecommendations(v []*AutoScalingGroupRecommendation) *GetAutoScalingGroupRecommendationsOutput {
	s.AutoScalingGroupRecommendations = v
	return s
}

// SetErrors sets the Errors field's value.
func (s *GetAutoScalingGroupRecommendationsOutput) SetErrors(v []*GetRecommendationError) *GetAutoScalingGroupRecommendationsOutput {
	s.Errors = v
	return s
}

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

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

	// The ID of the Amazon Web Services account for which to return volume recommendations.
	//
	// If your account is the management account of an organization, use this parameter
	// to specify the member account for which you want to return volume recommendations.
	//
	// Only one account ID can be specified per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// An array of objects to specify a filter that returns a more specific list
	// of volume recommendations.
	Filters []*EBSFilter `locationName:"filters" type:"list"`

	// The maximum number of volume recommendations to return with a single request.
	//
	// To retrieve the remaining results, make another request with the returned
	// nextToken value.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The token to advance to the next page of volume recommendations.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The Amazon Resource Name (ARN) of the volumes for which to return recommendations.
	VolumeArns []*string `locationName:"volumeArns" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEBSVolumeRecommendationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEBSVolumeRecommendationsInput) GoString() string {
	return s.String()
}

// SetAccountIds sets the AccountIds field's value.
func (s *GetEBSVolumeRecommendationsInput) SetAccountIds(v []*string) *GetEBSVolumeRecommendationsInput {
	s.AccountIds = v
	return s
}

// SetFilters sets the Filters field's value.
func (s *GetEBSVolumeRecommendationsInput) SetFilters(v []*EBSFilter) *GetEBSVolumeRecommendationsInput {
	s.Filters = v
	return s
}

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

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

// SetVolumeArns sets the VolumeArns field's value.
func (s *GetEBSVolumeRecommendationsInput) SetVolumeArns(v []*string) *GetEBSVolumeRecommendationsInput {
	s.VolumeArns = v
	return s
}

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

	// An array of objects that describe errors of the request.
	//
	// For example, an error is returned if you request recommendations for an unsupported
	// volume.
	Errors []*GetRecommendationError `locationName:"errors" type:"list"`

	// The token to use to advance to the next page of volume recommendations.
	//
	// This value is null when there are no more pages of volume recommendations
	// to return.
	NextToken *string `locationName:"nextToken" type:"string"`

	// An array of objects that describe volume recommendations.
	VolumeRecommendations []*VolumeRecommendation `locationName:"volumeRecommendations" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEBSVolumeRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEBSVolumeRecommendationsOutput) GoString() string {
	return s.String()
}

// SetErrors sets the Errors field's value.
func (s *GetEBSVolumeRecommendationsOutput) SetErrors(v []*GetRecommendationError) *GetEBSVolumeRecommendationsOutput {
	s.Errors = v
	return s
}

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

// SetVolumeRecommendations sets the VolumeRecommendations field's value.
func (s *GetEBSVolumeRecommendationsOutput) SetVolumeRecommendations(v []*VolumeRecommendation) *GetEBSVolumeRecommendationsOutput {
	s.VolumeRecommendations = v
	return s
}

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

	// The ID of the Amazon Web Services account for which to return instance recommendations.
	//
	// If your account is the management account of an organization, use this parameter
	// to specify the member account for which you want to return instance recommendations.
	//
	// Only one account ID can be specified per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// An array of objects to specify a filter that returns a more specific list
	// of instance recommendations.
	Filters []*Filter `locationName:"filters" type:"list"`

	// The Amazon Resource Name (ARN) of the instances for which to return recommendations.
	InstanceArns []*string `locationName:"instanceArns" type:"list"`

	// The maximum number of instance recommendations to return with a single request.
	//
	// To retrieve the remaining results, make another request with the returned
	// nextToken value.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The token to advance to the next page of instance recommendations.
	NextToken *string `locationName:"nextToken" type:"string"`

	// An object to specify the preferences for the Amazon EC2 instance recommendations
	// to return in the response.
	RecommendationPreferences *RecommendationPreferences `locationName:"recommendationPreferences" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEC2InstanceRecommendationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEC2InstanceRecommendationsInput) GoString() string {
	return s.String()
}

// SetAccountIds sets the AccountIds field's value.
func (s *GetEC2InstanceRecommendationsInput) SetAccountIds(v []*string) *GetEC2InstanceRecommendationsInput {
	s.AccountIds = v
	return s
}

// SetFilters sets the Filters field's value.
func (s *GetEC2InstanceRecommendationsInput) SetFilters(v []*Filter) *GetEC2InstanceRecommendationsInput {
	s.Filters = v
	return s
}

// SetInstanceArns sets the InstanceArns field's value.
func (s *GetEC2InstanceRecommendationsInput) SetInstanceArns(v []*string) *GetEC2InstanceRecommendationsInput {
	s.InstanceArns = v
	return s
}

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

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

// SetRecommendationPreferences sets the RecommendationPreferences field's value.
func (s *GetEC2InstanceRecommendationsInput) SetRecommendationPreferences(v *RecommendationPreferences) *GetEC2InstanceRecommendationsInput {
	s.RecommendationPreferences = v
	return s
}

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

	// An array of objects that describe errors of the request.
	//
	// For example, an error is returned if you request recommendations for an instance
	// of an unsupported instance family.
	Errors []*GetRecommendationError `locationName:"errors" type:"list"`

	// An array of objects that describe instance recommendations.
	InstanceRecommendations []*InstanceRecommendation `locationName:"instanceRecommendations" type:"list"`

	// The token to use to advance to the next page of instance recommendations.
	//
	// This value is null when there are no more pages of instance recommendations
	// to return.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEC2InstanceRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEC2InstanceRecommendationsOutput) GoString() string {
	return s.String()
}

// SetErrors sets the Errors field's value.
func (s *GetEC2InstanceRecommendationsOutput) SetErrors(v []*GetRecommendationError) *GetEC2InstanceRecommendationsOutput {
	s.Errors = v
	return s
}

// SetInstanceRecommendations sets the InstanceRecommendations field's value.
func (s *GetEC2InstanceRecommendationsOutput) SetInstanceRecommendations(v []*InstanceRecommendation) *GetEC2InstanceRecommendationsOutput {
	s.InstanceRecommendations = v
	return s
}

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

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

	// The timestamp of the last projected metrics data point to return.
	//
	// EndTime is a required field
	EndTime *time.Time `locationName:"endTime" type:"timestamp" required:"true"`

	// The Amazon Resource Name (ARN) of the instances for which to return recommendation
	// projected metrics.
	//
	// InstanceArn is a required field
	InstanceArn *string `locationName:"instanceArn" type:"string" required:"true"`

	// The granularity, in seconds, of the projected metrics data points.
	//
	// Period is a required field
	Period *int64 `locationName:"period" type:"integer" required:"true"`

	// An object to specify the preferences for the Amazon EC2 recommendation projected
	// metrics to return in the response.
	RecommendationPreferences *RecommendationPreferences `locationName:"recommendationPreferences" type:"structure"`

	// The timestamp of the first projected metrics data point to return.
	//
	// StartTime is a required field
	StartTime *time.Time `locationName:"startTime" type:"timestamp" required:"true"`

	// The statistic of the projected metrics.
	//
	// Stat is a required field
	Stat *string `locationName:"stat" type:"string" required:"true" enum:"MetricStatistic"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEC2RecommendationProjectedMetricsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEC2RecommendationProjectedMetricsInput) GoString() string {
	return s.String()
}

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

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

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

// SetInstanceArn sets the InstanceArn field's value.
func (s *GetEC2RecommendationProjectedMetricsInput) SetInstanceArn(v string) *GetEC2RecommendationProjectedMetricsInput {
	s.InstanceArn = &v
	return s
}

// SetPeriod sets the Period field's value.
func (s *GetEC2RecommendationProjectedMetricsInput) SetPeriod(v int64) *GetEC2RecommendationProjectedMetricsInput {
	s.Period = &v
	return s
}

// SetRecommendationPreferences sets the RecommendationPreferences field's value.
func (s *GetEC2RecommendationProjectedMetricsInput) SetRecommendationPreferences(v *RecommendationPreferences) *GetEC2RecommendationProjectedMetricsInput {
	s.RecommendationPreferences = v
	return s
}

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

// SetStat sets the Stat field's value.
func (s *GetEC2RecommendationProjectedMetricsInput) SetStat(v string) *GetEC2RecommendationProjectedMetricsInput {
	s.Stat = &v
	return s
}

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

	// An array of objects that describes projected metrics.
	RecommendedOptionProjectedMetrics []*RecommendedOptionProjectedMetric `locationName:"recommendedOptionProjectedMetrics" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEC2RecommendationProjectedMetricsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEC2RecommendationProjectedMetricsOutput) GoString() string {
	return s.String()
}

// SetRecommendedOptionProjectedMetrics sets the RecommendedOptionProjectedMetrics field's value.
func (s *GetEC2RecommendationProjectedMetricsOutput) SetRecommendedOptionProjectedMetrics(v []*RecommendedOptionProjectedMetric) *GetEC2RecommendationProjectedMetricsOutput {
	s.RecommendedOptionProjectedMetrics = v
	return s
}

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

	// The timestamp of the last projected metrics data point to return.
	//
	// EndTime is a required field
	EndTime *time.Time `locationName:"endTime" type:"timestamp" required:"true"`

	// The granularity, in seconds, of the projected metrics data points.
	//
	// Period is a required field
	Period *int64 `locationName:"period" type:"integer" required:"true"`

	// The ARN that identifies the Amazon ECS service.
	//
	// The following is the format of the ARN:
	//
	// arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name
	//
	// ServiceArn is a required field
	ServiceArn *string `locationName:"serviceArn" type:"string" required:"true"`

	// The timestamp of the first projected metrics data point to return.
	//
	// StartTime is a required field
	StartTime *time.Time `locationName:"startTime" type:"timestamp" required:"true"`

	// The statistic of the projected metrics.
	//
	// Stat is a required field
	Stat *string `locationName:"stat" type:"string" required:"true" enum:"MetricStatistic"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetECSServiceRecommendationProjectedMetricsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetECSServiceRecommendationProjectedMetricsInput) GoString() string {
	return s.String()
}

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

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

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

// SetPeriod sets the Period field's value.
func (s *GetECSServiceRecommendationProjectedMetricsInput) SetPeriod(v int64) *GetECSServiceRecommendationProjectedMetricsInput {
	s.Period = &v
	return s
}

// SetServiceArn sets the ServiceArn field's value.
func (s *GetECSServiceRecommendationProjectedMetricsInput) SetServiceArn(v string) *GetECSServiceRecommendationProjectedMetricsInput {
	s.ServiceArn = &v
	return s
}

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

// SetStat sets the Stat field's value.
func (s *GetECSServiceRecommendationProjectedMetricsInput) SetStat(v string) *GetECSServiceRecommendationProjectedMetricsInput {
	s.Stat = &v
	return s
}

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

	// An array of objects that describes the projected metrics.
	RecommendedOptionProjectedMetrics []*ECSServiceRecommendedOptionProjectedMetric `locationName:"recommendedOptionProjectedMetrics" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetECSServiceRecommendationProjectedMetricsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetECSServiceRecommendationProjectedMetricsOutput) GoString() string {
	return s.String()
}

// SetRecommendedOptionProjectedMetrics sets the RecommendedOptionProjectedMetrics field's value.
func (s *GetECSServiceRecommendationProjectedMetricsOutput) SetRecommendedOptionProjectedMetrics(v []*ECSServiceRecommendedOptionProjectedMetric) *GetECSServiceRecommendationProjectedMetricsOutput {
	s.RecommendedOptionProjectedMetrics = v
	return s
}

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

	// Return the Amazon ECS service recommendations to the specified Amazon Web
	// Services account IDs.
	//
	// If your account is the management account or the delegated administrator
	// of an organization, use this parameter to return the Amazon ECS service recommendations
	// to specific member accounts.
	//
	// You can only specify one account ID per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// An array of objects to specify a filter that returns a more specific list
	// of Amazon ECS service recommendations.
	Filters []*ECSServiceRecommendationFilter `locationName:"filters" type:"list"`

	// The maximum number of Amazon ECS service recommendations to return with a
	// single request.
	//
	// To retrieve the remaining results, make another request with the returned
	// nextToken value.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The token to advance to the next page of Amazon ECS service recommendations.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The ARN that identifies the Amazon ECS service.
	//
	// The following is the format of the ARN:
	//
	// arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name
	ServiceArns []*string `locationName:"serviceArns" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetECSServiceRecommendationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetECSServiceRecommendationsInput) GoString() string {
	return s.String()
}

// SetAccountIds sets the AccountIds field's value.
func (s *GetECSServiceRecommendationsInput) SetAccountIds(v []*string) *GetECSServiceRecommendationsInput {
	s.AccountIds = v
	return s
}

// SetFilters sets the Filters field's value.
func (s *GetECSServiceRecommendationsInput) SetFilters(v []*ECSServiceRecommendationFilter) *GetECSServiceRecommendationsInput {
	s.Filters = v
	return s
}

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

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

// SetServiceArns sets the ServiceArns field's value.
func (s *GetECSServiceRecommendationsInput) SetServiceArns(v []*string) *GetECSServiceRecommendationsInput {
	s.ServiceArns = v
	return s
}

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

	// An array of objects that describe the Amazon ECS service recommendations.
	EcsServiceRecommendations []*ECSServiceRecommendation `locationName:"ecsServiceRecommendations" type:"list"`

	// An array of objects that describe errors of the request.
	Errors []*GetRecommendationError `locationName:"errors" type:"list"`

	// The token to advance to the next page of Amazon ECS service recommendations.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetECSServiceRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetECSServiceRecommendationsOutput) GoString() string {
	return s.String()
}

// SetEcsServiceRecommendations sets the EcsServiceRecommendations field's value.
func (s *GetECSServiceRecommendationsOutput) SetEcsServiceRecommendations(v []*ECSServiceRecommendation) *GetECSServiceRecommendationsOutput {
	s.EcsServiceRecommendations = v
	return s
}

// SetErrors sets the Errors field's value.
func (s *GetECSServiceRecommendationsOutput) SetErrors(v []*GetRecommendationError) *GetECSServiceRecommendationsOutput {
	s.Errors = v
	return s
}

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

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

	// The Amazon Resource Name (ARN) of the resource for which to confirm effective
	// recommendation preferences. Only EC2 instance and Auto Scaling group ARNs
	// are currently supported.
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEffectiveRecommendationPreferencesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEffectiveRecommendationPreferencesInput) GoString() string {
	return s.String()
}

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

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

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

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

	// The status of the enhanced infrastructure metrics recommendation preference.
	// Considers all applicable preferences that you might have set at the resource,
	// account, and organization level.
	//
	// A status of Active confirms that the preference is applied in the latest
	// recommendation refresh, and a status of Inactive confirms that it's not yet
	// applied to recommendations.
	//
	// To validate whether the preference is applied to your last generated set
	// of recommendations, review the effectiveRecommendationPreferences value in
	// the response of the GetAutoScalingGroupRecommendations and GetEC2InstanceRecommendations
	// actions.
	//
	// For more information, see Enhanced infrastructure metrics (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
	// in the Compute Optimizer User Guide.
	EnhancedInfrastructureMetrics *string `locationName:"enhancedInfrastructureMetrics" type:"string" enum:"EnhancedInfrastructureMetrics"`

	// The provider of the external metrics recommendation preference. Considers
	// all applicable preferences that you might have set at the account and organization
	// level.
	//
	// If the preference is applied in the latest recommendation refresh, an object
	// with a valid source value appears in the response. If the preference isn't
	// applied to the recommendations already, then this object doesn't appear in
	// the response.
	//
	// To validate whether the preference is applied to your last generated set
	// of recommendations, review the effectiveRecommendationPreferences value in
	// the response of the GetEC2InstanceRecommendations actions.
	//
	// For more information, see Enhanced infrastructure metrics (https://docs.aws.amazon.com/compute-optimizer/latest/ug/external-metrics-ingestion.html)
	// in the Compute Optimizer User Guide.
	ExternalMetricsPreference *ExternalMetricsPreference `locationName:"externalMetricsPreference" type:"structure"`

	// The number of days the utilization metrics of the Amazon Web Services resource
	// are analyzed.
	//
	// To validate that the preference is applied to your last generated set of
	// recommendations, review the effectiveRecommendationPreferences value in the
	// response of the GetAutoScalingGroupRecommendations or GetEC2InstanceRecommendations
	// actions.
	LookBackPeriod *string `locationName:"lookBackPeriod" type:"string" enum:"LookBackPeriodPreference"`

	// The resource type values that are considered as candidates when generating
	// rightsizing recommendations. This object resolves any wildcard expressions
	// and returns the effective list of candidate resource type values. It also
	// considers all applicable preferences that you set at the resource, account,
	// and organization level.
	//
	// To validate that the preference is applied to your last generated set of
	// recommendations, review the effectiveRecommendationPreferences value in the
	// response of the GetAutoScalingGroupRecommendations or GetEC2InstanceRecommendations
	// actions.
	PreferredResources []*EffectivePreferredResource `locationName:"preferredResources" type:"list"`

	// The resource’s CPU and memory utilization preferences, such as threshold
	// and headroom, that were used to generate rightsizing recommendations. It
	// considers all applicable preferences that you set at the resource, account,
	// and organization level.
	//
	// To validate that the preference is applied to your last generated set of
	// recommendations, review the effectiveRecommendationPreferences value in the
	// response of the GetAutoScalingGroupRecommendations or GetEC2InstanceRecommendations
	// actions.
	UtilizationPreferences []*UtilizationPreference `locationName:"utilizationPreferences" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEffectiveRecommendationPreferencesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEffectiveRecommendationPreferencesOutput) GoString() string {
	return s.String()
}

// SetEnhancedInfrastructureMetrics sets the EnhancedInfrastructureMetrics field's value.
func (s *GetEffectiveRecommendationPreferencesOutput) SetEnhancedInfrastructureMetrics(v string) *GetEffectiveRecommendationPreferencesOutput {
	s.EnhancedInfrastructureMetrics = &v
	return s
}

// SetExternalMetricsPreference sets the ExternalMetricsPreference field's value.
func (s *GetEffectiveRecommendationPreferencesOutput) SetExternalMetricsPreference(v *ExternalMetricsPreference) *GetEffectiveRecommendationPreferencesOutput {
	s.ExternalMetricsPreference = v
	return s
}

// SetLookBackPeriod sets the LookBackPeriod field's value.
func (s *GetEffectiveRecommendationPreferencesOutput) SetLookBackPeriod(v string) *GetEffectiveRecommendationPreferencesOutput {
	s.LookBackPeriod = &v
	return s
}

// SetPreferredResources sets the PreferredResources field's value.
func (s *GetEffectiveRecommendationPreferencesOutput) SetPreferredResources(v []*EffectivePreferredResource) *GetEffectiveRecommendationPreferencesOutput {
	s.PreferredResources = v
	return s
}

// SetUtilizationPreferences sets the UtilizationPreferences field's value.
func (s *GetEffectiveRecommendationPreferencesOutput) SetUtilizationPreferences(v []*UtilizationPreference) *GetEffectiveRecommendationPreferencesOutput {
	s.UtilizationPreferences = v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEnrollmentStatusInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEnrollmentStatusInput) GoString() string {
	return s.String()
}

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

	// The Unix epoch timestamp, in seconds, of when the account enrollment status
	// was last updated.
	LastUpdatedTimestamp *time.Time `locationName:"lastUpdatedTimestamp" type:"timestamp"`

	// Confirms the enrollment status of member accounts of the organization, if
	// the account is a management account of an organization.
	MemberAccountsEnrolled *bool `locationName:"memberAccountsEnrolled" type:"boolean"`

	// The count of organization member accounts that are opted in to the service,
	// if your account is an organization management account.
	NumberOfMemberAccountsOptedIn *int64 `locationName:"numberOfMemberAccountsOptedIn" type:"integer"`

	// The enrollment status of the account.
	Status *string `locationName:"status" type:"string" enum:"Status"`

	// The reason for the enrollment status of the account.
	//
	// For example, an account might show a status of Pending because member accounts
	// of an organization require more time to be enrolled in the service.
	StatusReason *string `locationName:"statusReason" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEnrollmentStatusOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEnrollmentStatusOutput) GoString() string {
	return s.String()
}

// SetLastUpdatedTimestamp sets the LastUpdatedTimestamp field's value.
func (s *GetEnrollmentStatusOutput) SetLastUpdatedTimestamp(v time.Time) *GetEnrollmentStatusOutput {
	s.LastUpdatedTimestamp = &v
	return s
}

// SetMemberAccountsEnrolled sets the MemberAccountsEnrolled field's value.
func (s *GetEnrollmentStatusOutput) SetMemberAccountsEnrolled(v bool) *GetEnrollmentStatusOutput {
	s.MemberAccountsEnrolled = &v
	return s
}

// SetNumberOfMemberAccountsOptedIn sets the NumberOfMemberAccountsOptedIn field's value.
func (s *GetEnrollmentStatusOutput) SetNumberOfMemberAccountsOptedIn(v int64) *GetEnrollmentStatusOutput {
	s.NumberOfMemberAccountsOptedIn = &v
	return s
}

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

// SetStatusReason sets the StatusReason field's value.
func (s *GetEnrollmentStatusOutput) SetStatusReason(v string) *GetEnrollmentStatusOutput {
	s.StatusReason = &v
	return s
}

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

	// An array of objects to specify a filter that returns a more specific list
	// of account enrollment statuses.
	Filters []*EnrollmentFilter `locationName:"filters" type:"list"`

	// The maximum number of account enrollment statuses to return with a single
	// request. You can specify up to 100 statuses to return with each request.
	//
	// To retrieve the remaining results, make another request with the returned
	// nextToken value.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The token to advance to the next page of account enrollment statuses.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEnrollmentStatusesForOrganizationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEnrollmentStatusesForOrganizationInput) GoString() string {
	return s.String()
}

// SetFilters sets the Filters field's value.
func (s *GetEnrollmentStatusesForOrganizationInput) SetFilters(v []*EnrollmentFilter) *GetEnrollmentStatusesForOrganizationInput {
	s.Filters = v
	return s
}

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

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

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

	// An array of objects that describe the enrollment statuses of organization
	// member accounts.
	AccountEnrollmentStatuses []*AccountEnrollmentStatus `locationName:"accountEnrollmentStatuses" type:"list"`

	// The token to use to advance to the next page of account enrollment statuses.
	//
	// This value is null when there are no more pages of account enrollment statuses
	// to return.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEnrollmentStatusesForOrganizationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetEnrollmentStatusesForOrganizationOutput) GoString() string {
	return s.String()
}

// SetAccountEnrollmentStatuses sets the AccountEnrollmentStatuses field's value.
func (s *GetEnrollmentStatusesForOrganizationOutput) SetAccountEnrollmentStatuses(v []*AccountEnrollmentStatus) *GetEnrollmentStatusesForOrganizationOutput {
	s.AccountEnrollmentStatuses = v
	return s
}

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

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

	// The ID of the Amazon Web Services account for which to return function recommendations.
	//
	// If your account is the management account of an organization, use this parameter
	// to specify the member account for which you want to return function recommendations.
	//
	// Only one account ID can be specified per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// An array of objects to specify a filter that returns a more specific list
	// of function recommendations.
	Filters []*LambdaFunctionRecommendationFilter `locationName:"filters" type:"list"`

	// The Amazon Resource Name (ARN) of the functions for which to return recommendations.
	//
	// You can specify a qualified or unqualified ARN. If you specify an unqualified
	// ARN without a function version suffix, Compute Optimizer will return recommendations
	// for the latest ($LATEST) version of the function. If you specify a qualified
	// ARN with a version suffix, Compute Optimizer will return recommendations
	// for the specified function version. For more information about using function
	// versions, see Using versions (https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html#versioning-versions-using)
	// in the Lambda Developer Guide.
	FunctionArns []*string `locationName:"functionArns" type:"list"`

	// The maximum number of function recommendations to return with a single request.
	//
	// To retrieve the remaining results, make another request with the returned
	// nextToken value.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The token to advance to the next page of function recommendations.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetLambdaFunctionRecommendationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetLambdaFunctionRecommendationsInput) GoString() string {
	return s.String()
}

// SetAccountIds sets the AccountIds field's value.
func (s *GetLambdaFunctionRecommendationsInput) SetAccountIds(v []*string) *GetLambdaFunctionRecommendationsInput {
	s.AccountIds = v
	return s
}

// SetFilters sets the Filters field's value.
func (s *GetLambdaFunctionRecommendationsInput) SetFilters(v []*LambdaFunctionRecommendationFilter) *GetLambdaFunctionRecommendationsInput {
	s.Filters = v
	return s
}

// SetFunctionArns sets the FunctionArns field's value.
func (s *GetLambdaFunctionRecommendationsInput) SetFunctionArns(v []*string) *GetLambdaFunctionRecommendationsInput {
	s.FunctionArns = v
	return s
}

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

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

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

	// An array of objects that describe function recommendations.
	LambdaFunctionRecommendations []*LambdaFunctionRecommendation `locationName:"lambdaFunctionRecommendations" type:"list"`

	// The token to use to advance to the next page of function recommendations.
	//
	// This value is null when there are no more pages of function recommendations
	// to return.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetLambdaFunctionRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetLambdaFunctionRecommendationsOutput) GoString() string {
	return s.String()
}

// SetLambdaFunctionRecommendations sets the LambdaFunctionRecommendations field's value.
func (s *GetLambdaFunctionRecommendationsOutput) SetLambdaFunctionRecommendations(v []*LambdaFunctionRecommendation) *GetLambdaFunctionRecommendationsOutput {
	s.LambdaFunctionRecommendations = v
	return s
}

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

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

	// The ID of the Amazon Web Services account for which to return license recommendations.
	//
	// If your account is the management account of an organization, use this parameter
	// to specify the member account for which you want to return license recommendations.
	//
	// Only one account ID can be specified per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// An array of objects to specify a filter that returns a more specific list
	// of license recommendations.
	Filters []*LicenseRecommendationFilter `locationName:"filters" type:"list"`

	// The maximum number of license recommendations to return with a single request.
	//
	// To retrieve the remaining results, make another request with the returned
	// nextToken value.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The token to advance to the next page of license recommendations.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The ARN that identifies the Amazon EC2 instance.
	//
	// The following is the format of the ARN:
	//
	// arn:aws:ec2:region:aws_account_id:instance/instance-id
	ResourceArns []*string `locationName:"resourceArns" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetLicenseRecommendationsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetLicenseRecommendationsInput) GoString() string {
	return s.String()
}

// SetAccountIds sets the AccountIds field's value.
func (s *GetLicenseRecommendationsInput) SetAccountIds(v []*string) *GetLicenseRecommendationsInput {
	s.AccountIds = v
	return s
}

// SetFilters sets the Filters field's value.
func (s *GetLicenseRecommendationsInput) SetFilters(v []*LicenseRecommendationFilter) *GetLicenseRecommendationsInput {
	s.Filters = v
	return s
}

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

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

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

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

	// An array of objects that describe errors of the request.
	Errors []*GetRecommendationError `locationName:"errors" type:"list"`

	// An array of objects that describe license recommendations.
	LicenseRecommendations []*LicenseRecommendation `locationName:"licenseRecommendations" type:"list"`

	// The token to use to advance to the next page of license recommendations.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetLicenseRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetLicenseRecommendationsOutput) GoString() string {
	return s.String()
}

// SetErrors sets the Errors field's value.
func (s *GetLicenseRecommendationsOutput) SetErrors(v []*GetRecommendationError) *GetLicenseRecommendationsOutput {
	s.Errors = v
	return s
}

// SetLicenseRecommendations sets the LicenseRecommendations field's value.
func (s *GetLicenseRecommendationsOutput) SetLicenseRecommendations(v []*LicenseRecommendation) *GetLicenseRecommendationsOutput {
	s.LicenseRecommendations = v
	return s
}

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

// Describes an error experienced when getting recommendations.
//
// For example, an error is returned if you request recommendations for an unsupported
// Auto Scaling group, or if you request recommendations for an instance of
// an unsupported instance family.
type GetRecommendationError struct {
	_ struct{} `type:"structure"`

	// The error code.
	Code *string `locationName:"code" type:"string"`

	// The ID of the error.
	Identifier *string `locationName:"identifier" type:"string"`

	// The message, or reason, for the error.
	Message *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRecommendationError) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRecommendationError) GoString() string {
	return s.String()
}

// SetCode sets the Code field's value.
func (s *GetRecommendationError) SetCode(v string) *GetRecommendationError {
	s.Code = &v
	return s
}

// SetIdentifier sets the Identifier field's value.
func (s *GetRecommendationError) SetIdentifier(v string) *GetRecommendationError {
	s.Identifier = &v
	return s
}

// SetMessage sets the Message field's value.
func (s *GetRecommendationError) SetMessage(v string) *GetRecommendationError {
	s.Message = &v
	return s
}

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

	// The maximum number of recommendation preferences to return with a single
	// request.
	//
	// To retrieve the remaining results, make another request with the returned
	// nextToken value.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The token to advance to the next page of recommendation preferences.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The target resource type of the recommendation preference for which to return
	// preferences.
	//
	// The Ec2Instance option encompasses standalone instances and instances that
	// are part of Auto Scaling groups. The AutoScalingGroup option encompasses
	// only instances that are part of an Auto Scaling group.
	//
	// The valid values for this parameter are Ec2Instance and AutoScalingGroup.
	//
	// ResourceType is a required field
	ResourceType *string `locationName:"resourceType" type:"string" required:"true" enum:"ResourceType"`

	// An object that describes the scope of the recommendation preference to return.
	//
	// You can return recommendation preferences that are created at the organization
	// level (for management accounts of an organization only), account level, and
	// resource level. For more information, see Activating enhanced infrastructure
	// metrics (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
	// in the Compute Optimizer User Guide.
	Scope *Scope `locationName:"scope" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRecommendationPreferencesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRecommendationPreferencesInput) GoString() string {
	return s.String()
}

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

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

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

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

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

// SetScope sets the Scope field's value.
func (s *GetRecommendationPreferencesInput) SetScope(v *Scope) *GetRecommendationPreferencesInput {
	s.Scope = v
	return s
}

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

	// The token to use to advance to the next page of recommendation preferences.
	//
	// This value is null when there are no more pages of recommendation preferences
	// to return.
	NextToken *string `locationName:"nextToken" type:"string"`

	// An array of objects that describe recommendation preferences.
	RecommendationPreferencesDetails []*RecommendationPreferencesDetail `locationName:"recommendationPreferencesDetails" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRecommendationPreferencesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRecommendationPreferencesOutput) GoString() string {
	return s.String()
}

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

// SetRecommendationPreferencesDetails sets the RecommendationPreferencesDetails field's value.
func (s *GetRecommendationPreferencesOutput) SetRecommendationPreferencesDetails(v []*RecommendationPreferencesDetail) *GetRecommendationPreferencesOutput {
	s.RecommendationPreferencesDetails = v
	return s
}

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

	// The ID of the Amazon Web Services account for which to return recommendation
	// summaries.
	//
	// If your account is the management account of an organization, use this parameter
	// to specify the member account for which you want to return recommendation
	// summaries.
	//
	// Only one account ID can be specified per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// The maximum number of recommendation summaries to return with a single request.
	//
	// To retrieve the remaining results, make another request with the returned
	// nextToken value.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// The token to advance to the next page of recommendation summaries.
	NextToken *string `locationName:"nextToken" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRecommendationSummariesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRecommendationSummariesInput) GoString() string {
	return s.String()
}

// SetAccountIds sets the AccountIds field's value.
func (s *GetRecommendationSummariesInput) SetAccountIds(v []*string) *GetRecommendationSummariesInput {
	s.AccountIds = v
	return s
}

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

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

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

	// The token to use to advance to the next page of recommendation summaries.
	//
	// This value is null when there are no more pages of recommendation summaries
	// to return.
	NextToken *string `locationName:"nextToken" type:"string"`

	// An array of objects that summarize a recommendation.
	RecommendationSummaries []*RecommendationSummary `locationName:"recommendationSummaries" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRecommendationSummariesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GetRecommendationSummariesOutput) GoString() string {
	return s.String()
}

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

// SetRecommendationSummaries sets the RecommendationSummaries field's value.
func (s *GetRecommendationSummariesOutput) SetRecommendationSummaries(v []*RecommendationSummary) *GetRecommendationSummariesOutput {
	s.RecommendationSummaries = v
	return s
}

// Describes the GPU accelerators for the instance type.
type Gpu struct {
	_ struct{} `type:"structure"`

	// The number of GPUs for the instance type.
	GpuCount *int64 `locationName:"gpuCount" type:"integer"`

	// The total size of the memory for the GPU accelerators for the instance type,
	// in MiB.
	GpuMemorySizeInMiB *int64 `locationName:"gpuMemorySizeInMiB" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Gpu) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Gpu) GoString() string {
	return s.String()
}

// SetGpuCount sets the GpuCount field's value.
func (s *Gpu) SetGpuCount(v int64) *Gpu {
	s.GpuCount = &v
	return s
}

// SetGpuMemorySizeInMiB sets the GpuMemorySizeInMiB field's value.
func (s *Gpu) SetGpuMemorySizeInMiB(v int64) *Gpu {
	s.GpuMemorySizeInMiB = &v
	return s
}

// Describes the GPU accelerator settings for the instance type.
type GpuInfo struct {
	_ struct{} `type:"structure"`

	// Describes the GPU accelerators for the instance type.
	Gpus []*Gpu `locationName:"gpus" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GpuInfo) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GpuInfo) GoString() string {
	return s.String()
}

// SetGpus sets the Gpus field's value.
func (s *GpuInfo) SetGpus(v []*Gpu) *GpuInfo {
	s.Gpus = v
	return s
}

// The estimated monthly savings after you adjust the configurations of your
// instances running on the inferred workload types to the recommended configurations.
// If the inferredWorkloadTypes list contains multiple entries, then the savings
// are the sum of the monthly savings from instances that run the exact combination
// of the inferred workload types.
type InferredWorkloadSaving struct {
	_ struct{} `type:"structure"`

	// An object that describes the estimated monthly savings amount possible by
	// adopting Compute Optimizer recommendations for a given resource. This is
	// based on the On-Demand instance pricing.
	EstimatedMonthlySavings *EstimatedMonthlySavings `locationName:"estimatedMonthlySavings" type:"structure"`

	// The applications that might be running on the instance as inferred by Compute
	// Optimizer.
	//
	// Compute Optimizer can infer if one of the following applications might be
	// running on the instance:
	//
	//    * AmazonEmr - Infers that Amazon EMR might be running on the instance.
	//
	//    * ApacheCassandra - Infers that Apache Cassandra might be running on the
	//    instance.
	//
	//    * ApacheHadoop - Infers that Apache Hadoop might be running on the instance.
	//
	//    * Memcached - Infers that Memcached might be running on the instance.
	//
	//    * NGINX - Infers that NGINX might be running on the instance.
	//
	//    * PostgreSql - Infers that PostgreSQL might be running on the instance.
	//
	//    * Redis - Infers that Redis might be running on the instance.
	//
	//    * Kafka - Infers that Kafka might be running on the instance.
	//
	//    * SQLServer - Infers that SQLServer might be running on the instance.
	InferredWorkloadTypes []*string `locationName:"inferredWorkloadTypes" type:"list" enum:"InferredWorkloadType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InferredWorkloadSaving) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InferredWorkloadSaving) GoString() string {
	return s.String()
}

// SetEstimatedMonthlySavings sets the EstimatedMonthlySavings field's value.
func (s *InferredWorkloadSaving) SetEstimatedMonthlySavings(v *EstimatedMonthlySavings) *InferredWorkloadSaving {
	s.EstimatedMonthlySavings = v
	return s
}

// SetInferredWorkloadTypes sets the InferredWorkloadTypes field's value.
func (s *InferredWorkloadSaving) SetInferredWorkloadTypes(v []*string) *InferredWorkloadSaving {
	s.InferredWorkloadTypes = v
	return s
}

// An object that describes the estimated monthly savings possible by adopting
// Compute Optimizer’s Amazon EC2 instance recommendations. This is based
// on the Savings Plans and Reserved Instances pricing discounts.
type InstanceEstimatedMonthlySavings struct {
	_ struct{} `type:"structure"`

	// The currency of the estimated monthly savings.
	Currency *string `locationName:"currency" type:"string" enum:"Currency"`

	// The value of the estimated monthly savings.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InstanceEstimatedMonthlySavings) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InstanceEstimatedMonthlySavings) GoString() string {
	return s.String()
}

// SetCurrency sets the Currency field's value.
func (s *InstanceEstimatedMonthlySavings) SetCurrency(v string) *InstanceEstimatedMonthlySavings {
	s.Currency = &v
	return s
}

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

// Describes an Amazon EC2 instance recommendation.
type InstanceRecommendation struct {
	_ struct{} `type:"structure"`

	// The Amazon Web Services account ID of the instance.
	AccountId *string `locationName:"accountId" type:"string"`

	// Describes the GPU accelerator settings for the current instance type.
	CurrentInstanceGpuInfo *GpuInfo `locationName:"currentInstanceGpuInfo" type:"structure"`

	// The instance type of the current instance.
	CurrentInstanceType *string `locationName:"currentInstanceType" type:"string"`

	// The risk of the current instance not meeting the performance needs of its
	// workloads. The higher the risk, the more likely the current instance cannot
	// meet the performance requirements of its workload.
	CurrentPerformanceRisk *string `locationName:"currentPerformanceRisk" type:"string" enum:"CurrentPerformanceRisk"`

	// An object that describes the effective recommendation preferences for the
	// instance.
	EffectiveRecommendationPreferences *EffectiveRecommendationPreferences `locationName:"effectiveRecommendationPreferences" type:"structure"`

	// An object that describes Compute Optimizer's integration status with your
	// external metrics provider.
	ExternalMetricStatus *ExternalMetricStatus `locationName:"externalMetricStatus" type:"structure"`

	// The finding classification of the instance.
	//
	// Findings for instances include:
	//
	//    * Underprovisioned —An instance is considered under-provisioned when
	//    at least one specification of your instance, such as CPU, memory, or network,
	//    does not meet the performance requirements of your workload. Under-provisioned
	//    instances may lead to poor application performance.
	//
	//    * Overprovisioned —An instance is considered over-provisioned when at
	//    least one specification of your instance, such as CPU, memory, or network,
	//    can be sized down while still meeting the performance requirements of
	//    your workload, and no specification is under-provisioned. Over-provisioned
	//    instances may lead to unnecessary infrastructure cost.
	//
	//    * Optimized —An instance is considered optimized when all specifications
	//    of your instance, such as CPU, memory, and network, meet the performance
	//    requirements of your workload and is not over provisioned. For optimized
	//    resources, Compute Optimizer might recommend a new generation instance
	//    type.
	Finding *string `locationName:"finding" type:"string" enum:"Finding"`

	// The reason for the finding classification of the instance.
	//
	// Finding reason codes for instances include:
	//
	//    * CPUOverprovisioned — The instance’s CPU configuration can be sized
	//    down while still meeting the performance requirements of your workload.
	//    This is identified by analyzing the CPUUtilization metric of the current
	//    instance during the look-back period.
	//
	//    * CPUUnderprovisioned — The instance’s CPU configuration doesn't meet
	//    the performance requirements of your workload and there is an alternative
	//    instance type that provides better CPU performance. This is identified
	//    by analyzing the CPUUtilization metric of the current instance during
	//    the look-back period.
	//
	//    * MemoryOverprovisioned — The instance’s memory configuration can
	//    be sized down while still meeting the performance requirements of your
	//    workload. This is identified by analyzing the memory utilization metric
	//    of the current instance during the look-back period.
	//
	//    * MemoryUnderprovisioned — The instance’s memory configuration doesn't
	//    meet the performance requirements of your workload and there is an alternative
	//    instance type that provides better memory performance. This is identified
	//    by analyzing the memory utilization metric of the current instance during
	//    the look-back period. Memory utilization is analyzed only for resources
	//    that have the unified CloudWatch agent installed on them. For more information,
	//    see Enabling memory utilization with the Amazon CloudWatch Agent (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent)
	//    in the Compute Optimizer User Guide. On Linux instances, Compute Optimizer
	//    analyses the mem_used_percent metric in the CWAgent namespace, or the
	//    legacy MemoryUtilization metric in the System/Linux namespace. On Windows
	//    instances, Compute Optimizer analyses the Memory % Committed Bytes In
	//    Use metric in the CWAgent namespace.
	//
	//    * EBSThroughputOverprovisioned — The instance’s EBS throughput configuration
	//    can be sized down while still meeting the performance requirements of
	//    your workload. This is identified by analyzing the VolumeReadBytes and
	//    VolumeWriteBytes metrics of EBS volumes attached to the current instance
	//    during the look-back period.
	//
	//    * EBSThroughputUnderprovisioned — The instance’s EBS throughput configuration
	//    doesn't meet the performance requirements of your workload and there is
	//    an alternative instance type that provides better EBS throughput performance.
	//    This is identified by analyzing the VolumeReadBytes and VolumeWriteBytes
	//    metrics of EBS volumes attached to the current instance during the look-back
	//    period.
	//
	//    * EBSIOPSOverprovisioned — The instance’s EBS IOPS configuration can
	//    be sized down while still meeting the performance requirements of your
	//    workload. This is identified by analyzing the VolumeReadOps and VolumeWriteOps
	//    metric of EBS volumes attached to the current instance during the look-back
	//    period.
	//
	//    * EBSIOPSUnderprovisioned — The instance’s EBS IOPS configuration
	//    doesn't meet the performance requirements of your workload and there is
	//    an alternative instance type that provides better EBS IOPS performance.
	//    This is identified by analyzing the VolumeReadOps and VolumeWriteOps metric
	//    of EBS volumes attached to the current instance during the look-back period.
	//
	//    * NetworkBandwidthOverprovisioned — The instance’s network bandwidth
	//    configuration can be sized down while still meeting the performance requirements
	//    of your workload. This is identified by analyzing the NetworkIn and NetworkOut
	//    metrics of the current instance during the look-back period.
	//
	//    * NetworkBandwidthUnderprovisioned — The instance’s network bandwidth
	//    configuration doesn't meet the performance requirements of your workload
	//    and there is an alternative instance type that provides better network
	//    bandwidth performance. This is identified by analyzing the NetworkIn and
	//    NetworkOut metrics of the current instance during the look-back period.
	//    This finding reason happens when the NetworkIn or NetworkOut performance
	//    of an instance is impacted.
	//
	//    * NetworkPPSOverprovisioned — The instance’s network PPS (packets
	//    per second) configuration can be sized down while still meeting the performance
	//    requirements of your workload. This is identified by analyzing the NetworkPacketsIn
	//    and NetworkPacketsIn metrics of the current instance during the look-back
	//    period.
	//
	//    * NetworkPPSUnderprovisioned — The instance’s network PPS (packets
	//    per second) configuration doesn't meet the performance requirements of
	//    your workload and there is an alternative instance type that provides
	//    better network PPS performance. This is identified by analyzing the NetworkPacketsIn
	//    and NetworkPacketsIn metrics of the current instance during the look-back
	//    period.
	//
	//    * DiskIOPSOverprovisioned — The instance’s disk IOPS configuration
	//    can be sized down while still meeting the performance requirements of
	//    your workload. This is identified by analyzing the DiskReadOps and DiskWriteOps
	//    metrics of the current instance during the look-back period.
	//
	//    * DiskIOPSUnderprovisioned — The instance’s disk IOPS configuration
	//    doesn't meet the performance requirements of your workload and there is
	//    an alternative instance type that provides better disk IOPS performance.
	//    This is identified by analyzing the DiskReadOps and DiskWriteOps metrics
	//    of the current instance during the look-back period.
	//
	//    * DiskThroughputOverprovisioned — The instance’s disk throughput configuration
	//    can be sized down while still meeting the performance requirements of
	//    your workload. This is identified by analyzing the DiskReadBytes and DiskWriteBytes
	//    metrics of the current instance during the look-back period.
	//
	//    * DiskThroughputUnderprovisioned — The instance’s disk throughput
	//    configuration doesn't meet the performance requirements of your workload
	//    and there is an alternative instance type that provides better disk throughput
	//    performance. This is identified by analyzing the DiskReadBytes and DiskWriteBytes
	//    metrics of the current instance during the look-back period.
	//
	// For more information about instance metrics, see List the available CloudWatch
	// metrics for your instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html)
	// in the Amazon Elastic Compute Cloud User Guide. For more information about
	// EBS volume metrics, see Amazon CloudWatch metrics for Amazon EBS (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using_cloudwatch_ebs.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	FindingReasonCodes []*string `locationName:"findingReasonCodes" type:"list" enum:"InstanceRecommendationFindingReasonCode"`

	// Describes if an Amazon EC2 instance is idle.
	Idle *string `locationName:"idle" type:"string" enum:"InstanceIdle"`

	// The applications that might be running on the instance as inferred by Compute
	// Optimizer.
	//
	// Compute Optimizer can infer if one of the following applications might be
	// running on the instance:
	//
	//    * AmazonEmr - Infers that Amazon EMR might be running on the instance.
	//
	//    * ApacheCassandra - Infers that Apache Cassandra might be running on the
	//    instance.
	//
	//    * ApacheHadoop - Infers that Apache Hadoop might be running on the instance.
	//
	//    * Memcached - Infers that Memcached might be running on the instance.
	//
	//    * NGINX - Infers that NGINX might be running on the instance.
	//
	//    * PostgreSql - Infers that PostgreSQL might be running on the instance.
	//
	//    * Redis - Infers that Redis might be running on the instance.
	//
	//    * Kafka - Infers that Kafka might be running on the instance.
	//
	//    * SQLServer - Infers that SQLServer might be running on the instance.
	InferredWorkloadTypes []*string `locationName:"inferredWorkloadTypes" type:"list" enum:"InferredWorkloadType"`

	// The Amazon Resource Name (ARN) of the current instance.
	InstanceArn *string `locationName:"instanceArn" type:"string"`

	// The name of the current instance.
	InstanceName *string `locationName:"instanceName" type:"string"`

	// The state of the instance when the recommendation was generated.
	InstanceState *string `locationName:"instanceState" type:"string" enum:"InstanceState"`

	// The timestamp of when the instance recommendation was last generated.
	LastRefreshTimestamp *time.Time `locationName:"lastRefreshTimestamp" type:"timestamp"`

	// The number of days for which utilization metrics were analyzed for the instance.
	LookBackPeriodInDays *float64 `locationName:"lookBackPeriodInDays" type:"double"`

	// An array of objects that describe the recommendation options for the instance.
	RecommendationOptions []*InstanceRecommendationOption `locationName:"recommendationOptions" type:"list"`

	// An array of objects that describe the source resource of the recommendation.
	RecommendationSources []*RecommendationSource `locationName:"recommendationSources" type:"list"`

	// A list of tags assigned to your Amazon EC2 instance recommendations.
	Tags []*Tag `locationName:"tags" type:"list"`

	// An array of objects that describe the utilization metrics of the instance.
	UtilizationMetrics []*UtilizationMetric `locationName:"utilizationMetrics" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InstanceRecommendation) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InstanceRecommendation) GoString() string {
	return s.String()
}

// SetAccountId sets the AccountId field's value.
func (s *InstanceRecommendation) SetAccountId(v string) *InstanceRecommendation {
	s.AccountId = &v
	return s
}

// SetCurrentInstanceGpuInfo sets the CurrentInstanceGpuInfo field's value.
func (s *InstanceRecommendation) SetCurrentInstanceGpuInfo(v *GpuInfo) *InstanceRecommendation {
	s.CurrentInstanceGpuInfo = v
	return s
}

// SetCurrentInstanceType sets the CurrentInstanceType field's value.
func (s *InstanceRecommendation) SetCurrentInstanceType(v string) *InstanceRecommendation {
	s.CurrentInstanceType = &v
	return s
}

// SetCurrentPerformanceRisk sets the CurrentPerformanceRisk field's value.
func (s *InstanceRecommendation) SetCurrentPerformanceRisk(v string) *InstanceRecommendation {
	s.CurrentPerformanceRisk = &v
	return s
}

// SetEffectiveRecommendationPreferences sets the EffectiveRecommendationPreferences field's value.
func (s *InstanceRecommendation) SetEffectiveRecommendationPreferences(v *EffectiveRecommendationPreferences) *InstanceRecommendation {
	s.EffectiveRecommendationPreferences = v
	return s
}

// SetExternalMetricStatus sets the ExternalMetricStatus field's value.
func (s *InstanceRecommendation) SetExternalMetricStatus(v *ExternalMetricStatus) *InstanceRecommendation {
	s.ExternalMetricStatus = v
	return s
}

// SetFinding sets the Finding field's value.
func (s *InstanceRecommendation) SetFinding(v string) *InstanceRecommendation {
	s.Finding = &v
	return s
}

// SetFindingReasonCodes sets the FindingReasonCodes field's value.
func (s *InstanceRecommendation) SetFindingReasonCodes(v []*string) *InstanceRecommendation {
	s.FindingReasonCodes = v
	return s
}

// SetIdle sets the Idle field's value.
func (s *InstanceRecommendation) SetIdle(v string) *InstanceRecommendation {
	s.Idle = &v
	return s
}

// SetInferredWorkloadTypes sets the InferredWorkloadTypes field's value.
func (s *InstanceRecommendation) SetInferredWorkloadTypes(v []*string) *InstanceRecommendation {
	s.InferredWorkloadTypes = v
	return s
}

// SetInstanceArn sets the InstanceArn field's value.
func (s *InstanceRecommendation) SetInstanceArn(v string) *InstanceRecommendation {
	s.InstanceArn = &v
	return s
}

// SetInstanceName sets the InstanceName field's value.
func (s *InstanceRecommendation) SetInstanceName(v string) *InstanceRecommendation {
	s.InstanceName = &v
	return s
}

// SetInstanceState sets the InstanceState field's value.
func (s *InstanceRecommendation) SetInstanceState(v string) *InstanceRecommendation {
	s.InstanceState = &v
	return s
}

// SetLastRefreshTimestamp sets the LastRefreshTimestamp field's value.
func (s *InstanceRecommendation) SetLastRefreshTimestamp(v time.Time) *InstanceRecommendation {
	s.LastRefreshTimestamp = &v
	return s
}

// SetLookBackPeriodInDays sets the LookBackPeriodInDays field's value.
func (s *InstanceRecommendation) SetLookBackPeriodInDays(v float64) *InstanceRecommendation {
	s.LookBackPeriodInDays = &v
	return s
}

// SetRecommendationOptions sets the RecommendationOptions field's value.
func (s *InstanceRecommendation) SetRecommendationOptions(v []*InstanceRecommendationOption) *InstanceRecommendation {
	s.RecommendationOptions = v
	return s
}

// SetRecommendationSources sets the RecommendationSources field's value.
func (s *InstanceRecommendation) SetRecommendationSources(v []*RecommendationSource) *InstanceRecommendation {
	s.RecommendationSources = v
	return s
}

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

// SetUtilizationMetrics sets the UtilizationMetrics field's value.
func (s *InstanceRecommendation) SetUtilizationMetrics(v []*UtilizationMetric) *InstanceRecommendation {
	s.UtilizationMetrics = v
	return s
}

// Describes a recommendation option for an Amazon EC2 instance.
type InstanceRecommendationOption struct {
	_ struct{} `type:"structure"`

	// Describes the GPU accelerator settings for the recommended instance type.
	InstanceGpuInfo *GpuInfo `locationName:"instanceGpuInfo" type:"structure"`

	// The instance type of the instance recommendation.
	InstanceType *string `locationName:"instanceType" type:"string"`

	// The level of effort required to migrate from the current instance type to
	// the recommended instance type.
	//
	// For example, the migration effort is Low if Amazon EMR is the inferred workload
	// type and an Amazon Web Services Graviton instance type is recommended. The
	// migration effort is Medium if a workload type couldn't be inferred but an
	// Amazon Web Services Graviton instance type is recommended. The migration
	// effort is VeryLow if both the current and recommended instance types are
	// of the same CPU architecture.
	MigrationEffort *string `locationName:"migrationEffort" type:"string" enum:"MigrationEffort"`

	// The performance risk of the instance recommendation option.
	//
	// Performance risk indicates the likelihood of the recommended instance type
	// not meeting the resource needs of your workload. Compute Optimizer calculates
	// an individual performance risk score for each specification of the recommended
	// instance, including CPU, memory, EBS throughput, EBS IOPS, disk throughput,
	// disk IOPS, network throughput, and network PPS. The performance risk of the
	// recommended instance is calculated as the maximum performance risk score
	// across the analyzed resource specifications.
	//
	// The value ranges from 0 - 4, with 0 meaning that the recommended resource
	// is predicted to always provide enough hardware capability. The higher the
	// performance risk is, the more likely you should validate whether the recommendation
	// will meet the performance requirements of your workload before migrating
	// your resource.
	PerformanceRisk *float64 `locationName:"performanceRisk" type:"double"`

	// Describes the configuration differences between the current instance and
	// the recommended instance type. You should consider the configuration differences
	// before migrating your workloads from the current instance to the recommended
	// instance type. The Change the instance type guide for Linux (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-resize.html)
	// and Change the instance type guide for Windows (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-resize.html)
	// provide general guidance for getting started with an instance migration.
	//
	// Platform differences include:
	//
	//    * Hypervisor — The hypervisor of the recommended instance type is different
	//    than that of the current instance. For example, the recommended instance
	//    type uses a Nitro hypervisor and the current instance uses a Xen hypervisor.
	//    The differences that you should consider between these hypervisors are
	//    covered in the Nitro Hypervisor (http://aws.amazon.com/ec2/faqs/#Nitro_Hypervisor)
	//    section of the Amazon EC2 frequently asked questions. For more information,
	//    see Instances built on the Nitro System (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances)
	//    in the Amazon EC2 User Guide for Linux, or Instances built on the Nitro
	//    System (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#ec2-nitro-instances)
	//    in the Amazon EC2 User Guide for Windows.
	//
	//    * NetworkInterface — The network interface of the recommended instance
	//    type is different than that of the current instance. For example, the
	//    recommended instance type supports enhanced networking and the current
	//    instance might not. To enable enhanced networking for the recommended
	//    instance type, you must install the Elastic Network Adapter (ENA) driver
	//    or the Intel 82599 Virtual Function driver. For more information, see
	//    Networking and storage features (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#instance-networking-storage)
	//    and Enhanced networking on Linux (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html)
	//    in the Amazon EC2 User Guide for Linux, or Networking and storage features
	//    (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#instance-networking-storage)
	//    and Enhanced networking on Windows (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/enhanced-networking.html)
	//    in the Amazon EC2 User Guide for Windows.
	//
	//    * StorageInterface — The storage interface of the recommended instance
	//    type is different than that of the current instance. For example, the
	//    recommended instance type uses an NVMe storage interface and the current
	//    instance does not. To access NVMe volumes for the recommended instance
	//    type, you will need to install or upgrade the NVMe driver. For more information,
	//    see Networking and storage features (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#instance-networking-storage)
	//    and Amazon EBS and NVMe on Linux instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nvme-ebs-volumes.html)
	//    in the Amazon EC2 User Guide for Linux, or Networking and storage features
	//    (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#instance-networking-storage)
	//    and Amazon EBS and NVMe on Windows instances (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/nvme-ebs-volumes.html)
	//    in the Amazon EC2 User Guide for Windows.
	//
	//    * InstanceStoreAvailability — The recommended instance type does not
	//    support instance store volumes and the current instance does. Before migrating,
	//    you might need to back up the data on your instance store volumes if you
	//    want to preserve them. For more information, see How do I back up an instance
	//    store volume on my Amazon EC2 instance to Amazon EBS? (https://aws.amazon.com/premiumsupport/knowledge-center/back-up-instance-store-ebs/)
	//    in the Amazon Web Services Premium Support Knowledge Base. For more information,
	//    see Networking and storage features (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#instance-networking-storage)
	//    and Amazon EC2 instance store (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html)
	//    in the Amazon EC2 User Guide for Linux, or see Networking and storage
	//    features (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#instance-networking-storage)
	//    and Amazon EC2 instance store (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/InstanceStorage.html)
	//    in the Amazon EC2 User Guide for Windows.
	//
	//    * VirtualizationType — The recommended instance type uses the hardware
	//    virtual machine (HVM) virtualization type and the current instance uses
	//    the paravirtual (PV) virtualization type. For more information about the
	//    differences between these virtualization types, see Linux AMI virtualization
	//    types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html)
	//    in the Amazon EC2 User Guide for Linux, or Windows AMI virtualization
	//    types (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/windows-ami-version-history.html#virtualization-types)
	//    in the Amazon EC2 User Guide for Windows.
	//
	//    * Architecture — The CPU architecture between the recommended instance
	//    type and the current instance is different. For example, the recommended
	//    instance type might use an Arm CPU architecture and the current instance
	//    type might use a different one, such as x86. Before migrating, you should
	//    consider recompiling the software on your instance for the new architecture.
	//    Alternatively, you might switch to an Amazon Machine Image (AMI) that
	//    supports the new architecture. For more information about the CPU architecture
	//    for each instance type, see Amazon EC2 Instance Types (http://aws.amazon.com/ec2/instance-types/).
	PlatformDifferences []*string `locationName:"platformDifferences" type:"list" enum:"PlatformDifference"`

	// An array of objects that describe the projected utilization metrics of the
	// instance recommendation option.
	//
	// The Cpu and Memory metrics are the only projected utilization metrics returned.
	// Additionally, the Memory metric is returned only for resources that have
	// the unified CloudWatch agent installed on them. For more information, see
	// Enabling Memory Utilization with the CloudWatch Agent (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent).
	ProjectedUtilizationMetrics []*UtilizationMetric `locationName:"projectedUtilizationMetrics" type:"list"`

	// The rank of the instance recommendation option.
	//
	// The top recommendation option is ranked as 1.
	Rank *int64 `locationName:"rank" type:"integer"`

	// An object that describes the savings opportunity for the instance recommendation
	// option. Savings opportunity includes the estimated monthly savings amount
	// and percentage.
	SavingsOpportunity *SavingsOpportunity `locationName:"savingsOpportunity" type:"structure"`

	// An object that describes the savings opportunity for the instance recommendation
	// option that includes Savings Plans and Reserved Instances discounts. Savings
	// opportunity includes the estimated monthly savings and percentage.
	SavingsOpportunityAfterDiscounts *InstanceSavingsOpportunityAfterDiscounts `locationName:"savingsOpportunityAfterDiscounts" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InstanceRecommendationOption) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InstanceRecommendationOption) GoString() string {
	return s.String()
}

// SetInstanceGpuInfo sets the InstanceGpuInfo field's value.
func (s *InstanceRecommendationOption) SetInstanceGpuInfo(v *GpuInfo) *InstanceRecommendationOption {
	s.InstanceGpuInfo = v
	return s
}

// SetInstanceType sets the InstanceType field's value.
func (s *InstanceRecommendationOption) SetInstanceType(v string) *InstanceRecommendationOption {
	s.InstanceType = &v
	return s
}

// SetMigrationEffort sets the MigrationEffort field's value.
func (s *InstanceRecommendationOption) SetMigrationEffort(v string) *InstanceRecommendationOption {
	s.MigrationEffort = &v
	return s
}

// SetPerformanceRisk sets the PerformanceRisk field's value.
func (s *InstanceRecommendationOption) SetPerformanceRisk(v float64) *InstanceRecommendationOption {
	s.PerformanceRisk = &v
	return s
}

// SetPlatformDifferences sets the PlatformDifferences field's value.
func (s *InstanceRecommendationOption) SetPlatformDifferences(v []*string) *InstanceRecommendationOption {
	s.PlatformDifferences = v
	return s
}

// SetProjectedUtilizationMetrics sets the ProjectedUtilizationMetrics field's value.
func (s *InstanceRecommendationOption) SetProjectedUtilizationMetrics(v []*UtilizationMetric) *InstanceRecommendationOption {
	s.ProjectedUtilizationMetrics = v
	return s
}

// SetRank sets the Rank field's value.
func (s *InstanceRecommendationOption) SetRank(v int64) *InstanceRecommendationOption {
	s.Rank = &v
	return s
}

// SetSavingsOpportunity sets the SavingsOpportunity field's value.
func (s *InstanceRecommendationOption) SetSavingsOpportunity(v *SavingsOpportunity) *InstanceRecommendationOption {
	s.SavingsOpportunity = v
	return s
}

// SetSavingsOpportunityAfterDiscounts sets the SavingsOpportunityAfterDiscounts field's value.
func (s *InstanceRecommendationOption) SetSavingsOpportunityAfterDiscounts(v *InstanceSavingsOpportunityAfterDiscounts) *InstanceRecommendationOption {
	s.SavingsOpportunityAfterDiscounts = v
	return s
}

// Describes the savings estimation mode used for calculating savings opportunity
// for Amazon EC2 instances.
type InstanceSavingsEstimationMode struct {
	_ struct{} `type:"structure"`

	// Describes the source for calculating the savings opportunity for Amazon EC2
	// instances.
	Source *string `locationName:"source" type:"string" enum:"InstanceSavingsEstimationModeSource"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InstanceSavingsEstimationMode) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InstanceSavingsEstimationMode) GoString() string {
	return s.String()
}

// SetSource sets the Source field's value.
func (s *InstanceSavingsEstimationMode) SetSource(v string) *InstanceSavingsEstimationMode {
	s.Source = &v
	return s
}

// Describes the savings opportunity for instance recommendations after applying
// the Savings Plans and Reserved Instances discounts.
//
// Savings opportunity after discounts represents the estimated monthly savings
// you can achieve by implementing Compute Optimizer recommendations.
type InstanceSavingsOpportunityAfterDiscounts struct {
	_ struct{} `type:"structure"`

	// An object that describes the estimated monthly savings possible by adopting
	// Compute Optimizer’s Amazon EC2 instance recommendations. This is based
	// on pricing after applying the Savings Plans and Reserved Instances discounts.
	EstimatedMonthlySavings *InstanceEstimatedMonthlySavings `locationName:"estimatedMonthlySavings" type:"structure"`

	// The estimated monthly savings possible as a percentage of monthly cost after
	// applying the Savings Plans and Reserved Instances discounts. This saving
	// can be achieved by adopting Compute Optimizer’s EC2 instance recommendations.
	SavingsOpportunityPercentage *float64 `locationName:"savingsOpportunityPercentage" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InstanceSavingsOpportunityAfterDiscounts) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InstanceSavingsOpportunityAfterDiscounts) GoString() string {
	return s.String()
}

// SetEstimatedMonthlySavings sets the EstimatedMonthlySavings field's value.
func (s *InstanceSavingsOpportunityAfterDiscounts) SetEstimatedMonthlySavings(v *InstanceEstimatedMonthlySavings) *InstanceSavingsOpportunityAfterDiscounts {
	s.EstimatedMonthlySavings = v
	return s
}

// SetSavingsOpportunityPercentage sets the SavingsOpportunityPercentage field's value.
func (s *InstanceSavingsOpportunityAfterDiscounts) SetSavingsOpportunityPercentage(v float64) *InstanceSavingsOpportunityAfterDiscounts {
	s.SavingsOpportunityPercentage = &v
	return s
}

// An internal error has occurred. Try your call again.
type InternalServerException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InternalServerException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InternalServerException) GoString() string {
	return s.String()
}

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

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

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

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

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

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

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

// The value supplied for the input parameter is out of range or not valid.
type InvalidParameterValueException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidParameterValueException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InvalidParameterValueException) GoString() string {
	return s.String()
}

func newErrorInvalidParameterValueException(v protocol.ResponseMetadata) error {
	return &InvalidParameterValueException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

// Describes a filter that returns a more specific list of recommendation export
// jobs. Use this filter with the DescribeRecommendationExportJobs action.
//
// You can use EBSFilter with the GetEBSVolumeRecommendations action, LambdaFunctionRecommendationFilter
// with the GetLambdaFunctionRecommendations action, and Filter with the GetAutoScalingGroupRecommendations
// and GetEC2InstanceRecommendations actions.
type JobFilter struct {
	_ struct{} `type:"structure"`

	// The name of the filter.
	//
	// Specify ResourceType to return export jobs of a specific resource type (for
	// example, Ec2Instance).
	//
	// Specify JobStatus to return export jobs with a specific status (e.g, Complete).
	Name *string `locationName:"name" type:"string" enum:"JobFilterName"`

	// The value of the filter.
	//
	// The valid values for this parameter are as follows, depending on what you
	// specify for the name parameter:
	//
	//    * Specify Ec2Instance or AutoScalingGroup if you specify the name parameter
	//    as ResourceType. There is no filter for EBS volumes because volume recommendations
	//    cannot be exported at this time.
	//
	//    * Specify Queued, InProgress, Complete, or Failed if you specify the name
	//    parameter as JobStatus.
	Values []*string `locationName:"values" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobFilter) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s JobFilter) GoString() string {
	return s.String()
}

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

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

// Describes the effective recommendation preferences for Lambda functions.
type LambdaEffectiveRecommendationPreferences struct {
	_ struct{} `type:"structure"`

	// Describes the savings estimation mode applied for calculating savings opportunity
	// for Lambda functions.
	SavingsEstimationMode *LambdaSavingsEstimationMode `locationName:"savingsEstimationMode" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaEffectiveRecommendationPreferences) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaEffectiveRecommendationPreferences) GoString() string {
	return s.String()
}

// SetSavingsEstimationMode sets the SavingsEstimationMode field's value.
func (s *LambdaEffectiveRecommendationPreferences) SetSavingsEstimationMode(v *LambdaSavingsEstimationMode) *LambdaEffectiveRecommendationPreferences {
	s.SavingsEstimationMode = v
	return s
}

// Describes the estimated monthly savings possible for Lambda functions by
// adopting Compute Optimizer recommendations. This is based on Lambda functions
// pricing after applying Savings Plans discounts.
type LambdaEstimatedMonthlySavings struct {
	_ struct{} `type:"structure"`

	// The currency of the estimated monthly savings.
	Currency *string `locationName:"currency" type:"string" enum:"Currency"`

	// The value of the estimated monthly savings.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaEstimatedMonthlySavings) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaEstimatedMonthlySavings) GoString() string {
	return s.String()
}

// SetCurrency sets the Currency field's value.
func (s *LambdaEstimatedMonthlySavings) SetCurrency(v string) *LambdaEstimatedMonthlySavings {
	s.Currency = &v
	return s
}

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

// Describes a projected utilization metric of an Lambda function recommendation
// option.
type LambdaFunctionMemoryProjectedMetric struct {
	_ struct{} `type:"structure"`

	// The name of the projected utilization metric.
	Name *string `locationName:"name" type:"string" enum:"LambdaFunctionMemoryMetricName"`

	// The statistic of the projected utilization metric.
	Statistic *string `locationName:"statistic" type:"string" enum:"LambdaFunctionMemoryMetricStatistic"`

	// The values of the projected utilization metrics.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaFunctionMemoryProjectedMetric) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaFunctionMemoryProjectedMetric) GoString() string {
	return s.String()
}

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

// SetStatistic sets the Statistic field's value.
func (s *LambdaFunctionMemoryProjectedMetric) SetStatistic(v string) *LambdaFunctionMemoryProjectedMetric {
	s.Statistic = &v
	return s
}

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

// Describes a recommendation option for an Lambda function.
type LambdaFunctionMemoryRecommendationOption struct {
	_ struct{} `type:"structure"`

	// The memory size, in MB, of the function recommendation option.
	MemorySize *int64 `locationName:"memorySize" type:"integer"`

	// An array of objects that describe the projected utilization metrics of the
	// function recommendation option.
	ProjectedUtilizationMetrics []*LambdaFunctionMemoryProjectedMetric `locationName:"projectedUtilizationMetrics" type:"list"`

	// The rank of the function recommendation option.
	//
	// The top recommendation option is ranked as 1.
	Rank *int64 `locationName:"rank" type:"integer"`

	// An object that describes the savings opportunity for the Lambda function
	// recommendation option. Savings opportunity includes the estimated monthly
	// savings amount and percentage.
	SavingsOpportunity *SavingsOpportunity `locationName:"savingsOpportunity" type:"structure"`

	// An object that describes the savings opportunity for the Lambda recommendation
	// option which includes Saving Plans discounts. Savings opportunity includes
	// the estimated monthly savings and percentage.
	SavingsOpportunityAfterDiscounts *LambdaSavingsOpportunityAfterDiscounts `locationName:"savingsOpportunityAfterDiscounts" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaFunctionMemoryRecommendationOption) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaFunctionMemoryRecommendationOption) GoString() string {
	return s.String()
}

// SetMemorySize sets the MemorySize field's value.
func (s *LambdaFunctionMemoryRecommendationOption) SetMemorySize(v int64) *LambdaFunctionMemoryRecommendationOption {
	s.MemorySize = &v
	return s
}

// SetProjectedUtilizationMetrics sets the ProjectedUtilizationMetrics field's value.
func (s *LambdaFunctionMemoryRecommendationOption) SetProjectedUtilizationMetrics(v []*LambdaFunctionMemoryProjectedMetric) *LambdaFunctionMemoryRecommendationOption {
	s.ProjectedUtilizationMetrics = v
	return s
}

// SetRank sets the Rank field's value.
func (s *LambdaFunctionMemoryRecommendationOption) SetRank(v int64) *LambdaFunctionMemoryRecommendationOption {
	s.Rank = &v
	return s
}

// SetSavingsOpportunity sets the SavingsOpportunity field's value.
func (s *LambdaFunctionMemoryRecommendationOption) SetSavingsOpportunity(v *SavingsOpportunity) *LambdaFunctionMemoryRecommendationOption {
	s.SavingsOpportunity = v
	return s
}

// SetSavingsOpportunityAfterDiscounts sets the SavingsOpportunityAfterDiscounts field's value.
func (s *LambdaFunctionMemoryRecommendationOption) SetSavingsOpportunityAfterDiscounts(v *LambdaSavingsOpportunityAfterDiscounts) *LambdaFunctionMemoryRecommendationOption {
	s.SavingsOpportunityAfterDiscounts = v
	return s
}

// Describes an Lambda function recommendation.
type LambdaFunctionRecommendation struct {
	_ struct{} `type:"structure"`

	// The Amazon Web Services account ID of the function.
	AccountId *string `locationName:"accountId" type:"string"`

	// The amount of memory, in MB, that's allocated to the current function.
	CurrentMemorySize *int64 `locationName:"currentMemorySize" type:"integer"`

	// The risk of the current Lambda function not meeting the performance needs
	// of its workloads. The higher the risk, the more likely the current Lambda
	// function requires more memory.
	CurrentPerformanceRisk *string `locationName:"currentPerformanceRisk" type:"string" enum:"CurrentPerformanceRisk"`

	// Describes the effective recommendation preferences for Lambda functions.
	EffectiveRecommendationPreferences *LambdaEffectiveRecommendationPreferences `locationName:"effectiveRecommendationPreferences" type:"structure"`

	// The finding classification of the function.
	//
	// Findings for functions include:
	//
	//    * Optimized — The function is correctly provisioned to run your workload
	//    based on its current configuration and its utilization history. This finding
	//    classification does not include finding reason codes.
	//
	//    * NotOptimized — The function is performing at a higher level (over-provisioned)
	//    or at a lower level (under-provisioned) than required for your workload
	//    because its current configuration is not optimal. Over-provisioned resources
	//    might lead to unnecessary infrastructure cost, and under-provisioned resources
	//    might lead to poor application performance. This finding classification
	//    can include the MemoryUnderprovisioned and MemoryUnderprovisioned finding
	//    reason codes.
	//
	//    * Unavailable — Compute Optimizer was unable to generate a recommendation
	//    for the function. This could be because the function has not accumulated
	//    sufficient metric data, or the function does not qualify for a recommendation.
	//    This finding classification can include the InsufficientData and Inconclusive
	//    finding reason codes. Functions with a finding of unavailable are not
	//    returned unless you specify the filter parameter with a value of Unavailable
	//    in your GetLambdaFunctionRecommendations request.
	Finding *string `locationName:"finding" type:"string" enum:"LambdaFunctionRecommendationFinding"`

	// The reason for the finding classification of the function.
	//
	// Functions that have a finding classification of Optimized don't have a finding
	// reason code.
	//
	// Finding reason codes for functions include:
	//
	//    * MemoryOverprovisioned — The function is over-provisioned when its
	//    memory configuration can be sized down while still meeting the performance
	//    requirements of your workload. An over-provisioned function might lead
	//    to unnecessary infrastructure cost. This finding reason code is part of
	//    the NotOptimized finding classification.
	//
	//    * MemoryUnderprovisioned — The function is under-provisioned when its
	//    memory configuration doesn't meet the performance requirements of the
	//    workload. An under-provisioned function might lead to poor application
	//    performance. This finding reason code is part of the NotOptimized finding
	//    classification.
	//
	//    * InsufficientData — The function does not have sufficient metric data
	//    for Compute Optimizer to generate a recommendation. For more information,
	//    see the Supported resources and requirements (https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html)
	//    in the Compute Optimizer User Guide. This finding reason code is part
	//    of the Unavailable finding classification.
	//
	//    * Inconclusive — The function does not qualify for a recommendation
	//    because Compute Optimizer cannot generate a recommendation with a high
	//    degree of confidence. This finding reason code is part of the Unavailable
	//    finding classification.
	FindingReasonCodes []*string `locationName:"findingReasonCodes" type:"list" enum:"LambdaFunctionRecommendationFindingReasonCode"`

	// The Amazon Resource Name (ARN) of the current function.
	FunctionArn *string `locationName:"functionArn" type:"string"`

	// The version number of the current function.
	FunctionVersion *string `locationName:"functionVersion" type:"string"`

	// The timestamp of when the function recommendation was last generated.
	LastRefreshTimestamp *time.Time `locationName:"lastRefreshTimestamp" type:"timestamp"`

	// The number of days for which utilization metrics were analyzed for the function.
	LookbackPeriodInDays *float64 `locationName:"lookbackPeriodInDays" type:"double"`

	// An array of objects that describe the memory configuration recommendation
	// options for the function.
	MemorySizeRecommendationOptions []*LambdaFunctionMemoryRecommendationOption `locationName:"memorySizeRecommendationOptions" type:"list"`

	// The number of times your function code was applied during the look-back period.
	NumberOfInvocations *int64 `locationName:"numberOfInvocations" type:"long"`

	// A list of tags assigned to your Lambda function recommendations.
	Tags []*Tag `locationName:"tags" type:"list"`

	// An array of objects that describe the utilization metrics of the function.
	UtilizationMetrics []*LambdaFunctionUtilizationMetric `locationName:"utilizationMetrics" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaFunctionRecommendation) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaFunctionRecommendation) GoString() string {
	return s.String()
}

// SetAccountId sets the AccountId field's value.
func (s *LambdaFunctionRecommendation) SetAccountId(v string) *LambdaFunctionRecommendation {
	s.AccountId = &v
	return s
}

// SetCurrentMemorySize sets the CurrentMemorySize field's value.
func (s *LambdaFunctionRecommendation) SetCurrentMemorySize(v int64) *LambdaFunctionRecommendation {
	s.CurrentMemorySize = &v
	return s
}

// SetCurrentPerformanceRisk sets the CurrentPerformanceRisk field's value.
func (s *LambdaFunctionRecommendation) SetCurrentPerformanceRisk(v string) *LambdaFunctionRecommendation {
	s.CurrentPerformanceRisk = &v
	return s
}

// SetEffectiveRecommendationPreferences sets the EffectiveRecommendationPreferences field's value.
func (s *LambdaFunctionRecommendation) SetEffectiveRecommendationPreferences(v *LambdaEffectiveRecommendationPreferences) *LambdaFunctionRecommendation {
	s.EffectiveRecommendationPreferences = v
	return s
}

// SetFinding sets the Finding field's value.
func (s *LambdaFunctionRecommendation) SetFinding(v string) *LambdaFunctionRecommendation {
	s.Finding = &v
	return s
}

// SetFindingReasonCodes sets the FindingReasonCodes field's value.
func (s *LambdaFunctionRecommendation) SetFindingReasonCodes(v []*string) *LambdaFunctionRecommendation {
	s.FindingReasonCodes = v
	return s
}

// SetFunctionArn sets the FunctionArn field's value.
func (s *LambdaFunctionRecommendation) SetFunctionArn(v string) *LambdaFunctionRecommendation {
	s.FunctionArn = &v
	return s
}

// SetFunctionVersion sets the FunctionVersion field's value.
func (s *LambdaFunctionRecommendation) SetFunctionVersion(v string) *LambdaFunctionRecommendation {
	s.FunctionVersion = &v
	return s
}

// SetLastRefreshTimestamp sets the LastRefreshTimestamp field's value.
func (s *LambdaFunctionRecommendation) SetLastRefreshTimestamp(v time.Time) *LambdaFunctionRecommendation {
	s.LastRefreshTimestamp = &v
	return s
}

// SetLookbackPeriodInDays sets the LookbackPeriodInDays field's value.
func (s *LambdaFunctionRecommendation) SetLookbackPeriodInDays(v float64) *LambdaFunctionRecommendation {
	s.LookbackPeriodInDays = &v
	return s
}

// SetMemorySizeRecommendationOptions sets the MemorySizeRecommendationOptions field's value.
func (s *LambdaFunctionRecommendation) SetMemorySizeRecommendationOptions(v []*LambdaFunctionMemoryRecommendationOption) *LambdaFunctionRecommendation {
	s.MemorySizeRecommendationOptions = v
	return s
}

// SetNumberOfInvocations sets the NumberOfInvocations field's value.
func (s *LambdaFunctionRecommendation) SetNumberOfInvocations(v int64) *LambdaFunctionRecommendation {
	s.NumberOfInvocations = &v
	return s
}

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

// SetUtilizationMetrics sets the UtilizationMetrics field's value.
func (s *LambdaFunctionRecommendation) SetUtilizationMetrics(v []*LambdaFunctionUtilizationMetric) *LambdaFunctionRecommendation {
	s.UtilizationMetrics = v
	return s
}

// Describes a filter that returns a more specific list of Lambda function recommendations.
// Use this filter with the GetLambdaFunctionRecommendations action.
//
// You can use EBSFilter with the GetEBSVolumeRecommendations action, JobFilter
// with the DescribeRecommendationExportJobs action, and Filter with the GetAutoScalingGroupRecommendations
// and GetEC2InstanceRecommendations actions.
type LambdaFunctionRecommendationFilter struct {
	_ struct{} `type:"structure"`

	// The name of the filter.
	//
	// Specify Finding to return recommendations with a specific finding classification
	// (for example, NotOptimized).
	//
	// Specify FindingReasonCode to return recommendations with a specific finding
	// reason code (for example, MemoryUnderprovisioned).
	//
	// You can filter your Lambda function recommendations by tag:key and tag-key
	// tags.
	//
	// A tag:key is a key and value combination of a tag assigned to your Lambda
	// function recommendations. Use the tag key in the filter name and the tag
	// value as the filter value. For example, to find all Lambda function recommendations
	// that have a tag with the key of Owner and the value of TeamA, specify tag:Owner
	// for the filter name and TeamA for the filter value.
	//
	// A tag-key is the key of a tag assigned to your Lambda function recommendations.
	// Use this filter to find all of your Lambda function recommendations that
	// have a tag with a specific key. This doesn’t consider the tag value. For
	// example, you can find your Lambda function recommendations with a tag key
	// value of Owner or without any tag keys assigned.
	Name *string `locationName:"name" type:"string" enum:"LambdaFunctionRecommendationFilterName"`

	// The value of the filter.
	//
	// The valid values for this parameter are as follows, depending on what you
	// specify for the name parameter:
	//
	//    * Specify Optimized, NotOptimized, or Unavailable if you specify the name
	//    parameter as Finding.
	//
	//    * Specify MemoryOverprovisioned, MemoryUnderprovisioned, InsufficientData,
	//    or Inconclusive if you specify the name parameter as FindingReasonCode.
	Values []*string `locationName:"values" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaFunctionRecommendationFilter) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaFunctionRecommendationFilter) GoString() string {
	return s.String()
}

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

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

// Describes a utilization metric of an Lambda function.
type LambdaFunctionUtilizationMetric struct {
	_ struct{} `type:"structure"`

	// The name of the utilization metric.
	//
	// The following utilization metrics are available:
	//
	//    * Duration - The amount of time that your function code spends processing
	//    an event.
	//
	//    * Memory - The amount of memory used per invocation.
	Name *string `locationName:"name" type:"string" enum:"LambdaFunctionMetricName"`

	// The statistic of the utilization metric.
	//
	// The Compute Optimizer API, Command Line Interface (CLI), and SDKs return
	// utilization metrics using only the Maximum statistic, which is the highest
	// value observed during the specified period.
	//
	// The Compute Optimizer console displays graphs for some utilization metrics
	// using the Average statistic, which is the value of Sum / SampleCount during
	// the specified period. For more information, see Viewing resource recommendations
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html)
	// in the Compute Optimizer User Guide. You can also get averaged utilization
	// metric data for your resources using Amazon CloudWatch. For more information,
	// see the Amazon CloudWatch User Guide (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html).
	Statistic *string `locationName:"statistic" type:"string" enum:"LambdaFunctionMetricStatistic"`

	// The value of the utilization metric.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaFunctionUtilizationMetric) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaFunctionUtilizationMetric) GoString() string {
	return s.String()
}

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

// SetStatistic sets the Statistic field's value.
func (s *LambdaFunctionUtilizationMetric) SetStatistic(v string) *LambdaFunctionUtilizationMetric {
	s.Statistic = &v
	return s
}

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

// Describes the savings estimation used for calculating savings opportunity
// for Lambda functions.
type LambdaSavingsEstimationMode struct {
	_ struct{} `type:"structure"`

	// Describes the source for calculation of savings opportunity for Lambda functions.
	Source *string `locationName:"source" type:"string" enum:"LambdaSavingsEstimationModeSource"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaSavingsEstimationMode) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaSavingsEstimationMode) GoString() string {
	return s.String()
}

// SetSource sets the Source field's value.
func (s *LambdaSavingsEstimationMode) SetSource(v string) *LambdaSavingsEstimationMode {
	s.Source = &v
	return s
}

// Describes the savings opportunity for Lambda functions recommendations after
// applying Savings Plans discounts.
//
// Savings opportunity represents the estimated monthly savings after applying
// Savings Plans discounts. You can achieve this by implementing a given Compute
// Optimizer recommendation.
type LambdaSavingsOpportunityAfterDiscounts struct {
	_ struct{} `type:"structure"`

	// The estimated monthly savings possible by adopting Compute Optimizer’s
	// Lambda function recommendations. This includes any applicable Savings Plans
	// discounts.
	EstimatedMonthlySavings *LambdaEstimatedMonthlySavings `locationName:"estimatedMonthlySavings" type:"structure"`

	// The estimated monthly savings possible as a percentage of monthly cost by
	// adopting Compute Optimizer’s Lambda function recommendations. This includes
	// any applicable Savings Plans discounts.
	SavingsOpportunityPercentage *float64 `locationName:"savingsOpportunityPercentage" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaSavingsOpportunityAfterDiscounts) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LambdaSavingsOpportunityAfterDiscounts) GoString() string {
	return s.String()
}

// SetEstimatedMonthlySavings sets the EstimatedMonthlySavings field's value.
func (s *LambdaSavingsOpportunityAfterDiscounts) SetEstimatedMonthlySavings(v *LambdaEstimatedMonthlySavings) *LambdaSavingsOpportunityAfterDiscounts {
	s.EstimatedMonthlySavings = v
	return s
}

// SetSavingsOpportunityPercentage sets the SavingsOpportunityPercentage field's value.
func (s *LambdaSavingsOpportunityAfterDiscounts) SetSavingsOpportunityPercentage(v float64) *LambdaSavingsOpportunityAfterDiscounts {
	s.SavingsOpportunityPercentage = &v
	return s
}

// Describes the configuration of a license for an Amazon EC2 instance.
type LicenseConfiguration struct {
	_ struct{} `type:"structure"`

	// The instance type used in the license.
	InstanceType *string `locationName:"instanceType" type:"string"`

	// The edition of the license for the application that runs on the instance.
	LicenseEdition *string `locationName:"licenseEdition" type:"string" enum:"LicenseEdition"`

	// The license type associated with the instance.
	LicenseModel *string `locationName:"licenseModel" type:"string" enum:"LicenseModel"`

	// The name of the license for the application that runs on the instance.
	LicenseName *string `locationName:"licenseName" type:"string" enum:"LicenseName"`

	// The version of the license for the application that runs on the instance.
	LicenseVersion *string `locationName:"licenseVersion" type:"string"`

	// The list of metric sources required to generate recommendations for commercial
	// software licenses.
	MetricsSource []*MetricSource `locationName:"metricsSource" type:"list"`

	// The current number of cores associated with the instance.
	NumberOfCores *int64 `locationName:"numberOfCores" type:"integer"`

	// The operating system of the instance.
	OperatingSystem *string `locationName:"operatingSystem" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LicenseConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LicenseConfiguration) GoString() string {
	return s.String()
}

// SetInstanceType sets the InstanceType field's value.
func (s *LicenseConfiguration) SetInstanceType(v string) *LicenseConfiguration {
	s.InstanceType = &v
	return s
}

// SetLicenseEdition sets the LicenseEdition field's value.
func (s *LicenseConfiguration) SetLicenseEdition(v string) *LicenseConfiguration {
	s.LicenseEdition = &v
	return s
}

// SetLicenseModel sets the LicenseModel field's value.
func (s *LicenseConfiguration) SetLicenseModel(v string) *LicenseConfiguration {
	s.LicenseModel = &v
	return s
}

// SetLicenseName sets the LicenseName field's value.
func (s *LicenseConfiguration) SetLicenseName(v string) *LicenseConfiguration {
	s.LicenseName = &v
	return s
}

// SetLicenseVersion sets the LicenseVersion field's value.
func (s *LicenseConfiguration) SetLicenseVersion(v string) *LicenseConfiguration {
	s.LicenseVersion = &v
	return s
}

// SetMetricsSource sets the MetricsSource field's value.
func (s *LicenseConfiguration) SetMetricsSource(v []*MetricSource) *LicenseConfiguration {
	s.MetricsSource = v
	return s
}

// SetNumberOfCores sets the NumberOfCores field's value.
func (s *LicenseConfiguration) SetNumberOfCores(v int64) *LicenseConfiguration {
	s.NumberOfCores = &v
	return s
}

// SetOperatingSystem sets the OperatingSystem field's value.
func (s *LicenseConfiguration) SetOperatingSystem(v string) *LicenseConfiguration {
	s.OperatingSystem = &v
	return s
}

// Describes a license recommendation for an EC2 instance.
type LicenseRecommendation struct {
	_ struct{} `type:"structure"`

	// The Amazon Web Services account ID of the license.
	AccountId *string `locationName:"accountId" type:"string"`

	// An object that describes the current configuration of an instance that runs
	// on a license.
	CurrentLicenseConfiguration *LicenseConfiguration `locationName:"currentLicenseConfiguration" type:"structure"`

	// The finding classification for an instance that runs on a license.
	//
	// Findings include:
	//
	//    * InsufficentMetrics — When Compute Optimizer detects that your CloudWatch
	//    Application Insights isn't enabled or is enabled with insufficient permissions.
	//
	//    * NotOptimized — When Compute Optimizer detects that your EC2 infrastructure
	//    isn't using any of the SQL server license features you're paying for,
	//    a license is considered not optimized.
	//
	//    * Optimized — When Compute Optimizer detects that all specifications
	//    of your license meet the performance requirements of your workload.
	Finding *string `locationName:"finding" type:"string" enum:"LicenseFinding"`

	// The reason for the finding classification for an instance that runs on a
	// license.
	//
	// Finding reason codes include:
	//
	//    * Optimized — All specifications of your license meet the performance
	//    requirements of your workload.
	//
	//    * LicenseOverprovisioned — A license is considered over-provisioned
	//    when your license can be downgraded while still meeting the performance
	//    requirements of your workload.
	//
	//    * InvalidCloudwatchApplicationInsights — CloudWatch Application Insights
	//    isn't configured properly.
	//
	//    * CloudwatchApplicationInsightsError — There is a CloudWatch Application
	//    Insights error.
	FindingReasonCodes []*string `locationName:"findingReasonCodes" type:"list" enum:"LicenseFindingReasonCode"`

	// The timestamp of when the license recommendation was last generated.
	LastRefreshTimestamp *time.Time `locationName:"lastRefreshTimestamp" type:"timestamp"`

	// An array of objects that describe the license recommendation options.
	LicenseRecommendationOptions []*LicenseRecommendationOption `locationName:"licenseRecommendationOptions" type:"list"`

	// The number of days for which utilization metrics were analyzed for an instance
	// that runs on a license.
	LookbackPeriodInDays *float64 `locationName:"lookbackPeriodInDays" type:"double"`

	// The ARN that identifies the Amazon EC2 instance.
	ResourceArn *string `locationName:"resourceArn" type:"string"`

	// A list of tags assigned to an EC2 instance.
	Tags []*Tag `locationName:"tags" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LicenseRecommendation) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LicenseRecommendation) GoString() string {
	return s.String()
}

// SetAccountId sets the AccountId field's value.
func (s *LicenseRecommendation) SetAccountId(v string) *LicenseRecommendation {
	s.AccountId = &v
	return s
}

// SetCurrentLicenseConfiguration sets the CurrentLicenseConfiguration field's value.
func (s *LicenseRecommendation) SetCurrentLicenseConfiguration(v *LicenseConfiguration) *LicenseRecommendation {
	s.CurrentLicenseConfiguration = v
	return s
}

// SetFinding sets the Finding field's value.
func (s *LicenseRecommendation) SetFinding(v string) *LicenseRecommendation {
	s.Finding = &v
	return s
}

// SetFindingReasonCodes sets the FindingReasonCodes field's value.
func (s *LicenseRecommendation) SetFindingReasonCodes(v []*string) *LicenseRecommendation {
	s.FindingReasonCodes = v
	return s
}

// SetLastRefreshTimestamp sets the LastRefreshTimestamp field's value.
func (s *LicenseRecommendation) SetLastRefreshTimestamp(v time.Time) *LicenseRecommendation {
	s.LastRefreshTimestamp = &v
	return s
}

// SetLicenseRecommendationOptions sets the LicenseRecommendationOptions field's value.
func (s *LicenseRecommendation) SetLicenseRecommendationOptions(v []*LicenseRecommendationOption) *LicenseRecommendation {
	s.LicenseRecommendationOptions = v
	return s
}

// SetLookbackPeriodInDays sets the LookbackPeriodInDays field's value.
func (s *LicenseRecommendation) SetLookbackPeriodInDays(v float64) *LicenseRecommendation {
	s.LookbackPeriodInDays = &v
	return s
}

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

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

// Describes a filter that returns a more specific list of license recommendations.
// Use this filter with the GetLicenseRecommendation action.
type LicenseRecommendationFilter struct {
	_ struct{} `type:"structure"`

	// The name of the filter.
	//
	// Specify Finding to return recommendations with a specific finding classification.
	//
	// Specify FindingReasonCode to return recommendations with a specific finding
	// reason code.
	//
	// You can filter your license recommendations by tag:key and tag-key tags.
	//
	// A tag:key is a key and value combination of a tag assigned to your license
	// recommendations. Use the tag key in the filter name and the tag value as
	// the filter value. For example, to find all license recommendations that have
	// a tag with the key of Owner and the value of TeamA, specify tag:Owner for
	// the filter name and TeamA for the filter value.
	//
	// A tag-key is the key of a tag assigned to your license recommendations. Use
	// this filter to find all of your license recommendations that have a tag with
	// a specific key. This doesn’t consider the tag value. For example, you can
	// find your license recommendations with a tag key value of Owner or without
	// any tag keys assigned.
	Name *string `locationName:"name" type:"string" enum:"LicenseRecommendationFilterName"`

	// The value of the filter.
	//
	// The valid values for this parameter are as follows, depending on what you
	// specify for the name parameter:
	//
	//    * If you specify the name parameter as Finding, then specify Optimized,
	//    NotOptimized, or InsufficentMetrics.
	//
	//    * If you specify the name parameter as FindingReasonCode, then specify
	//    Optimized, LicenseOverprovisioned, InvalidCloudwatchApplicationInsights,
	//    or CloudwatchApplicationInsightsError.
	Values []*string `locationName:"values" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LicenseRecommendationFilter) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LicenseRecommendationFilter) GoString() string {
	return s.String()
}

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

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

// Describes the recommendation options for licenses.
type LicenseRecommendationOption struct {
	_ struct{} `type:"structure"`

	// The recommended edition of the license for the application that runs on the
	// instance.
	LicenseEdition *string `locationName:"licenseEdition" type:"string" enum:"LicenseEdition"`

	// The recommended license type associated with the instance.
	LicenseModel *string `locationName:"licenseModel" type:"string" enum:"LicenseModel"`

	// The operating system of a license recommendation option.
	OperatingSystem *string `locationName:"operatingSystem" type:"string"`

	// The rank of the license recommendation option.
	//
	// The top recommendation option is ranked as 1.
	Rank *int64 `locationName:"rank" type:"integer"`

	// Describes the savings opportunity for recommendations of a given resource
	// type or for the recommendation option of an individual resource.
	//
	// Savings opportunity represents the estimated monthly savings you can achieve
	// by implementing a given Compute Optimizer recommendation.
	//
	// Savings opportunity data requires that you opt in to Cost Explorer, as well
	// as activate Receive Amazon EC2 resource recommendations in the Cost Explorer
	// preferences page. That creates a connection between Cost Explorer and Compute
	// Optimizer. With this connection, Cost Explorer generates savings estimates
	// considering the price of existing resources, the price of recommended resources,
	// and historical usage data. Estimated monthly savings reflects the projected
	// dollar savings associated with each of the recommendations generated. For
	// more information, see Enabling Cost Explorer (https://docs.aws.amazon.com/cost-management/latest/userguide/ce-enable.html)
	// and Optimizing your cost with Rightsizing Recommendations (https://docs.aws.amazon.com/cost-management/latest/userguide/ce-rightsizing.html)
	// in the Cost Management User Guide.
	SavingsOpportunity *SavingsOpportunity `locationName:"savingsOpportunity" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LicenseRecommendationOption) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LicenseRecommendationOption) GoString() string {
	return s.String()
}

// SetLicenseEdition sets the LicenseEdition field's value.
func (s *LicenseRecommendationOption) SetLicenseEdition(v string) *LicenseRecommendationOption {
	s.LicenseEdition = &v
	return s
}

// SetLicenseModel sets the LicenseModel field's value.
func (s *LicenseRecommendationOption) SetLicenseModel(v string) *LicenseRecommendationOption {
	s.LicenseModel = &v
	return s
}

// SetOperatingSystem sets the OperatingSystem field's value.
func (s *LicenseRecommendationOption) SetOperatingSystem(v string) *LicenseRecommendationOption {
	s.OperatingSystem = &v
	return s
}

// SetRank sets the Rank field's value.
func (s *LicenseRecommendationOption) SetRank(v int64) *LicenseRecommendationOption {
	s.Rank = &v
	return s
}

// SetSavingsOpportunity sets the SavingsOpportunity field's value.
func (s *LicenseRecommendationOption) SetSavingsOpportunity(v *SavingsOpportunity) *LicenseRecommendationOption {
	s.SavingsOpportunity = v
	return s
}

// The request exceeds a limit of the service.
type LimitExceededException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LimitExceededException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s LimitExceededException) GoString() string {
	return s.String()
}

func newErrorLimitExceededException(v protocol.ResponseMetadata) error {
	return &LimitExceededException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

// The memory size configurations of a container.
type MemorySizeConfiguration struct {
	_ struct{} `type:"structure"`

	// The amount of memory in the container.
	Memory *int64 `locationName:"memory" type:"integer"`

	// The limit of memory reserve for the container.
	MemoryReservation *int64 `locationName:"memoryReservation" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MemorySizeConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MemorySizeConfiguration) GoString() string {
	return s.String()
}

// SetMemory sets the Memory field's value.
func (s *MemorySizeConfiguration) SetMemory(v int64) *MemorySizeConfiguration {
	s.Memory = &v
	return s
}

// SetMemoryReservation sets the MemoryReservation field's value.
func (s *MemorySizeConfiguration) SetMemoryReservation(v int64) *MemorySizeConfiguration {
	s.MemoryReservation = &v
	return s
}

// The list of metric sources required to generate recommendations for commercial
// software licenses.
type MetricSource struct {
	_ struct{} `type:"structure"`

	// The name of the metric source provider.
	Provider *string `locationName:"provider" type:"string" enum:"MetricSourceProvider"`

	// The ARN of the metric source provider.
	ProviderArn *string `locationName:"providerArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MetricSource) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MetricSource) GoString() string {
	return s.String()
}

// SetProvider sets the Provider field's value.
func (s *MetricSource) SetProvider(v string) *MetricSource {
	s.Provider = &v
	return s
}

// SetProviderArn sets the ProviderArn field's value.
func (s *MetricSource) SetProviderArn(v string) *MetricSource {
	s.ProviderArn = &v
	return s
}

// The request must contain either a valid (registered) Amazon Web Services
// access key ID or X.509 certificate.
type MissingAuthenticationToken struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MissingAuthenticationToken) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MissingAuthenticationToken) GoString() string {
	return s.String()
}

func newErrorMissingAuthenticationToken(v protocol.ResponseMetadata) error {
	return &MissingAuthenticationToken{
		RespMetadata: v,
	}
}

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

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

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

func (s *MissingAuthenticationToken) 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 *MissingAuthenticationToken) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The account is not opted in to Compute Optimizer.
type OptInRequiredException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OptInRequiredException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OptInRequiredException) GoString() string {
	return s.String()
}

func newErrorOptInRequiredException(v protocol.ResponseMetadata) error {
	return &OptInRequiredException{
		RespMetadata: v,
	}
}

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

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

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

func (s *OptInRequiredException) 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 *OptInRequiredException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The preference to control which resource type values are considered when
// generating rightsizing recommendations. You can specify this preference as
// a combination of include and exclude lists. You must specify either an includeList
// or excludeList. If the preference is an empty set of resource type values,
// an error occurs. For more information, see Rightsizing recommendation preferences
// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/rightsizing-preferences.html)
// in the Compute Optimizer User Guide.
//
//   - This preference is only available for the Amazon EC2 instance and Auto
//     Scaling group resource types.
//
//   - Compute Optimizer only supports the customization of Ec2InstanceTypes.
type PreferredResource struct {
	_ struct{} `type:"structure"`

	// The preferred resource type values to exclude from the recommendation candidates.
	// If this isn’t specified, all supported resources are included by default.
	// You can specify up to 1000 values in this list.
	ExcludeList []*string `locationName:"excludeList" type:"list"`

	// The preferred resource type values to include in the recommendation candidates.
	// You can specify the exact resource type value, such as m5.large, or use wild
	// card expressions, such as m5. If this isn’t specified, all supported resources
	// are included by default. You can specify up to 1000 values in this list.
	IncludeList []*string `locationName:"includeList" type:"list"`

	// The type of preferred resource to customize.
	//
	// Compute Optimizer only supports the customization of Ec2InstanceTypes.
	Name *string `locationName:"name" type:"string" enum:"PreferredResourceName"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PreferredResource) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PreferredResource) GoString() string {
	return s.String()
}

// SetExcludeList sets the ExcludeList field's value.
func (s *PreferredResource) SetExcludeList(v []*string) *PreferredResource {
	s.ExcludeList = v
	return s
}

// SetIncludeList sets the IncludeList field's value.
func (s *PreferredResource) SetIncludeList(v []*string) *PreferredResource {
	s.IncludeList = v
	return s
}

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

// Describes a projected utilization metric of a recommendation option, such
// as an Amazon EC2 instance. This represents the projected utilization of a
// recommendation option had you used that resource during the analyzed period.
//
// Compare the utilization metric data of your resource against its projected
// utilization metric data to determine the performance difference between your
// current resource and the recommended option.
//
// The Cpu, Memory, GPU, and GPU_MEMORY metrics are the only projected utilization
// metrics returned when you run the GetEC2RecommendationProjectedMetrics action.
// Additionally, these metrics are only returned for resources with the unified
// CloudWatch agent installed on them. For more information, see Enabling Memory
// Utilization with the CloudWatch Agent (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent)
// and Enabling NVIDIA GPU utilization with the CloudWatch Agent (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#nvidia-cw-agent).
type ProjectedMetric struct {
	_ struct{} `type:"structure"`

	// The name of the projected utilization metric.
	//
	// The following projected utilization metrics are returned:
	//
	//    * Cpu - The projected percentage of allocated EC2 compute units that would
	//    be in use on the recommendation option had you used that resource during
	//    the analyzed period. This metric identifies the processing power required
	//    to run an application on the recommendation option. Depending on the instance
	//    type, tools in your operating system can show a lower percentage than
	//    CloudWatch when the instance is not allocated a full processor core.
	//
	//    * Memory - The percentage of memory that would be in use on the recommendation
	//    option had you used that resource during the analyzed period. This metric
	//    identifies the amount of memory required to run an application on the
	//    recommendation option. Units: Percent The Memory metric is only returned
	//    for resources with the unified CloudWatch agent installed on them. For
	//    more information, see Enabling Memory Utilization with the CloudWatch
	//    Agent (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent).
	//
	//    * GPU - The projected percentage of allocated GPUs if you adjust your
	//    configurations to Compute Optimizer's recommendation option.
	//
	//    * GPU_MEMORY - The projected percentage of total GPU memory if you adjust
	//    your configurations to Compute Optimizer's recommendation option. The
	//    GPU and GPU_MEMORY metrics are only returned for resources with the unified
	//    CloudWatch Agent installed on them. For more information, see Enabling
	//    NVIDIA GPU utilization with the CloudWatch Agent (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#nvidia-cw-agent).
	Name *string `locationName:"name" type:"string" enum:"MetricName"`

	// The timestamps of the projected utilization metric.
	Timestamps []*time.Time `locationName:"timestamps" type:"list"`

	// The values of the projected utilization metrics.
	Values []*float64 `locationName:"values" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ProjectedMetric) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ProjectedMetric) GoString() string {
	return s.String()
}

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

// SetTimestamps sets the Timestamps field's value.
func (s *ProjectedMetric) SetTimestamps(v []*time.Time) *ProjectedMetric {
	s.Timestamps = v
	return s
}

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

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

	// The status of the enhanced infrastructure metrics recommendation preference
	// to create or update.
	//
	// Specify the Active status to activate the preference, or specify Inactive
	// to deactivate the preference.
	//
	// For more information, see Enhanced infrastructure metrics (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
	// in the Compute Optimizer User Guide.
	EnhancedInfrastructureMetrics *string `locationName:"enhancedInfrastructureMetrics" type:"string" enum:"EnhancedInfrastructureMetrics"`

	// The provider of the external metrics recommendation preference to create
	// or update.
	//
	// Specify a valid provider in the source field to activate the preference.
	// To delete this preference, see the DeleteRecommendationPreferences action.
	//
	// This preference can only be set for the Ec2Instance resource type.
	//
	// For more information, see External metrics ingestion (https://docs.aws.amazon.com/compute-optimizer/latest/ug/external-metrics-ingestion.html)
	// in the Compute Optimizer User Guide.
	ExternalMetricsPreference *ExternalMetricsPreference `locationName:"externalMetricsPreference" type:"structure"`

	// The status of the inferred workload types recommendation preference to create
	// or update.
	//
	// The inferred workload type feature is active by default. To deactivate it,
	// create a recommendation preference.
	//
	// Specify the Inactive status to deactivate the feature, or specify Active
	// to activate it.
	//
	// For more information, see Inferred workload types (https://docs.aws.amazon.com/compute-optimizer/latest/ug/inferred-workload-types.html)
	// in the Compute Optimizer User Guide.
	InferredWorkloadTypes *string `locationName:"inferredWorkloadTypes" type:"string" enum:"InferredWorkloadTypesPreference"`

	// The preference to control the number of days the utilization metrics of the
	// Amazon Web Services resource are analyzed. When this preference isn't specified,
	// we use the default value DAYS_14.
	//
	// You can only set this preference for the Amazon EC2 instance and Auto Scaling
	// group resource types.
	LookBackPeriod *string `locationName:"lookBackPeriod" type:"string" enum:"LookBackPeriodPreference"`

	// The preference to control which resource type values are considered when
	// generating rightsizing recommendations. You can specify this preference as
	// a combination of include and exclude lists. You must specify either an includeList
	// or excludeList. If the preference is an empty set of resource type values,
	// an error occurs.
	//
	// You can only set this preference for the Amazon EC2 instance and Auto Scaling
	// group resource types.
	PreferredResources []*PreferredResource `locationName:"preferredResources" type:"list"`

	// The target resource type of the recommendation preference to create.
	//
	// The Ec2Instance option encompasses standalone instances and instances that
	// are part of Auto Scaling groups. The AutoScalingGroup option encompasses
	// only instances that are part of an Auto Scaling group.
	//
	// The valid values for this parameter are Ec2Instance and AutoScalingGroup.
	//
	// ResourceType is a required field
	ResourceType *string `locationName:"resourceType" type:"string" required:"true" enum:"ResourceType"`

	// The status of the savings estimation mode preference to create or update.
	//
	// Specify the AfterDiscounts status to activate the preference, or specify
	// BeforeDiscounts to deactivate the preference.
	//
	// Only the account manager or delegated administrator of your organization
	// can activate this preference.
	//
	// For more information, see Savings estimation mode (https://docs.aws.amazon.com/compute-optimizer/latest/ug/savings-estimation-mode.html)
	// in the Compute Optimizer User Guide.
	SavingsEstimationMode *string `locationName:"savingsEstimationMode" type:"string" enum:"SavingsEstimationMode"`

	// An object that describes the scope of the recommendation preference to create.
	//
	// You can create recommendation preferences at the organization level (for
	// management accounts of an organization only), account level, and resource
	// level. For more information, see Activating enhanced infrastructure metrics
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
	// in the Compute Optimizer User Guide.
	//
	// You cannot create recommendation preferences for Auto Scaling groups at the
	// organization and account levels. You can create recommendation preferences
	// for Auto Scaling groups only at the resource level by specifying a scope
	// name of ResourceArn and a scope value of the Auto Scaling group Amazon Resource
	// Name (ARN). This will configure the preference for all instances that are
	// part of the specified Auto Scaling group. You also cannot create recommendation
	// preferences at the resource level for instances that are part of an Auto
	// Scaling group. You can create recommendation preferences at the resource
	// level only for standalone instances.
	Scope *Scope `locationName:"scope" type:"structure"`

	// The preference to control the resource’s CPU utilization threshold, CPU
	// utilization headroom, and memory utilization headroom. When this preference
	// isn't specified, we use the following default values.
	//
	// CPU utilization:
	//
	//    * P99_5 for threshold
	//
	//    * PERCENT_20 for headroom
	//
	// Memory utilization:
	//
	//    * PERCENT_20 for headroom
	//
	//    * You can only set CPU and memory utilization preferences for the Amazon
	//    EC2 instance resource type.
	//
	//    * The threshold setting isn’t available for memory utilization.
	UtilizationPreferences []*UtilizationPreference `locationName:"utilizationPreferences" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutRecommendationPreferencesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutRecommendationPreferencesInput) GoString() string {
	return s.String()
}

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

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

// SetEnhancedInfrastructureMetrics sets the EnhancedInfrastructureMetrics field's value.
func (s *PutRecommendationPreferencesInput) SetEnhancedInfrastructureMetrics(v string) *PutRecommendationPreferencesInput {
	s.EnhancedInfrastructureMetrics = &v
	return s
}

// SetExternalMetricsPreference sets the ExternalMetricsPreference field's value.
func (s *PutRecommendationPreferencesInput) SetExternalMetricsPreference(v *ExternalMetricsPreference) *PutRecommendationPreferencesInput {
	s.ExternalMetricsPreference = v
	return s
}

// SetInferredWorkloadTypes sets the InferredWorkloadTypes field's value.
func (s *PutRecommendationPreferencesInput) SetInferredWorkloadTypes(v string) *PutRecommendationPreferencesInput {
	s.InferredWorkloadTypes = &v
	return s
}

// SetLookBackPeriod sets the LookBackPeriod field's value.
func (s *PutRecommendationPreferencesInput) SetLookBackPeriod(v string) *PutRecommendationPreferencesInput {
	s.LookBackPeriod = &v
	return s
}

// SetPreferredResources sets the PreferredResources field's value.
func (s *PutRecommendationPreferencesInput) SetPreferredResources(v []*PreferredResource) *PutRecommendationPreferencesInput {
	s.PreferredResources = v
	return s
}

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

// SetSavingsEstimationMode sets the SavingsEstimationMode field's value.
func (s *PutRecommendationPreferencesInput) SetSavingsEstimationMode(v string) *PutRecommendationPreferencesInput {
	s.SavingsEstimationMode = &v
	return s
}

// SetScope sets the Scope field's value.
func (s *PutRecommendationPreferencesInput) SetScope(v *Scope) *PutRecommendationPreferencesInput {
	s.Scope = v
	return s
}

// SetUtilizationPreferences sets the UtilizationPreferences field's value.
func (s *PutRecommendationPreferencesInput) SetUtilizationPreferences(v []*UtilizationPreference) *PutRecommendationPreferencesInput {
	s.UtilizationPreferences = v
	return s
}

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutRecommendationPreferencesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutRecommendationPreferencesOutput) GoString() string {
	return s.String()
}

// A summary of a finding reason code.
type ReasonCodeSummary struct {
	_ struct{} `type:"structure"`

	// The name of the finding reason code.
	Name *string `locationName:"name" type:"string" enum:"FindingReasonCode"`

	// The value of the finding reason code summary.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReasonCodeSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReasonCodeSummary) GoString() string {
	return s.String()
}

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

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

// Describes a recommendation export job.
//
// Use the DescribeRecommendationExportJobs action to view your recommendation
// export jobs.
//
// Use the ExportAutoScalingGroupRecommendations or ExportEC2InstanceRecommendations
// actions to request an export of your recommendations.
type RecommendationExportJob struct {
	_ struct{} `type:"structure"`

	// The timestamp of when the export job was created.
	CreationTimestamp *time.Time `locationName:"creationTimestamp" type:"timestamp"`

	// An object that describes the destination of the export file.
	Destination *ExportDestination `locationName:"destination" type:"structure"`

	// The reason for an export job failure.
	FailureReason *string `locationName:"failureReason" type:"string"`

	// The identification number of the export job.
	JobId *string `locationName:"jobId" type:"string"`

	// The timestamp of when the export job was last updated.
	LastUpdatedTimestamp *time.Time `locationName:"lastUpdatedTimestamp" type:"timestamp"`

	// The resource type of the exported recommendations.
	ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"`

	// The status of the export job.
	Status *string `locationName:"status" type:"string" enum:"JobStatus"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RecommendationExportJob) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RecommendationExportJob) GoString() string {
	return s.String()
}

// SetCreationTimestamp sets the CreationTimestamp field's value.
func (s *RecommendationExportJob) SetCreationTimestamp(v time.Time) *RecommendationExportJob {
	s.CreationTimestamp = &v
	return s
}

// SetDestination sets the Destination field's value.
func (s *RecommendationExportJob) SetDestination(v *ExportDestination) *RecommendationExportJob {
	s.Destination = v
	return s
}

// SetFailureReason sets the FailureReason field's value.
func (s *RecommendationExportJob) SetFailureReason(v string) *RecommendationExportJob {
	s.FailureReason = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *RecommendationExportJob) SetJobId(v string) *RecommendationExportJob {
	s.JobId = &v
	return s
}

// SetLastUpdatedTimestamp sets the LastUpdatedTimestamp field's value.
func (s *RecommendationExportJob) SetLastUpdatedTimestamp(v time.Time) *RecommendationExportJob {
	s.LastUpdatedTimestamp = &v
	return s
}

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

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

// Describes the recommendation preferences to return in the response of a GetAutoScalingGroupRecommendations,
// GetEC2InstanceRecommendations, and GetEC2RecommendationProjectedMetrics request.
type RecommendationPreferences struct {
	_ struct{} `type:"structure"`

	// Specifies the CPU vendor and architecture for Amazon EC2 instance and Auto
	// Scaling group recommendations.
	//
	// For example, when you specify AWS_ARM64 with:
	//
	//    * A GetEC2InstanceRecommendations or GetAutoScalingGroupRecommendations
	//    request, Compute Optimizer returns recommendations that consist of Graviton2
	//    instance types only.
	//
	//    * A GetEC2RecommendationProjectedMetrics request, Compute Optimizer returns
	//    projected utilization metrics for Graviton2 instance type recommendations
	//    only.
	//
	//    * A ExportEC2InstanceRecommendations or ExportAutoScalingGroupRecommendations
	//    request, Compute Optimizer exports recommendations that consist of Graviton2
	//    instance types only.
	CpuVendorArchitectures []*string `locationName:"cpuVendorArchitectures" type:"list" enum:"CpuVendorArchitecture"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RecommendationPreferences) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RecommendationPreferences) GoString() string {
	return s.String()
}

// SetCpuVendorArchitectures sets the CpuVendorArchitectures field's value.
func (s *RecommendationPreferences) SetCpuVendorArchitectures(v []*string) *RecommendationPreferences {
	s.CpuVendorArchitectures = v
	return s
}

// Describes a recommendation preference.
type RecommendationPreferencesDetail struct {
	_ struct{} `type:"structure"`

	// The status of the enhanced infrastructure metrics recommendation preference.
	//
	// When the recommendations page is refreshed, a status of Active confirms that
	// the preference is applied to the recommendations, and a status of Inactive
	// confirms that the preference isn't yet applied to recommendations.
	//
	// For more information, see Enhanced infrastructure metrics (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
	// in the Compute Optimizer User Guide.
	EnhancedInfrastructureMetrics *string `locationName:"enhancedInfrastructureMetrics" type:"string" enum:"EnhancedInfrastructureMetrics"`

	// An object that describes the external metrics recommendation preference.
	//
	// If the preference is applied in the latest recommendation refresh, an object
	// with a valid source value appears in the response. If the preference isn't
	// applied to the recommendations already, then this object doesn't appear in
	// the response.
	ExternalMetricsPreference *ExternalMetricsPreference `locationName:"externalMetricsPreference" type:"structure"`

	// The status of the inferred workload types recommendation preference.
	//
	// When the recommendations page is refreshed, a status of Active confirms that
	// the preference is applied to the recommendations, and a status of Inactive
	// confirms that the preference isn't yet applied to recommendations.
	InferredWorkloadTypes *string `locationName:"inferredWorkloadTypes" type:"string" enum:"InferredWorkloadTypesPreference"`

	// The preference to control the number of days the utilization metrics of the
	// Amazon Web Services resource are analyzed. If the preference isn’t set,
	// this object is null.
	LookBackPeriod *string `locationName:"lookBackPeriod" type:"string" enum:"LookBackPeriodPreference"`

	// The preference to control which resource type values are considered when
	// generating rightsizing recommendations. This object resolves any wildcard
	// expressions and returns the effective list of candidate resource type values.
	// If the preference isn’t set, this object is null.
	PreferredResources []*EffectivePreferredResource `locationName:"preferredResources" type:"list"`

	// The target resource type of the recommendation preference to create.
	//
	// The Ec2Instance option encompasses standalone instances and instances that
	// are part of Auto Scaling groups. The AutoScalingGroup option encompasses
	// only instances that are part of an Auto Scaling group.
	ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"`

	// Describes the savings estimation mode used for calculating savings opportunity.
	//
	// Only the account manager or delegated administrator of your organization
	// can activate this preference.
	SavingsEstimationMode *string `locationName:"savingsEstimationMode" type:"string" enum:"SavingsEstimationMode"`

	// An object that describes the scope of the recommendation preference.
	//
	// Recommendation preferences can be created at the organization level (for
	// management accounts of an organization only), account level, and resource
	// level. For more information, see Activating enhanced infrastructure metrics
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
	// in the Compute Optimizer User Guide.
	Scope *Scope `locationName:"scope" type:"structure"`

	// The preference to control the resource’s CPU utilization threshold, CPU
	// utilization headroom, and memory utilization headroom. If the preference
	// isn’t set, this object is null.
	//
	// This preference is only available for the Amazon EC2 instance resource type.
	UtilizationPreferences []*UtilizationPreference `locationName:"utilizationPreferences" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RecommendationPreferencesDetail) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RecommendationPreferencesDetail) GoString() string {
	return s.String()
}

// SetEnhancedInfrastructureMetrics sets the EnhancedInfrastructureMetrics field's value.
func (s *RecommendationPreferencesDetail) SetEnhancedInfrastructureMetrics(v string) *RecommendationPreferencesDetail {
	s.EnhancedInfrastructureMetrics = &v
	return s
}

// SetExternalMetricsPreference sets the ExternalMetricsPreference field's value.
func (s *RecommendationPreferencesDetail) SetExternalMetricsPreference(v *ExternalMetricsPreference) *RecommendationPreferencesDetail {
	s.ExternalMetricsPreference = v
	return s
}

// SetInferredWorkloadTypes sets the InferredWorkloadTypes field's value.
func (s *RecommendationPreferencesDetail) SetInferredWorkloadTypes(v string) *RecommendationPreferencesDetail {
	s.InferredWorkloadTypes = &v
	return s
}

// SetLookBackPeriod sets the LookBackPeriod field's value.
func (s *RecommendationPreferencesDetail) SetLookBackPeriod(v string) *RecommendationPreferencesDetail {
	s.LookBackPeriod = &v
	return s
}

// SetPreferredResources sets the PreferredResources field's value.
func (s *RecommendationPreferencesDetail) SetPreferredResources(v []*EffectivePreferredResource) *RecommendationPreferencesDetail {
	s.PreferredResources = v
	return s
}

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

// SetSavingsEstimationMode sets the SavingsEstimationMode field's value.
func (s *RecommendationPreferencesDetail) SetSavingsEstimationMode(v string) *RecommendationPreferencesDetail {
	s.SavingsEstimationMode = &v
	return s
}

// SetScope sets the Scope field's value.
func (s *RecommendationPreferencesDetail) SetScope(v *Scope) *RecommendationPreferencesDetail {
	s.Scope = v
	return s
}

// SetUtilizationPreferences sets the UtilizationPreferences field's value.
func (s *RecommendationPreferencesDetail) SetUtilizationPreferences(v []*UtilizationPreference) *RecommendationPreferencesDetail {
	s.UtilizationPreferences = v
	return s
}

// Describes the source of a recommendation, such as an Amazon EC2 instance
// or Auto Scaling group.
type RecommendationSource struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the recommendation source.
	RecommendationSourceArn *string `locationName:"recommendationSourceArn" type:"string"`

	// The resource type of the recommendation source.
	RecommendationSourceType *string `locationName:"recommendationSourceType" type:"string" enum:"RecommendationSourceType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RecommendationSource) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RecommendationSource) GoString() string {
	return s.String()
}

// SetRecommendationSourceArn sets the RecommendationSourceArn field's value.
func (s *RecommendationSource) SetRecommendationSourceArn(v string) *RecommendationSource {
	s.RecommendationSourceArn = &v
	return s
}

// SetRecommendationSourceType sets the RecommendationSourceType field's value.
func (s *RecommendationSource) SetRecommendationSourceType(v string) *RecommendationSource {
	s.RecommendationSourceType = &v
	return s
}

// A summary of a recommendation.
type RecommendationSummary struct {
	_ struct{} `type:"structure"`

	// The Amazon Web Services account ID of the recommendation summary.
	AccountId *string `locationName:"accountId" type:"string"`

	// An object that describes the performance risk ratings for a given resource
	// type.
	CurrentPerformanceRiskRatings *CurrentPerformanceRiskRatings `locationName:"currentPerformanceRiskRatings" type:"structure"`

	// An array of objects that describes the estimated monthly saving amounts for
	// the instances running on the specified inferredWorkloadTypes. The array contains
	// the top five savings opportunites for the instances that run inferred workload
	// types.
	InferredWorkloadSavings []*InferredWorkloadSaving `locationName:"inferredWorkloadSavings" type:"list"`

	// The resource type that the recommendation summary applies to.
	RecommendationResourceType *string `locationName:"recommendationResourceType" type:"string" enum:"RecommendationSourceType"`

	// An object that describes the savings opportunity for a given resource type.
	// Savings opportunity includes the estimated monthly savings amount and percentage.
	SavingsOpportunity *SavingsOpportunity `locationName:"savingsOpportunity" type:"structure"`

	// An array of objects that describe a recommendation summary.
	Summaries []*Summary `locationName:"summaries" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RecommendationSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RecommendationSummary) GoString() string {
	return s.String()
}

// SetAccountId sets the AccountId field's value.
func (s *RecommendationSummary) SetAccountId(v string) *RecommendationSummary {
	s.AccountId = &v
	return s
}

// SetCurrentPerformanceRiskRatings sets the CurrentPerformanceRiskRatings field's value.
func (s *RecommendationSummary) SetCurrentPerformanceRiskRatings(v *CurrentPerformanceRiskRatings) *RecommendationSummary {
	s.CurrentPerformanceRiskRatings = v
	return s
}

// SetInferredWorkloadSavings sets the InferredWorkloadSavings field's value.
func (s *RecommendationSummary) SetInferredWorkloadSavings(v []*InferredWorkloadSaving) *RecommendationSummary {
	s.InferredWorkloadSavings = v
	return s
}

// SetRecommendationResourceType sets the RecommendationResourceType field's value.
func (s *RecommendationSummary) SetRecommendationResourceType(v string) *RecommendationSummary {
	s.RecommendationResourceType = &v
	return s
}

// SetSavingsOpportunity sets the SavingsOpportunity field's value.
func (s *RecommendationSummary) SetSavingsOpportunity(v *SavingsOpportunity) *RecommendationSummary {
	s.SavingsOpportunity = v
	return s
}

// SetSummaries sets the Summaries field's value.
func (s *RecommendationSummary) SetSummaries(v []*Summary) *RecommendationSummary {
	s.Summaries = v
	return s
}

// Describes a projected utilization metric of a recommendation option.
//
// The Cpu and Memory metrics are the only projected utilization metrics returned
// when you run the GetEC2RecommendationProjectedMetrics action. Additionally,
// the Memory metric is returned only for resources that have the unified CloudWatch
// agent installed on them. For more information, see Enabling Memory Utilization
// with the CloudWatch Agent (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent).
type RecommendedOptionProjectedMetric struct {
	_ struct{} `type:"structure"`

	// An array of objects that describe a projected utilization metric.
	ProjectedMetrics []*ProjectedMetric `locationName:"projectedMetrics" type:"list"`

	// The rank of the recommendation option projected metric.
	//
	// The top recommendation option is ranked as 1.
	//
	// The projected metric rank correlates to the recommendation option rank. For
	// example, the projected metric ranked as 1 is related to the recommendation
	// option that is also ranked as 1 in the same response.
	Rank *int64 `locationName:"rank" type:"integer"`

	// The recommended instance type.
	RecommendedInstanceType *string `locationName:"recommendedInstanceType" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RecommendedOptionProjectedMetric) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RecommendedOptionProjectedMetric) GoString() string {
	return s.String()
}

// SetProjectedMetrics sets the ProjectedMetrics field's value.
func (s *RecommendedOptionProjectedMetric) SetProjectedMetrics(v []*ProjectedMetric) *RecommendedOptionProjectedMetric {
	s.ProjectedMetrics = v
	return s
}

// SetRank sets the Rank field's value.
func (s *RecommendedOptionProjectedMetric) SetRank(v int64) *RecommendedOptionProjectedMetric {
	s.Rank = &v
	return s
}

// SetRecommendedInstanceType sets the RecommendedInstanceType field's value.
func (s *RecommendedOptionProjectedMetric) SetRecommendedInstanceType(v string) *RecommendedOptionProjectedMetric {
	s.RecommendedInstanceType = &v
	return s
}

// A resource that is required for the action doesn't exist.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceNotFoundException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceNotFoundException) GoString() string {
	return s.String()
}

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

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

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

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

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

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

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

// Describes the destination Amazon Simple Storage Service (Amazon S3) bucket
// name and object keys of a recommendations export file, and its associated
// metadata file.
type S3Destination struct {
	_ struct{} `type:"structure"`

	// The name of the Amazon S3 bucket used as the destination of an export file.
	Bucket *string `locationName:"bucket" type:"string"`

	// The Amazon S3 bucket key of an export file.
	//
	// The key uniquely identifies the object, or export file, in the S3 bucket.
	Key *string `locationName:"key" type:"string"`

	// The Amazon S3 bucket key of a metadata file.
	//
	// The key uniquely identifies the object, or metadata file, in the S3 bucket.
	MetadataKey *string `locationName:"metadataKey" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s S3Destination) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s S3Destination) GoString() string {
	return s.String()
}

// SetBucket sets the Bucket field's value.
func (s *S3Destination) SetBucket(v string) *S3Destination {
	s.Bucket = &v
	return s
}

// SetKey sets the Key field's value.
func (s *S3Destination) SetKey(v string) *S3Destination {
	s.Key = &v
	return s
}

// SetMetadataKey sets the MetadataKey field's value.
func (s *S3Destination) SetMetadataKey(v string) *S3Destination {
	s.MetadataKey = &v
	return s
}

// Describes the destination Amazon Simple Storage Service (Amazon S3) bucket
// name and key prefix for a recommendations export job.
//
// You must create the destination Amazon S3 bucket for your recommendations
// export before you create the export job. Compute Optimizer does not create
// the S3 bucket for you. After you create the S3 bucket, ensure that it has
// the required permission policy to allow Compute Optimizer to write the export
// file to it. If you plan to specify an object prefix when you create the export
// job, you must include the object prefix in the policy that you add to the
// S3 bucket. For more information, see Amazon S3 Bucket Policy for Compute
// Optimizer (https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html)
// in the Compute Optimizer User Guide.
type S3DestinationConfig struct {
	_ struct{} `type:"structure"`

	// The name of the Amazon S3 bucket to use as the destination for an export
	// job.
	Bucket *string `locationName:"bucket" type:"string"`

	// The Amazon S3 bucket prefix for an export job.
	KeyPrefix *string `locationName:"keyPrefix" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s S3DestinationConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s S3DestinationConfig) GoString() string {
	return s.String()
}

// SetBucket sets the Bucket field's value.
func (s *S3DestinationConfig) SetBucket(v string) *S3DestinationConfig {
	s.Bucket = &v
	return s
}

// SetKeyPrefix sets the KeyPrefix field's value.
func (s *S3DestinationConfig) SetKeyPrefix(v string) *S3DestinationConfig {
	s.KeyPrefix = &v
	return s
}

// Describes the savings opportunity for recommendations of a given resource
// type or for the recommendation option of an individual resource.
//
// Savings opportunity represents the estimated monthly savings you can achieve
// by implementing a given Compute Optimizer recommendation.
//
// Savings opportunity data requires that you opt in to Cost Explorer, as well
// as activate Receive Amazon EC2 resource recommendations in the Cost Explorer
// preferences page. That creates a connection between Cost Explorer and Compute
// Optimizer. With this connection, Cost Explorer generates savings estimates
// considering the price of existing resources, the price of recommended resources,
// and historical usage data. Estimated monthly savings reflects the projected
// dollar savings associated with each of the recommendations generated. For
// more information, see Enabling Cost Explorer (https://docs.aws.amazon.com/cost-management/latest/userguide/ce-enable.html)
// and Optimizing your cost with Rightsizing Recommendations (https://docs.aws.amazon.com/cost-management/latest/userguide/ce-rightsizing.html)
// in the Cost Management User Guide.
type SavingsOpportunity struct {
	_ struct{} `type:"structure"`

	// An object that describes the estimated monthly savings amount possible by
	// adopting Compute Optimizer recommendations for a given resource. This is
	// based on the On-Demand instance pricing..
	EstimatedMonthlySavings *EstimatedMonthlySavings `locationName:"estimatedMonthlySavings" type:"structure"`

	// The estimated monthly savings possible as a percentage of monthly cost by
	// adopting Compute Optimizer recommendations for a given resource.
	SavingsOpportunityPercentage *float64 `locationName:"savingsOpportunityPercentage" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SavingsOpportunity) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SavingsOpportunity) GoString() string {
	return s.String()
}

// SetEstimatedMonthlySavings sets the EstimatedMonthlySavings field's value.
func (s *SavingsOpportunity) SetEstimatedMonthlySavings(v *EstimatedMonthlySavings) *SavingsOpportunity {
	s.EstimatedMonthlySavings = v
	return s
}

// SetSavingsOpportunityPercentage sets the SavingsOpportunityPercentage field's value.
func (s *SavingsOpportunity) SetSavingsOpportunityPercentage(v float64) *SavingsOpportunity {
	s.SavingsOpportunityPercentage = &v
	return s
}

// Describes the scope of a recommendation preference.
//
// Recommendation preferences can be created at the organization level (for
// management accounts of an organization only), account level, and resource
// level. For more information, see Activating enhanced infrastructure metrics
// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
// in the Compute Optimizer User Guide.
//
// You cannot create recommendation preferences for Auto Scaling groups at the
// organization and account levels. You can create recommendation preferences
// for Auto Scaling groups only at the resource level by specifying a scope
// name of ResourceArn and a scope value of the Auto Scaling group Amazon Resource
// Name (ARN). This will configure the preference for all instances that are
// part of the specified Auto Scaling group. You also cannot create recommendation
// preferences at the resource level for instances that are part of an Auto
// Scaling group. You can create recommendation preferences at the resource
// level only for standalone instances.
type Scope struct {
	_ struct{} `type:"structure"`

	// The name of the scope.
	//
	// The following scopes are possible:
	//
	//    * Organization - Specifies that the recommendation preference applies
	//    at the organization level, for all member accounts of an organization.
	//
	//    * AccountId - Specifies that the recommendation preference applies at
	//    the account level, for all resources of a given resource type in an account.
	//
	//    * ResourceArn - Specifies that the recommendation preference applies at
	//    the individual resource level.
	Name *string `locationName:"name" type:"string" enum:"ScopeName"`

	// The value of the scope.
	//
	// If you specified the name of the scope as:
	//
	//    * Organization - The value must be ALL_ACCOUNTS.
	//
	//    * AccountId - The value must be a 12-digit Amazon Web Services account
	//    ID.
	//
	//    * ResourceArn - The value must be the Amazon Resource Name (ARN) of an
	//    EC2 instance or an Auto Scaling group.
	//
	// Only EC2 instance and Auto Scaling group ARNs are currently supported.
	Value *string `locationName:"value" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Scope) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Scope) GoString() string {
	return s.String()
}

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

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

// The Amazon ECS service configurations used for recommendations.
type ServiceConfiguration struct {
	_ struct{} `type:"structure"`

	// Describes the Auto Scaling configuration methods for an Amazon ECS service.
	// This affects the generated recommendations. For example, if Auto Scaling
	// is configured on a service’s CPU, then Compute Optimizer doesn’t generate
	// CPU size recommendations.
	//
	// The Auto Scaling configuration methods include:
	//
	//    * TARGET_TRACKING_SCALING_CPU — If the Amazon ECS service is configured
	//    to use target scaling on CPU, Compute Optimizer doesn't generate CPU recommendations.
	//
	//    * TARGET_TRACKING_SCALING_MEMORY — If the Amazon ECS service is configured
	//    to use target scaling on memory, Compute Optimizer doesn't generate memory
	//    recommendations.
	//
	// For more information about step scaling and target scaling, see Step scaling
	// policies for Application Auto Scaling (https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html)
	// and Target tracking scaling policies for Application Auto Scaling (https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)
	// in the Application Auto Scaling User Guide.
	AutoScalingConfiguration *string `locationName:"autoScalingConfiguration" type:"string" enum:"AutoScalingConfiguration"`

	// The container configurations within a task of an Amazon ECS service.
	ContainerConfigurations []*ContainerConfiguration `locationName:"containerConfigurations" type:"list"`

	// The number of CPU units used by the tasks in the Amazon ECS service.
	Cpu *int64 `locationName:"cpu" type:"integer"`

	// The amount of memory used by the tasks in the Amazon ECS service.
	Memory *int64 `locationName:"memory" type:"integer"`

	// The task definition ARN used by the tasks in the Amazon ECS service.
	TaskDefinitionArn *string `locationName:"taskDefinitionArn" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceConfiguration) GoString() string {
	return s.String()
}

// SetAutoScalingConfiguration sets the AutoScalingConfiguration field's value.
func (s *ServiceConfiguration) SetAutoScalingConfiguration(v string) *ServiceConfiguration {
	s.AutoScalingConfiguration = &v
	return s
}

// SetContainerConfigurations sets the ContainerConfigurations field's value.
func (s *ServiceConfiguration) SetContainerConfigurations(v []*ContainerConfiguration) *ServiceConfiguration {
	s.ContainerConfigurations = v
	return s
}

// SetCpu sets the Cpu field's value.
func (s *ServiceConfiguration) SetCpu(v int64) *ServiceConfiguration {
	s.Cpu = &v
	return s
}

// SetMemory sets the Memory field's value.
func (s *ServiceConfiguration) SetMemory(v int64) *ServiceConfiguration {
	s.Memory = &v
	return s
}

// SetTaskDefinitionArn sets the TaskDefinitionArn field's value.
func (s *ServiceConfiguration) SetTaskDefinitionArn(v string) *ServiceConfiguration {
	s.TaskDefinitionArn = &v
	return s
}

// The request has failed due to a temporary failure of the server.
type ServiceUnavailableException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceUnavailableException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ServiceUnavailableException) GoString() string {
	return s.String()
}

func newErrorServiceUnavailableException(v protocol.ResponseMetadata) error {
	return &ServiceUnavailableException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

// The summary of a recommendation.
type Summary struct {
	_ struct{} `type:"structure"`

	// The finding classification of the recommendation.
	Name *string `locationName:"name" type:"string" enum:"Finding"`

	// An array of objects that summarize a finding reason code.
	ReasonCodeSummaries []*ReasonCodeSummary `locationName:"reasonCodeSummaries" type:"list"`

	// The value of the recommendation summary.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Summary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Summary) GoString() string {
	return s.String()
}

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

// SetReasonCodeSummaries sets the ReasonCodeSummaries field's value.
func (s *Summary) SetReasonCodeSummaries(v []*ReasonCodeSummary) *Summary {
	s.ReasonCodeSummaries = v
	return s
}

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

// A list of tag key and value pairs that you define.
type Tag struct {
	_ struct{} `type:"structure"`

	// One part of a key-value pair that makes up a tag. A key is a general label
	// that acts like a category for more specific tag values.
	Key *string `locationName:"key" type:"string"`

	// One part of a key-value pair that make up a tag. A value acts as a descriptor
	// within a tag category (key). The value can be empty or null.
	Value *string `locationName:"value" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tag) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tag) GoString() string {
	return s.String()
}

// SetKey sets the Key field's value.
func (s *Tag) SetKey(v string) *Tag {
	s.Key = &v
	return s
}

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

// The request was denied due to request throttling.
type ThrottlingException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThrottlingException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThrottlingException) GoString() string {
	return s.String()
}

func newErrorThrottlingException(v protocol.ResponseMetadata) error {
	return &ThrottlingException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

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

	// Indicates whether to enroll member accounts of the organization if the account
	// is the management account of an organization.
	IncludeMemberAccounts *bool `locationName:"includeMemberAccounts" type:"boolean"`

	// The new enrollment status of the account.
	//
	// The following status options are available:
	//
	//    * Active - Opts in your account to the Compute Optimizer service. Compute
	//    Optimizer begins analyzing the configuration and utilization metrics of
	//    your Amazon Web Services resources after you opt in. For more information,
	//    see Metrics analyzed by Compute Optimizer (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html)
	//    in the Compute Optimizer User Guide.
	//
	//    * Inactive - Opts out your account from the Compute Optimizer service.
	//    Your account's recommendations and related metrics data will be deleted
	//    from Compute Optimizer after you opt out.
	//
	// The Pending and Failed options cannot be used to update the enrollment status
	// of an account. They are returned in the response of a request to update the
	// enrollment status of an account.
	//
	// Status is a required field
	Status *string `locationName:"status" type:"string" required:"true" enum:"Status"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateEnrollmentStatusInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateEnrollmentStatusInput) GoString() string {
	return s.String()
}

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

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

// SetIncludeMemberAccounts sets the IncludeMemberAccounts field's value.
func (s *UpdateEnrollmentStatusInput) SetIncludeMemberAccounts(v bool) *UpdateEnrollmentStatusInput {
	s.IncludeMemberAccounts = &v
	return s
}

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

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

	// The enrollment status of the account.
	Status *string `locationName:"status" type:"string" enum:"Status"`

	// The reason for the enrollment status of the account. For example, an account
	// might show a status of Pending because member accounts of an organization
	// require more time to be enrolled in the service.
	StatusReason *string `locationName:"statusReason" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateEnrollmentStatusOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateEnrollmentStatusOutput) GoString() string {
	return s.String()
}

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

// SetStatusReason sets the StatusReason field's value.
func (s *UpdateEnrollmentStatusOutput) SetStatusReason(v string) *UpdateEnrollmentStatusOutput {
	s.StatusReason = &v
	return s
}

// Describes a utilization metric of a resource, such as an Amazon EC2 instance.
//
// Compare the utilization metric data of your resource against its projected
// utilization metric data to determine the performance difference between your
// current resource and the recommended option.
type UtilizationMetric struct {
	_ struct{} `type:"structure"`

	// The name of the utilization metric.
	//
	// The following utilization metrics are available:
	//
	//    * Cpu - The percentage of allocated EC2 compute units that are currently
	//    in use on the instance. This metric identifies the processing power required
	//    to run an application on the instance. Depending on the instance type,
	//    tools in your operating system can show a lower percentage than CloudWatch
	//    when the instance is not allocated a full processor core. Units: Percent
	//
	//    * Memory - The percentage of memory that is currently in use on the instance.
	//    This metric identifies the amount of memory required to run an application
	//    on the instance. Units: Percent The Memory metric is returned only for
	//    resources that have the unified CloudWatch agent installed on them. For
	//    more information, see Enabling Memory Utilization with the CloudWatch
	//    Agent (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent).
	//
	//    * GPU - The percentage of allocated GPUs that currently run on the instance.
	//
	//    * GPU_MEMORY - The percentage of total GPU memory that currently runs
	//    on the instance. The GPU and GPU_MEMORY metrics are only returned for
	//    resources with the unified CloudWatch Agent installed on them. For more
	//    information, see Enabling NVIDIA GPU utilization with the CloudWatch Agent
	//    (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#nvidia-cw-agent).
	//
	//    * EBS_READ_OPS_PER_SECOND - The completed read operations from all EBS
	//    volumes attached to the instance in a specified period of time. Unit:
	//    Count
	//
	//    * EBS_WRITE_OPS_PER_SECOND - The completed write operations to all EBS
	//    volumes attached to the instance in a specified period of time. Unit:
	//    Count
	//
	//    * EBS_READ_BYTES_PER_SECOND - The bytes read from all EBS volumes attached
	//    to the instance in a specified period of time. Unit: Bytes
	//
	//    * EBS_WRITE_BYTES_PER_SECOND - The bytes written to all EBS volumes attached
	//    to the instance in a specified period of time. Unit: Bytes
	//
	//    * DISK_READ_OPS_PER_SECOND - The completed read operations from all instance
	//    store volumes available to the instance in a specified period of time.
	//    If there are no instance store volumes, either the value is 0 or the metric
	//    is not reported.
	//
	//    * DISK_WRITE_OPS_PER_SECOND - The completed write operations from all
	//    instance store volumes available to the instance in a specified period
	//    of time. If there are no instance store volumes, either the value is 0
	//    or the metric is not reported.
	//
	//    * DISK_READ_BYTES_PER_SECOND - The bytes read from all instance store
	//    volumes available to the instance. This metric is used to determine the
	//    volume of the data the application reads from the disk of the instance.
	//    This can be used to determine the speed of the application. If there are
	//    no instance store volumes, either the value is 0 or the metric is not
	//    reported.
	//
	//    * DISK_WRITE_BYTES_PER_SECOND - The bytes written to all instance store
	//    volumes available to the instance. This metric is used to determine the
	//    volume of the data the application writes onto the disk of the instance.
	//    This can be used to determine the speed of the application. If there are
	//    no instance store volumes, either the value is 0 or the metric is not
	//    reported.
	//
	//    * NETWORK_IN_BYTES_PER_SECOND - The number of bytes received by the instance
	//    on all network interfaces. This metric identifies the volume of incoming
	//    network traffic to a single instance.
	//
	//    * NETWORK_OUT_BYTES_PER_SECOND - The number of bytes sent out by the instance
	//    on all network interfaces. This metric identifies the volume of outgoing
	//    network traffic from a single instance.
	//
	//    * NETWORK_PACKETS_IN_PER_SECOND - The number of packets received by the
	//    instance on all network interfaces. This metric identifies the volume
	//    of incoming traffic in terms of the number of packets on a single instance.
	//
	//    * NETWORK_PACKETS_OUT_PER_SECOND - The number of packets sent out by the
	//    instance on all network interfaces. This metric identifies the volume
	//    of outgoing traffic in terms of the number of packets on a single instance.
	Name *string `locationName:"name" type:"string" enum:"MetricName"`

	// The statistic of the utilization metric.
	//
	// The Compute Optimizer API, Command Line Interface (CLI), and SDKs return
	// utilization metrics using only the Maximum statistic, which is the highest
	// value observed during the specified period.
	//
	// The Compute Optimizer console displays graphs for some utilization metrics
	// using the Average statistic, which is the value of Sum / SampleCount during
	// the specified period. For more information, see Viewing resource recommendations
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html)
	// in the Compute Optimizer User Guide. You can also get averaged utilization
	// metric data for your resources using Amazon CloudWatch. For more information,
	// see the Amazon CloudWatch User Guide (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html).
	Statistic *string `locationName:"statistic" type:"string" enum:"MetricStatistic"`

	// The value of the utilization metric.
	Value *float64 `locationName:"value" type:"double"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UtilizationMetric) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UtilizationMetric) GoString() string {
	return s.String()
}

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

// SetStatistic sets the Statistic field's value.
func (s *UtilizationMetric) SetStatistic(v string) *UtilizationMetric {
	s.Statistic = &v
	return s
}

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

// The preference to control the resource’s CPU utilization thresholds - threshold
// and headroom.
//
// This preference is only available for the Amazon EC2 instance resource type.
type UtilizationPreference struct {
	_ struct{} `type:"structure"`

	// The name of the resource utilization metric name to customize.
	MetricName *string `locationName:"metricName" type:"string" enum:"CustomizableMetricName"`

	// The parameters to set when customizing the resource utilization thresholds.
	MetricParameters *CustomizableMetricParameters `locationName:"metricParameters" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UtilizationPreference) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UtilizationPreference) GoString() string {
	return s.String()
}

// SetMetricName sets the MetricName field's value.
func (s *UtilizationPreference) SetMetricName(v string) *UtilizationPreference {
	s.MetricName = &v
	return s
}

// SetMetricParameters sets the MetricParameters field's value.
func (s *UtilizationPreference) SetMetricParameters(v *CustomizableMetricParameters) *UtilizationPreference {
	s.MetricParameters = v
	return s
}

// Describes the configuration of an Amazon Elastic Block Store (Amazon EBS)
// volume.
type VolumeConfiguration struct {
	_ struct{} `type:"structure"`

	// Contains the image used to boot the instance during launch.
	RootVolume *bool `locationName:"rootVolume" type:"boolean"`

	// The baseline IOPS of the volume.
	VolumeBaselineIOPS *int64 `locationName:"volumeBaselineIOPS" type:"integer"`

	// The baseline throughput of the volume.
	VolumeBaselineThroughput *int64 `locationName:"volumeBaselineThroughput" type:"integer"`

	// The burst IOPS of the volume.
	VolumeBurstIOPS *int64 `locationName:"volumeBurstIOPS" type:"integer"`

	// The burst throughput of the volume.
	VolumeBurstThroughput *int64 `locationName:"volumeBurstThroughput" type:"integer"`

	// The size of the volume, in GiB.
	VolumeSize *int64 `locationName:"volumeSize" type:"integer"`

	// The volume type.
	//
	// This can be gp2 for General Purpose SSD, io1 or io2 for Provisioned IOPS
	// SSD, st1 for Throughput Optimized HDD, sc1 for Cold HDD, or standard for
	// Magnetic volumes.
	VolumeType *string `locationName:"volumeType" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VolumeConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VolumeConfiguration) GoString() string {
	return s.String()
}

// SetRootVolume sets the RootVolume field's value.
func (s *VolumeConfiguration) SetRootVolume(v bool) *VolumeConfiguration {
	s.RootVolume = &v
	return s
}

// SetVolumeBaselineIOPS sets the VolumeBaselineIOPS field's value.
func (s *VolumeConfiguration) SetVolumeBaselineIOPS(v int64) *VolumeConfiguration {
	s.VolumeBaselineIOPS = &v
	return s
}

// SetVolumeBaselineThroughput sets the VolumeBaselineThroughput field's value.
func (s *VolumeConfiguration) SetVolumeBaselineThroughput(v int64) *VolumeConfiguration {
	s.VolumeBaselineThroughput = &v
	return s
}

// SetVolumeBurstIOPS sets the VolumeBurstIOPS field's value.
func (s *VolumeConfiguration) SetVolumeBurstIOPS(v int64) *VolumeConfiguration {
	s.VolumeBurstIOPS = &v
	return s
}

// SetVolumeBurstThroughput sets the VolumeBurstThroughput field's value.
func (s *VolumeConfiguration) SetVolumeBurstThroughput(v int64) *VolumeConfiguration {
	s.VolumeBurstThroughput = &v
	return s
}

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

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

// Describes an Amazon Elastic Block Store (Amazon EBS) volume recommendation.
type VolumeRecommendation struct {
	_ struct{} `type:"structure"`

	// The Amazon Web Services account ID of the volume.
	AccountId *string `locationName:"accountId" type:"string"`

	// An array of objects that describe the current configuration of the volume.
	CurrentConfiguration *VolumeConfiguration `locationName:"currentConfiguration" type:"structure"`

	// The risk of the current EBS volume not meeting the performance needs of its
	// workloads. The higher the risk, the more likely the current EBS volume doesn't
	// have sufficient capacity.
	CurrentPerformanceRisk *string `locationName:"currentPerformanceRisk" type:"string" enum:"CurrentPerformanceRisk"`

	// Describes the effective recommendation preferences for Amazon EBS volume.
	EffectiveRecommendationPreferences *EBSEffectiveRecommendationPreferences `locationName:"effectiveRecommendationPreferences" type:"structure"`

	// The finding classification of the volume.
	//
	// Findings for volumes include:
	//
	//    * NotOptimized —A volume is considered not optimized when Compute Optimizer
	//    identifies a recommendation that can provide better performance for your
	//    workload.
	//
	//    * Optimized —An volume is considered optimized when Compute Optimizer
	//    determines that the volume is correctly provisioned to run your workload
	//    based on the chosen volume type. For optimized resources, Compute Optimizer
	//    might recommend a new generation volume type.
	Finding *string `locationName:"finding" type:"string" enum:"EBSFinding"`

	// The timestamp of when the volume recommendation was last generated.
	LastRefreshTimestamp *time.Time `locationName:"lastRefreshTimestamp" type:"timestamp"`

	// The number of days for which utilization metrics were analyzed for the volume.
	LookBackPeriodInDays *float64 `locationName:"lookBackPeriodInDays" type:"double"`

	// A list of tags assigned to your Amazon EBS volume recommendations.
	Tags []*Tag `locationName:"tags" type:"list"`

	// An array of objects that describe the utilization metrics of the volume.
	UtilizationMetrics []*EBSUtilizationMetric `locationName:"utilizationMetrics" type:"list"`

	// The Amazon Resource Name (ARN) of the current volume.
	VolumeArn *string `locationName:"volumeArn" type:"string"`

	// An array of objects that describe the recommendation options for the volume.
	VolumeRecommendationOptions []*VolumeRecommendationOption `locationName:"volumeRecommendationOptions" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VolumeRecommendation) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VolumeRecommendation) GoString() string {
	return s.String()
}

// SetAccountId sets the AccountId field's value.
func (s *VolumeRecommendation) SetAccountId(v string) *VolumeRecommendation {
	s.AccountId = &v
	return s
}

// SetCurrentConfiguration sets the CurrentConfiguration field's value.
func (s *VolumeRecommendation) SetCurrentConfiguration(v *VolumeConfiguration) *VolumeRecommendation {
	s.CurrentConfiguration = v
	return s
}

// SetCurrentPerformanceRisk sets the CurrentPerformanceRisk field's value.
func (s *VolumeRecommendation) SetCurrentPerformanceRisk(v string) *VolumeRecommendation {
	s.CurrentPerformanceRisk = &v
	return s
}

// SetEffectiveRecommendationPreferences sets the EffectiveRecommendationPreferences field's value.
func (s *VolumeRecommendation) SetEffectiveRecommendationPreferences(v *EBSEffectiveRecommendationPreferences) *VolumeRecommendation {
	s.EffectiveRecommendationPreferences = v
	return s
}

// SetFinding sets the Finding field's value.
func (s *VolumeRecommendation) SetFinding(v string) *VolumeRecommendation {
	s.Finding = &v
	return s
}

// SetLastRefreshTimestamp sets the LastRefreshTimestamp field's value.
func (s *VolumeRecommendation) SetLastRefreshTimestamp(v time.Time) *VolumeRecommendation {
	s.LastRefreshTimestamp = &v
	return s
}

// SetLookBackPeriodInDays sets the LookBackPeriodInDays field's value.
func (s *VolumeRecommendation) SetLookBackPeriodInDays(v float64) *VolumeRecommendation {
	s.LookBackPeriodInDays = &v
	return s
}

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

// SetUtilizationMetrics sets the UtilizationMetrics field's value.
func (s *VolumeRecommendation) SetUtilizationMetrics(v []*EBSUtilizationMetric) *VolumeRecommendation {
	s.UtilizationMetrics = v
	return s
}

// SetVolumeArn sets the VolumeArn field's value.
func (s *VolumeRecommendation) SetVolumeArn(v string) *VolumeRecommendation {
	s.VolumeArn = &v
	return s
}

// SetVolumeRecommendationOptions sets the VolumeRecommendationOptions field's value.
func (s *VolumeRecommendation) SetVolumeRecommendationOptions(v []*VolumeRecommendationOption) *VolumeRecommendation {
	s.VolumeRecommendationOptions = v
	return s
}

// Describes a recommendation option for an Amazon Elastic Block Store (Amazon
// EBS) instance.
type VolumeRecommendationOption struct {
	_ struct{} `type:"structure"`

	// An array of objects that describe a volume configuration.
	Configuration *VolumeConfiguration `locationName:"configuration" type:"structure"`

	// The performance risk of the volume recommendation option.
	//
	// Performance risk is the likelihood of the recommended volume type meeting
	// the performance requirement of your workload.
	//
	// The value ranges from 0 - 4, with 0 meaning that the recommended resource
	// is predicted to always provide enough hardware capability. The higher the
	// performance risk is, the more likely you should validate whether the recommendation
	// will meet the performance requirements of your workload before migrating
	// your resource.
	PerformanceRisk *float64 `locationName:"performanceRisk" type:"double"`

	// The rank of the volume recommendation option.
	//
	// The top recommendation option is ranked as 1.
	Rank *int64 `locationName:"rank" type:"integer"`

	// An object that describes the savings opportunity for the EBS volume recommendation
	// option. Savings opportunity includes the estimated monthly savings amount
	// and percentage.
	SavingsOpportunity *SavingsOpportunity `locationName:"savingsOpportunity" type:"structure"`

	// An object that describes the savings opportunity for the Amazon EBS volume
	// recommendation option with specific discounts. Savings opportunity includes
	// the estimated monthly savings and percentage.
	SavingsOpportunityAfterDiscounts *EBSSavingsOpportunityAfterDiscounts `locationName:"savingsOpportunityAfterDiscounts" type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VolumeRecommendationOption) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VolumeRecommendationOption) GoString() string {
	return s.String()
}

// SetConfiguration sets the Configuration field's value.
func (s *VolumeRecommendationOption) SetConfiguration(v *VolumeConfiguration) *VolumeRecommendationOption {
	s.Configuration = v
	return s
}

// SetPerformanceRisk sets the PerformanceRisk field's value.
func (s *VolumeRecommendationOption) SetPerformanceRisk(v float64) *VolumeRecommendationOption {
	s.PerformanceRisk = &v
	return s
}

// SetRank sets the Rank field's value.
func (s *VolumeRecommendationOption) SetRank(v int64) *VolumeRecommendationOption {
	s.Rank = &v
	return s
}

// SetSavingsOpportunity sets the SavingsOpportunity field's value.
func (s *VolumeRecommendationOption) SetSavingsOpportunity(v *SavingsOpportunity) *VolumeRecommendationOption {
	s.SavingsOpportunity = v
	return s
}

// SetSavingsOpportunityAfterDiscounts sets the SavingsOpportunityAfterDiscounts field's value.
func (s *VolumeRecommendationOption) SetSavingsOpportunityAfterDiscounts(v *EBSSavingsOpportunityAfterDiscounts) *VolumeRecommendationOption {
	s.SavingsOpportunityAfterDiscounts = v
	return s
}

const (
	// AutoScalingConfigurationTargetTrackingScalingCpu is a AutoScalingConfiguration enum value
	AutoScalingConfigurationTargetTrackingScalingCpu = "TargetTrackingScalingCpu"

	// AutoScalingConfigurationTargetTrackingScalingMemory is a AutoScalingConfiguration enum value
	AutoScalingConfigurationTargetTrackingScalingMemory = "TargetTrackingScalingMemory"
)

// AutoScalingConfiguration_Values returns all elements of the AutoScalingConfiguration enum
func AutoScalingConfiguration_Values() []string {
	return []string{
		AutoScalingConfigurationTargetTrackingScalingCpu,
		AutoScalingConfigurationTargetTrackingScalingMemory,
	}
}

const (
	// CpuVendorArchitectureAwsArm64 is a CpuVendorArchitecture enum value
	CpuVendorArchitectureAwsArm64 = "AWS_ARM64"

	// CpuVendorArchitectureCurrent is a CpuVendorArchitecture enum value
	CpuVendorArchitectureCurrent = "CURRENT"
)

// CpuVendorArchitecture_Values returns all elements of the CpuVendorArchitecture enum
func CpuVendorArchitecture_Values() []string {
	return []string{
		CpuVendorArchitectureAwsArm64,
		CpuVendorArchitectureCurrent,
	}
}

const (
	// CurrencyUsd is a Currency enum value
	CurrencyUsd = "USD"

	// CurrencyCny is a Currency enum value
	CurrencyCny = "CNY"
)

// Currency_Values returns all elements of the Currency enum
func Currency_Values() []string {
	return []string{
		CurrencyUsd,
		CurrencyCny,
	}
}

const (
	// CurrentPerformanceRiskVeryLow is a CurrentPerformanceRisk enum value
	CurrentPerformanceRiskVeryLow = "VeryLow"

	// CurrentPerformanceRiskLow is a CurrentPerformanceRisk enum value
	CurrentPerformanceRiskLow = "Low"

	// CurrentPerformanceRiskMedium is a CurrentPerformanceRisk enum value
	CurrentPerformanceRiskMedium = "Medium"

	// CurrentPerformanceRiskHigh is a CurrentPerformanceRisk enum value
	CurrentPerformanceRiskHigh = "High"
)

// CurrentPerformanceRisk_Values returns all elements of the CurrentPerformanceRisk enum
func CurrentPerformanceRisk_Values() []string {
	return []string{
		CurrentPerformanceRiskVeryLow,
		CurrentPerformanceRiskLow,
		CurrentPerformanceRiskMedium,
		CurrentPerformanceRiskHigh,
	}
}

const (
	// CustomizableMetricHeadroomPercent30 is a CustomizableMetricHeadroom enum value
	CustomizableMetricHeadroomPercent30 = "PERCENT_30"

	// CustomizableMetricHeadroomPercent20 is a CustomizableMetricHeadroom enum value
	CustomizableMetricHeadroomPercent20 = "PERCENT_20"

	// CustomizableMetricHeadroomPercent10 is a CustomizableMetricHeadroom enum value
	CustomizableMetricHeadroomPercent10 = "PERCENT_10"

	// CustomizableMetricHeadroomPercent0 is a CustomizableMetricHeadroom enum value
	CustomizableMetricHeadroomPercent0 = "PERCENT_0"
)

// CustomizableMetricHeadroom_Values returns all elements of the CustomizableMetricHeadroom enum
func CustomizableMetricHeadroom_Values() []string {
	return []string{
		CustomizableMetricHeadroomPercent30,
		CustomizableMetricHeadroomPercent20,
		CustomizableMetricHeadroomPercent10,
		CustomizableMetricHeadroomPercent0,
	}
}

const (
	// CustomizableMetricNameCpuUtilization is a CustomizableMetricName enum value
	CustomizableMetricNameCpuUtilization = "CpuUtilization"

	// CustomizableMetricNameMemoryUtilization is a CustomizableMetricName enum value
	CustomizableMetricNameMemoryUtilization = "MemoryUtilization"
)

// CustomizableMetricName_Values returns all elements of the CustomizableMetricName enum
func CustomizableMetricName_Values() []string {
	return []string{
		CustomizableMetricNameCpuUtilization,
		CustomizableMetricNameMemoryUtilization,
	}
}

const (
	// CustomizableMetricThresholdP90 is a CustomizableMetricThreshold enum value
	CustomizableMetricThresholdP90 = "P90"

	// CustomizableMetricThresholdP95 is a CustomizableMetricThreshold enum value
	CustomizableMetricThresholdP95 = "P95"

	// CustomizableMetricThresholdP995 is a CustomizableMetricThreshold enum value
	CustomizableMetricThresholdP995 = "P99_5"
)

// CustomizableMetricThreshold_Values returns all elements of the CustomizableMetricThreshold enum
func CustomizableMetricThreshold_Values() []string {
	return []string{
		CustomizableMetricThresholdP90,
		CustomizableMetricThresholdP95,
		CustomizableMetricThresholdP995,
	}
}

const (
	// EBSFilterNameFinding is a EBSFilterName enum value
	EBSFilterNameFinding = "Finding"
)

// EBSFilterName_Values returns all elements of the EBSFilterName enum
func EBSFilterName_Values() []string {
	return []string{
		EBSFilterNameFinding,
	}
}

const (
	// EBSFindingOptimized is a EBSFinding enum value
	EBSFindingOptimized = "Optimized"

	// EBSFindingNotOptimized is a EBSFinding enum value
	EBSFindingNotOptimized = "NotOptimized"
)

// EBSFinding_Values returns all elements of the EBSFinding enum
func EBSFinding_Values() []string {
	return []string{
		EBSFindingOptimized,
		EBSFindingNotOptimized,
	}
}

const (
	// EBSMetricNameVolumeReadOpsPerSecond is a EBSMetricName enum value
	EBSMetricNameVolumeReadOpsPerSecond = "VolumeReadOpsPerSecond"

	// EBSMetricNameVolumeWriteOpsPerSecond is a EBSMetricName enum value
	EBSMetricNameVolumeWriteOpsPerSecond = "VolumeWriteOpsPerSecond"

	// EBSMetricNameVolumeReadBytesPerSecond is a EBSMetricName enum value
	EBSMetricNameVolumeReadBytesPerSecond = "VolumeReadBytesPerSecond"

	// EBSMetricNameVolumeWriteBytesPerSecond is a EBSMetricName enum value
	EBSMetricNameVolumeWriteBytesPerSecond = "VolumeWriteBytesPerSecond"
)

// EBSMetricName_Values returns all elements of the EBSMetricName enum
func EBSMetricName_Values() []string {
	return []string{
		EBSMetricNameVolumeReadOpsPerSecond,
		EBSMetricNameVolumeWriteOpsPerSecond,
		EBSMetricNameVolumeReadBytesPerSecond,
		EBSMetricNameVolumeWriteBytesPerSecond,
	}
}

const (
	// EBSSavingsEstimationModeSourcePublicPricing is a EBSSavingsEstimationModeSource enum value
	EBSSavingsEstimationModeSourcePublicPricing = "PublicPricing"

	// EBSSavingsEstimationModeSourceCostExplorerRightsizing is a EBSSavingsEstimationModeSource enum value
	EBSSavingsEstimationModeSourceCostExplorerRightsizing = "CostExplorerRightsizing"

	// EBSSavingsEstimationModeSourceCostOptimizationHub is a EBSSavingsEstimationModeSource enum value
	EBSSavingsEstimationModeSourceCostOptimizationHub = "CostOptimizationHub"
)

// EBSSavingsEstimationModeSource_Values returns all elements of the EBSSavingsEstimationModeSource enum
func EBSSavingsEstimationModeSource_Values() []string {
	return []string{
		EBSSavingsEstimationModeSourcePublicPricing,
		EBSSavingsEstimationModeSourceCostExplorerRightsizing,
		EBSSavingsEstimationModeSourceCostOptimizationHub,
	}
}

const (
	// ECSSavingsEstimationModeSourcePublicPricing is a ECSSavingsEstimationModeSource enum value
	ECSSavingsEstimationModeSourcePublicPricing = "PublicPricing"

	// ECSSavingsEstimationModeSourceCostExplorerRightsizing is a ECSSavingsEstimationModeSource enum value
	ECSSavingsEstimationModeSourceCostExplorerRightsizing = "CostExplorerRightsizing"

	// ECSSavingsEstimationModeSourceCostOptimizationHub is a ECSSavingsEstimationModeSource enum value
	ECSSavingsEstimationModeSourceCostOptimizationHub = "CostOptimizationHub"
)

// ECSSavingsEstimationModeSource_Values returns all elements of the ECSSavingsEstimationModeSource enum
func ECSSavingsEstimationModeSource_Values() []string {
	return []string{
		ECSSavingsEstimationModeSourcePublicPricing,
		ECSSavingsEstimationModeSourceCostExplorerRightsizing,
		ECSSavingsEstimationModeSourceCostOptimizationHub,
	}
}

const (
	// ECSServiceLaunchTypeEc2 is a ECSServiceLaunchType enum value
	ECSServiceLaunchTypeEc2 = "EC2"

	// ECSServiceLaunchTypeFargate is a ECSServiceLaunchType enum value
	ECSServiceLaunchTypeFargate = "Fargate"
)

// ECSServiceLaunchType_Values returns all elements of the ECSServiceLaunchType enum
func ECSServiceLaunchType_Values() []string {
	return []string{
		ECSServiceLaunchTypeEc2,
		ECSServiceLaunchTypeFargate,
	}
}

const (
	// ECSServiceMetricNameCpu is a ECSServiceMetricName enum value
	ECSServiceMetricNameCpu = "Cpu"

	// ECSServiceMetricNameMemory is a ECSServiceMetricName enum value
	ECSServiceMetricNameMemory = "Memory"
)

// ECSServiceMetricName_Values returns all elements of the ECSServiceMetricName enum
func ECSServiceMetricName_Values() []string {
	return []string{
		ECSServiceMetricNameCpu,
		ECSServiceMetricNameMemory,
	}
}

const (
	// ECSServiceMetricStatisticMaximum is a ECSServiceMetricStatistic enum value
	ECSServiceMetricStatisticMaximum = "Maximum"

	// ECSServiceMetricStatisticAverage is a ECSServiceMetricStatistic enum value
	ECSServiceMetricStatisticAverage = "Average"
)

// ECSServiceMetricStatistic_Values returns all elements of the ECSServiceMetricStatistic enum
func ECSServiceMetricStatistic_Values() []string {
	return []string{
		ECSServiceMetricStatisticMaximum,
		ECSServiceMetricStatisticAverage,
	}
}

const (
	// ECSServiceRecommendationFilterNameFinding is a ECSServiceRecommendationFilterName enum value
	ECSServiceRecommendationFilterNameFinding = "Finding"

	// ECSServiceRecommendationFilterNameFindingReasonCode is a ECSServiceRecommendationFilterName enum value
	ECSServiceRecommendationFilterNameFindingReasonCode = "FindingReasonCode"
)

// ECSServiceRecommendationFilterName_Values returns all elements of the ECSServiceRecommendationFilterName enum
func ECSServiceRecommendationFilterName_Values() []string {
	return []string{
		ECSServiceRecommendationFilterNameFinding,
		ECSServiceRecommendationFilterNameFindingReasonCode,
	}
}

const (
	// ECSServiceRecommendationFindingOptimized is a ECSServiceRecommendationFinding enum value
	ECSServiceRecommendationFindingOptimized = "Optimized"

	// ECSServiceRecommendationFindingUnderprovisioned is a ECSServiceRecommendationFinding enum value
	ECSServiceRecommendationFindingUnderprovisioned = "Underprovisioned"

	// ECSServiceRecommendationFindingOverprovisioned is a ECSServiceRecommendationFinding enum value
	ECSServiceRecommendationFindingOverprovisioned = "Overprovisioned"
)

// ECSServiceRecommendationFinding_Values returns all elements of the ECSServiceRecommendationFinding enum
func ECSServiceRecommendationFinding_Values() []string {
	return []string{
		ECSServiceRecommendationFindingOptimized,
		ECSServiceRecommendationFindingUnderprovisioned,
		ECSServiceRecommendationFindingOverprovisioned,
	}
}

const (
	// ECSServiceRecommendationFindingReasonCodeMemoryOverprovisioned is a ECSServiceRecommendationFindingReasonCode enum value
	ECSServiceRecommendationFindingReasonCodeMemoryOverprovisioned = "MemoryOverprovisioned"

	// ECSServiceRecommendationFindingReasonCodeMemoryUnderprovisioned is a ECSServiceRecommendationFindingReasonCode enum value
	ECSServiceRecommendationFindingReasonCodeMemoryUnderprovisioned = "MemoryUnderprovisioned"

	// ECSServiceRecommendationFindingReasonCodeCpuoverprovisioned is a ECSServiceRecommendationFindingReasonCode enum value
	ECSServiceRecommendationFindingReasonCodeCpuoverprovisioned = "CPUOverprovisioned"

	// ECSServiceRecommendationFindingReasonCodeCpuunderprovisioned is a ECSServiceRecommendationFindingReasonCode enum value
	ECSServiceRecommendationFindingReasonCodeCpuunderprovisioned = "CPUUnderprovisioned"
)

// ECSServiceRecommendationFindingReasonCode_Values returns all elements of the ECSServiceRecommendationFindingReasonCode enum
func ECSServiceRecommendationFindingReasonCode_Values() []string {
	return []string{
		ECSServiceRecommendationFindingReasonCodeMemoryOverprovisioned,
		ECSServiceRecommendationFindingReasonCodeMemoryUnderprovisioned,
		ECSServiceRecommendationFindingReasonCodeCpuoverprovisioned,
		ECSServiceRecommendationFindingReasonCodeCpuunderprovisioned,
	}
}

const (
	// EnhancedInfrastructureMetricsActive is a EnhancedInfrastructureMetrics enum value
	EnhancedInfrastructureMetricsActive = "Active"

	// EnhancedInfrastructureMetricsInactive is a EnhancedInfrastructureMetrics enum value
	EnhancedInfrastructureMetricsInactive = "Inactive"
)

// EnhancedInfrastructureMetrics_Values returns all elements of the EnhancedInfrastructureMetrics enum
func EnhancedInfrastructureMetrics_Values() []string {
	return []string{
		EnhancedInfrastructureMetricsActive,
		EnhancedInfrastructureMetricsInactive,
	}
}

const (
	// EnrollmentFilterNameStatus is a EnrollmentFilterName enum value
	EnrollmentFilterNameStatus = "Status"
)

// EnrollmentFilterName_Values returns all elements of the EnrollmentFilterName enum
func EnrollmentFilterName_Values() []string {
	return []string{
		EnrollmentFilterNameStatus,
	}
}

const (
	// ExportableAutoScalingGroupFieldAccountId is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldAccountId = "AccountId"

	// ExportableAutoScalingGroupFieldAutoScalingGroupArn is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldAutoScalingGroupArn = "AutoScalingGroupArn"

	// ExportableAutoScalingGroupFieldAutoScalingGroupName is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldAutoScalingGroupName = "AutoScalingGroupName"

	// ExportableAutoScalingGroupFieldFinding is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldFinding = "Finding"

	// ExportableAutoScalingGroupFieldUtilizationMetricsCpuMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsCpuMaximum = "UtilizationMetricsCpuMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsMemoryMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsMemoryMaximum = "UtilizationMetricsMemoryMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsEbsReadOpsPerSecondMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsEbsReadOpsPerSecondMaximum = "UtilizationMetricsEbsReadOpsPerSecondMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsEbsWriteOpsPerSecondMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsEbsWriteOpsPerSecondMaximum = "UtilizationMetricsEbsWriteOpsPerSecondMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsEbsReadBytesPerSecondMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsEbsReadBytesPerSecondMaximum = "UtilizationMetricsEbsReadBytesPerSecondMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsEbsWriteBytesPerSecondMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsEbsWriteBytesPerSecondMaximum = "UtilizationMetricsEbsWriteBytesPerSecondMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsDiskReadOpsPerSecondMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsDiskReadOpsPerSecondMaximum = "UtilizationMetricsDiskReadOpsPerSecondMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsDiskWriteOpsPerSecondMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsDiskWriteOpsPerSecondMaximum = "UtilizationMetricsDiskWriteOpsPerSecondMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsDiskReadBytesPerSecondMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsDiskReadBytesPerSecondMaximum = "UtilizationMetricsDiskReadBytesPerSecondMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsDiskWriteBytesPerSecondMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsDiskWriteBytesPerSecondMaximum = "UtilizationMetricsDiskWriteBytesPerSecondMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsNetworkInBytesPerSecondMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsNetworkInBytesPerSecondMaximum = "UtilizationMetricsNetworkInBytesPerSecondMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsNetworkOutBytesPerSecondMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsNetworkOutBytesPerSecondMaximum = "UtilizationMetricsNetworkOutBytesPerSecondMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsNetworkPacketsInPerSecondMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsNetworkPacketsInPerSecondMaximum = "UtilizationMetricsNetworkPacketsInPerSecondMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsNetworkPacketsOutPerSecondMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsNetworkPacketsOutPerSecondMaximum = "UtilizationMetricsNetworkPacketsOutPerSecondMaximum"

	// ExportableAutoScalingGroupFieldLookbackPeriodInDays is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldLookbackPeriodInDays = "LookbackPeriodInDays"

	// ExportableAutoScalingGroupFieldCurrentConfigurationInstanceType is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldCurrentConfigurationInstanceType = "CurrentConfigurationInstanceType"

	// ExportableAutoScalingGroupFieldCurrentConfigurationDesiredCapacity is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldCurrentConfigurationDesiredCapacity = "CurrentConfigurationDesiredCapacity"

	// ExportableAutoScalingGroupFieldCurrentConfigurationMinSize is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldCurrentConfigurationMinSize = "CurrentConfigurationMinSize"

	// ExportableAutoScalingGroupFieldCurrentConfigurationMaxSize is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldCurrentConfigurationMaxSize = "CurrentConfigurationMaxSize"

	// ExportableAutoScalingGroupFieldCurrentOnDemandPrice is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldCurrentOnDemandPrice = "CurrentOnDemandPrice"

	// ExportableAutoScalingGroupFieldCurrentStandardOneYearNoUpfrontReservedPrice is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldCurrentStandardOneYearNoUpfrontReservedPrice = "CurrentStandardOneYearNoUpfrontReservedPrice"

	// ExportableAutoScalingGroupFieldCurrentStandardThreeYearNoUpfrontReservedPrice is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldCurrentStandardThreeYearNoUpfrontReservedPrice = "CurrentStandardThreeYearNoUpfrontReservedPrice"

	// ExportableAutoScalingGroupFieldCurrentVcpus is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldCurrentVcpus = "CurrentVCpus"

	// ExportableAutoScalingGroupFieldCurrentMemory is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldCurrentMemory = "CurrentMemory"

	// ExportableAutoScalingGroupFieldCurrentStorage is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldCurrentStorage = "CurrentStorage"

	// ExportableAutoScalingGroupFieldCurrentNetwork is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldCurrentNetwork = "CurrentNetwork"

	// ExportableAutoScalingGroupFieldRecommendationOptionsConfigurationInstanceType is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsConfigurationInstanceType = "RecommendationOptionsConfigurationInstanceType"

	// ExportableAutoScalingGroupFieldRecommendationOptionsConfigurationDesiredCapacity is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsConfigurationDesiredCapacity = "RecommendationOptionsConfigurationDesiredCapacity"

	// ExportableAutoScalingGroupFieldRecommendationOptionsConfigurationMinSize is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsConfigurationMinSize = "RecommendationOptionsConfigurationMinSize"

	// ExportableAutoScalingGroupFieldRecommendationOptionsConfigurationMaxSize is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsConfigurationMaxSize = "RecommendationOptionsConfigurationMaxSize"

	// ExportableAutoScalingGroupFieldRecommendationOptionsProjectedUtilizationMetricsCpuMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsProjectedUtilizationMetricsCpuMaximum = "RecommendationOptionsProjectedUtilizationMetricsCpuMaximum"

	// ExportableAutoScalingGroupFieldRecommendationOptionsProjectedUtilizationMetricsMemoryMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsProjectedUtilizationMetricsMemoryMaximum = "RecommendationOptionsProjectedUtilizationMetricsMemoryMaximum"

	// ExportableAutoScalingGroupFieldRecommendationOptionsPerformanceRisk is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsPerformanceRisk = "RecommendationOptionsPerformanceRisk"

	// ExportableAutoScalingGroupFieldRecommendationOptionsOnDemandPrice is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsOnDemandPrice = "RecommendationOptionsOnDemandPrice"

	// ExportableAutoScalingGroupFieldRecommendationOptionsStandardOneYearNoUpfrontReservedPrice is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsStandardOneYearNoUpfrontReservedPrice = "RecommendationOptionsStandardOneYearNoUpfrontReservedPrice"

	// ExportableAutoScalingGroupFieldRecommendationOptionsStandardThreeYearNoUpfrontReservedPrice is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsStandardThreeYearNoUpfrontReservedPrice = "RecommendationOptionsStandardThreeYearNoUpfrontReservedPrice"

	// ExportableAutoScalingGroupFieldRecommendationOptionsVcpus is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsVcpus = "RecommendationOptionsVcpus"

	// ExportableAutoScalingGroupFieldRecommendationOptionsMemory is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsMemory = "RecommendationOptionsMemory"

	// ExportableAutoScalingGroupFieldRecommendationOptionsStorage is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsStorage = "RecommendationOptionsStorage"

	// ExportableAutoScalingGroupFieldRecommendationOptionsNetwork is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsNetwork = "RecommendationOptionsNetwork"

	// ExportableAutoScalingGroupFieldLastRefreshTimestamp is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldLastRefreshTimestamp = "LastRefreshTimestamp"

	// ExportableAutoScalingGroupFieldCurrentPerformanceRisk is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldCurrentPerformanceRisk = "CurrentPerformanceRisk"

	// ExportableAutoScalingGroupFieldRecommendationOptionsSavingsOpportunityPercentage is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsSavingsOpportunityPercentage = "RecommendationOptionsSavingsOpportunityPercentage"

	// ExportableAutoScalingGroupFieldRecommendationOptionsEstimatedMonthlySavingsCurrency is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsEstimatedMonthlySavingsCurrency = "RecommendationOptionsEstimatedMonthlySavingsCurrency"

	// ExportableAutoScalingGroupFieldRecommendationOptionsEstimatedMonthlySavingsValue is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsEstimatedMonthlySavingsValue = "RecommendationOptionsEstimatedMonthlySavingsValue"

	// ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesCpuVendorArchitectures is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesCpuVendorArchitectures = "EffectiveRecommendationPreferencesCpuVendorArchitectures"

	// ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesEnhancedInfrastructureMetrics is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesEnhancedInfrastructureMetrics = "EffectiveRecommendationPreferencesEnhancedInfrastructureMetrics"

	// ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesInferredWorkloadTypes is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesInferredWorkloadTypes = "EffectiveRecommendationPreferencesInferredWorkloadTypes"

	// ExportableAutoScalingGroupFieldInferredWorkloadTypes is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldInferredWorkloadTypes = "InferredWorkloadTypes"

	// ExportableAutoScalingGroupFieldRecommendationOptionsMigrationEffort is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsMigrationEffort = "RecommendationOptionsMigrationEffort"

	// ExportableAutoScalingGroupFieldCurrentInstanceGpuInfo is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldCurrentInstanceGpuInfo = "CurrentInstanceGpuInfo"

	// ExportableAutoScalingGroupFieldRecommendationOptionsInstanceGpuInfo is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsInstanceGpuInfo = "RecommendationOptionsInstanceGpuInfo"

	// ExportableAutoScalingGroupFieldUtilizationMetricsGpuPercentageMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsGpuPercentageMaximum = "UtilizationMetricsGpuPercentageMaximum"

	// ExportableAutoScalingGroupFieldUtilizationMetricsGpuMemoryPercentageMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldUtilizationMetricsGpuMemoryPercentageMaximum = "UtilizationMetricsGpuMemoryPercentageMaximum"

	// ExportableAutoScalingGroupFieldRecommendationOptionsProjectedUtilizationMetricsGpuPercentageMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsProjectedUtilizationMetricsGpuPercentageMaximum = "RecommendationOptionsProjectedUtilizationMetricsGpuPercentageMaximum"

	// ExportableAutoScalingGroupFieldRecommendationOptionsProjectedUtilizationMetricsGpuMemoryPercentageMaximum is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsProjectedUtilizationMetricsGpuMemoryPercentageMaximum = "RecommendationOptionsProjectedUtilizationMetricsGpuMemoryPercentageMaximum"

	// ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesSavingsEstimationMode is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesSavingsEstimationMode = "EffectiveRecommendationPreferencesSavingsEstimationMode"

	// ExportableAutoScalingGroupFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage = "RecommendationOptionsSavingsOpportunityAfterDiscountsPercentage"

	// ExportableAutoScalingGroupFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts = "RecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts"

	// ExportableAutoScalingGroupFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts = "RecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts"

	// ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesPreferredResources is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesPreferredResources = "EffectiveRecommendationPreferencesPreferredResources"

	// ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesLookBackPeriod is a ExportableAutoScalingGroupField enum value
	ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesLookBackPeriod = "EffectiveRecommendationPreferencesLookBackPeriod"
)

// ExportableAutoScalingGroupField_Values returns all elements of the ExportableAutoScalingGroupField enum
func ExportableAutoScalingGroupField_Values() []string {
	return []string{
		ExportableAutoScalingGroupFieldAccountId,
		ExportableAutoScalingGroupFieldAutoScalingGroupArn,
		ExportableAutoScalingGroupFieldAutoScalingGroupName,
		ExportableAutoScalingGroupFieldFinding,
		ExportableAutoScalingGroupFieldUtilizationMetricsCpuMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsMemoryMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsEbsReadOpsPerSecondMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsEbsWriteOpsPerSecondMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsEbsReadBytesPerSecondMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsEbsWriteBytesPerSecondMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsDiskReadOpsPerSecondMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsDiskWriteOpsPerSecondMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsDiskReadBytesPerSecondMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsDiskWriteBytesPerSecondMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsNetworkInBytesPerSecondMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsNetworkOutBytesPerSecondMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsNetworkPacketsInPerSecondMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsNetworkPacketsOutPerSecondMaximum,
		ExportableAutoScalingGroupFieldLookbackPeriodInDays,
		ExportableAutoScalingGroupFieldCurrentConfigurationInstanceType,
		ExportableAutoScalingGroupFieldCurrentConfigurationDesiredCapacity,
		ExportableAutoScalingGroupFieldCurrentConfigurationMinSize,
		ExportableAutoScalingGroupFieldCurrentConfigurationMaxSize,
		ExportableAutoScalingGroupFieldCurrentOnDemandPrice,
		ExportableAutoScalingGroupFieldCurrentStandardOneYearNoUpfrontReservedPrice,
		ExportableAutoScalingGroupFieldCurrentStandardThreeYearNoUpfrontReservedPrice,
		ExportableAutoScalingGroupFieldCurrentVcpus,
		ExportableAutoScalingGroupFieldCurrentMemory,
		ExportableAutoScalingGroupFieldCurrentStorage,
		ExportableAutoScalingGroupFieldCurrentNetwork,
		ExportableAutoScalingGroupFieldRecommendationOptionsConfigurationInstanceType,
		ExportableAutoScalingGroupFieldRecommendationOptionsConfigurationDesiredCapacity,
		ExportableAutoScalingGroupFieldRecommendationOptionsConfigurationMinSize,
		ExportableAutoScalingGroupFieldRecommendationOptionsConfigurationMaxSize,
		ExportableAutoScalingGroupFieldRecommendationOptionsProjectedUtilizationMetricsCpuMaximum,
		ExportableAutoScalingGroupFieldRecommendationOptionsProjectedUtilizationMetricsMemoryMaximum,
		ExportableAutoScalingGroupFieldRecommendationOptionsPerformanceRisk,
		ExportableAutoScalingGroupFieldRecommendationOptionsOnDemandPrice,
		ExportableAutoScalingGroupFieldRecommendationOptionsStandardOneYearNoUpfrontReservedPrice,
		ExportableAutoScalingGroupFieldRecommendationOptionsStandardThreeYearNoUpfrontReservedPrice,
		ExportableAutoScalingGroupFieldRecommendationOptionsVcpus,
		ExportableAutoScalingGroupFieldRecommendationOptionsMemory,
		ExportableAutoScalingGroupFieldRecommendationOptionsStorage,
		ExportableAutoScalingGroupFieldRecommendationOptionsNetwork,
		ExportableAutoScalingGroupFieldLastRefreshTimestamp,
		ExportableAutoScalingGroupFieldCurrentPerformanceRisk,
		ExportableAutoScalingGroupFieldRecommendationOptionsSavingsOpportunityPercentage,
		ExportableAutoScalingGroupFieldRecommendationOptionsEstimatedMonthlySavingsCurrency,
		ExportableAutoScalingGroupFieldRecommendationOptionsEstimatedMonthlySavingsValue,
		ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesCpuVendorArchitectures,
		ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesEnhancedInfrastructureMetrics,
		ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesInferredWorkloadTypes,
		ExportableAutoScalingGroupFieldInferredWorkloadTypes,
		ExportableAutoScalingGroupFieldRecommendationOptionsMigrationEffort,
		ExportableAutoScalingGroupFieldCurrentInstanceGpuInfo,
		ExportableAutoScalingGroupFieldRecommendationOptionsInstanceGpuInfo,
		ExportableAutoScalingGroupFieldUtilizationMetricsGpuPercentageMaximum,
		ExportableAutoScalingGroupFieldUtilizationMetricsGpuMemoryPercentageMaximum,
		ExportableAutoScalingGroupFieldRecommendationOptionsProjectedUtilizationMetricsGpuPercentageMaximum,
		ExportableAutoScalingGroupFieldRecommendationOptionsProjectedUtilizationMetricsGpuMemoryPercentageMaximum,
		ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesSavingsEstimationMode,
		ExportableAutoScalingGroupFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage,
		ExportableAutoScalingGroupFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts,
		ExportableAutoScalingGroupFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts,
		ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesPreferredResources,
		ExportableAutoScalingGroupFieldEffectiveRecommendationPreferencesLookBackPeriod,
	}
}

const (
	// ExportableECSServiceFieldAccountId is a ExportableECSServiceField enum value
	ExportableECSServiceFieldAccountId = "AccountId"

	// ExportableECSServiceFieldServiceArn is a ExportableECSServiceField enum value
	ExportableECSServiceFieldServiceArn = "ServiceArn"

	// ExportableECSServiceFieldLookbackPeriodInDays is a ExportableECSServiceField enum value
	ExportableECSServiceFieldLookbackPeriodInDays = "LookbackPeriodInDays"

	// ExportableECSServiceFieldLastRefreshTimestamp is a ExportableECSServiceField enum value
	ExportableECSServiceFieldLastRefreshTimestamp = "LastRefreshTimestamp"

	// ExportableECSServiceFieldLaunchType is a ExportableECSServiceField enum value
	ExportableECSServiceFieldLaunchType = "LaunchType"

	// ExportableECSServiceFieldCurrentPerformanceRisk is a ExportableECSServiceField enum value
	ExportableECSServiceFieldCurrentPerformanceRisk = "CurrentPerformanceRisk"

	// ExportableECSServiceFieldCurrentServiceConfigurationMemory is a ExportableECSServiceField enum value
	ExportableECSServiceFieldCurrentServiceConfigurationMemory = "CurrentServiceConfigurationMemory"

	// ExportableECSServiceFieldCurrentServiceConfigurationCpu is a ExportableECSServiceField enum value
	ExportableECSServiceFieldCurrentServiceConfigurationCpu = "CurrentServiceConfigurationCpu"

	// ExportableECSServiceFieldCurrentServiceConfigurationTaskDefinitionArn is a ExportableECSServiceField enum value
	ExportableECSServiceFieldCurrentServiceConfigurationTaskDefinitionArn = "CurrentServiceConfigurationTaskDefinitionArn"

	// ExportableECSServiceFieldCurrentServiceConfigurationAutoScalingConfiguration is a ExportableECSServiceField enum value
	ExportableECSServiceFieldCurrentServiceConfigurationAutoScalingConfiguration = "CurrentServiceConfigurationAutoScalingConfiguration"

	// ExportableECSServiceFieldCurrentServiceContainerConfigurations is a ExportableECSServiceField enum value
	ExportableECSServiceFieldCurrentServiceContainerConfigurations = "CurrentServiceContainerConfigurations"

	// ExportableECSServiceFieldUtilizationMetricsCpuMaximum is a ExportableECSServiceField enum value
	ExportableECSServiceFieldUtilizationMetricsCpuMaximum = "UtilizationMetricsCpuMaximum"

	// ExportableECSServiceFieldUtilizationMetricsMemoryMaximum is a ExportableECSServiceField enum value
	ExportableECSServiceFieldUtilizationMetricsMemoryMaximum = "UtilizationMetricsMemoryMaximum"

	// ExportableECSServiceFieldFinding is a ExportableECSServiceField enum value
	ExportableECSServiceFieldFinding = "Finding"

	// ExportableECSServiceFieldFindingReasonCodes is a ExportableECSServiceField enum value
	ExportableECSServiceFieldFindingReasonCodes = "FindingReasonCodes"

	// ExportableECSServiceFieldRecommendationOptionsMemory is a ExportableECSServiceField enum value
	ExportableECSServiceFieldRecommendationOptionsMemory = "RecommendationOptionsMemory"

	// ExportableECSServiceFieldRecommendationOptionsCpu is a ExportableECSServiceField enum value
	ExportableECSServiceFieldRecommendationOptionsCpu = "RecommendationOptionsCpu"

	// ExportableECSServiceFieldRecommendationOptionsSavingsOpportunityPercentage is a ExportableECSServiceField enum value
	ExportableECSServiceFieldRecommendationOptionsSavingsOpportunityPercentage = "RecommendationOptionsSavingsOpportunityPercentage"

	// ExportableECSServiceFieldRecommendationOptionsEstimatedMonthlySavingsCurrency is a ExportableECSServiceField enum value
	ExportableECSServiceFieldRecommendationOptionsEstimatedMonthlySavingsCurrency = "RecommendationOptionsEstimatedMonthlySavingsCurrency"

	// ExportableECSServiceFieldRecommendationOptionsEstimatedMonthlySavingsValue is a ExportableECSServiceField enum value
	ExportableECSServiceFieldRecommendationOptionsEstimatedMonthlySavingsValue = "RecommendationOptionsEstimatedMonthlySavingsValue"

	// ExportableECSServiceFieldRecommendationOptionsContainerRecommendations is a ExportableECSServiceField enum value
	ExportableECSServiceFieldRecommendationOptionsContainerRecommendations = "RecommendationOptionsContainerRecommendations"

	// ExportableECSServiceFieldRecommendationOptionsProjectedUtilizationMetricsCpuMaximum is a ExportableECSServiceField enum value
	ExportableECSServiceFieldRecommendationOptionsProjectedUtilizationMetricsCpuMaximum = "RecommendationOptionsProjectedUtilizationMetricsCpuMaximum"

	// ExportableECSServiceFieldRecommendationOptionsProjectedUtilizationMetricsMemoryMaximum is a ExportableECSServiceField enum value
	ExportableECSServiceFieldRecommendationOptionsProjectedUtilizationMetricsMemoryMaximum = "RecommendationOptionsProjectedUtilizationMetricsMemoryMaximum"

	// ExportableECSServiceFieldTags is a ExportableECSServiceField enum value
	ExportableECSServiceFieldTags = "Tags"

	// ExportableECSServiceFieldEffectiveRecommendationPreferencesSavingsEstimationMode is a ExportableECSServiceField enum value
	ExportableECSServiceFieldEffectiveRecommendationPreferencesSavingsEstimationMode = "EffectiveRecommendationPreferencesSavingsEstimationMode"

	// ExportableECSServiceFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage is a ExportableECSServiceField enum value
	ExportableECSServiceFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage = "RecommendationOptionsSavingsOpportunityAfterDiscountsPercentage"

	// ExportableECSServiceFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts is a ExportableECSServiceField enum value
	ExportableECSServiceFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts = "RecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts"

	// ExportableECSServiceFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts is a ExportableECSServiceField enum value
	ExportableECSServiceFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts = "RecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts"
)

// ExportableECSServiceField_Values returns all elements of the ExportableECSServiceField enum
func ExportableECSServiceField_Values() []string {
	return []string{
		ExportableECSServiceFieldAccountId,
		ExportableECSServiceFieldServiceArn,
		ExportableECSServiceFieldLookbackPeriodInDays,
		ExportableECSServiceFieldLastRefreshTimestamp,
		ExportableECSServiceFieldLaunchType,
		ExportableECSServiceFieldCurrentPerformanceRisk,
		ExportableECSServiceFieldCurrentServiceConfigurationMemory,
		ExportableECSServiceFieldCurrentServiceConfigurationCpu,
		ExportableECSServiceFieldCurrentServiceConfigurationTaskDefinitionArn,
		ExportableECSServiceFieldCurrentServiceConfigurationAutoScalingConfiguration,
		ExportableECSServiceFieldCurrentServiceContainerConfigurations,
		ExportableECSServiceFieldUtilizationMetricsCpuMaximum,
		ExportableECSServiceFieldUtilizationMetricsMemoryMaximum,
		ExportableECSServiceFieldFinding,
		ExportableECSServiceFieldFindingReasonCodes,
		ExportableECSServiceFieldRecommendationOptionsMemory,
		ExportableECSServiceFieldRecommendationOptionsCpu,
		ExportableECSServiceFieldRecommendationOptionsSavingsOpportunityPercentage,
		ExportableECSServiceFieldRecommendationOptionsEstimatedMonthlySavingsCurrency,
		ExportableECSServiceFieldRecommendationOptionsEstimatedMonthlySavingsValue,
		ExportableECSServiceFieldRecommendationOptionsContainerRecommendations,
		ExportableECSServiceFieldRecommendationOptionsProjectedUtilizationMetricsCpuMaximum,
		ExportableECSServiceFieldRecommendationOptionsProjectedUtilizationMetricsMemoryMaximum,
		ExportableECSServiceFieldTags,
		ExportableECSServiceFieldEffectiveRecommendationPreferencesSavingsEstimationMode,
		ExportableECSServiceFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage,
		ExportableECSServiceFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts,
		ExportableECSServiceFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts,
	}
}

const (
	// ExportableInstanceFieldAccountId is a ExportableInstanceField enum value
	ExportableInstanceFieldAccountId = "AccountId"

	// ExportableInstanceFieldInstanceArn is a ExportableInstanceField enum value
	ExportableInstanceFieldInstanceArn = "InstanceArn"

	// ExportableInstanceFieldInstanceName is a ExportableInstanceField enum value
	ExportableInstanceFieldInstanceName = "InstanceName"

	// ExportableInstanceFieldFinding is a ExportableInstanceField enum value
	ExportableInstanceFieldFinding = "Finding"

	// ExportableInstanceFieldFindingReasonCodes is a ExportableInstanceField enum value
	ExportableInstanceFieldFindingReasonCodes = "FindingReasonCodes"

	// ExportableInstanceFieldLookbackPeriodInDays is a ExportableInstanceField enum value
	ExportableInstanceFieldLookbackPeriodInDays = "LookbackPeriodInDays"

	// ExportableInstanceFieldCurrentInstanceType is a ExportableInstanceField enum value
	ExportableInstanceFieldCurrentInstanceType = "CurrentInstanceType"

	// ExportableInstanceFieldUtilizationMetricsCpuMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsCpuMaximum = "UtilizationMetricsCpuMaximum"

	// ExportableInstanceFieldUtilizationMetricsMemoryMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsMemoryMaximum = "UtilizationMetricsMemoryMaximum"

	// ExportableInstanceFieldUtilizationMetricsEbsReadOpsPerSecondMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsEbsReadOpsPerSecondMaximum = "UtilizationMetricsEbsReadOpsPerSecondMaximum"

	// ExportableInstanceFieldUtilizationMetricsEbsWriteOpsPerSecondMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsEbsWriteOpsPerSecondMaximum = "UtilizationMetricsEbsWriteOpsPerSecondMaximum"

	// ExportableInstanceFieldUtilizationMetricsEbsReadBytesPerSecondMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsEbsReadBytesPerSecondMaximum = "UtilizationMetricsEbsReadBytesPerSecondMaximum"

	// ExportableInstanceFieldUtilizationMetricsEbsWriteBytesPerSecondMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsEbsWriteBytesPerSecondMaximum = "UtilizationMetricsEbsWriteBytesPerSecondMaximum"

	// ExportableInstanceFieldUtilizationMetricsDiskReadOpsPerSecondMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsDiskReadOpsPerSecondMaximum = "UtilizationMetricsDiskReadOpsPerSecondMaximum"

	// ExportableInstanceFieldUtilizationMetricsDiskWriteOpsPerSecondMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsDiskWriteOpsPerSecondMaximum = "UtilizationMetricsDiskWriteOpsPerSecondMaximum"

	// ExportableInstanceFieldUtilizationMetricsDiskReadBytesPerSecondMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsDiskReadBytesPerSecondMaximum = "UtilizationMetricsDiskReadBytesPerSecondMaximum"

	// ExportableInstanceFieldUtilizationMetricsDiskWriteBytesPerSecondMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsDiskWriteBytesPerSecondMaximum = "UtilizationMetricsDiskWriteBytesPerSecondMaximum"

	// ExportableInstanceFieldUtilizationMetricsNetworkInBytesPerSecondMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsNetworkInBytesPerSecondMaximum = "UtilizationMetricsNetworkInBytesPerSecondMaximum"

	// ExportableInstanceFieldUtilizationMetricsNetworkOutBytesPerSecondMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsNetworkOutBytesPerSecondMaximum = "UtilizationMetricsNetworkOutBytesPerSecondMaximum"

	// ExportableInstanceFieldUtilizationMetricsNetworkPacketsInPerSecondMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsNetworkPacketsInPerSecondMaximum = "UtilizationMetricsNetworkPacketsInPerSecondMaximum"

	// ExportableInstanceFieldUtilizationMetricsNetworkPacketsOutPerSecondMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsNetworkPacketsOutPerSecondMaximum = "UtilizationMetricsNetworkPacketsOutPerSecondMaximum"

	// ExportableInstanceFieldCurrentOnDemandPrice is a ExportableInstanceField enum value
	ExportableInstanceFieldCurrentOnDemandPrice = "CurrentOnDemandPrice"

	// ExportableInstanceFieldCurrentStandardOneYearNoUpfrontReservedPrice is a ExportableInstanceField enum value
	ExportableInstanceFieldCurrentStandardOneYearNoUpfrontReservedPrice = "CurrentStandardOneYearNoUpfrontReservedPrice"

	// ExportableInstanceFieldCurrentStandardThreeYearNoUpfrontReservedPrice is a ExportableInstanceField enum value
	ExportableInstanceFieldCurrentStandardThreeYearNoUpfrontReservedPrice = "CurrentStandardThreeYearNoUpfrontReservedPrice"

	// ExportableInstanceFieldCurrentVcpus is a ExportableInstanceField enum value
	ExportableInstanceFieldCurrentVcpus = "CurrentVCpus"

	// ExportableInstanceFieldCurrentMemory is a ExportableInstanceField enum value
	ExportableInstanceFieldCurrentMemory = "CurrentMemory"

	// ExportableInstanceFieldCurrentStorage is a ExportableInstanceField enum value
	ExportableInstanceFieldCurrentStorage = "CurrentStorage"

	// ExportableInstanceFieldCurrentNetwork is a ExportableInstanceField enum value
	ExportableInstanceFieldCurrentNetwork = "CurrentNetwork"

	// ExportableInstanceFieldRecommendationOptionsInstanceType is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsInstanceType = "RecommendationOptionsInstanceType"

	// ExportableInstanceFieldRecommendationOptionsProjectedUtilizationMetricsCpuMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsProjectedUtilizationMetricsCpuMaximum = "RecommendationOptionsProjectedUtilizationMetricsCpuMaximum"

	// ExportableInstanceFieldRecommendationOptionsProjectedUtilizationMetricsMemoryMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsProjectedUtilizationMetricsMemoryMaximum = "RecommendationOptionsProjectedUtilizationMetricsMemoryMaximum"

	// ExportableInstanceFieldRecommendationOptionsPlatformDifferences is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsPlatformDifferences = "RecommendationOptionsPlatformDifferences"

	// ExportableInstanceFieldRecommendationOptionsPerformanceRisk is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsPerformanceRisk = "RecommendationOptionsPerformanceRisk"

	// ExportableInstanceFieldRecommendationOptionsVcpus is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsVcpus = "RecommendationOptionsVcpus"

	// ExportableInstanceFieldRecommendationOptionsMemory is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsMemory = "RecommendationOptionsMemory"

	// ExportableInstanceFieldRecommendationOptionsStorage is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsStorage = "RecommendationOptionsStorage"

	// ExportableInstanceFieldRecommendationOptionsNetwork is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsNetwork = "RecommendationOptionsNetwork"

	// ExportableInstanceFieldRecommendationOptionsOnDemandPrice is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsOnDemandPrice = "RecommendationOptionsOnDemandPrice"

	// ExportableInstanceFieldRecommendationOptionsStandardOneYearNoUpfrontReservedPrice is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsStandardOneYearNoUpfrontReservedPrice = "RecommendationOptionsStandardOneYearNoUpfrontReservedPrice"

	// ExportableInstanceFieldRecommendationOptionsStandardThreeYearNoUpfrontReservedPrice is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsStandardThreeYearNoUpfrontReservedPrice = "RecommendationOptionsStandardThreeYearNoUpfrontReservedPrice"

	// ExportableInstanceFieldRecommendationsSourcesRecommendationSourceArn is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationsSourcesRecommendationSourceArn = "RecommendationsSourcesRecommendationSourceArn"

	// ExportableInstanceFieldRecommendationsSourcesRecommendationSourceType is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationsSourcesRecommendationSourceType = "RecommendationsSourcesRecommendationSourceType"

	// ExportableInstanceFieldLastRefreshTimestamp is a ExportableInstanceField enum value
	ExportableInstanceFieldLastRefreshTimestamp = "LastRefreshTimestamp"

	// ExportableInstanceFieldCurrentPerformanceRisk is a ExportableInstanceField enum value
	ExportableInstanceFieldCurrentPerformanceRisk = "CurrentPerformanceRisk"

	// ExportableInstanceFieldRecommendationOptionsSavingsOpportunityPercentage is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsSavingsOpportunityPercentage = "RecommendationOptionsSavingsOpportunityPercentage"

	// ExportableInstanceFieldRecommendationOptionsEstimatedMonthlySavingsCurrency is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsEstimatedMonthlySavingsCurrency = "RecommendationOptionsEstimatedMonthlySavingsCurrency"

	// ExportableInstanceFieldRecommendationOptionsEstimatedMonthlySavingsValue is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsEstimatedMonthlySavingsValue = "RecommendationOptionsEstimatedMonthlySavingsValue"

	// ExportableInstanceFieldEffectiveRecommendationPreferencesCpuVendorArchitectures is a ExportableInstanceField enum value
	ExportableInstanceFieldEffectiveRecommendationPreferencesCpuVendorArchitectures = "EffectiveRecommendationPreferencesCpuVendorArchitectures"

	// ExportableInstanceFieldEffectiveRecommendationPreferencesEnhancedInfrastructureMetrics is a ExportableInstanceField enum value
	ExportableInstanceFieldEffectiveRecommendationPreferencesEnhancedInfrastructureMetrics = "EffectiveRecommendationPreferencesEnhancedInfrastructureMetrics"

	// ExportableInstanceFieldEffectiveRecommendationPreferencesInferredWorkloadTypes is a ExportableInstanceField enum value
	ExportableInstanceFieldEffectiveRecommendationPreferencesInferredWorkloadTypes = "EffectiveRecommendationPreferencesInferredWorkloadTypes"

	// ExportableInstanceFieldInferredWorkloadTypes is a ExportableInstanceField enum value
	ExportableInstanceFieldInferredWorkloadTypes = "InferredWorkloadTypes"

	// ExportableInstanceFieldRecommendationOptionsMigrationEffort is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsMigrationEffort = "RecommendationOptionsMigrationEffort"

	// ExportableInstanceFieldEffectiveRecommendationPreferencesExternalMetricsSource is a ExportableInstanceField enum value
	ExportableInstanceFieldEffectiveRecommendationPreferencesExternalMetricsSource = "EffectiveRecommendationPreferencesExternalMetricsSource"

	// ExportableInstanceFieldInstanceState is a ExportableInstanceField enum value
	ExportableInstanceFieldInstanceState = "InstanceState"

	// ExportableInstanceFieldTags is a ExportableInstanceField enum value
	ExportableInstanceFieldTags = "Tags"

	// ExportableInstanceFieldExternalMetricStatusCode is a ExportableInstanceField enum value
	ExportableInstanceFieldExternalMetricStatusCode = "ExternalMetricStatusCode"

	// ExportableInstanceFieldExternalMetricStatusReason is a ExportableInstanceField enum value
	ExportableInstanceFieldExternalMetricStatusReason = "ExternalMetricStatusReason"

	// ExportableInstanceFieldCurrentInstanceGpuInfo is a ExportableInstanceField enum value
	ExportableInstanceFieldCurrentInstanceGpuInfo = "CurrentInstanceGpuInfo"

	// ExportableInstanceFieldRecommendationOptionsInstanceGpuInfo is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsInstanceGpuInfo = "RecommendationOptionsInstanceGpuInfo"

	// ExportableInstanceFieldUtilizationMetricsGpuPercentageMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsGpuPercentageMaximum = "UtilizationMetricsGpuPercentageMaximum"

	// ExportableInstanceFieldUtilizationMetricsGpuMemoryPercentageMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldUtilizationMetricsGpuMemoryPercentageMaximum = "UtilizationMetricsGpuMemoryPercentageMaximum"

	// ExportableInstanceFieldRecommendationOptionsProjectedUtilizationMetricsGpuPercentageMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsProjectedUtilizationMetricsGpuPercentageMaximum = "RecommendationOptionsProjectedUtilizationMetricsGpuPercentageMaximum"

	// ExportableInstanceFieldRecommendationOptionsProjectedUtilizationMetricsGpuMemoryPercentageMaximum is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsProjectedUtilizationMetricsGpuMemoryPercentageMaximum = "RecommendationOptionsProjectedUtilizationMetricsGpuMemoryPercentageMaximum"

	// ExportableInstanceFieldIdle is a ExportableInstanceField enum value
	ExportableInstanceFieldIdle = "Idle"

	// ExportableInstanceFieldEffectiveRecommendationPreferencesPreferredResources is a ExportableInstanceField enum value
	ExportableInstanceFieldEffectiveRecommendationPreferencesPreferredResources = "EffectiveRecommendationPreferencesPreferredResources"

	// ExportableInstanceFieldEffectiveRecommendationPreferencesLookBackPeriod is a ExportableInstanceField enum value
	ExportableInstanceFieldEffectiveRecommendationPreferencesLookBackPeriod = "EffectiveRecommendationPreferencesLookBackPeriod"

	// ExportableInstanceFieldEffectiveRecommendationPreferencesUtilizationPreferences is a ExportableInstanceField enum value
	ExportableInstanceFieldEffectiveRecommendationPreferencesUtilizationPreferences = "EffectiveRecommendationPreferencesUtilizationPreferences"

	// ExportableInstanceFieldEffectiveRecommendationPreferencesSavingsEstimationMode is a ExportableInstanceField enum value
	ExportableInstanceFieldEffectiveRecommendationPreferencesSavingsEstimationMode = "EffectiveRecommendationPreferencesSavingsEstimationMode"

	// ExportableInstanceFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage = "RecommendationOptionsSavingsOpportunityAfterDiscountsPercentage"

	// ExportableInstanceFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts = "RecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts"

	// ExportableInstanceFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts is a ExportableInstanceField enum value
	ExportableInstanceFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts = "RecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts"
)

// ExportableInstanceField_Values returns all elements of the ExportableInstanceField enum
func ExportableInstanceField_Values() []string {
	return []string{
		ExportableInstanceFieldAccountId,
		ExportableInstanceFieldInstanceArn,
		ExportableInstanceFieldInstanceName,
		ExportableInstanceFieldFinding,
		ExportableInstanceFieldFindingReasonCodes,
		ExportableInstanceFieldLookbackPeriodInDays,
		ExportableInstanceFieldCurrentInstanceType,
		ExportableInstanceFieldUtilizationMetricsCpuMaximum,
		ExportableInstanceFieldUtilizationMetricsMemoryMaximum,
		ExportableInstanceFieldUtilizationMetricsEbsReadOpsPerSecondMaximum,
		ExportableInstanceFieldUtilizationMetricsEbsWriteOpsPerSecondMaximum,
		ExportableInstanceFieldUtilizationMetricsEbsReadBytesPerSecondMaximum,
		ExportableInstanceFieldUtilizationMetricsEbsWriteBytesPerSecondMaximum,
		ExportableInstanceFieldUtilizationMetricsDiskReadOpsPerSecondMaximum,
		ExportableInstanceFieldUtilizationMetricsDiskWriteOpsPerSecondMaximum,
		ExportableInstanceFieldUtilizationMetricsDiskReadBytesPerSecondMaximum,
		ExportableInstanceFieldUtilizationMetricsDiskWriteBytesPerSecondMaximum,
		ExportableInstanceFieldUtilizationMetricsNetworkInBytesPerSecondMaximum,
		ExportableInstanceFieldUtilizationMetricsNetworkOutBytesPerSecondMaximum,
		ExportableInstanceFieldUtilizationMetricsNetworkPacketsInPerSecondMaximum,
		ExportableInstanceFieldUtilizationMetricsNetworkPacketsOutPerSecondMaximum,
		ExportableInstanceFieldCurrentOnDemandPrice,
		ExportableInstanceFieldCurrentStandardOneYearNoUpfrontReservedPrice,
		ExportableInstanceFieldCurrentStandardThreeYearNoUpfrontReservedPrice,
		ExportableInstanceFieldCurrentVcpus,
		ExportableInstanceFieldCurrentMemory,
		ExportableInstanceFieldCurrentStorage,
		ExportableInstanceFieldCurrentNetwork,
		ExportableInstanceFieldRecommendationOptionsInstanceType,
		ExportableInstanceFieldRecommendationOptionsProjectedUtilizationMetricsCpuMaximum,
		ExportableInstanceFieldRecommendationOptionsProjectedUtilizationMetricsMemoryMaximum,
		ExportableInstanceFieldRecommendationOptionsPlatformDifferences,
		ExportableInstanceFieldRecommendationOptionsPerformanceRisk,
		ExportableInstanceFieldRecommendationOptionsVcpus,
		ExportableInstanceFieldRecommendationOptionsMemory,
		ExportableInstanceFieldRecommendationOptionsStorage,
		ExportableInstanceFieldRecommendationOptionsNetwork,
		ExportableInstanceFieldRecommendationOptionsOnDemandPrice,
		ExportableInstanceFieldRecommendationOptionsStandardOneYearNoUpfrontReservedPrice,
		ExportableInstanceFieldRecommendationOptionsStandardThreeYearNoUpfrontReservedPrice,
		ExportableInstanceFieldRecommendationsSourcesRecommendationSourceArn,
		ExportableInstanceFieldRecommendationsSourcesRecommendationSourceType,
		ExportableInstanceFieldLastRefreshTimestamp,
		ExportableInstanceFieldCurrentPerformanceRisk,
		ExportableInstanceFieldRecommendationOptionsSavingsOpportunityPercentage,
		ExportableInstanceFieldRecommendationOptionsEstimatedMonthlySavingsCurrency,
		ExportableInstanceFieldRecommendationOptionsEstimatedMonthlySavingsValue,
		ExportableInstanceFieldEffectiveRecommendationPreferencesCpuVendorArchitectures,
		ExportableInstanceFieldEffectiveRecommendationPreferencesEnhancedInfrastructureMetrics,
		ExportableInstanceFieldEffectiveRecommendationPreferencesInferredWorkloadTypes,
		ExportableInstanceFieldInferredWorkloadTypes,
		ExportableInstanceFieldRecommendationOptionsMigrationEffort,
		ExportableInstanceFieldEffectiveRecommendationPreferencesExternalMetricsSource,
		ExportableInstanceFieldInstanceState,
		ExportableInstanceFieldTags,
		ExportableInstanceFieldExternalMetricStatusCode,
		ExportableInstanceFieldExternalMetricStatusReason,
		ExportableInstanceFieldCurrentInstanceGpuInfo,
		ExportableInstanceFieldRecommendationOptionsInstanceGpuInfo,
		ExportableInstanceFieldUtilizationMetricsGpuPercentageMaximum,
		ExportableInstanceFieldUtilizationMetricsGpuMemoryPercentageMaximum,
		ExportableInstanceFieldRecommendationOptionsProjectedUtilizationMetricsGpuPercentageMaximum,
		ExportableInstanceFieldRecommendationOptionsProjectedUtilizationMetricsGpuMemoryPercentageMaximum,
		ExportableInstanceFieldIdle,
		ExportableInstanceFieldEffectiveRecommendationPreferencesPreferredResources,
		ExportableInstanceFieldEffectiveRecommendationPreferencesLookBackPeriod,
		ExportableInstanceFieldEffectiveRecommendationPreferencesUtilizationPreferences,
		ExportableInstanceFieldEffectiveRecommendationPreferencesSavingsEstimationMode,
		ExportableInstanceFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage,
		ExportableInstanceFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts,
		ExportableInstanceFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts,
	}
}

const (
	// ExportableLambdaFunctionFieldAccountId is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldAccountId = "AccountId"

	// ExportableLambdaFunctionFieldFunctionArn is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldFunctionArn = "FunctionArn"

	// ExportableLambdaFunctionFieldFunctionVersion is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldFunctionVersion = "FunctionVersion"

	// ExportableLambdaFunctionFieldFinding is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldFinding = "Finding"

	// ExportableLambdaFunctionFieldFindingReasonCodes is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldFindingReasonCodes = "FindingReasonCodes"

	// ExportableLambdaFunctionFieldNumberOfInvocations is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldNumberOfInvocations = "NumberOfInvocations"

	// ExportableLambdaFunctionFieldUtilizationMetricsDurationMaximum is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldUtilizationMetricsDurationMaximum = "UtilizationMetricsDurationMaximum"

	// ExportableLambdaFunctionFieldUtilizationMetricsDurationAverage is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldUtilizationMetricsDurationAverage = "UtilizationMetricsDurationAverage"

	// ExportableLambdaFunctionFieldUtilizationMetricsMemoryMaximum is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldUtilizationMetricsMemoryMaximum = "UtilizationMetricsMemoryMaximum"

	// ExportableLambdaFunctionFieldUtilizationMetricsMemoryAverage is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldUtilizationMetricsMemoryAverage = "UtilizationMetricsMemoryAverage"

	// ExportableLambdaFunctionFieldLookbackPeriodInDays is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldLookbackPeriodInDays = "LookbackPeriodInDays"

	// ExportableLambdaFunctionFieldCurrentConfigurationMemorySize is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldCurrentConfigurationMemorySize = "CurrentConfigurationMemorySize"

	// ExportableLambdaFunctionFieldCurrentConfigurationTimeout is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldCurrentConfigurationTimeout = "CurrentConfigurationTimeout"

	// ExportableLambdaFunctionFieldCurrentCostTotal is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldCurrentCostTotal = "CurrentCostTotal"

	// ExportableLambdaFunctionFieldCurrentCostAverage is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldCurrentCostAverage = "CurrentCostAverage"

	// ExportableLambdaFunctionFieldRecommendationOptionsConfigurationMemorySize is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldRecommendationOptionsConfigurationMemorySize = "RecommendationOptionsConfigurationMemorySize"

	// ExportableLambdaFunctionFieldRecommendationOptionsCostLow is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldRecommendationOptionsCostLow = "RecommendationOptionsCostLow"

	// ExportableLambdaFunctionFieldRecommendationOptionsCostHigh is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldRecommendationOptionsCostHigh = "RecommendationOptionsCostHigh"

	// ExportableLambdaFunctionFieldRecommendationOptionsProjectedUtilizationMetricsDurationLowerBound is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldRecommendationOptionsProjectedUtilizationMetricsDurationLowerBound = "RecommendationOptionsProjectedUtilizationMetricsDurationLowerBound"

	// ExportableLambdaFunctionFieldRecommendationOptionsProjectedUtilizationMetricsDurationUpperBound is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldRecommendationOptionsProjectedUtilizationMetricsDurationUpperBound = "RecommendationOptionsProjectedUtilizationMetricsDurationUpperBound"

	// ExportableLambdaFunctionFieldRecommendationOptionsProjectedUtilizationMetricsDurationExpected is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldRecommendationOptionsProjectedUtilizationMetricsDurationExpected = "RecommendationOptionsProjectedUtilizationMetricsDurationExpected"

	// ExportableLambdaFunctionFieldLastRefreshTimestamp is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldLastRefreshTimestamp = "LastRefreshTimestamp"

	// ExportableLambdaFunctionFieldCurrentPerformanceRisk is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldCurrentPerformanceRisk = "CurrentPerformanceRisk"

	// ExportableLambdaFunctionFieldRecommendationOptionsSavingsOpportunityPercentage is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldRecommendationOptionsSavingsOpportunityPercentage = "RecommendationOptionsSavingsOpportunityPercentage"

	// ExportableLambdaFunctionFieldRecommendationOptionsEstimatedMonthlySavingsCurrency is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldRecommendationOptionsEstimatedMonthlySavingsCurrency = "RecommendationOptionsEstimatedMonthlySavingsCurrency"

	// ExportableLambdaFunctionFieldRecommendationOptionsEstimatedMonthlySavingsValue is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldRecommendationOptionsEstimatedMonthlySavingsValue = "RecommendationOptionsEstimatedMonthlySavingsValue"

	// ExportableLambdaFunctionFieldTags is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldTags = "Tags"

	// ExportableLambdaFunctionFieldEffectiveRecommendationPreferencesSavingsEstimationMode is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldEffectiveRecommendationPreferencesSavingsEstimationMode = "EffectiveRecommendationPreferencesSavingsEstimationMode"

	// ExportableLambdaFunctionFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage = "RecommendationOptionsSavingsOpportunityAfterDiscountsPercentage"

	// ExportableLambdaFunctionFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts = "RecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts"

	// ExportableLambdaFunctionFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts is a ExportableLambdaFunctionField enum value
	ExportableLambdaFunctionFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts = "RecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts"
)

// ExportableLambdaFunctionField_Values returns all elements of the ExportableLambdaFunctionField enum
func ExportableLambdaFunctionField_Values() []string {
	return []string{
		ExportableLambdaFunctionFieldAccountId,
		ExportableLambdaFunctionFieldFunctionArn,
		ExportableLambdaFunctionFieldFunctionVersion,
		ExportableLambdaFunctionFieldFinding,
		ExportableLambdaFunctionFieldFindingReasonCodes,
		ExportableLambdaFunctionFieldNumberOfInvocations,
		ExportableLambdaFunctionFieldUtilizationMetricsDurationMaximum,
		ExportableLambdaFunctionFieldUtilizationMetricsDurationAverage,
		ExportableLambdaFunctionFieldUtilizationMetricsMemoryMaximum,
		ExportableLambdaFunctionFieldUtilizationMetricsMemoryAverage,
		ExportableLambdaFunctionFieldLookbackPeriodInDays,
		ExportableLambdaFunctionFieldCurrentConfigurationMemorySize,
		ExportableLambdaFunctionFieldCurrentConfigurationTimeout,
		ExportableLambdaFunctionFieldCurrentCostTotal,
		ExportableLambdaFunctionFieldCurrentCostAverage,
		ExportableLambdaFunctionFieldRecommendationOptionsConfigurationMemorySize,
		ExportableLambdaFunctionFieldRecommendationOptionsCostLow,
		ExportableLambdaFunctionFieldRecommendationOptionsCostHigh,
		ExportableLambdaFunctionFieldRecommendationOptionsProjectedUtilizationMetricsDurationLowerBound,
		ExportableLambdaFunctionFieldRecommendationOptionsProjectedUtilizationMetricsDurationUpperBound,
		ExportableLambdaFunctionFieldRecommendationOptionsProjectedUtilizationMetricsDurationExpected,
		ExportableLambdaFunctionFieldLastRefreshTimestamp,
		ExportableLambdaFunctionFieldCurrentPerformanceRisk,
		ExportableLambdaFunctionFieldRecommendationOptionsSavingsOpportunityPercentage,
		ExportableLambdaFunctionFieldRecommendationOptionsEstimatedMonthlySavingsCurrency,
		ExportableLambdaFunctionFieldRecommendationOptionsEstimatedMonthlySavingsValue,
		ExportableLambdaFunctionFieldTags,
		ExportableLambdaFunctionFieldEffectiveRecommendationPreferencesSavingsEstimationMode,
		ExportableLambdaFunctionFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage,
		ExportableLambdaFunctionFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts,
		ExportableLambdaFunctionFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts,
	}
}

const (
	// ExportableLicenseFieldAccountId is a ExportableLicenseField enum value
	ExportableLicenseFieldAccountId = "AccountId"

	// ExportableLicenseFieldResourceArn is a ExportableLicenseField enum value
	ExportableLicenseFieldResourceArn = "ResourceArn"

	// ExportableLicenseFieldLookbackPeriodInDays is a ExportableLicenseField enum value
	ExportableLicenseFieldLookbackPeriodInDays = "LookbackPeriodInDays"

	// ExportableLicenseFieldLastRefreshTimestamp is a ExportableLicenseField enum value
	ExportableLicenseFieldLastRefreshTimestamp = "LastRefreshTimestamp"

	// ExportableLicenseFieldFinding is a ExportableLicenseField enum value
	ExportableLicenseFieldFinding = "Finding"

	// ExportableLicenseFieldFindingReasonCodes is a ExportableLicenseField enum value
	ExportableLicenseFieldFindingReasonCodes = "FindingReasonCodes"

	// ExportableLicenseFieldCurrentLicenseConfigurationNumberOfCores is a ExportableLicenseField enum value
	ExportableLicenseFieldCurrentLicenseConfigurationNumberOfCores = "CurrentLicenseConfigurationNumberOfCores"

	// ExportableLicenseFieldCurrentLicenseConfigurationInstanceType is a ExportableLicenseField enum value
	ExportableLicenseFieldCurrentLicenseConfigurationInstanceType = "CurrentLicenseConfigurationInstanceType"

	// ExportableLicenseFieldCurrentLicenseConfigurationOperatingSystem is a ExportableLicenseField enum value
	ExportableLicenseFieldCurrentLicenseConfigurationOperatingSystem = "CurrentLicenseConfigurationOperatingSystem"

	// ExportableLicenseFieldCurrentLicenseConfigurationLicenseName is a ExportableLicenseField enum value
	ExportableLicenseFieldCurrentLicenseConfigurationLicenseName = "CurrentLicenseConfigurationLicenseName"

	// ExportableLicenseFieldCurrentLicenseConfigurationLicenseEdition is a ExportableLicenseField enum value
	ExportableLicenseFieldCurrentLicenseConfigurationLicenseEdition = "CurrentLicenseConfigurationLicenseEdition"

	// ExportableLicenseFieldCurrentLicenseConfigurationLicenseModel is a ExportableLicenseField enum value
	ExportableLicenseFieldCurrentLicenseConfigurationLicenseModel = "CurrentLicenseConfigurationLicenseModel"

	// ExportableLicenseFieldCurrentLicenseConfigurationLicenseVersion is a ExportableLicenseField enum value
	ExportableLicenseFieldCurrentLicenseConfigurationLicenseVersion = "CurrentLicenseConfigurationLicenseVersion"

	// ExportableLicenseFieldCurrentLicenseConfigurationMetricsSource is a ExportableLicenseField enum value
	ExportableLicenseFieldCurrentLicenseConfigurationMetricsSource = "CurrentLicenseConfigurationMetricsSource"

	// ExportableLicenseFieldRecommendationOptionsOperatingSystem is a ExportableLicenseField enum value
	ExportableLicenseFieldRecommendationOptionsOperatingSystem = "RecommendationOptionsOperatingSystem"

	// ExportableLicenseFieldRecommendationOptionsLicenseEdition is a ExportableLicenseField enum value
	ExportableLicenseFieldRecommendationOptionsLicenseEdition = "RecommendationOptionsLicenseEdition"

	// ExportableLicenseFieldRecommendationOptionsLicenseModel is a ExportableLicenseField enum value
	ExportableLicenseFieldRecommendationOptionsLicenseModel = "RecommendationOptionsLicenseModel"

	// ExportableLicenseFieldRecommendationOptionsSavingsOpportunityPercentage is a ExportableLicenseField enum value
	ExportableLicenseFieldRecommendationOptionsSavingsOpportunityPercentage = "RecommendationOptionsSavingsOpportunityPercentage"

	// ExportableLicenseFieldRecommendationOptionsEstimatedMonthlySavingsCurrency is a ExportableLicenseField enum value
	ExportableLicenseFieldRecommendationOptionsEstimatedMonthlySavingsCurrency = "RecommendationOptionsEstimatedMonthlySavingsCurrency"

	// ExportableLicenseFieldRecommendationOptionsEstimatedMonthlySavingsValue is a ExportableLicenseField enum value
	ExportableLicenseFieldRecommendationOptionsEstimatedMonthlySavingsValue = "RecommendationOptionsEstimatedMonthlySavingsValue"

	// ExportableLicenseFieldTags is a ExportableLicenseField enum value
	ExportableLicenseFieldTags = "Tags"
)

// ExportableLicenseField_Values returns all elements of the ExportableLicenseField enum
func ExportableLicenseField_Values() []string {
	return []string{
		ExportableLicenseFieldAccountId,
		ExportableLicenseFieldResourceArn,
		ExportableLicenseFieldLookbackPeriodInDays,
		ExportableLicenseFieldLastRefreshTimestamp,
		ExportableLicenseFieldFinding,
		ExportableLicenseFieldFindingReasonCodes,
		ExportableLicenseFieldCurrentLicenseConfigurationNumberOfCores,
		ExportableLicenseFieldCurrentLicenseConfigurationInstanceType,
		ExportableLicenseFieldCurrentLicenseConfigurationOperatingSystem,
		ExportableLicenseFieldCurrentLicenseConfigurationLicenseName,
		ExportableLicenseFieldCurrentLicenseConfigurationLicenseEdition,
		ExportableLicenseFieldCurrentLicenseConfigurationLicenseModel,
		ExportableLicenseFieldCurrentLicenseConfigurationLicenseVersion,
		ExportableLicenseFieldCurrentLicenseConfigurationMetricsSource,
		ExportableLicenseFieldRecommendationOptionsOperatingSystem,
		ExportableLicenseFieldRecommendationOptionsLicenseEdition,
		ExportableLicenseFieldRecommendationOptionsLicenseModel,
		ExportableLicenseFieldRecommendationOptionsSavingsOpportunityPercentage,
		ExportableLicenseFieldRecommendationOptionsEstimatedMonthlySavingsCurrency,
		ExportableLicenseFieldRecommendationOptionsEstimatedMonthlySavingsValue,
		ExportableLicenseFieldTags,
	}
}

const (
	// ExportableVolumeFieldAccountId is a ExportableVolumeField enum value
	ExportableVolumeFieldAccountId = "AccountId"

	// ExportableVolumeFieldVolumeArn is a ExportableVolumeField enum value
	ExportableVolumeFieldVolumeArn = "VolumeArn"

	// ExportableVolumeFieldFinding is a ExportableVolumeField enum value
	ExportableVolumeFieldFinding = "Finding"

	// ExportableVolumeFieldUtilizationMetricsVolumeReadOpsPerSecondMaximum is a ExportableVolumeField enum value
	ExportableVolumeFieldUtilizationMetricsVolumeReadOpsPerSecondMaximum = "UtilizationMetricsVolumeReadOpsPerSecondMaximum"

	// ExportableVolumeFieldUtilizationMetricsVolumeWriteOpsPerSecondMaximum is a ExportableVolumeField enum value
	ExportableVolumeFieldUtilizationMetricsVolumeWriteOpsPerSecondMaximum = "UtilizationMetricsVolumeWriteOpsPerSecondMaximum"

	// ExportableVolumeFieldUtilizationMetricsVolumeReadBytesPerSecondMaximum is a ExportableVolumeField enum value
	ExportableVolumeFieldUtilizationMetricsVolumeReadBytesPerSecondMaximum = "UtilizationMetricsVolumeReadBytesPerSecondMaximum"

	// ExportableVolumeFieldUtilizationMetricsVolumeWriteBytesPerSecondMaximum is a ExportableVolumeField enum value
	ExportableVolumeFieldUtilizationMetricsVolumeWriteBytesPerSecondMaximum = "UtilizationMetricsVolumeWriteBytesPerSecondMaximum"

	// ExportableVolumeFieldLookbackPeriodInDays is a ExportableVolumeField enum value
	ExportableVolumeFieldLookbackPeriodInDays = "LookbackPeriodInDays"

	// ExportableVolumeFieldCurrentConfigurationVolumeType is a ExportableVolumeField enum value
	ExportableVolumeFieldCurrentConfigurationVolumeType = "CurrentConfigurationVolumeType"

	// ExportableVolumeFieldCurrentConfigurationVolumeBaselineIops is a ExportableVolumeField enum value
	ExportableVolumeFieldCurrentConfigurationVolumeBaselineIops = "CurrentConfigurationVolumeBaselineIOPS"

	// ExportableVolumeFieldCurrentConfigurationVolumeBaselineThroughput is a ExportableVolumeField enum value
	ExportableVolumeFieldCurrentConfigurationVolumeBaselineThroughput = "CurrentConfigurationVolumeBaselineThroughput"

	// ExportableVolumeFieldCurrentConfigurationVolumeBurstIops is a ExportableVolumeField enum value
	ExportableVolumeFieldCurrentConfigurationVolumeBurstIops = "CurrentConfigurationVolumeBurstIOPS"

	// ExportableVolumeFieldCurrentConfigurationVolumeBurstThroughput is a ExportableVolumeField enum value
	ExportableVolumeFieldCurrentConfigurationVolumeBurstThroughput = "CurrentConfigurationVolumeBurstThroughput"

	// ExportableVolumeFieldCurrentConfigurationVolumeSize is a ExportableVolumeField enum value
	ExportableVolumeFieldCurrentConfigurationVolumeSize = "CurrentConfigurationVolumeSize"

	// ExportableVolumeFieldCurrentMonthlyPrice is a ExportableVolumeField enum value
	ExportableVolumeFieldCurrentMonthlyPrice = "CurrentMonthlyPrice"

	// ExportableVolumeFieldRecommendationOptionsConfigurationVolumeType is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsConfigurationVolumeType = "RecommendationOptionsConfigurationVolumeType"

	// ExportableVolumeFieldRecommendationOptionsConfigurationVolumeBaselineIops is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsConfigurationVolumeBaselineIops = "RecommendationOptionsConfigurationVolumeBaselineIOPS"

	// ExportableVolumeFieldRecommendationOptionsConfigurationVolumeBaselineThroughput is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsConfigurationVolumeBaselineThroughput = "RecommendationOptionsConfigurationVolumeBaselineThroughput"

	// ExportableVolumeFieldRecommendationOptionsConfigurationVolumeBurstIops is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsConfigurationVolumeBurstIops = "RecommendationOptionsConfigurationVolumeBurstIOPS"

	// ExportableVolumeFieldRecommendationOptionsConfigurationVolumeBurstThroughput is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsConfigurationVolumeBurstThroughput = "RecommendationOptionsConfigurationVolumeBurstThroughput"

	// ExportableVolumeFieldRecommendationOptionsConfigurationVolumeSize is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsConfigurationVolumeSize = "RecommendationOptionsConfigurationVolumeSize"

	// ExportableVolumeFieldRecommendationOptionsMonthlyPrice is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsMonthlyPrice = "RecommendationOptionsMonthlyPrice"

	// ExportableVolumeFieldRecommendationOptionsPerformanceRisk is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsPerformanceRisk = "RecommendationOptionsPerformanceRisk"

	// ExportableVolumeFieldLastRefreshTimestamp is a ExportableVolumeField enum value
	ExportableVolumeFieldLastRefreshTimestamp = "LastRefreshTimestamp"

	// ExportableVolumeFieldCurrentPerformanceRisk is a ExportableVolumeField enum value
	ExportableVolumeFieldCurrentPerformanceRisk = "CurrentPerformanceRisk"

	// ExportableVolumeFieldRecommendationOptionsSavingsOpportunityPercentage is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsSavingsOpportunityPercentage = "RecommendationOptionsSavingsOpportunityPercentage"

	// ExportableVolumeFieldRecommendationOptionsEstimatedMonthlySavingsCurrency is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsEstimatedMonthlySavingsCurrency = "RecommendationOptionsEstimatedMonthlySavingsCurrency"

	// ExportableVolumeFieldRecommendationOptionsEstimatedMonthlySavingsValue is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsEstimatedMonthlySavingsValue = "RecommendationOptionsEstimatedMonthlySavingsValue"

	// ExportableVolumeFieldRootVolume is a ExportableVolumeField enum value
	ExportableVolumeFieldRootVolume = "RootVolume"

	// ExportableVolumeFieldTags is a ExportableVolumeField enum value
	ExportableVolumeFieldTags = "Tags"

	// ExportableVolumeFieldCurrentConfigurationRootVolume is a ExportableVolumeField enum value
	ExportableVolumeFieldCurrentConfigurationRootVolume = "CurrentConfigurationRootVolume"

	// ExportableVolumeFieldEffectiveRecommendationPreferencesSavingsEstimationMode is a ExportableVolumeField enum value
	ExportableVolumeFieldEffectiveRecommendationPreferencesSavingsEstimationMode = "EffectiveRecommendationPreferencesSavingsEstimationMode"

	// ExportableVolumeFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage = "RecommendationOptionsSavingsOpportunityAfterDiscountsPercentage"

	// ExportableVolumeFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts = "RecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts"

	// ExportableVolumeFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts is a ExportableVolumeField enum value
	ExportableVolumeFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts = "RecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts"
)

// ExportableVolumeField_Values returns all elements of the ExportableVolumeField enum
func ExportableVolumeField_Values() []string {
	return []string{
		ExportableVolumeFieldAccountId,
		ExportableVolumeFieldVolumeArn,
		ExportableVolumeFieldFinding,
		ExportableVolumeFieldUtilizationMetricsVolumeReadOpsPerSecondMaximum,
		ExportableVolumeFieldUtilizationMetricsVolumeWriteOpsPerSecondMaximum,
		ExportableVolumeFieldUtilizationMetricsVolumeReadBytesPerSecondMaximum,
		ExportableVolumeFieldUtilizationMetricsVolumeWriteBytesPerSecondMaximum,
		ExportableVolumeFieldLookbackPeriodInDays,
		ExportableVolumeFieldCurrentConfigurationVolumeType,
		ExportableVolumeFieldCurrentConfigurationVolumeBaselineIops,
		ExportableVolumeFieldCurrentConfigurationVolumeBaselineThroughput,
		ExportableVolumeFieldCurrentConfigurationVolumeBurstIops,
		ExportableVolumeFieldCurrentConfigurationVolumeBurstThroughput,
		ExportableVolumeFieldCurrentConfigurationVolumeSize,
		ExportableVolumeFieldCurrentMonthlyPrice,
		ExportableVolumeFieldRecommendationOptionsConfigurationVolumeType,
		ExportableVolumeFieldRecommendationOptionsConfigurationVolumeBaselineIops,
		ExportableVolumeFieldRecommendationOptionsConfigurationVolumeBaselineThroughput,
		ExportableVolumeFieldRecommendationOptionsConfigurationVolumeBurstIops,
		ExportableVolumeFieldRecommendationOptionsConfigurationVolumeBurstThroughput,
		ExportableVolumeFieldRecommendationOptionsConfigurationVolumeSize,
		ExportableVolumeFieldRecommendationOptionsMonthlyPrice,
		ExportableVolumeFieldRecommendationOptionsPerformanceRisk,
		ExportableVolumeFieldLastRefreshTimestamp,
		ExportableVolumeFieldCurrentPerformanceRisk,
		ExportableVolumeFieldRecommendationOptionsSavingsOpportunityPercentage,
		ExportableVolumeFieldRecommendationOptionsEstimatedMonthlySavingsCurrency,
		ExportableVolumeFieldRecommendationOptionsEstimatedMonthlySavingsValue,
		ExportableVolumeFieldRootVolume,
		ExportableVolumeFieldTags,
		ExportableVolumeFieldCurrentConfigurationRootVolume,
		ExportableVolumeFieldEffectiveRecommendationPreferencesSavingsEstimationMode,
		ExportableVolumeFieldRecommendationOptionsSavingsOpportunityAfterDiscountsPercentage,
		ExportableVolumeFieldRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts,
		ExportableVolumeFieldRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts,
	}
}

const (
	// ExternalMetricStatusCodeNoExternalMetricSet is a ExternalMetricStatusCode enum value
	ExternalMetricStatusCodeNoExternalMetricSet = "NO_EXTERNAL_METRIC_SET"

	// ExternalMetricStatusCodeIntegrationSuccess is a ExternalMetricStatusCode enum value
	ExternalMetricStatusCodeIntegrationSuccess = "INTEGRATION_SUCCESS"

	// ExternalMetricStatusCodeDatadogIntegrationError is a ExternalMetricStatusCode enum value
	ExternalMetricStatusCodeDatadogIntegrationError = "DATADOG_INTEGRATION_ERROR"

	// ExternalMetricStatusCodeDynatraceIntegrationError is a ExternalMetricStatusCode enum value
	ExternalMetricStatusCodeDynatraceIntegrationError = "DYNATRACE_INTEGRATION_ERROR"

	// ExternalMetricStatusCodeNewrelicIntegrationError is a ExternalMetricStatusCode enum value
	ExternalMetricStatusCodeNewrelicIntegrationError = "NEWRELIC_INTEGRATION_ERROR"

	// ExternalMetricStatusCodeInstanaIntegrationError is a ExternalMetricStatusCode enum value
	ExternalMetricStatusCodeInstanaIntegrationError = "INSTANA_INTEGRATION_ERROR"

	// ExternalMetricStatusCodeInsufficientDatadogMetrics is a ExternalMetricStatusCode enum value
	ExternalMetricStatusCodeInsufficientDatadogMetrics = "INSUFFICIENT_DATADOG_METRICS"

	// ExternalMetricStatusCodeInsufficientDynatraceMetrics is a ExternalMetricStatusCode enum value
	ExternalMetricStatusCodeInsufficientDynatraceMetrics = "INSUFFICIENT_DYNATRACE_METRICS"

	// ExternalMetricStatusCodeInsufficientNewrelicMetrics is a ExternalMetricStatusCode enum value
	ExternalMetricStatusCodeInsufficientNewrelicMetrics = "INSUFFICIENT_NEWRELIC_METRICS"

	// ExternalMetricStatusCodeInsufficientInstanaMetrics is a ExternalMetricStatusCode enum value
	ExternalMetricStatusCodeInsufficientInstanaMetrics = "INSUFFICIENT_INSTANA_METRICS"
)

// ExternalMetricStatusCode_Values returns all elements of the ExternalMetricStatusCode enum
func ExternalMetricStatusCode_Values() []string {
	return []string{
		ExternalMetricStatusCodeNoExternalMetricSet,
		ExternalMetricStatusCodeIntegrationSuccess,
		ExternalMetricStatusCodeDatadogIntegrationError,
		ExternalMetricStatusCodeDynatraceIntegrationError,
		ExternalMetricStatusCodeNewrelicIntegrationError,
		ExternalMetricStatusCodeInstanaIntegrationError,
		ExternalMetricStatusCodeInsufficientDatadogMetrics,
		ExternalMetricStatusCodeInsufficientDynatraceMetrics,
		ExternalMetricStatusCodeInsufficientNewrelicMetrics,
		ExternalMetricStatusCodeInsufficientInstanaMetrics,
	}
}

const (
	// ExternalMetricsSourceDatadog is a ExternalMetricsSource enum value
	ExternalMetricsSourceDatadog = "Datadog"

	// ExternalMetricsSourceDynatrace is a ExternalMetricsSource enum value
	ExternalMetricsSourceDynatrace = "Dynatrace"

	// ExternalMetricsSourceNewRelic is a ExternalMetricsSource enum value
	ExternalMetricsSourceNewRelic = "NewRelic"

	// ExternalMetricsSourceInstana is a ExternalMetricsSource enum value
	ExternalMetricsSourceInstana = "Instana"
)

// ExternalMetricsSource_Values returns all elements of the ExternalMetricsSource enum
func ExternalMetricsSource_Values() []string {
	return []string{
		ExternalMetricsSourceDatadog,
		ExternalMetricsSourceDynatrace,
		ExternalMetricsSourceNewRelic,
		ExternalMetricsSourceInstana,
	}
}

const (
	// FileFormatCsv is a FileFormat enum value
	FileFormatCsv = "Csv"
)

// FileFormat_Values returns all elements of the FileFormat enum
func FileFormat_Values() []string {
	return []string{
		FileFormatCsv,
	}
}

const (
	// FilterNameFinding is a FilterName enum value
	FilterNameFinding = "Finding"

	// FilterNameFindingReasonCodes is a FilterName enum value
	FilterNameFindingReasonCodes = "FindingReasonCodes"

	// FilterNameRecommendationSourceType is a FilterName enum value
	FilterNameRecommendationSourceType = "RecommendationSourceType"

	// FilterNameInferredWorkloadTypes is a FilterName enum value
	FilterNameInferredWorkloadTypes = "InferredWorkloadTypes"
)

// FilterName_Values returns all elements of the FilterName enum
func FilterName_Values() []string {
	return []string{
		FilterNameFinding,
		FilterNameFindingReasonCodes,
		FilterNameRecommendationSourceType,
		FilterNameInferredWorkloadTypes,
	}
}

const (
	// FindingUnderprovisioned is a Finding enum value
	FindingUnderprovisioned = "Underprovisioned"

	// FindingOverprovisioned is a Finding enum value
	FindingOverprovisioned = "Overprovisioned"

	// FindingOptimized is a Finding enum value
	FindingOptimized = "Optimized"

	// FindingNotOptimized is a Finding enum value
	FindingNotOptimized = "NotOptimized"
)

// Finding_Values returns all elements of the Finding enum
func Finding_Values() []string {
	return []string{
		FindingUnderprovisioned,
		FindingOverprovisioned,
		FindingOptimized,
		FindingNotOptimized,
	}
}

const (
	// FindingReasonCodeMemoryOverprovisioned is a FindingReasonCode enum value
	FindingReasonCodeMemoryOverprovisioned = "MemoryOverprovisioned"

	// FindingReasonCodeMemoryUnderprovisioned is a FindingReasonCode enum value
	FindingReasonCodeMemoryUnderprovisioned = "MemoryUnderprovisioned"
)

// FindingReasonCode_Values returns all elements of the FindingReasonCode enum
func FindingReasonCode_Values() []string {
	return []string{
		FindingReasonCodeMemoryOverprovisioned,
		FindingReasonCodeMemoryUnderprovisioned,
	}
}

const (
	// InferredWorkloadTypeAmazonEmr is a InferredWorkloadType enum value
	InferredWorkloadTypeAmazonEmr = "AmazonEmr"

	// InferredWorkloadTypeApacheCassandra is a InferredWorkloadType enum value
	InferredWorkloadTypeApacheCassandra = "ApacheCassandra"

	// InferredWorkloadTypeApacheHadoop is a InferredWorkloadType enum value
	InferredWorkloadTypeApacheHadoop = "ApacheHadoop"

	// InferredWorkloadTypeMemcached is a InferredWorkloadType enum value
	InferredWorkloadTypeMemcached = "Memcached"

	// InferredWorkloadTypeNginx is a InferredWorkloadType enum value
	InferredWorkloadTypeNginx = "Nginx"

	// InferredWorkloadTypePostgreSql is a InferredWorkloadType enum value
	InferredWorkloadTypePostgreSql = "PostgreSql"

	// InferredWorkloadTypeRedis is a InferredWorkloadType enum value
	InferredWorkloadTypeRedis = "Redis"

	// InferredWorkloadTypeKafka is a InferredWorkloadType enum value
	InferredWorkloadTypeKafka = "Kafka"

	// InferredWorkloadTypeSqlserver is a InferredWorkloadType enum value
	InferredWorkloadTypeSqlserver = "SQLServer"
)

// InferredWorkloadType_Values returns all elements of the InferredWorkloadType enum
func InferredWorkloadType_Values() []string {
	return []string{
		InferredWorkloadTypeAmazonEmr,
		InferredWorkloadTypeApacheCassandra,
		InferredWorkloadTypeApacheHadoop,
		InferredWorkloadTypeMemcached,
		InferredWorkloadTypeNginx,
		InferredWorkloadTypePostgreSql,
		InferredWorkloadTypeRedis,
		InferredWorkloadTypeKafka,
		InferredWorkloadTypeSqlserver,
	}
}

const (
	// InferredWorkloadTypesPreferenceActive is a InferredWorkloadTypesPreference enum value
	InferredWorkloadTypesPreferenceActive = "Active"

	// InferredWorkloadTypesPreferenceInactive is a InferredWorkloadTypesPreference enum value
	InferredWorkloadTypesPreferenceInactive = "Inactive"
)

// InferredWorkloadTypesPreference_Values returns all elements of the InferredWorkloadTypesPreference enum
func InferredWorkloadTypesPreference_Values() []string {
	return []string{
		InferredWorkloadTypesPreferenceActive,
		InferredWorkloadTypesPreferenceInactive,
	}
}

const (
	// InstanceIdleTrue is a InstanceIdle enum value
	InstanceIdleTrue = "True"

	// InstanceIdleFalse is a InstanceIdle enum value
	InstanceIdleFalse = "False"
)

// InstanceIdle_Values returns all elements of the InstanceIdle enum
func InstanceIdle_Values() []string {
	return []string{
		InstanceIdleTrue,
		InstanceIdleFalse,
	}
}

const (
	// InstanceRecommendationFindingReasonCodeCpuoverprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeCpuoverprovisioned = "CPUOverprovisioned"

	// InstanceRecommendationFindingReasonCodeCpuunderprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeCpuunderprovisioned = "CPUUnderprovisioned"

	// InstanceRecommendationFindingReasonCodeMemoryOverprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeMemoryOverprovisioned = "MemoryOverprovisioned"

	// InstanceRecommendationFindingReasonCodeMemoryUnderprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeMemoryUnderprovisioned = "MemoryUnderprovisioned"

	// InstanceRecommendationFindingReasonCodeEbsthroughputOverprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeEbsthroughputOverprovisioned = "EBSThroughputOverprovisioned"

	// InstanceRecommendationFindingReasonCodeEbsthroughputUnderprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeEbsthroughputUnderprovisioned = "EBSThroughputUnderprovisioned"

	// InstanceRecommendationFindingReasonCodeEbsiopsoverprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeEbsiopsoverprovisioned = "EBSIOPSOverprovisioned"

	// InstanceRecommendationFindingReasonCodeEbsiopsunderprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeEbsiopsunderprovisioned = "EBSIOPSUnderprovisioned"

	// InstanceRecommendationFindingReasonCodeNetworkBandwidthOverprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeNetworkBandwidthOverprovisioned = "NetworkBandwidthOverprovisioned"

	// InstanceRecommendationFindingReasonCodeNetworkBandwidthUnderprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeNetworkBandwidthUnderprovisioned = "NetworkBandwidthUnderprovisioned"

	// InstanceRecommendationFindingReasonCodeNetworkPpsoverprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeNetworkPpsoverprovisioned = "NetworkPPSOverprovisioned"

	// InstanceRecommendationFindingReasonCodeNetworkPpsunderprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeNetworkPpsunderprovisioned = "NetworkPPSUnderprovisioned"

	// InstanceRecommendationFindingReasonCodeDiskIopsoverprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeDiskIopsoverprovisioned = "DiskIOPSOverprovisioned"

	// InstanceRecommendationFindingReasonCodeDiskIopsunderprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeDiskIopsunderprovisioned = "DiskIOPSUnderprovisioned"

	// InstanceRecommendationFindingReasonCodeDiskThroughputOverprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeDiskThroughputOverprovisioned = "DiskThroughputOverprovisioned"

	// InstanceRecommendationFindingReasonCodeDiskThroughputUnderprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeDiskThroughputUnderprovisioned = "DiskThroughputUnderprovisioned"

	// InstanceRecommendationFindingReasonCodeGpuunderprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeGpuunderprovisioned = "GPUUnderprovisioned"

	// InstanceRecommendationFindingReasonCodeGpuoverprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeGpuoverprovisioned = "GPUOverprovisioned"

	// InstanceRecommendationFindingReasonCodeGpumemoryUnderprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeGpumemoryUnderprovisioned = "GPUMemoryUnderprovisioned"

	// InstanceRecommendationFindingReasonCodeGpumemoryOverprovisioned is a InstanceRecommendationFindingReasonCode enum value
	InstanceRecommendationFindingReasonCodeGpumemoryOverprovisioned = "GPUMemoryOverprovisioned"
)

// InstanceRecommendationFindingReasonCode_Values returns all elements of the InstanceRecommendationFindingReasonCode enum
func InstanceRecommendationFindingReasonCode_Values() []string {
	return []string{
		InstanceRecommendationFindingReasonCodeCpuoverprovisioned,
		InstanceRecommendationFindingReasonCodeCpuunderprovisioned,
		InstanceRecommendationFindingReasonCodeMemoryOverprovisioned,
		InstanceRecommendationFindingReasonCodeMemoryUnderprovisioned,
		InstanceRecommendationFindingReasonCodeEbsthroughputOverprovisioned,
		InstanceRecommendationFindingReasonCodeEbsthroughputUnderprovisioned,
		InstanceRecommendationFindingReasonCodeEbsiopsoverprovisioned,
		InstanceRecommendationFindingReasonCodeEbsiopsunderprovisioned,
		InstanceRecommendationFindingReasonCodeNetworkBandwidthOverprovisioned,
		InstanceRecommendationFindingReasonCodeNetworkBandwidthUnderprovisioned,
		InstanceRecommendationFindingReasonCodeNetworkPpsoverprovisioned,
		InstanceRecommendationFindingReasonCodeNetworkPpsunderprovisioned,
		InstanceRecommendationFindingReasonCodeDiskIopsoverprovisioned,
		InstanceRecommendationFindingReasonCodeDiskIopsunderprovisioned,
		InstanceRecommendationFindingReasonCodeDiskThroughputOverprovisioned,
		InstanceRecommendationFindingReasonCodeDiskThroughputUnderprovisioned,
		InstanceRecommendationFindingReasonCodeGpuunderprovisioned,
		InstanceRecommendationFindingReasonCodeGpuoverprovisioned,
		InstanceRecommendationFindingReasonCodeGpumemoryUnderprovisioned,
		InstanceRecommendationFindingReasonCodeGpumemoryOverprovisioned,
	}
}

const (
	// InstanceSavingsEstimationModeSourcePublicPricing is a InstanceSavingsEstimationModeSource enum value
	InstanceSavingsEstimationModeSourcePublicPricing = "PublicPricing"

	// InstanceSavingsEstimationModeSourceCostExplorerRightsizing is a InstanceSavingsEstimationModeSource enum value
	InstanceSavingsEstimationModeSourceCostExplorerRightsizing = "CostExplorerRightsizing"

	// InstanceSavingsEstimationModeSourceCostOptimizationHub is a InstanceSavingsEstimationModeSource enum value
	InstanceSavingsEstimationModeSourceCostOptimizationHub = "CostOptimizationHub"
)

// InstanceSavingsEstimationModeSource_Values returns all elements of the InstanceSavingsEstimationModeSource enum
func InstanceSavingsEstimationModeSource_Values() []string {
	return []string{
		InstanceSavingsEstimationModeSourcePublicPricing,
		InstanceSavingsEstimationModeSourceCostExplorerRightsizing,
		InstanceSavingsEstimationModeSourceCostOptimizationHub,
	}
}

const (
	// InstanceStatePending is a InstanceState enum value
	InstanceStatePending = "pending"

	// InstanceStateRunning is a InstanceState enum value
	InstanceStateRunning = "running"

	// InstanceStateShuttingDown is a InstanceState enum value
	InstanceStateShuttingDown = "shutting-down"

	// InstanceStateTerminated is a InstanceState enum value
	InstanceStateTerminated = "terminated"

	// InstanceStateStopping is a InstanceState enum value
	InstanceStateStopping = "stopping"

	// InstanceStateStopped is a InstanceState enum value
	InstanceStateStopped = "stopped"
)

// InstanceState_Values returns all elements of the InstanceState enum
func InstanceState_Values() []string {
	return []string{
		InstanceStatePending,
		InstanceStateRunning,
		InstanceStateShuttingDown,
		InstanceStateTerminated,
		InstanceStateStopping,
		InstanceStateStopped,
	}
}

const (
	// JobFilterNameResourceType is a JobFilterName enum value
	JobFilterNameResourceType = "ResourceType"

	// JobFilterNameJobStatus is a JobFilterName enum value
	JobFilterNameJobStatus = "JobStatus"
)

// JobFilterName_Values returns all elements of the JobFilterName enum
func JobFilterName_Values() []string {
	return []string{
		JobFilterNameResourceType,
		JobFilterNameJobStatus,
	}
}

const (
	// JobStatusQueued is a JobStatus enum value
	JobStatusQueued = "Queued"

	// JobStatusInProgress is a JobStatus enum value
	JobStatusInProgress = "InProgress"

	// JobStatusComplete is a JobStatus enum value
	JobStatusComplete = "Complete"

	// JobStatusFailed is a JobStatus enum value
	JobStatusFailed = "Failed"
)

// JobStatus_Values returns all elements of the JobStatus enum
func JobStatus_Values() []string {
	return []string{
		JobStatusQueued,
		JobStatusInProgress,
		JobStatusComplete,
		JobStatusFailed,
	}
}

const (
	// LambdaFunctionMemoryMetricNameDuration is a LambdaFunctionMemoryMetricName enum value
	LambdaFunctionMemoryMetricNameDuration = "Duration"
)

// LambdaFunctionMemoryMetricName_Values returns all elements of the LambdaFunctionMemoryMetricName enum
func LambdaFunctionMemoryMetricName_Values() []string {
	return []string{
		LambdaFunctionMemoryMetricNameDuration,
	}
}

const (
	// LambdaFunctionMemoryMetricStatisticLowerBound is a LambdaFunctionMemoryMetricStatistic enum value
	LambdaFunctionMemoryMetricStatisticLowerBound = "LowerBound"

	// LambdaFunctionMemoryMetricStatisticUpperBound is a LambdaFunctionMemoryMetricStatistic enum value
	LambdaFunctionMemoryMetricStatisticUpperBound = "UpperBound"

	// LambdaFunctionMemoryMetricStatisticExpected is a LambdaFunctionMemoryMetricStatistic enum value
	LambdaFunctionMemoryMetricStatisticExpected = "Expected"
)

// LambdaFunctionMemoryMetricStatistic_Values returns all elements of the LambdaFunctionMemoryMetricStatistic enum
func LambdaFunctionMemoryMetricStatistic_Values() []string {
	return []string{
		LambdaFunctionMemoryMetricStatisticLowerBound,
		LambdaFunctionMemoryMetricStatisticUpperBound,
		LambdaFunctionMemoryMetricStatisticExpected,
	}
}

const (
	// LambdaFunctionMetricNameDuration is a LambdaFunctionMetricName enum value
	LambdaFunctionMetricNameDuration = "Duration"

	// LambdaFunctionMetricNameMemory is a LambdaFunctionMetricName enum value
	LambdaFunctionMetricNameMemory = "Memory"
)

// LambdaFunctionMetricName_Values returns all elements of the LambdaFunctionMetricName enum
func LambdaFunctionMetricName_Values() []string {
	return []string{
		LambdaFunctionMetricNameDuration,
		LambdaFunctionMetricNameMemory,
	}
}

const (
	// LambdaFunctionMetricStatisticMaximum is a LambdaFunctionMetricStatistic enum value
	LambdaFunctionMetricStatisticMaximum = "Maximum"

	// LambdaFunctionMetricStatisticAverage is a LambdaFunctionMetricStatistic enum value
	LambdaFunctionMetricStatisticAverage = "Average"
)

// LambdaFunctionMetricStatistic_Values returns all elements of the LambdaFunctionMetricStatistic enum
func LambdaFunctionMetricStatistic_Values() []string {
	return []string{
		LambdaFunctionMetricStatisticMaximum,
		LambdaFunctionMetricStatisticAverage,
	}
}

const (
	// LambdaFunctionRecommendationFilterNameFinding is a LambdaFunctionRecommendationFilterName enum value
	LambdaFunctionRecommendationFilterNameFinding = "Finding"

	// LambdaFunctionRecommendationFilterNameFindingReasonCode is a LambdaFunctionRecommendationFilterName enum value
	LambdaFunctionRecommendationFilterNameFindingReasonCode = "FindingReasonCode"
)

// LambdaFunctionRecommendationFilterName_Values returns all elements of the LambdaFunctionRecommendationFilterName enum
func LambdaFunctionRecommendationFilterName_Values() []string {
	return []string{
		LambdaFunctionRecommendationFilterNameFinding,
		LambdaFunctionRecommendationFilterNameFindingReasonCode,
	}
}

const (
	// LambdaFunctionRecommendationFindingOptimized is a LambdaFunctionRecommendationFinding enum value
	LambdaFunctionRecommendationFindingOptimized = "Optimized"

	// LambdaFunctionRecommendationFindingNotOptimized is a LambdaFunctionRecommendationFinding enum value
	LambdaFunctionRecommendationFindingNotOptimized = "NotOptimized"

	// LambdaFunctionRecommendationFindingUnavailable is a LambdaFunctionRecommendationFinding enum value
	LambdaFunctionRecommendationFindingUnavailable = "Unavailable"
)

// LambdaFunctionRecommendationFinding_Values returns all elements of the LambdaFunctionRecommendationFinding enum
func LambdaFunctionRecommendationFinding_Values() []string {
	return []string{
		LambdaFunctionRecommendationFindingOptimized,
		LambdaFunctionRecommendationFindingNotOptimized,
		LambdaFunctionRecommendationFindingUnavailable,
	}
}

const (
	// LambdaFunctionRecommendationFindingReasonCodeMemoryOverprovisioned is a LambdaFunctionRecommendationFindingReasonCode enum value
	LambdaFunctionRecommendationFindingReasonCodeMemoryOverprovisioned = "MemoryOverprovisioned"

	// LambdaFunctionRecommendationFindingReasonCodeMemoryUnderprovisioned is a LambdaFunctionRecommendationFindingReasonCode enum value
	LambdaFunctionRecommendationFindingReasonCodeMemoryUnderprovisioned = "MemoryUnderprovisioned"

	// LambdaFunctionRecommendationFindingReasonCodeInsufficientData is a LambdaFunctionRecommendationFindingReasonCode enum value
	LambdaFunctionRecommendationFindingReasonCodeInsufficientData = "InsufficientData"

	// LambdaFunctionRecommendationFindingReasonCodeInconclusive is a LambdaFunctionRecommendationFindingReasonCode enum value
	LambdaFunctionRecommendationFindingReasonCodeInconclusive = "Inconclusive"
)

// LambdaFunctionRecommendationFindingReasonCode_Values returns all elements of the LambdaFunctionRecommendationFindingReasonCode enum
func LambdaFunctionRecommendationFindingReasonCode_Values() []string {
	return []string{
		LambdaFunctionRecommendationFindingReasonCodeMemoryOverprovisioned,
		LambdaFunctionRecommendationFindingReasonCodeMemoryUnderprovisioned,
		LambdaFunctionRecommendationFindingReasonCodeInsufficientData,
		LambdaFunctionRecommendationFindingReasonCodeInconclusive,
	}
}

const (
	// LambdaSavingsEstimationModeSourcePublicPricing is a LambdaSavingsEstimationModeSource enum value
	LambdaSavingsEstimationModeSourcePublicPricing = "PublicPricing"

	// LambdaSavingsEstimationModeSourceCostExplorerRightsizing is a LambdaSavingsEstimationModeSource enum value
	LambdaSavingsEstimationModeSourceCostExplorerRightsizing = "CostExplorerRightsizing"

	// LambdaSavingsEstimationModeSourceCostOptimizationHub is a LambdaSavingsEstimationModeSource enum value
	LambdaSavingsEstimationModeSourceCostOptimizationHub = "CostOptimizationHub"
)

// LambdaSavingsEstimationModeSource_Values returns all elements of the LambdaSavingsEstimationModeSource enum
func LambdaSavingsEstimationModeSource_Values() []string {
	return []string{
		LambdaSavingsEstimationModeSourcePublicPricing,
		LambdaSavingsEstimationModeSourceCostExplorerRightsizing,
		LambdaSavingsEstimationModeSourceCostOptimizationHub,
	}
}

const (
	// LicenseEditionEnterprise is a LicenseEdition enum value
	LicenseEditionEnterprise = "Enterprise"

	// LicenseEditionStandard is a LicenseEdition enum value
	LicenseEditionStandard = "Standard"

	// LicenseEditionFree is a LicenseEdition enum value
	LicenseEditionFree = "Free"

	// LicenseEditionNoLicenseEditionFound is a LicenseEdition enum value
	LicenseEditionNoLicenseEditionFound = "NoLicenseEditionFound"
)

// LicenseEdition_Values returns all elements of the LicenseEdition enum
func LicenseEdition_Values() []string {
	return []string{
		LicenseEditionEnterprise,
		LicenseEditionStandard,
		LicenseEditionFree,
		LicenseEditionNoLicenseEditionFound,
	}
}

const (
	// LicenseFindingInsufficientMetrics is a LicenseFinding enum value
	LicenseFindingInsufficientMetrics = "InsufficientMetrics"

	// LicenseFindingOptimized is a LicenseFinding enum value
	LicenseFindingOptimized = "Optimized"

	// LicenseFindingNotOptimized is a LicenseFinding enum value
	LicenseFindingNotOptimized = "NotOptimized"
)

// LicenseFinding_Values returns all elements of the LicenseFinding enum
func LicenseFinding_Values() []string {
	return []string{
		LicenseFindingInsufficientMetrics,
		LicenseFindingOptimized,
		LicenseFindingNotOptimized,
	}
}

const (
	// LicenseFindingReasonCodeInvalidCloudWatchApplicationInsightsSetup is a LicenseFindingReasonCode enum value
	LicenseFindingReasonCodeInvalidCloudWatchApplicationInsightsSetup = "InvalidCloudWatchApplicationInsightsSetup"

	// LicenseFindingReasonCodeCloudWatchApplicationInsightsError is a LicenseFindingReasonCode enum value
	LicenseFindingReasonCodeCloudWatchApplicationInsightsError = "CloudWatchApplicationInsightsError"

	// LicenseFindingReasonCodeLicenseOverprovisioned is a LicenseFindingReasonCode enum value
	LicenseFindingReasonCodeLicenseOverprovisioned = "LicenseOverprovisioned"

	// LicenseFindingReasonCodeOptimized is a LicenseFindingReasonCode enum value
	LicenseFindingReasonCodeOptimized = "Optimized"
)

// LicenseFindingReasonCode_Values returns all elements of the LicenseFindingReasonCode enum
func LicenseFindingReasonCode_Values() []string {
	return []string{
		LicenseFindingReasonCodeInvalidCloudWatchApplicationInsightsSetup,
		LicenseFindingReasonCodeCloudWatchApplicationInsightsError,
		LicenseFindingReasonCodeLicenseOverprovisioned,
		LicenseFindingReasonCodeOptimized,
	}
}

const (
	// LicenseModelLicenseIncluded is a LicenseModel enum value
	LicenseModelLicenseIncluded = "LicenseIncluded"

	// LicenseModelBringYourOwnLicense is a LicenseModel enum value
	LicenseModelBringYourOwnLicense = "BringYourOwnLicense"
)

// LicenseModel_Values returns all elements of the LicenseModel enum
func LicenseModel_Values() []string {
	return []string{
		LicenseModelLicenseIncluded,
		LicenseModelBringYourOwnLicense,
	}
}

const (
	// LicenseNameSqlserver is a LicenseName enum value
	LicenseNameSqlserver = "SQLServer"
)

// LicenseName_Values returns all elements of the LicenseName enum
func LicenseName_Values() []string {
	return []string{
		LicenseNameSqlserver,
	}
}

const (
	// LicenseRecommendationFilterNameFinding is a LicenseRecommendationFilterName enum value
	LicenseRecommendationFilterNameFinding = "Finding"

	// LicenseRecommendationFilterNameFindingReasonCode is a LicenseRecommendationFilterName enum value
	LicenseRecommendationFilterNameFindingReasonCode = "FindingReasonCode"

	// LicenseRecommendationFilterNameLicenseName is a LicenseRecommendationFilterName enum value
	LicenseRecommendationFilterNameLicenseName = "LicenseName"
)

// LicenseRecommendationFilterName_Values returns all elements of the LicenseRecommendationFilterName enum
func LicenseRecommendationFilterName_Values() []string {
	return []string{
		LicenseRecommendationFilterNameFinding,
		LicenseRecommendationFilterNameFindingReasonCode,
		LicenseRecommendationFilterNameLicenseName,
	}
}

const (
	// LookBackPeriodPreferenceDays14 is a LookBackPeriodPreference enum value
	LookBackPeriodPreferenceDays14 = "DAYS_14"

	// LookBackPeriodPreferenceDays32 is a LookBackPeriodPreference enum value
	LookBackPeriodPreferenceDays32 = "DAYS_32"

	// LookBackPeriodPreferenceDays93 is a LookBackPeriodPreference enum value
	LookBackPeriodPreferenceDays93 = "DAYS_93"
)

// LookBackPeriodPreference_Values returns all elements of the LookBackPeriodPreference enum
func LookBackPeriodPreference_Values() []string {
	return []string{
		LookBackPeriodPreferenceDays14,
		LookBackPeriodPreferenceDays32,
		LookBackPeriodPreferenceDays93,
	}
}

const (
	// MetricNameCpu is a MetricName enum value
	MetricNameCpu = "Cpu"

	// MetricNameMemory is a MetricName enum value
	MetricNameMemory = "Memory"

	// MetricNameEbsReadOpsPerSecond is a MetricName enum value
	MetricNameEbsReadOpsPerSecond = "EBS_READ_OPS_PER_SECOND"

	// MetricNameEbsWriteOpsPerSecond is a MetricName enum value
	MetricNameEbsWriteOpsPerSecond = "EBS_WRITE_OPS_PER_SECOND"

	// MetricNameEbsReadBytesPerSecond is a MetricName enum value
	MetricNameEbsReadBytesPerSecond = "EBS_READ_BYTES_PER_SECOND"

	// MetricNameEbsWriteBytesPerSecond is a MetricName enum value
	MetricNameEbsWriteBytesPerSecond = "EBS_WRITE_BYTES_PER_SECOND"

	// MetricNameDiskReadOpsPerSecond is a MetricName enum value
	MetricNameDiskReadOpsPerSecond = "DISK_READ_OPS_PER_SECOND"

	// MetricNameDiskWriteOpsPerSecond is a MetricName enum value
	MetricNameDiskWriteOpsPerSecond = "DISK_WRITE_OPS_PER_SECOND"

	// MetricNameDiskReadBytesPerSecond is a MetricName enum value
	MetricNameDiskReadBytesPerSecond = "DISK_READ_BYTES_PER_SECOND"

	// MetricNameDiskWriteBytesPerSecond is a MetricName enum value
	MetricNameDiskWriteBytesPerSecond = "DISK_WRITE_BYTES_PER_SECOND"

	// MetricNameNetworkInBytesPerSecond is a MetricName enum value
	MetricNameNetworkInBytesPerSecond = "NETWORK_IN_BYTES_PER_SECOND"

	// MetricNameNetworkOutBytesPerSecond is a MetricName enum value
	MetricNameNetworkOutBytesPerSecond = "NETWORK_OUT_BYTES_PER_SECOND"

	// MetricNameNetworkPacketsInPerSecond is a MetricName enum value
	MetricNameNetworkPacketsInPerSecond = "NETWORK_PACKETS_IN_PER_SECOND"

	// MetricNameNetworkPacketsOutPerSecond is a MetricName enum value
	MetricNameNetworkPacketsOutPerSecond = "NETWORK_PACKETS_OUT_PER_SECOND"

	// MetricNameGpuPercentage is a MetricName enum value
	MetricNameGpuPercentage = "GPU_PERCENTAGE"

	// MetricNameGpuMemoryPercentage is a MetricName enum value
	MetricNameGpuMemoryPercentage = "GPU_MEMORY_PERCENTAGE"
)

// MetricName_Values returns all elements of the MetricName enum
func MetricName_Values() []string {
	return []string{
		MetricNameCpu,
		MetricNameMemory,
		MetricNameEbsReadOpsPerSecond,
		MetricNameEbsWriteOpsPerSecond,
		MetricNameEbsReadBytesPerSecond,
		MetricNameEbsWriteBytesPerSecond,
		MetricNameDiskReadOpsPerSecond,
		MetricNameDiskWriteOpsPerSecond,
		MetricNameDiskReadBytesPerSecond,
		MetricNameDiskWriteBytesPerSecond,
		MetricNameNetworkInBytesPerSecond,
		MetricNameNetworkOutBytesPerSecond,
		MetricNameNetworkPacketsInPerSecond,
		MetricNameNetworkPacketsOutPerSecond,
		MetricNameGpuPercentage,
		MetricNameGpuMemoryPercentage,
	}
}

const (
	// MetricSourceProviderCloudWatchApplicationInsights is a MetricSourceProvider enum value
	MetricSourceProviderCloudWatchApplicationInsights = "CloudWatchApplicationInsights"
)

// MetricSourceProvider_Values returns all elements of the MetricSourceProvider enum
func MetricSourceProvider_Values() []string {
	return []string{
		MetricSourceProviderCloudWatchApplicationInsights,
	}
}

const (
	// MetricStatisticMaximum is a MetricStatistic enum value
	MetricStatisticMaximum = "Maximum"

	// MetricStatisticAverage is a MetricStatistic enum value
	MetricStatisticAverage = "Average"
)

// MetricStatistic_Values returns all elements of the MetricStatistic enum
func MetricStatistic_Values() []string {
	return []string{
		MetricStatisticMaximum,
		MetricStatisticAverage,
	}
}

const (
	// MigrationEffortVeryLow is a MigrationEffort enum value
	MigrationEffortVeryLow = "VeryLow"

	// MigrationEffortLow is a MigrationEffort enum value
	MigrationEffortLow = "Low"

	// MigrationEffortMedium is a MigrationEffort enum value
	MigrationEffortMedium = "Medium"

	// MigrationEffortHigh is a MigrationEffort enum value
	MigrationEffortHigh = "High"
)

// MigrationEffort_Values returns all elements of the MigrationEffort enum
func MigrationEffort_Values() []string {
	return []string{
		MigrationEffortVeryLow,
		MigrationEffortLow,
		MigrationEffortMedium,
		MigrationEffortHigh,
	}
}

const (
	// PlatformDifferenceHypervisor is a PlatformDifference enum value
	PlatformDifferenceHypervisor = "Hypervisor"

	// PlatformDifferenceNetworkInterface is a PlatformDifference enum value
	PlatformDifferenceNetworkInterface = "NetworkInterface"

	// PlatformDifferenceStorageInterface is a PlatformDifference enum value
	PlatformDifferenceStorageInterface = "StorageInterface"

	// PlatformDifferenceInstanceStoreAvailability is a PlatformDifference enum value
	PlatformDifferenceInstanceStoreAvailability = "InstanceStoreAvailability"

	// PlatformDifferenceVirtualizationType is a PlatformDifference enum value
	PlatformDifferenceVirtualizationType = "VirtualizationType"

	// PlatformDifferenceArchitecture is a PlatformDifference enum value
	PlatformDifferenceArchitecture = "Architecture"
)

// PlatformDifference_Values returns all elements of the PlatformDifference enum
func PlatformDifference_Values() []string {
	return []string{
		PlatformDifferenceHypervisor,
		PlatformDifferenceNetworkInterface,
		PlatformDifferenceStorageInterface,
		PlatformDifferenceInstanceStoreAvailability,
		PlatformDifferenceVirtualizationType,
		PlatformDifferenceArchitecture,
	}
}

const (
	// PreferredResourceNameEc2instanceTypes is a PreferredResourceName enum value
	PreferredResourceNameEc2instanceTypes = "Ec2InstanceTypes"
)

// PreferredResourceName_Values returns all elements of the PreferredResourceName enum
func PreferredResourceName_Values() []string {
	return []string{
		PreferredResourceNameEc2instanceTypes,
	}
}

const (
	// RecommendationPreferenceNameEnhancedInfrastructureMetrics is a RecommendationPreferenceName enum value
	RecommendationPreferenceNameEnhancedInfrastructureMetrics = "EnhancedInfrastructureMetrics"

	// RecommendationPreferenceNameInferredWorkloadTypes is a RecommendationPreferenceName enum value
	RecommendationPreferenceNameInferredWorkloadTypes = "InferredWorkloadTypes"

	// RecommendationPreferenceNameExternalMetricsPreference is a RecommendationPreferenceName enum value
	RecommendationPreferenceNameExternalMetricsPreference = "ExternalMetricsPreference"

	// RecommendationPreferenceNameLookBackPeriodPreference is a RecommendationPreferenceName enum value
	RecommendationPreferenceNameLookBackPeriodPreference = "LookBackPeriodPreference"

	// RecommendationPreferenceNamePreferredResources is a RecommendationPreferenceName enum value
	RecommendationPreferenceNamePreferredResources = "PreferredResources"

	// RecommendationPreferenceNameUtilizationPreferences is a RecommendationPreferenceName enum value
	RecommendationPreferenceNameUtilizationPreferences = "UtilizationPreferences"
)

// RecommendationPreferenceName_Values returns all elements of the RecommendationPreferenceName enum
func RecommendationPreferenceName_Values() []string {
	return []string{
		RecommendationPreferenceNameEnhancedInfrastructureMetrics,
		RecommendationPreferenceNameInferredWorkloadTypes,
		RecommendationPreferenceNameExternalMetricsPreference,
		RecommendationPreferenceNameLookBackPeriodPreference,
		RecommendationPreferenceNamePreferredResources,
		RecommendationPreferenceNameUtilizationPreferences,
	}
}

const (
	// RecommendationSourceTypeEc2instance is a RecommendationSourceType enum value
	RecommendationSourceTypeEc2instance = "Ec2Instance"

	// RecommendationSourceTypeAutoScalingGroup is a RecommendationSourceType enum value
	RecommendationSourceTypeAutoScalingGroup = "AutoScalingGroup"

	// RecommendationSourceTypeEbsVolume is a RecommendationSourceType enum value
	RecommendationSourceTypeEbsVolume = "EbsVolume"

	// RecommendationSourceTypeLambdaFunction is a RecommendationSourceType enum value
	RecommendationSourceTypeLambdaFunction = "LambdaFunction"

	// RecommendationSourceTypeEcsService is a RecommendationSourceType enum value
	RecommendationSourceTypeEcsService = "EcsService"

	// RecommendationSourceTypeLicense is a RecommendationSourceType enum value
	RecommendationSourceTypeLicense = "License"
)

// RecommendationSourceType_Values returns all elements of the RecommendationSourceType enum
func RecommendationSourceType_Values() []string {
	return []string{
		RecommendationSourceTypeEc2instance,
		RecommendationSourceTypeAutoScalingGroup,
		RecommendationSourceTypeEbsVolume,
		RecommendationSourceTypeLambdaFunction,
		RecommendationSourceTypeEcsService,
		RecommendationSourceTypeLicense,
	}
}

const (
	// ResourceTypeEc2instance is a ResourceType enum value
	ResourceTypeEc2instance = "Ec2Instance"

	// ResourceTypeAutoScalingGroup is a ResourceType enum value
	ResourceTypeAutoScalingGroup = "AutoScalingGroup"

	// ResourceTypeEbsVolume is a ResourceType enum value
	ResourceTypeEbsVolume = "EbsVolume"

	// ResourceTypeLambdaFunction is a ResourceType enum value
	ResourceTypeLambdaFunction = "LambdaFunction"

	// ResourceTypeNotApplicable is a ResourceType enum value
	ResourceTypeNotApplicable = "NotApplicable"

	// ResourceTypeEcsService is a ResourceType enum value
	ResourceTypeEcsService = "EcsService"

	// ResourceTypeLicense is a ResourceType enum value
	ResourceTypeLicense = "License"
)

// ResourceType_Values returns all elements of the ResourceType enum
func ResourceType_Values() []string {
	return []string{
		ResourceTypeEc2instance,
		ResourceTypeAutoScalingGroup,
		ResourceTypeEbsVolume,
		ResourceTypeLambdaFunction,
		ResourceTypeNotApplicable,
		ResourceTypeEcsService,
		ResourceTypeLicense,
	}
}

const (
	// SavingsEstimationModeAfterDiscounts is a SavingsEstimationMode enum value
	SavingsEstimationModeAfterDiscounts = "AfterDiscounts"

	// SavingsEstimationModeBeforeDiscounts is a SavingsEstimationMode enum value
	SavingsEstimationModeBeforeDiscounts = "BeforeDiscounts"
)

// SavingsEstimationMode_Values returns all elements of the SavingsEstimationMode enum
func SavingsEstimationMode_Values() []string {
	return []string{
		SavingsEstimationModeAfterDiscounts,
		SavingsEstimationModeBeforeDiscounts,
	}
}

const (
	// ScopeNameOrganization is a ScopeName enum value
	ScopeNameOrganization = "Organization"

	// ScopeNameAccountId is a ScopeName enum value
	ScopeNameAccountId = "AccountId"

	// ScopeNameResourceArn is a ScopeName enum value
	ScopeNameResourceArn = "ResourceArn"
)

// ScopeName_Values returns all elements of the ScopeName enum
func ScopeName_Values() []string {
	return []string{
		ScopeNameOrganization,
		ScopeNameAccountId,
		ScopeNameResourceArn,
	}
}

const (
	// StatusActive is a Status enum value
	StatusActive = "Active"

	// StatusInactive is a Status enum value
	StatusInactive = "Inactive"

	// StatusPending is a Status enum value
	StatusPending = "Pending"

	// StatusFailed is a Status enum value
	StatusFailed = "Failed"
)

// Status_Values returns all elements of the Status enum
func Status_Values() []string {
	return []string{
		StatusActive,
		StatusInactive,
		StatusPending,
		StatusFailed,
	}
}
