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

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.
//
// AWS Compute Optimizer currently generates recommendations for Auto Scaling
// groups that are configured to run instances of the M, C, R, T, and X instance
// families. The service does not generate recommendations for Auto Scaling
// groups that have a scaling policy attached to them, or that do not have the
// same values for desired, minimum, and maximum capacity. In order for Compute
// Optimizer to analyze your Auto Scaling groups, they must be of a fixed size.
// For more information, see the AWS Compute Optimizer User Guide (https://docs.aws.amazon.com/compute-optimizer/latest/ug/what-is.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type 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
//   You must opt in to the service to perform this action.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception,
//   or failure.
//
//   * 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
//   An invalid or out-of-range value was supplied for the input parameter.
//
//   * ResourceNotFoundException
//   The specified resource was not found.
//
//   * MissingAuthenticationToken
//   The request must contain either a valid (registered) AWS access key ID or
//   X.509 certificate.
//
//   * ThrottlingException
//   The limit on the number of requests per second was exceeded.
//
// 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 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.
//
// AWS Compute Optimizer currently generates recommendations for Amazon Elastic
// Compute Cloud (Amazon EC2) and Amazon EC2 Auto Scaling. It generates recommendations
// for M, C, R, T, and X instance families. For more information, see the AWS
// Compute Optimizer User Guide (https://docs.aws.amazon.com/compute-optimizer/latest/ug/what-is.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type 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
//   You must opt in to the service to perform this action.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception,
//   or failure.
//
//   * 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
//   An invalid or out-of-range value was supplied for the input parameter.
//
//   * ResourceNotFoundException
//   The specified resource was not found.
//
//   * MissingAuthenticationToken
//   The request must contain either a valid (registered) AWS access key ID or
//   X.509 certificate.
//
//   * ThrottlingException
//   The limit on the number of requests per second was exceeded.
//
// 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.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type 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
//   You must opt in to the service to perform this action.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception,
//   or failure.
//
//   * 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
//   An invalid or out-of-range value was supplied for the input parameter.
//
//   * ResourceNotFoundException
//   The specified resource was not found.
//
//   * MissingAuthenticationToken
//   The request must contain either a valid (registered) AWS access key ID or
//   X.509 certificate.
//
//   * ThrottlingException
//   The limit on the number of requests per second was exceeded.
//
// 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 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 AWS Compute Optimizer
// service.
//
// If the account is a master account of an organization, this operation also
// confirms the enrollment status of member accounts within the 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
//   The request processing has failed because of an unknown error, exception,
//   or failure.
//
//   * 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
//   An invalid or out-of-range value was supplied for the input parameter.
//
//   * MissingAuthenticationToken
//   The request must contain either a valid (registered) AWS access key ID or
//   X.509 certificate.
//
//   * ThrottlingException
//   The limit on the number of requests per second was exceeded.
//
// 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 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:   "/",
	}

	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.
//
// For example, it returns the number of Amazon EC2 instances in an account
// that are under-provisioned, over-provisioned, or optimized. It also returns
// the number of Auto Scaling groups in an account that are not optimized, 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
//   You must opt in to the service to perform this action.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception,
//   or failure.
//
//   * 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
//   An invalid or out-of-range value was supplied for the input parameter.
//
//   * MissingAuthenticationToken
//   The request must contain either a valid (registered) AWS access key ID or
//   X.509 certificate.
//
//   * ThrottlingException
//   The limit on the number of requests per second was exceeded.
//
// 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()
}

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) status of an account to the AWS Compute Optimizer
// service.
//
// If the account is a master account of an organization, this operation can
// also enroll member accounts within the 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 UpdateEnrollmentStatus for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception,
//   or failure.
//
//   * 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
//   An invalid or out-of-range value was supplied for the input parameter.
//
//   * MissingAuthenticationToken
//   The request must contain either a valid (registered) AWS access key ID or
//   X.509 certificate.
//
//   * ThrottlingException
//   The limit on the number of requests per second was exceeded.
//
// 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

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

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

// GoString returns the string representation
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 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
func (s AutoScalingGroupConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
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
}

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

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

	// The finding classification for the Auto Scaling group.
	//
	// Findings for Auto Scaling groups include:
	//
	//    * NotOptimized —An Auto Scaling group is considered not optimized when
	//    AWS 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.
	//
	// The values that are returned might be NOT_OPTIMIZED or OPTIMIZED.
	Finding *string `locationName:"finding" type:"string" enum:"Finding"`

	// The time stamp of when the Auto Scaling group recommendation was last refreshed.
	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
func (s AutoScalingGroupRecommendation) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
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
}

// SetFinding sets the Finding field's value.
func (s *AutoScalingGroupRecommendation) SetFinding(v string) *AutoScalingGroupRecommendation {
	s.Finding = &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"`

	// The performance risk of the Auto Scaling group configuration recommendation.
	//
	// Performance risk is the likelihood of the recommended instance type not meeting
	// the performance requirement of your workload.
	//
	// The lowest performance risk is categorized as 0, and the highest as 5.
	PerformanceRisk *float64 `locationName:"performanceRisk" type:"double"`

	// An array of objects that describe the projected utilization metrics of the
	// Auto Scaling group recommendation option.
	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"`
}

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

// GoString returns the string representation
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
}

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

// Describes a filter that returns a more specific list of recommendations.
type Filter struct {
	_ struct{} `type:"structure"`

	// The name of the filter.
	//
	// Specify Finding to filter the results to a specific findings classification.
	//
	// Specify RecommendationSourceType to filter the results to a specific resource
	// type.
	Name *string `locationName:"name" type:"string" enum:"FilterName"`

	// The value of the filter.
	//
	// If you specify the name parameter as Finding, and you're recommendations
	// for an instance, then the valid values are Underprovisioned, Overprovisioned,
	// NotOptimized, or Optimized.
	//
	// If you specify the name parameter as Finding, and you're recommendations
	// for an Auto Scaling group, then the valid values are Optimized, or NotOptimized.
	//
	// If you specify the name parameter as RecommendationSourceType, then the valid
	// values are EC2Instance, or AutoScalingGroup.
	Values []*string `locationName:"values" type:"list"`
}

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

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

// 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 AWS account IDs for which 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 that describe 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 call.
	//
	// To retrieve the remaining results, make another call 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"`
}

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

// GoString returns the string representation
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
}

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
func (s GetAutoScalingGroupRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
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 GetEC2InstanceRecommendationsInput struct {
	_ struct{} `type:"structure"`

	// The AWS account IDs for which to return instance recommendations.
	//
	// Only one account ID can be specified per request.
	AccountIds []*string `locationName:"accountIds" type:"list"`

	// An array of objects that describe 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 call.
	//
	// To retrieve the remaining results, make another call 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"`
}

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

// GoString returns the string representation
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
}

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
func (s GetEC2InstanceRecommendationsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
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 time stamp 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"`

	// The time stamp 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
func (s GetEC2RecommendationProjectedMetricsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
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
}

// 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 describe a projected metrics.
	RecommendedOptionProjectedMetrics []*RecommendedOptionProjectedMetric `locationName:"recommendedOptionProjectedMetrics" type:"list"`
}

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

// GoString returns the string representation
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 GetEnrollmentStatusInput struct {
	_ struct{} `type:"structure"`
}

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

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

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

	// Confirms the enrollment status of member accounts within the organization,
	// if the account is a master account of an organization.
	MemberAccountsEnrolled *bool `locationName:"memberAccountsEnrolled" type:"boolean"`

	// 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
func (s GetEnrollmentStatusOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetMemberAccountsEnrolled sets the MemberAccountsEnrolled field's value.
func (s *GetEnrollmentStatusOutput) SetMemberAccountsEnrolled(v bool) *GetEnrollmentStatusOutput {
	s.MemberAccountsEnrolled = &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
}

// 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
func (s GetRecommendationError) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
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 GetRecommendationSummariesInput struct {
	_ struct{} `type:"structure"`

	// The AWS account IDs for which 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 call.
	//
	// To retrieve the remaining results, make another call 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
func (s GetRecommendationSummariesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
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
func (s GetRecommendationSummariesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
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 an Amazon EC2 instance recommendation.
type InstanceRecommendation struct {
	_ struct{} `type:"structure"`

	// The AWS account ID of the instance recommendation.
	AccountId *string `locationName:"accountId" type:"string"`

	// The instance type of the current instance.
	CurrentInstanceType *string `locationName:"currentInstanceType" type:"string"`

	// The finding classification for 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. An optimized
	//    instance runs your workloads with optimal performance and infrastructure
	//    cost. For optimized resources, AWS Compute Optimizer might recommend a
	//    new generation instance type.
	//
	// The values that are returned might be UNDER_PROVISIONED, OVER_PROVISIONED,
	// or OPTIMIZED.
	Finding *string `locationName:"finding" type:"string" enum:"Finding"`

	// 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 time stamp of when the instance recommendation was last refreshed.
	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"`

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

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

// GoString returns the string representation
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
}

// SetCurrentInstanceType sets the CurrentInstanceType field's value.
func (s *InstanceRecommendation) SetCurrentInstanceType(v string) *InstanceRecommendation {
	s.CurrentInstanceType = &v
	return s
}

// SetFinding sets the Finding field's value.
func (s *InstanceRecommendation) SetFinding(v string) *InstanceRecommendation {
	s.Finding = &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
}

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

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

	// The instance type of the instance recommendation.
	InstanceType *string `locationName:"instanceType" type:"string"`

	// The performance risk of the instance recommendation option.
	//
	// Performance risk is the likelihood of the recommended instance type not meeting
	// the performance requirement of your workload.
	//
	// The lowest performance risk is categorized as 0, and the highest as 5.
	PerformanceRisk *float64 `locationName:"performanceRisk" type:"double"`

	// An array of objects that describe the projected utilization metrics of the
	// instance recommendation option.
	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"`
}

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

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

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

// SetPerformanceRisk sets the PerformanceRisk field's value.
func (s *InstanceRecommendationOption) SetPerformanceRisk(v float64) *InstanceRecommendationOption {
	s.PerformanceRisk = &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
}

// The request processing has failed because of an unknown error, exception,
// or failure.
type InternalServerException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

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

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

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

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

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

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

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

// An invalid or out-of-range value was supplied for the input parameter.
type InvalidParameterValueException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorInvalidParameterValueException(v protocol.ResponseMetadata) error {
	return &InvalidParameterValueException{
		respMetadata: v,
	}
}

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

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

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

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

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

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

// The request must contain either a valid (registered) AWS access key ID or
// X.509 certificate.
type MissingAuthenticationToken struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

// GoString returns the string representation
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
}

// You must opt in to the service to perform this action.
type OptInRequiredException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

// GoString returns the string representation
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
}

// Describes a projected utilization metric of a recommendation option, such
// as an Amazon EC2 instance.
type ProjectedMetric struct {
	_ struct{} `type:"structure"`

	// The name of the projected utilization metric.
	//
	// Memory metrics are only returned 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/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html).
	Name *string `locationName:"name" type:"string" enum:"MetricName"`

	// The time stamps 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
func (s ProjectedMetric) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
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
}

// 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
func (s RecommendationSource) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
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 AWS account ID of the recommendation summary.
	AccountId *string `locationName:"accountId" type:"string"`

	// The resource type of the recommendation.
	RecommendationResourceType *string `locationName:"recommendationResourceType" type:"string" enum:"RecommendationSourceType"`

	// An array of objects that describe a recommendation summary.
	Summaries []*Summary `locationName:"summaries" type:"list"`
}

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

// GoString returns the string representation
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
}

// SetRecommendationResourceType sets the RecommendationResourceType field's value.
func (s *RecommendationSummary) SetRecommendationResourceType(v string) *RecommendationSummary {
	s.RecommendationResourceType = &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.
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
func (s RecommendedOptionProjectedMetric) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
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
}

// The specified resource was not found.
type ResourceNotFoundException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

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

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

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

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

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

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

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

// The request has failed due to a temporary failure of the server.
type ServiceUnavailableException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

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

func newErrorServiceUnavailableException(v protocol.ResponseMetadata) error {
	return &ServiceUnavailableException{
		respMetadata: v,
	}
}

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

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

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

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

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

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

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

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

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

// GoString returns the string representation
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
}

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

// The limit on the number of requests per second was exceeded.
type ThrottlingException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

// GoString returns the string representation
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 within the organization, if the
	// account is a master account of an organization.
	IncludeMemberAccounts *bool `locationName:"includeMemberAccounts" type:"boolean"`

	// The new enrollment status of the account.
	//
	// Accepted options are Active or Inactive. You will get an error if Pending
	// or Failed are specified.
	//
	// Status is a required field
	Status *string `locationName:"status" type:"string" required:"true" enum:"Status"`
}

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

// GoString returns the string representation
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
func (s UpdateEnrollmentStatusOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
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.
type UtilizationMetric struct {
	_ struct{} `type:"structure"`

	// The name of the utilization metric.
	//
	// Memory metrics are only returned 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/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html).
	Name *string `locationName:"name" type:"string" enum:"MetricName"`

	// The statistic of the utilization metric.
	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
func (s UtilizationMetric) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
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
}

const (
	// FilterNameFinding is a FilterName enum value
	FilterNameFinding = "Finding"

	// FilterNameRecommendationSourceType is a FilterName enum value
	FilterNameRecommendationSourceType = "RecommendationSourceType"
)

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

const (
	// MetricNameCpu is a MetricName enum value
	MetricNameCpu = "Cpu"

	// MetricNameMemory is a MetricName enum value
	MetricNameMemory = "Memory"
)

const (
	// MetricStatisticMaximum is a MetricStatistic enum value
	MetricStatisticMaximum = "Maximum"

	// MetricStatisticAverage is a MetricStatistic enum value
	MetricStatisticAverage = "Average"
)

const (
	// RecommendationSourceTypeEc2instance is a RecommendationSourceType enum value
	RecommendationSourceTypeEc2instance = "Ec2Instance"

	// RecommendationSourceTypeAutoScalingGroup is a RecommendationSourceType enum value
	RecommendationSourceTypeAutoScalingGroup = "AutoScalingGroup"
)

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