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

package costexplorer

import (
	"fmt"

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

const opCreateAnomalyMonitor = "CreateAnomalyMonitor"

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

	if input == nil {
		input = &CreateAnomalyMonitorInput{}
	}

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

// CreateAnomalyMonitor API operation for AWS Cost Explorer Service.
//
// Creates a new cost anomaly detection monitor with the requested type and
// monitor specification.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation CreateAnomalyMonitor for usage and error information.
//
// Returned Error Types:
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/CreateAnomalyMonitor
func (c *CostExplorer) CreateAnomalyMonitor(input *CreateAnomalyMonitorInput) (*CreateAnomalyMonitorOutput, error) {
	req, out := c.CreateAnomalyMonitorRequest(input)
	return out, req.Send()
}

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

const opCreateAnomalySubscription = "CreateAnomalySubscription"

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

	if input == nil {
		input = &CreateAnomalySubscriptionInput{}
	}

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

// CreateAnomalySubscription API operation for AWS Cost Explorer Service.
//
// Adds an alert subscription to a cost anomaly detection monitor. You can use
// each subscription to define subscribers with email or SNS notifications.
// Email subscribers can set an absolute or percentage threshold and a time
// frequency for receiving notifications.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation CreateAnomalySubscription for usage and error information.
//
// Returned Error Types:
//
//   - UnknownMonitorException
//     The cost anomaly monitor does not exist for the account.
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/CreateAnomalySubscription
func (c *CostExplorer) CreateAnomalySubscription(input *CreateAnomalySubscriptionInput) (*CreateAnomalySubscriptionOutput, error) {
	req, out := c.CreateAnomalySubscriptionRequest(input)
	return out, req.Send()
}

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

const opCreateCostCategoryDefinition = "CreateCostCategoryDefinition"

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

	if input == nil {
		input = &CreateCostCategoryDefinitionInput{}
	}

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

// CreateCostCategoryDefinition API operation for AWS Cost Explorer Service.
//
// Creates a new Cost Category with the requested name and rules.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation CreateCostCategoryDefinition for usage and error information.
//
// Returned Error Types:
//
//   - ServiceQuotaExceededException
//     You've reached the limit on the number of resources you can create, or exceeded
//     the size of an individual resource.
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/CreateCostCategoryDefinition
func (c *CostExplorer) CreateCostCategoryDefinition(input *CreateCostCategoryDefinitionInput) (*CreateCostCategoryDefinitionOutput, error) {
	req, out := c.CreateCostCategoryDefinitionRequest(input)
	return out, req.Send()
}

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

const opDeleteAnomalyMonitor = "DeleteAnomalyMonitor"

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

	if input == nil {
		input = &DeleteAnomalyMonitorInput{}
	}

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

// DeleteAnomalyMonitor API operation for AWS Cost Explorer Service.
//
// Deletes a cost anomaly monitor.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation DeleteAnomalyMonitor for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - UnknownMonitorException
//     The cost anomaly monitor does not exist for the account.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/DeleteAnomalyMonitor
func (c *CostExplorer) DeleteAnomalyMonitor(input *DeleteAnomalyMonitorInput) (*DeleteAnomalyMonitorOutput, error) {
	req, out := c.DeleteAnomalyMonitorRequest(input)
	return out, req.Send()
}

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

const opDeleteAnomalySubscription = "DeleteAnomalySubscription"

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

	if input == nil {
		input = &DeleteAnomalySubscriptionInput{}
	}

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

// DeleteAnomalySubscription API operation for AWS Cost Explorer Service.
//
// Deletes a cost anomaly subscription.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation DeleteAnomalySubscription for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - UnknownSubscriptionException
//     The cost anomaly subscription does not exist for the account.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/DeleteAnomalySubscription
func (c *CostExplorer) DeleteAnomalySubscription(input *DeleteAnomalySubscriptionInput) (*DeleteAnomalySubscriptionOutput, error) {
	req, out := c.DeleteAnomalySubscriptionRequest(input)
	return out, req.Send()
}

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

const opDeleteCostCategoryDefinition = "DeleteCostCategoryDefinition"

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

	if input == nil {
		input = &DeleteCostCategoryDefinitionInput{}
	}

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

// DeleteCostCategoryDefinition API operation for AWS Cost Explorer Service.
//
// Deletes a Cost Category. Expenses from this month going forward will no longer
// be categorized with this Cost Category.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation DeleteCostCategoryDefinition for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified ARN in the request doesn't exist.
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/DeleteCostCategoryDefinition
func (c *CostExplorer) DeleteCostCategoryDefinition(input *DeleteCostCategoryDefinitionInput) (*DeleteCostCategoryDefinitionOutput, error) {
	req, out := c.DeleteCostCategoryDefinitionRequest(input)
	return out, req.Send()
}

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

const opDescribeCostCategoryDefinition = "DescribeCostCategoryDefinition"

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

	if input == nil {
		input = &DescribeCostCategoryDefinitionInput{}
	}

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

// DescribeCostCategoryDefinition API operation for AWS Cost Explorer Service.
//
// Returns the name, Amazon Resource Name (ARN), rules, definition, and effective
// dates of a Cost Category that's defined in the account.
//
// You have the option to use EffectiveOn to return a Cost Category that's active
// on a specific date. If there's no EffectiveOn specified, you see a Cost Category
// that's effective on the current date. If Cost Category is still effective,
// EffectiveEnd is omitted in the response.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation DescribeCostCategoryDefinition for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified ARN in the request doesn't exist.
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/DescribeCostCategoryDefinition
func (c *CostExplorer) DescribeCostCategoryDefinition(input *DescribeCostCategoryDefinitionInput) (*DescribeCostCategoryDefinitionOutput, error) {
	req, out := c.DescribeCostCategoryDefinitionRequest(input)
	return out, req.Send()
}

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

const opGetAnomalies = "GetAnomalies"

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

	if input == nil {
		input = &GetAnomaliesInput{}
	}

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

// GetAnomalies API operation for AWS Cost Explorer Service.
//
// Retrieves all of the cost anomalies detected on your account during the time
// period that's specified by the DateInterval object. Anomalies are available
// for up to 90 days.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetAnomalies for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetAnomalies
func (c *CostExplorer) GetAnomalies(input *GetAnomaliesInput) (*GetAnomaliesOutput, error) {
	req, out := c.GetAnomaliesRequest(input)
	return out, req.Send()
}

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

const opGetAnomalyMonitors = "GetAnomalyMonitors"

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

	if input == nil {
		input = &GetAnomalyMonitorsInput{}
	}

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

// GetAnomalyMonitors API operation for AWS Cost Explorer Service.
//
// Retrieves the cost anomaly monitor definitions for your account. You can
// filter using a list of cost anomaly monitor Amazon Resource Names (ARNs).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetAnomalyMonitors for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - UnknownMonitorException
//     The cost anomaly monitor does not exist for the account.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetAnomalyMonitors
func (c *CostExplorer) GetAnomalyMonitors(input *GetAnomalyMonitorsInput) (*GetAnomalyMonitorsOutput, error) {
	req, out := c.GetAnomalyMonitorsRequest(input)
	return out, req.Send()
}

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

const opGetAnomalySubscriptions = "GetAnomalySubscriptions"

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

	if input == nil {
		input = &GetAnomalySubscriptionsInput{}
	}

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

// GetAnomalySubscriptions API operation for AWS Cost Explorer Service.
//
// Retrieves the cost anomaly subscription objects for your account. You can
// filter using a list of cost anomaly monitor Amazon Resource Names (ARNs).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetAnomalySubscriptions for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - UnknownSubscriptionException
//     The cost anomaly subscription does not exist for the account.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetAnomalySubscriptions
func (c *CostExplorer) GetAnomalySubscriptions(input *GetAnomalySubscriptionsInput) (*GetAnomalySubscriptionsOutput, error) {
	req, out := c.GetAnomalySubscriptionsRequest(input)
	return out, req.Send()
}

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

const opGetApproximateUsageRecords = "GetApproximateUsageRecords"

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

	if input == nil {
		input = &GetApproximateUsageRecordsInput{}
	}

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

// GetApproximateUsageRecords API operation for AWS Cost Explorer Service.
//
// Retrieves estimated usage records for hourly granularity or resource-level
// data at daily granularity.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetApproximateUsageRecords for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetApproximateUsageRecords
func (c *CostExplorer) GetApproximateUsageRecords(input *GetApproximateUsageRecordsInput) (*GetApproximateUsageRecordsOutput, error) {
	req, out := c.GetApproximateUsageRecordsRequest(input)
	return out, req.Send()
}

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

const opGetCostAndUsage = "GetCostAndUsage"

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

	if input == nil {
		input = &GetCostAndUsageInput{}
	}

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

// GetCostAndUsage API operation for AWS Cost Explorer Service.
//
// Retrieves cost and usage metrics for your account. You can specify which
// cost and usage-related metric that you want the request to return. For example,
// you can specify BlendedCosts or UsageQuantity. You can also filter and group
// your data by various dimensions, such as SERVICE or AZ, in a specific time
// range. For a complete list of valid dimensions, see the GetDimensionValues
// (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_GetDimensionValues.html)
// operation. Management account in an organization in Organizations have access
// to all member accounts.
//
// For information about filter limitations, see Quotas and restrictions (https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-limits.html)
// in the Billing and Cost Management 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 Cost Explorer Service's
// API operation GetCostAndUsage for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - BillExpirationException
//     The requested report expired. Update the date interval and try again.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
//   - RequestChangedException
//     Your request parameters changed between pages. Try again with the old parameters
//     or without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetCostAndUsage
func (c *CostExplorer) GetCostAndUsage(input *GetCostAndUsageInput) (*GetCostAndUsageOutput, error) {
	req, out := c.GetCostAndUsageRequest(input)
	return out, req.Send()
}

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

const opGetCostAndUsageWithResources = "GetCostAndUsageWithResources"

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

	if input == nil {
		input = &GetCostAndUsageWithResourcesInput{}
	}

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

// GetCostAndUsageWithResources API operation for AWS Cost Explorer Service.
//
// Retrieves cost and usage metrics with resources for your account. You can
// specify which cost and usage-related metric, such as BlendedCosts or UsageQuantity,
// that you want the request to return. You can also filter and group your data
// by various dimensions, such as SERVICE or AZ, in a specific time range. For
// a complete list of valid dimensions, see the GetDimensionValues (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_GetDimensionValues.html)
// operation. Management account in an organization in Organizations have access
// to all member accounts.
//
// Hourly granularity is only available for EC2-Instances (Elastic Compute Cloud)
// resource-level data. All other resource-level data is available at daily
// granularity.
//
// This is an opt-in only feature. You can enable this feature from the Cost
// Explorer Settings page. For information about how to access the Settings
// page, see Controlling Access for Cost Explorer (https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/ce-access.html)
// in the Billing and Cost Management 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 Cost Explorer Service's
// API operation GetCostAndUsageWithResources for usage and error information.
//
// Returned Error Types:
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - BillExpirationException
//     The requested report expired. Update the date interval and try again.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
//   - RequestChangedException
//     Your request parameters changed between pages. Try again with the old parameters
//     or without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetCostAndUsageWithResources
func (c *CostExplorer) GetCostAndUsageWithResources(input *GetCostAndUsageWithResourcesInput) (*GetCostAndUsageWithResourcesOutput, error) {
	req, out := c.GetCostAndUsageWithResourcesRequest(input)
	return out, req.Send()
}

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

const opGetCostCategories = "GetCostCategories"

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

	if input == nil {
		input = &GetCostCategoriesInput{}
	}

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

// GetCostCategories API operation for AWS Cost Explorer Service.
//
// Retrieves an array of Cost Category names and values incurred cost.
//
// If some Cost Category names and values are not associated with any cost,
// they will not be returned by this API.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetCostCategories for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - BillExpirationException
//     The requested report expired. Update the date interval and try again.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
//   - RequestChangedException
//     Your request parameters changed between pages. Try again with the old parameters
//     or without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetCostCategories
func (c *CostExplorer) GetCostCategories(input *GetCostCategoriesInput) (*GetCostCategoriesOutput, error) {
	req, out := c.GetCostCategoriesRequest(input)
	return out, req.Send()
}

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

const opGetCostForecast = "GetCostForecast"

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

	if input == nil {
		input = &GetCostForecastInput{}
	}

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

// GetCostForecast API operation for AWS Cost Explorer Service.
//
// Retrieves a forecast for how much Amazon Web Services predicts that you will
// spend over the forecast time period that you select, based on your past costs.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetCostForecast for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetCostForecast
func (c *CostExplorer) GetCostForecast(input *GetCostForecastInput) (*GetCostForecastOutput, error) {
	req, out := c.GetCostForecastRequest(input)
	return out, req.Send()
}

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

const opGetDimensionValues = "GetDimensionValues"

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

	if input == nil {
		input = &GetDimensionValuesInput{}
	}

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

// GetDimensionValues API operation for AWS Cost Explorer Service.
//
// Retrieves all available filter values for a specified filter over a period
// of time. You can search the dimension values for an arbitrary string.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetDimensionValues for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - BillExpirationException
//     The requested report expired. Update the date interval and try again.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
//   - RequestChangedException
//     Your request parameters changed between pages. Try again with the old parameters
//     or without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetDimensionValues
func (c *CostExplorer) GetDimensionValues(input *GetDimensionValuesInput) (*GetDimensionValuesOutput, error) {
	req, out := c.GetDimensionValuesRequest(input)
	return out, req.Send()
}

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

const opGetReservationCoverage = "GetReservationCoverage"

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

	if input == nil {
		input = &GetReservationCoverageInput{}
	}

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

// GetReservationCoverage API operation for AWS Cost Explorer Service.
//
// Retrieves the reservation coverage for your account, which you can use to
// see how much of your Amazon Elastic Compute Cloud, Amazon ElastiCache, Amazon
// Relational Database Service, or Amazon Redshift usage is covered by a reservation.
// An organization's management account can see the coverage of the associated
// member accounts. This supports dimensions, Cost Categories, and nested expressions.
// For any time period, you can filter data about reservation usage by the following
// dimensions:
//
//   - AZ
//
//   - CACHE_ENGINE
//
//   - DATABASE_ENGINE
//
//   - DEPLOYMENT_OPTION
//
//   - INSTANCE_TYPE
//
//   - LINKED_ACCOUNT
//
//   - OPERATING_SYSTEM
//
//   - PLATFORM
//
//   - REGION
//
//   - SERVICE
//
//   - TAG
//
//   - TENANCY
//
// To determine valid values for a dimension, use the GetDimensionValues operation.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetReservationCoverage for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetReservationCoverage
func (c *CostExplorer) GetReservationCoverage(input *GetReservationCoverageInput) (*GetReservationCoverageOutput, error) {
	req, out := c.GetReservationCoverageRequest(input)
	return out, req.Send()
}

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

const opGetReservationPurchaseRecommendation = "GetReservationPurchaseRecommendation"

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

	if input == nil {
		input = &GetReservationPurchaseRecommendationInput{}
	}

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

// GetReservationPurchaseRecommendation API operation for AWS Cost Explorer Service.
//
// Gets recommendations for reservation purchases. These recommendations might
// help you to reduce your costs. Reservations provide a discounted hourly rate
// (up to 75%) compared to On-Demand pricing.
//
// Amazon Web Services generates your recommendations by identifying your On-Demand
// usage during a specific time period and collecting your usage into categories
// that are eligible for a reservation. After Amazon Web Services has these
// categories, it simulates every combination of reservations in each category
// of usage to identify the best number of each type of Reserved Instance (RI)
// to purchase to maximize your estimated savings.
//
// For example, Amazon Web Services automatically aggregates your Amazon EC2
// Linux, shared tenancy, and c4 family usage in the US West (Oregon) Region
// and recommends that you buy size-flexible regional reservations to apply
// to the c4 family usage. Amazon Web Services recommends the smallest size
// instance in an instance family. This makes it easier to purchase a size-flexible
// Reserved Instance (RI). Amazon Web Services also shows the equal number of
// normalized units. This way, you can purchase any instance size that you want.
// For this example, your RI recommendation is for c4.large because that is
// the smallest size instance in the c4 instance family.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetReservationPurchaseRecommendation for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetReservationPurchaseRecommendation
func (c *CostExplorer) GetReservationPurchaseRecommendation(input *GetReservationPurchaseRecommendationInput) (*GetReservationPurchaseRecommendationOutput, error) {
	req, out := c.GetReservationPurchaseRecommendationRequest(input)
	return out, req.Send()
}

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

const opGetReservationUtilization = "GetReservationUtilization"

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

	if input == nil {
		input = &GetReservationUtilizationInput{}
	}

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

// GetReservationUtilization API operation for AWS Cost Explorer Service.
//
// Retrieves the reservation utilization for your account. Management account
// in an organization have access to member accounts. You can filter data by
// dimensions in a time period. You can use GetDimensionValues to determine
// the possible dimension values. Currently, you can group only by SUBSCRIPTION_ID.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetReservationUtilization for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetReservationUtilization
func (c *CostExplorer) GetReservationUtilization(input *GetReservationUtilizationInput) (*GetReservationUtilizationOutput, error) {
	req, out := c.GetReservationUtilizationRequest(input)
	return out, req.Send()
}

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

const opGetRightsizingRecommendation = "GetRightsizingRecommendation"

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

	if input == nil {
		input = &GetRightsizingRecommendationInput{}
	}

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

// GetRightsizingRecommendation API operation for AWS Cost Explorer Service.
//
// Creates recommendations that help you save cost by identifying idle and underutilized
// Amazon EC2 instances.
//
// Recommendations are generated to either downsize or terminate instances,
// along with providing savings detail and metrics. For more information about
// calculation and function, see Optimizing Your Cost with Rightsizing Recommendations
// (https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/ce-rightsizing.html)
// in the Billing and Cost Management 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 Cost Explorer Service's
// API operation GetRightsizingRecommendation for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetRightsizingRecommendation
func (c *CostExplorer) GetRightsizingRecommendation(input *GetRightsizingRecommendationInput) (*GetRightsizingRecommendationOutput, error) {
	req, out := c.GetRightsizingRecommendationRequest(input)
	return out, req.Send()
}

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

const opGetSavingsPlanPurchaseRecommendationDetails = "GetSavingsPlanPurchaseRecommendationDetails"

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

	if input == nil {
		input = &GetSavingsPlanPurchaseRecommendationDetailsInput{}
	}

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

// GetSavingsPlanPurchaseRecommendationDetails API operation for AWS Cost Explorer Service.
//
// Retrieves the details for a Savings Plan recommendation. These details include
// the hourly data-points that construct the cost, coverage, and utilization
// charts.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetSavingsPlanPurchaseRecommendationDetails for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetSavingsPlanPurchaseRecommendationDetails
func (c *CostExplorer) GetSavingsPlanPurchaseRecommendationDetails(input *GetSavingsPlanPurchaseRecommendationDetailsInput) (*GetSavingsPlanPurchaseRecommendationDetailsOutput, error) {
	req, out := c.GetSavingsPlanPurchaseRecommendationDetailsRequest(input)
	return out, req.Send()
}

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

const opGetSavingsPlansCoverage = "GetSavingsPlansCoverage"

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

	if input == nil {
		input = &GetSavingsPlansCoverageInput{}
	}

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

// GetSavingsPlansCoverage API operation for AWS Cost Explorer Service.
//
// Retrieves the Savings Plans covered for your account. This enables you to
// see how much of your cost is covered by a Savings Plan. An organization’s
// management account can see the coverage of the associated member accounts.
// This supports dimensions, Cost Categories, and nested expressions. For any
// time period, you can filter data for Savings Plans usage with the following
// dimensions:
//
//   - LINKED_ACCOUNT
//
//   - REGION
//
//   - SERVICE
//
//   - INSTANCE_FAMILY
//
// To determine valid values for a dimension, use the GetDimensionValues operation.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetSavingsPlansCoverage for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetSavingsPlansCoverage
func (c *CostExplorer) GetSavingsPlansCoverage(input *GetSavingsPlansCoverageInput) (*GetSavingsPlansCoverageOutput, error) {
	req, out := c.GetSavingsPlansCoverageRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opGetSavingsPlansPurchaseRecommendation = "GetSavingsPlansPurchaseRecommendation"

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

	if input == nil {
		input = &GetSavingsPlansPurchaseRecommendationInput{}
	}

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

// GetSavingsPlansPurchaseRecommendation API operation for AWS Cost Explorer Service.
//
// Retrieves the Savings Plans recommendations for your account. First use StartSavingsPlansPurchaseRecommendationGeneration
// to generate a new set of recommendations, and then use GetSavingsPlansPurchaseRecommendation
// to retrieve them.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetSavingsPlansPurchaseRecommendation for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetSavingsPlansPurchaseRecommendation
func (c *CostExplorer) GetSavingsPlansPurchaseRecommendation(input *GetSavingsPlansPurchaseRecommendationInput) (*GetSavingsPlansPurchaseRecommendationOutput, error) {
	req, out := c.GetSavingsPlansPurchaseRecommendationRequest(input)
	return out, req.Send()
}

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

const opGetSavingsPlansUtilization = "GetSavingsPlansUtilization"

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

	if input == nil {
		input = &GetSavingsPlansUtilizationInput{}
	}

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

// GetSavingsPlansUtilization API operation for AWS Cost Explorer Service.
//
// Retrieves the Savings Plans utilization for your account across date ranges
// with daily or monthly granularity. Management account in an organization
// have access to member accounts. You can use GetDimensionValues in SAVINGS_PLANS
// to determine the possible dimension values.
//
// You can't group by any dimension values for GetSavingsPlansUtilization.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetSavingsPlansUtilization for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetSavingsPlansUtilization
func (c *CostExplorer) GetSavingsPlansUtilization(input *GetSavingsPlansUtilizationInput) (*GetSavingsPlansUtilizationOutput, error) {
	req, out := c.GetSavingsPlansUtilizationRequest(input)
	return out, req.Send()
}

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

const opGetSavingsPlansUtilizationDetails = "GetSavingsPlansUtilizationDetails"

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

	if input == nil {
		input = &GetSavingsPlansUtilizationDetailsInput{}
	}

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

// GetSavingsPlansUtilizationDetails API operation for AWS Cost Explorer Service.
//
// Retrieves attribute data along with aggregate utilization and savings data
// for a given time period. This doesn't support granular or grouped data (daily/monthly)
// in response. You can't retrieve data by dates in a single response similar
// to GetSavingsPlanUtilization, but you have the option to make multiple calls
// to GetSavingsPlanUtilizationDetails by providing individual dates. You can
// use GetDimensionValues in SAVINGS_PLANS to determine the possible dimension
// values.
//
// GetSavingsPlanUtilizationDetails internally groups data by SavingsPlansArn.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetSavingsPlansUtilizationDetails for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetSavingsPlansUtilizationDetails
func (c *CostExplorer) GetSavingsPlansUtilizationDetails(input *GetSavingsPlansUtilizationDetailsInput) (*GetSavingsPlansUtilizationDetailsOutput, error) {
	req, out := c.GetSavingsPlansUtilizationDetailsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opGetTags = "GetTags"

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

	if input == nil {
		input = &GetTagsInput{}
	}

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

// GetTags API operation for AWS Cost Explorer Service.
//
// Queries for available tag keys and tag values for a specified period. You
// can search the tag values for an arbitrary string.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetTags for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - BillExpirationException
//     The requested report expired. Update the date interval and try again.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
//   - RequestChangedException
//     Your request parameters changed between pages. Try again with the old parameters
//     or without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetTags
func (c *CostExplorer) GetTags(input *GetTagsInput) (*GetTagsOutput, error) {
	req, out := c.GetTagsRequest(input)
	return out, req.Send()
}

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

const opGetUsageForecast = "GetUsageForecast"

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

	if input == nil {
		input = &GetUsageForecastInput{}
	}

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

// GetUsageForecast API operation for AWS Cost Explorer Service.
//
// Retrieves a forecast for how much Amazon Web Services predicts that you will
// use over the forecast time period that you select, based on your past usage.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation GetUsageForecast for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
//   - UnresolvableUsageUnitException
//     Cost Explorer was unable to identify the usage unit. Provide UsageType/UsageTypeGroup
//     filter selections that contain matching units, for example: hours.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/GetUsageForecast
func (c *CostExplorer) GetUsageForecast(input *GetUsageForecastInput) (*GetUsageForecastOutput, error) {
	req, out := c.GetUsageForecastRequest(input)
	return out, req.Send()
}

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

const opListCostAllocationTagBackfillHistory = "ListCostAllocationTagBackfillHistory"

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

	if input == nil {
		input = &ListCostAllocationTagBackfillHistoryInput{}
	}

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

// ListCostAllocationTagBackfillHistory API operation for AWS Cost Explorer Service.
//
// Retrieves a list of your historical cost allocation tag backfill requests.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation ListCostAllocationTagBackfillHistory for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/ListCostAllocationTagBackfillHistory
func (c *CostExplorer) ListCostAllocationTagBackfillHistory(input *ListCostAllocationTagBackfillHistoryInput) (*ListCostAllocationTagBackfillHistoryOutput, error) {
	req, out := c.ListCostAllocationTagBackfillHistoryRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListCostAllocationTags = "ListCostAllocationTags"

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

	if input == nil {
		input = &ListCostAllocationTagsInput{}
	}

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

// ListCostAllocationTags API operation for AWS Cost Explorer Service.
//
// Get a list of cost allocation tags. All inputs in the API are optional and
// serve as filters. By default, all cost allocation tags are returned.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation ListCostAllocationTags for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/ListCostAllocationTags
func (c *CostExplorer) ListCostAllocationTags(input *ListCostAllocationTagsInput) (*ListCostAllocationTagsOutput, error) {
	req, out := c.ListCostAllocationTagsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListCostCategoryDefinitions = "ListCostCategoryDefinitions"

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

	if input == nil {
		input = &ListCostCategoryDefinitionsInput{}
	}

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

// ListCostCategoryDefinitions API operation for AWS Cost Explorer Service.
//
// Returns the name, Amazon Resource Name (ARN), NumberOfRules and effective
// dates of all Cost Categories defined in the account. You have the option
// to use EffectiveOn to return a list of Cost Categories that were active on
// a specific date. If there is no EffectiveOn specified, you’ll see Cost
// Categories that are effective on the current date. If Cost Category is still
// effective, EffectiveEnd is omitted in the response. ListCostCategoryDefinitions
// supports pagination. The request can have a MaxResults range up to 100.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation ListCostCategoryDefinitions for usage and error information.
//
// Returned Error Types:
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/ListCostCategoryDefinitions
func (c *CostExplorer) ListCostCategoryDefinitions(input *ListCostCategoryDefinitionsInput) (*ListCostCategoryDefinitionsOutput, error) {
	req, out := c.ListCostCategoryDefinitionsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListSavingsPlansPurchaseRecommendationGeneration = "ListSavingsPlansPurchaseRecommendationGeneration"

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

	if input == nil {
		input = &ListSavingsPlansPurchaseRecommendationGenerationInput{}
	}

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

// ListSavingsPlansPurchaseRecommendationGeneration API operation for AWS Cost Explorer Service.
//
// Retrieves a list of your historical recommendation generations within the
// past 30 days.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation ListSavingsPlansPurchaseRecommendationGeneration for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - InvalidNextTokenException
//     The pagination token is invalid. Try again without a pagination token.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/ListSavingsPlansPurchaseRecommendationGeneration
func (c *CostExplorer) ListSavingsPlansPurchaseRecommendationGeneration(input *ListSavingsPlansPurchaseRecommendationGenerationInput) (*ListSavingsPlansPurchaseRecommendationGenerationOutput, error) {
	req, out := c.ListSavingsPlansPurchaseRecommendationGenerationRequest(input)
	return out, req.Send()
}

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

const opListTagsForResource = "ListTagsForResource"

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

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

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

// ListTagsForResource API operation for AWS Cost Explorer Service.
//
// Returns a list of resource tags associated with the resource specified by
// the Amazon Resource Name (ARN).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified ARN in the request doesn't exist.
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/ListTagsForResource
func (c *CostExplorer) ListTagsForResource(input *ListTagsForResourceInput) (*ListTagsForResourceOutput, error) {
	req, out := c.ListTagsForResourceRequest(input)
	return out, req.Send()
}

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

const opProvideAnomalyFeedback = "ProvideAnomalyFeedback"

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

	if input == nil {
		input = &ProvideAnomalyFeedbackInput{}
	}

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

// ProvideAnomalyFeedback API operation for AWS Cost Explorer Service.
//
// Modifies the feedback property of a given cost anomaly.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation ProvideAnomalyFeedback for usage and error information.
//
// Returned Error Types:
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/ProvideAnomalyFeedback
func (c *CostExplorer) ProvideAnomalyFeedback(input *ProvideAnomalyFeedbackInput) (*ProvideAnomalyFeedbackOutput, error) {
	req, out := c.ProvideAnomalyFeedbackRequest(input)
	return out, req.Send()
}

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

const opStartCostAllocationTagBackfill = "StartCostAllocationTagBackfill"

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

	if input == nil {
		input = &StartCostAllocationTagBackfillInput{}
	}

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

// StartCostAllocationTagBackfill API operation for AWS Cost Explorer Service.
//
// Request a cost allocation tag backfill. This will backfill the activation
// status (either active or inactive) for all tag keys from para:BackfillFrom
// up to the when this request is made.
//
// You can request a backfill once every 24 hours.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation StartCostAllocationTagBackfill for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - BackfillLimitExceededException
//     A request to backfill is already in progress. Once the previous request is
//     complete, you can create another request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/StartCostAllocationTagBackfill
func (c *CostExplorer) StartCostAllocationTagBackfill(input *StartCostAllocationTagBackfillInput) (*StartCostAllocationTagBackfillOutput, error) {
	req, out := c.StartCostAllocationTagBackfillRequest(input)
	return out, req.Send()
}

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

const opStartSavingsPlansPurchaseRecommendationGeneration = "StartSavingsPlansPurchaseRecommendationGeneration"

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

	if input == nil {
		input = &StartSavingsPlansPurchaseRecommendationGenerationInput{}
	}

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

// StartSavingsPlansPurchaseRecommendationGeneration API operation for AWS Cost Explorer Service.
//
// Requests a Savings Plans recommendation generation. This enables you to calculate
// a fresh set of Savings Plans recommendations that takes your latest usage
// data and current Savings Plans inventory into account. You can refresh Savings
// Plans recommendations up to three times daily for a consolidated billing
// family.
//
// StartSavingsPlansPurchaseRecommendationGeneration has no request syntax because
// no input parameters are needed to support this operation.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation StartSavingsPlansPurchaseRecommendationGeneration for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - ServiceQuotaExceededException
//     You've reached the limit on the number of resources you can create, or exceeded
//     the size of an individual resource.
//
//   - GenerationExistsException
//     A request to generate a recommendation is already in progress.
//
//   - DataUnavailableException
//     The requested data is unavailable.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/StartSavingsPlansPurchaseRecommendationGeneration
func (c *CostExplorer) StartSavingsPlansPurchaseRecommendationGeneration(input *StartSavingsPlansPurchaseRecommendationGenerationInput) (*StartSavingsPlansPurchaseRecommendationGenerationOutput, error) {
	req, out := c.StartSavingsPlansPurchaseRecommendationGenerationRequest(input)
	return out, req.Send()
}

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

const opTagResource = "TagResource"

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

	if input == nil {
		input = &TagResourceInput{}
	}

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

// TagResource API operation for AWS Cost Explorer Service.
//
// An API operation for adding one or more tags (key-value pairs) to a resource.
//
// You can use the TagResource operation with a resource that already has tags.
// If you specify a new tag key for the resource, this tag is appended to the
// list of tags associated with the resource. If you specify a tag key that
// is already associated with the resource, the new tag value you specify replaces
// the previous value for that tag.
//
// Although the maximum number of array members is 200, user-tag maximum is
// 50. The remaining are reserved for Amazon Web Services use.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified ARN in the request doesn't exist.
//
//   - TooManyTagsException
//     Can occur if you specify a number of tags for a resource greater than the
//     maximum 50 user tags per resource.
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/TagResource
func (c *CostExplorer) TagResource(input *TagResourceInput) (*TagResourceOutput, error) {
	req, out := c.TagResourceRequest(input)
	return out, req.Send()
}

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

const opUntagResource = "UntagResource"

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

	if input == nil {
		input = &UntagResourceInput{}
	}

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

// UntagResource API operation for AWS Cost Explorer Service.
//
// Removes one or more tags from a resource. Specify only tag keys in your request.
// Don't specify the value.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified ARN in the request doesn't exist.
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/UntagResource
func (c *CostExplorer) UntagResource(input *UntagResourceInput) (*UntagResourceOutput, error) {
	req, out := c.UntagResourceRequest(input)
	return out, req.Send()
}

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

const opUpdateAnomalyMonitor = "UpdateAnomalyMonitor"

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

	if input == nil {
		input = &UpdateAnomalyMonitorInput{}
	}

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

// UpdateAnomalyMonitor API operation for AWS Cost Explorer Service.
//
// Updates an existing cost anomaly monitor. The changes made are applied going
// forward, and doesn't change anomalies detected in the past.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation UpdateAnomalyMonitor for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - UnknownMonitorException
//     The cost anomaly monitor does not exist for the account.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/UpdateAnomalyMonitor
func (c *CostExplorer) UpdateAnomalyMonitor(input *UpdateAnomalyMonitorInput) (*UpdateAnomalyMonitorOutput, error) {
	req, out := c.UpdateAnomalyMonitorRequest(input)
	return out, req.Send()
}

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

const opUpdateAnomalySubscription = "UpdateAnomalySubscription"

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

	if input == nil {
		input = &UpdateAnomalySubscriptionInput{}
	}

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

// UpdateAnomalySubscription API operation for AWS Cost Explorer Service.
//
// Updates an existing cost anomaly subscription. Specify the fields that you
// want to update. Omitted fields are unchanged.
//
// The JSON below describes the generic construct for each type. See Request
// Parameters (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_UpdateAnomalySubscription.html#API_UpdateAnomalySubscription_RequestParameters)
// for possible values as they apply to AnomalySubscription.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation UpdateAnomalySubscription for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
//   - UnknownMonitorException
//     The cost anomaly monitor does not exist for the account.
//
//   - UnknownSubscriptionException
//     The cost anomaly subscription does not exist for the account.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/UpdateAnomalySubscription
func (c *CostExplorer) UpdateAnomalySubscription(input *UpdateAnomalySubscriptionInput) (*UpdateAnomalySubscriptionOutput, error) {
	req, out := c.UpdateAnomalySubscriptionRequest(input)
	return out, req.Send()
}

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

const opUpdateCostAllocationTagsStatus = "UpdateCostAllocationTagsStatus"

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

	if input == nil {
		input = &UpdateCostAllocationTagsStatusInput{}
	}

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

// UpdateCostAllocationTagsStatus API operation for AWS Cost Explorer Service.
//
// Updates status for cost allocation tags in bulk, with maximum batch size
// of 20. If the tag status that's updated is the same as the existing tag status,
// the request doesn't fail. Instead, it doesn't have any effect on the tag
// status (for example, activating the active tag).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation UpdateCostAllocationTagsStatus for usage and error information.
//
// Returned Error Types:
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/UpdateCostAllocationTagsStatus
func (c *CostExplorer) UpdateCostAllocationTagsStatus(input *UpdateCostAllocationTagsStatusInput) (*UpdateCostAllocationTagsStatusOutput, error) {
	req, out := c.UpdateCostAllocationTagsStatusRequest(input)
	return out, req.Send()
}

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

const opUpdateCostCategoryDefinition = "UpdateCostCategoryDefinition"

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

	if input == nil {
		input = &UpdateCostCategoryDefinitionInput{}
	}

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

// UpdateCostCategoryDefinition API operation for AWS Cost Explorer Service.
//
// Updates an existing Cost Category. Changes made to the Cost Category rules
// will be used to categorize the current month’s expenses and future expenses.
// This won’t change categorization for the previous months.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Cost Explorer Service's
// API operation UpdateCostCategoryDefinition for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The specified ARN in the request doesn't exist.
//
//   - ServiceQuotaExceededException
//     You've reached the limit on the number of resources you can create, or exceeded
//     the size of an individual resource.
//
//   - LimitExceededException
//     You made too many calls in a short period of time. Try again later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/UpdateCostCategoryDefinition
func (c *CostExplorer) UpdateCostCategoryDefinition(input *UpdateCostCategoryDefinitionInput) (*UpdateCostCategoryDefinitionOutput, error) {
	req, out := c.UpdateCostCategoryDefinitionRequest(input)
	return out, req.Send()
}

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

// An unusual cost pattern. This consists of the detailed metadata and the current
// status of the anomaly object.
type Anomaly struct {
	_ struct{} `type:"structure"`

	// The last day the anomaly is detected.
	AnomalyEndDate *string `type:"string"`

	// The unique identifier for the anomaly.
	//
	// AnomalyId is a required field
	AnomalyId *string `type:"string" required:"true"`

	// The latest and maximum score for the anomaly.
	//
	// AnomalyScore is a required field
	AnomalyScore *AnomalyScore `type:"structure" required:"true"`

	// The first day the anomaly is detected.
	AnomalyStartDate *string `type:"string"`

	// The dimension for the anomaly (for example, an Amazon Web Service in a service
	// monitor).
	DimensionValue *string `type:"string"`

	// The feedback value.
	Feedback *string `type:"string" enum:"AnomalyFeedbackType"`

	// The dollar impact for the anomaly.
	//
	// Impact is a required field
	Impact *Impact `type:"structure" required:"true"`

	// The Amazon Resource Name (ARN) for the cost monitor that generated this anomaly.
	//
	// MonitorArn is a required field
	MonitorArn *string `type:"string" required:"true"`

	// The list of identified root causes for the anomaly.
	RootCauses []*RootCause `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 Anomaly) String() string {
	return awsutil.Prettify(s)
}

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

// SetAnomalyEndDate sets the AnomalyEndDate field's value.
func (s *Anomaly) SetAnomalyEndDate(v string) *Anomaly {
	s.AnomalyEndDate = &v
	return s
}

// SetAnomalyId sets the AnomalyId field's value.
func (s *Anomaly) SetAnomalyId(v string) *Anomaly {
	s.AnomalyId = &v
	return s
}

// SetAnomalyScore sets the AnomalyScore field's value.
func (s *Anomaly) SetAnomalyScore(v *AnomalyScore) *Anomaly {
	s.AnomalyScore = v
	return s
}

// SetAnomalyStartDate sets the AnomalyStartDate field's value.
func (s *Anomaly) SetAnomalyStartDate(v string) *Anomaly {
	s.AnomalyStartDate = &v
	return s
}

// SetDimensionValue sets the DimensionValue field's value.
func (s *Anomaly) SetDimensionValue(v string) *Anomaly {
	s.DimensionValue = &v
	return s
}

// SetFeedback sets the Feedback field's value.
func (s *Anomaly) SetFeedback(v string) *Anomaly {
	s.Feedback = &v
	return s
}

// SetImpact sets the Impact field's value.
func (s *Anomaly) SetImpact(v *Impact) *Anomaly {
	s.Impact = v
	return s
}

// SetMonitorArn sets the MonitorArn field's value.
func (s *Anomaly) SetMonitorArn(v string) *Anomaly {
	s.MonitorArn = &v
	return s
}

// SetRootCauses sets the RootCauses field's value.
func (s *Anomaly) SetRootCauses(v []*RootCause) *Anomaly {
	s.RootCauses = v
	return s
}

// The time period for an anomaly.
type AnomalyDateInterval struct {
	_ struct{} `type:"structure"`

	// The last date an anomaly was observed.
	EndDate *string `type:"string"`

	// The first date an anomaly was observed.
	//
	// StartDate is a required field
	StartDate *string `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 AnomalyDateInterval) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetEndDate sets the EndDate field's value.
func (s *AnomalyDateInterval) SetEndDate(v string) *AnomalyDateInterval {
	s.EndDate = &v
	return s
}

// SetStartDate sets the StartDate field's value.
func (s *AnomalyDateInterval) SetStartDate(v string) *AnomalyDateInterval {
	s.StartDate = &v
	return s
}

// This object continuously inspects your account's cost data for anomalies.
// It's based on MonitorType and MonitorSpecification. The content consists
// of detailed metadata and the current status of the monitor object.
type AnomalyMonitor struct {
	_ struct{} `type:"structure"`

	// The date when the monitor was created.
	CreationDate *string `type:"string"`

	// The value for evaluated dimensions.
	DimensionalValueCount *int64 `type:"integer"`

	// The date when the monitor last evaluated for anomalies.
	LastEvaluatedDate *string `type:"string"`

	// The date when the monitor was last updated.
	LastUpdatedDate *string `type:"string"`

	// The Amazon Resource Name (ARN) value.
	MonitorArn *string `type:"string"`

	// The dimensions to evaluate.
	MonitorDimension *string `type:"string" enum:"MonitorDimension"`

	// The name of the monitor.
	//
	// MonitorName is a required field
	MonitorName *string `type:"string" required:"true"`

	// Use Expression to filter in various Cost Explorer APIs.
	//
	// Not all Expression types are supported in each API. Refer to the documentation
	// for each specific API to see what is supported.
	//
	// There are two patterns:
	//
	//    * Simple dimension values. There are three types of simple dimension values:
	//    CostCategories, Tags, and Dimensions. Specify the CostCategories field
	//    to define a filter that acts on Cost Categories. Specify the Tags field
	//    to define a filter that acts on Cost Allocation Tags. Specify the Dimensions
	//    field to define a filter that acts on the DimensionValues (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_DimensionValues.html).
	//    For each filter type, you can set the dimension name and values for the
	//    filters that you plan to use. For example, you can filter for REGION==us-east-1
	//    OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is
	//    a full name (for example, REGION==US East (N. Virginia). The corresponding
	//    Expression for this example is as follows: { "Dimensions": { "Key": "REGION",
	//    "Values": [ "us-east-1", "us-west-1" ] } } As shown in the previous example,
	//    lists of dimension values are combined with OR when applying the filter.
	//    You can also set different match options to further control how the filter
	//    behaves. Not all APIs support match options. Refer to the documentation
	//    for each specific API to see what is supported. For example, you can filter
	//    for linked account names that start with "a". The corresponding Expression
	//    for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME",
	//    "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } }
	//
	//    * Compound Expression types with logical operations. You can use multiple
	//    Expression types and the logical operators AND/OR/NOT to create a list
	//    of one or more Expression objects. By doing this, you can filter by more
	//    advanced options. For example, you can filter by ((REGION == us-east-1
	//    OR REGION == us-west-1) OR (TAG.Type == Type1)) AND (USAGE_TYPE != DataTransfer).
	//    The corresponding Expression for this example is as follows: { "And":
	//    [ {"Or": [ {"Dimensions": { "Key": "REGION", "Values": [ "us-east-1",
	//    "us-west-1" ] }}, {"Tags": { "Key": "TagName", "Values": ["Value1"] }
	//    } ]}, {"Not": {"Dimensions": { "Key": "USAGE_TYPE", "Values": ["DataTransfer"]
	//    }}} ] } Because each Expression can have only one operator, the service
	//    returns an error if more than one is specified. The following example
	//    shows an Expression object that creates an error: { "And": [ ... ], "Dimensions":
	//    { "Key": "USAGE_TYPE", "Values": [ "DataTransfer" ] } } The following
	//    is an example of the corresponding error message: "Expression has more
	//    than one roots. Only one root operator is allowed for each expression:
	//    And, Or, Not, Dimensions, Tags, CostCategories"
	//
	// For the GetRightsizingRecommendation action, a combination of OR and NOT
	// isn't supported. OR isn't supported between different dimensions, or dimensions
	// and tags. NOT operators aren't supported. Dimensions are also limited to
	// LINKED_ACCOUNT, REGION, or RIGHTSIZING_TYPE.
	//
	// For the GetReservationPurchaseRecommendation action, only NOT is supported.
	// AND and OR aren't supported. Dimensions are limited to LINKED_ACCOUNT.
	MonitorSpecification *Expression `type:"structure"`

	// The possible type values.
	//
	// MonitorType is a required field
	MonitorType *string `type:"string" required:"true" enum:"MonitorType"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *AnomalyMonitor) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AnomalyMonitor"}
	if s.MonitorName == nil {
		invalidParams.Add(request.NewErrParamRequired("MonitorName"))
	}
	if s.MonitorType == nil {
		invalidParams.Add(request.NewErrParamRequired("MonitorType"))
	}
	if s.MonitorSpecification != nil {
		if err := s.MonitorSpecification.Validate(); err != nil {
			invalidParams.AddNested("MonitorSpecification", err.(request.ErrInvalidParams))
		}
	}

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

// SetCreationDate sets the CreationDate field's value.
func (s *AnomalyMonitor) SetCreationDate(v string) *AnomalyMonitor {
	s.CreationDate = &v
	return s
}

// SetDimensionalValueCount sets the DimensionalValueCount field's value.
func (s *AnomalyMonitor) SetDimensionalValueCount(v int64) *AnomalyMonitor {
	s.DimensionalValueCount = &v
	return s
}

// SetLastEvaluatedDate sets the LastEvaluatedDate field's value.
func (s *AnomalyMonitor) SetLastEvaluatedDate(v string) *AnomalyMonitor {
	s.LastEvaluatedDate = &v
	return s
}

// SetLastUpdatedDate sets the LastUpdatedDate field's value.
func (s *AnomalyMonitor) SetLastUpdatedDate(v string) *AnomalyMonitor {
	s.LastUpdatedDate = &v
	return s
}

// SetMonitorArn sets the MonitorArn field's value.
func (s *AnomalyMonitor) SetMonitorArn(v string) *AnomalyMonitor {
	s.MonitorArn = &v
	return s
}

// SetMonitorDimension sets the MonitorDimension field's value.
func (s *AnomalyMonitor) SetMonitorDimension(v string) *AnomalyMonitor {
	s.MonitorDimension = &v
	return s
}

// SetMonitorName sets the MonitorName field's value.
func (s *AnomalyMonitor) SetMonitorName(v string) *AnomalyMonitor {
	s.MonitorName = &v
	return s
}

// SetMonitorSpecification sets the MonitorSpecification field's value.
func (s *AnomalyMonitor) SetMonitorSpecification(v *Expression) *AnomalyMonitor {
	s.MonitorSpecification = v
	return s
}

// SetMonitorType sets the MonitorType field's value.
func (s *AnomalyMonitor) SetMonitorType(v string) *AnomalyMonitor {
	s.MonitorType = &v
	return s
}

// Quantifies the anomaly. The higher score means that it's more anomalous.
type AnomalyScore struct {
	_ struct{} `type:"structure"`

	// The last observed score.
	//
	// CurrentScore is a required field
	CurrentScore *float64 `type:"double" required:"true"`

	// The maximum score that's observed during the AnomalyDateInterval.
	//
	// MaxScore is a required field
	MaxScore *float64 `type:"double" required:"true"`
}

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

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

// SetCurrentScore sets the CurrentScore field's value.
func (s *AnomalyScore) SetCurrentScore(v float64) *AnomalyScore {
	s.CurrentScore = &v
	return s
}

// SetMaxScore sets the MaxScore field's value.
func (s *AnomalyScore) SetMaxScore(v float64) *AnomalyScore {
	s.MaxScore = &v
	return s
}

// An AnomalySubscription resource (also referred to as an alert subscription)
// sends notifications about specific anomalies that meet an alerting criteria
// defined by you.
//
// You can specify the frequency of the alerts and the subscribers to notify.
//
// Anomaly subscriptions can be associated with one or more AnomalyMonitor (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AnomalyMonitor.html)
// resources, and they only send notifications about anomalies detected by those
// associated monitors. You can also configure a threshold to further control
// which anomalies are included in the notifications.
//
// Anomalies that don’t exceed the chosen threshold and therefore don’t
// trigger notifications from an anomaly subscription will still be available
// on the console and from the GetAnomalies (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_GetAnomalies.html)
// API.
type AnomalySubscription struct {
	_ struct{} `type:"structure"`

	// Your unique account identifier.
	AccountId *string `type:"string"`

	// The frequency that anomaly notifications are sent. Notifications are sent
	// either over email (for DAILY and WEEKLY frequencies) or SNS (for IMMEDIATE
	// frequency). For more information, see Creating an Amazon SNS topic for anomaly
	// notifications (https://docs.aws.amazon.com/cost-management/latest/userguide/ad-SNS.html).
	//
	// Frequency is a required field
	Frequency *string `type:"string" required:"true" enum:"AnomalySubscriptionFrequency"`

	// A list of cost anomaly monitors.
	//
	// MonitorArnList is a required field
	MonitorArnList []*string `type:"list" required:"true"`

	// A list of subscribers to notify.
	//
	// Subscribers is a required field
	Subscribers []*Subscriber `type:"list" required:"true"`

	// The AnomalySubscription Amazon Resource Name (ARN).
	SubscriptionArn *string `type:"string"`

	// The name for the subscription.
	//
	// SubscriptionName is a required field
	SubscriptionName *string `type:"string" required:"true"`

	// (deprecated)
	//
	// An absolute dollar value that must be exceeded by the anomaly's total impact
	// (see Impact (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Impact.html)
	// for more details) for an anomaly notification to be generated.
	//
	// This field has been deprecated. To specify a threshold, use ThresholdExpression.
	// Continued use of Threshold will be treated as shorthand syntax for a ThresholdExpression.
	//
	// One of Threshold or ThresholdExpression is required for this resource. You
	// cannot specify both.
	//
	// Deprecated: Threshold has been deprecated in favor of ThresholdExpression
	Threshold *float64 `deprecated:"true" type:"double"`

	// An Expression (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html)
	// object used to specify the anomalies that you want to generate alerts for.
	// This supports dimensions and nested expressions. The supported dimensions
	// are ANOMALY_TOTAL_IMPACT_ABSOLUTE and ANOMALY_TOTAL_IMPACT_PERCENTAGE, corresponding
	// to an anomaly’s TotalImpact and TotalImpactPercentage, respectively (see
	// Impact (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Impact.html)
	// for more details). The supported nested expression types are AND and OR.
	// The match option GREATER_THAN_OR_EQUAL is required. Values must be numbers
	// between 0 and 10,000,000,000 in string format.
	//
	// One of Threshold or ThresholdExpression is required for this resource. You
	// cannot specify both.
	//
	// The following are examples of valid ThresholdExpressions:
	//
	//    * Absolute threshold: { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_ABSOLUTE",
	//    "MatchOptions": [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } }
	//
	//    * Percentage threshold: { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_PERCENTAGE",
	//    "MatchOptions": [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } }
	//
	//    * AND two thresholds together: { "And": [ { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_ABSOLUTE",
	//    "MatchOptions": [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } },
	//    { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_PERCENTAGE", "MatchOptions":
	//    [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } } ] }
	//
	//    * OR two thresholds together: { "Or": [ { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_ABSOLUTE",
	//    "MatchOptions": [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } },
	//    { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_PERCENTAGE", "MatchOptions":
	//    [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } } ] }
	ThresholdExpression *Expression `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 AnomalySubscription) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *AnomalySubscription) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AnomalySubscription"}
	if s.Frequency == nil {
		invalidParams.Add(request.NewErrParamRequired("Frequency"))
	}
	if s.MonitorArnList == nil {
		invalidParams.Add(request.NewErrParamRequired("MonitorArnList"))
	}
	if s.Subscribers == nil {
		invalidParams.Add(request.NewErrParamRequired("Subscribers"))
	}
	if s.SubscriptionName == nil {
		invalidParams.Add(request.NewErrParamRequired("SubscriptionName"))
	}
	if s.Subscribers != nil {
		for i, v := range s.Subscribers {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Subscribers", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.ThresholdExpression != nil {
		if err := s.ThresholdExpression.Validate(); err != nil {
			invalidParams.AddNested("ThresholdExpression", err.(request.ErrInvalidParams))
		}
	}

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

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

// SetFrequency sets the Frequency field's value.
func (s *AnomalySubscription) SetFrequency(v string) *AnomalySubscription {
	s.Frequency = &v
	return s
}

// SetMonitorArnList sets the MonitorArnList field's value.
func (s *AnomalySubscription) SetMonitorArnList(v []*string) *AnomalySubscription {
	s.MonitorArnList = v
	return s
}

// SetSubscribers sets the Subscribers field's value.
func (s *AnomalySubscription) SetSubscribers(v []*Subscriber) *AnomalySubscription {
	s.Subscribers = v
	return s
}

// SetSubscriptionArn sets the SubscriptionArn field's value.
func (s *AnomalySubscription) SetSubscriptionArn(v string) *AnomalySubscription {
	s.SubscriptionArn = &v
	return s
}

// SetSubscriptionName sets the SubscriptionName field's value.
func (s *AnomalySubscription) SetSubscriptionName(v string) *AnomalySubscription {
	s.SubscriptionName = &v
	return s
}

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

// SetThresholdExpression sets the ThresholdExpression field's value.
func (s *AnomalySubscription) SetThresholdExpression(v *Expression) *AnomalySubscription {
	s.ThresholdExpression = v
	return s
}

// A request to backfill is already in progress. Once the previous request is
// complete, you can create another request.
type BackfillLimitExceededException 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 BackfillLimitExceededException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorBackfillLimitExceededException(v protocol.ResponseMetadata) error {
	return &BackfillLimitExceededException{
		RespMetadata: v,
	}
}

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

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

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

func (s *BackfillLimitExceededException) 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 *BackfillLimitExceededException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The requested report expired. Update the date interval and try again.
type BillExpirationException 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 BillExpirationException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorBillExpirationException(v protocol.ResponseMetadata) error {
	return &BillExpirationException{
		RespMetadata: v,
	}
}

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

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

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

func (s *BillExpirationException) 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 *BillExpirationException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The cost allocation tag structure. This includes detailed metadata for the
// CostAllocationTag object.
type CostAllocationTag struct {
	_ struct{} `type:"structure"`

	// The last date that the tag was either activated or deactivated.
	LastUpdatedDate *string `min:"20" type:"string"`

	// The last month that the tag was used on an Amazon Web Services resource.
	LastUsedDate *string `min:"20" type:"string"`

	// The status of a cost allocation tag.
	//
	// Status is a required field
	Status *string `type:"string" required:"true" enum:"CostAllocationTagStatus"`

	// The key for the cost allocation tag.
	//
	// TagKey is a required field
	TagKey *string `type:"string" required:"true"`

	// The type of cost allocation tag. You can use AWSGenerated or UserDefined
	// type tags. AWSGenerated type tags are tags that Amazon Web Services defines
	// and applies to support Amazon Web Services resources for cost allocation
	// purposes. UserDefined type tags are tags that you define, create, and apply
	// to resources.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"CostAllocationTagType"`
}

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

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

// SetLastUpdatedDate sets the LastUpdatedDate field's value.
func (s *CostAllocationTag) SetLastUpdatedDate(v string) *CostAllocationTag {
	s.LastUpdatedDate = &v
	return s
}

// SetLastUsedDate sets the LastUsedDate field's value.
func (s *CostAllocationTag) SetLastUsedDate(v string) *CostAllocationTag {
	s.LastUsedDate = &v
	return s
}

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

// SetTagKey sets the TagKey field's value.
func (s *CostAllocationTag) SetTagKey(v string) *CostAllocationTag {
	s.TagKey = &v
	return s
}

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

// The cost allocation tag backfill request structure that contains metadata
// and details of a certain backfill.
type CostAllocationTagBackfillRequest struct {
	_ struct{} `type:"structure"`

	// The date the backfill starts from.
	BackfillFrom *string `min:"20" type:"string"`

	// The status of the cost allocation tag backfill request.
	BackfillStatus *string `type:"string" enum:"CostAllocationTagBackfillStatus"`

	// The backfill completion time.
	CompletedAt *string `min:"20" type:"string"`

	// The time when the backfill status was last updated.
	LastUpdatedAt *string `min:"20" type:"string"`

	// The time when the backfill was requested.
	RequestedAt *string `min:"20" type:"string"`
}

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

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

// SetBackfillFrom sets the BackfillFrom field's value.
func (s *CostAllocationTagBackfillRequest) SetBackfillFrom(v string) *CostAllocationTagBackfillRequest {
	s.BackfillFrom = &v
	return s
}

// SetBackfillStatus sets the BackfillStatus field's value.
func (s *CostAllocationTagBackfillRequest) SetBackfillStatus(v string) *CostAllocationTagBackfillRequest {
	s.BackfillStatus = &v
	return s
}

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

// SetLastUpdatedAt sets the LastUpdatedAt field's value.
func (s *CostAllocationTagBackfillRequest) SetLastUpdatedAt(v string) *CostAllocationTagBackfillRequest {
	s.LastUpdatedAt = &v
	return s
}

// SetRequestedAt sets the RequestedAt field's value.
func (s *CostAllocationTagBackfillRequest) SetRequestedAt(v string) *CostAllocationTagBackfillRequest {
	s.RequestedAt = &v
	return s
}

// The cost allocation tag status. The status of a key can either be active
// or inactive.
type CostAllocationTagStatusEntry struct {
	_ struct{} `type:"structure"`

	// The status of a cost allocation tag.
	//
	// Status is a required field
	Status *string `type:"string" required:"true" enum:"CostAllocationTagStatus"`

	// The key for the cost allocation tag.
	//
	// TagKey is a required field
	TagKey *string `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 CostAllocationTagStatusEntry) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

// SetTagKey sets the TagKey field's value.
func (s *CostAllocationTagStatusEntry) SetTagKey(v string) *CostAllocationTagStatusEntry {
	s.TagKey = &v
	return s
}

// The structure of Cost Categories. This includes detailed metadata and the
// set of rules for the CostCategory object.
type CostCategory struct {
	_ struct{} `type:"structure"`

	// The unique identifier for your Cost Category.
	//
	// CostCategoryArn is a required field
	CostCategoryArn *string `min:"20" type:"string" required:"true"`

	// The default value for the cost category.
	DefaultValue *string `min:"1" type:"string"`

	// The effective end date of your Cost Category.
	EffectiveEnd *string `min:"20" type:"string"`

	// The effective start date of your Cost Category.
	//
	// EffectiveStart is a required field
	EffectiveStart *string `min:"20" type:"string" required:"true"`

	// The unique name of the Cost Category.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// The list of processing statuses for Cost Management products for a specific
	// cost category.
	ProcessingStatus []*CostCategoryProcessingStatus `type:"list"`

	// The rule schema version in this particular Cost Category.
	//
	// RuleVersion is a required field
	RuleVersion *string `type:"string" required:"true" enum:"CostCategoryRuleVersion"`

	// The rules are processed in order. If there are multiple rules that match
	// the line item, then the first rule to match is used to determine that Cost
	// Category value.
	//
	// Rules is a required field
	Rules []*CostCategoryRule `min:"1" type:"list" required:"true"`

	// The split charge rules that are used to allocate your charges between your
	// Cost Category values.
	SplitChargeRules []*CostCategorySplitChargeRule `min:"1" type:"list"`
}

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

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

// SetCostCategoryArn sets the CostCategoryArn field's value.
func (s *CostCategory) SetCostCategoryArn(v string) *CostCategory {
	s.CostCategoryArn = &v
	return s
}

// SetDefaultValue sets the DefaultValue field's value.
func (s *CostCategory) SetDefaultValue(v string) *CostCategory {
	s.DefaultValue = &v
	return s
}

// SetEffectiveEnd sets the EffectiveEnd field's value.
func (s *CostCategory) SetEffectiveEnd(v string) *CostCategory {
	s.EffectiveEnd = &v
	return s
}

// SetEffectiveStart sets the EffectiveStart field's value.
func (s *CostCategory) SetEffectiveStart(v string) *CostCategory {
	s.EffectiveStart = &v
	return s
}

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

// SetProcessingStatus sets the ProcessingStatus field's value.
func (s *CostCategory) SetProcessingStatus(v []*CostCategoryProcessingStatus) *CostCategory {
	s.ProcessingStatus = v
	return s
}

// SetRuleVersion sets the RuleVersion field's value.
func (s *CostCategory) SetRuleVersion(v string) *CostCategory {
	s.RuleVersion = &v
	return s
}

// SetRules sets the Rules field's value.
func (s *CostCategory) SetRules(v []*CostCategoryRule) *CostCategory {
	s.Rules = v
	return s
}

// SetSplitChargeRules sets the SplitChargeRules field's value.
func (s *CostCategory) SetSplitChargeRules(v []*CostCategorySplitChargeRule) *CostCategory {
	s.SplitChargeRules = v
	return s
}

// When you create or update a cost category, you can define the CostCategoryRule
// rule type as INHERITED_VALUE. This rule type adds the flexibility to define
// a rule that dynamically inherits the cost category value from the dimension
// value that's defined by CostCategoryInheritedValueDimension. For example,
// suppose that you want to dynamically group costs that are based on the value
// of a specific tag key. First, choose an inherited value rule type, and then
// choose the tag dimension and specify the tag key to use.
type CostCategoryInheritedValueDimension struct {
	_ struct{} `type:"structure"`

	// The key to extract cost category values.
	DimensionKey *string `type:"string"`

	// The name of the dimension that's used to group costs.
	//
	// If you specify LINKED_ACCOUNT_NAME, the cost category value is based on account
	// name. If you specify TAG, the cost category value is based on the value of
	// the specified tag key.
	DimensionName *string `type:"string" enum:"CostCategoryInheritedValueDimensionName"`
}

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

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

// SetDimensionKey sets the DimensionKey field's value.
func (s *CostCategoryInheritedValueDimension) SetDimensionKey(v string) *CostCategoryInheritedValueDimension {
	s.DimensionKey = &v
	return s
}

// SetDimensionName sets the DimensionName field's value.
func (s *CostCategoryInheritedValueDimension) SetDimensionName(v string) *CostCategoryInheritedValueDimension {
	s.DimensionName = &v
	return s
}

// The list of processing statuses for Cost Management products for a specific
// cost category.
type CostCategoryProcessingStatus struct {
	_ struct{} `type:"structure"`

	// The Cost Management product name of the applied status.
	Component *string `type:"string" enum:"CostCategoryStatusComponent"`

	// The process status for a specific cost category.
	Status *string `type:"string" enum:"CostCategoryStatus"`
}

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

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

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

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

// A reference to a Cost Category containing only enough information to identify
// the Cost Category.
//
// You can use this information to retrieve the full Cost Category information
// using DescribeCostCategory.
type CostCategoryReference struct {
	_ struct{} `type:"structure"`

	// The unique identifier for your Cost Category.
	CostCategoryArn *string `min:"20" type:"string"`

	// The default value for the cost category.
	DefaultValue *string `min:"1" type:"string"`

	// The Cost Category's effective end date.
	EffectiveEnd *string `min:"20" type:"string"`

	// The Cost Category's effective start date.
	EffectiveStart *string `min:"20" type:"string"`

	// The unique name of the Cost Category.
	Name *string `min:"1" type:"string"`

	// The number of rules that are associated with a specific Cost Category.
	NumberOfRules *int64 `type:"integer"`

	// The list of processing statuses for Cost Management products for a specific
	// cost category.
	ProcessingStatus []*CostCategoryProcessingStatus `type:"list"`

	// A list of unique cost category values in a specific cost category.
	Values []*string `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 CostCategoryReference) String() string {
	return awsutil.Prettify(s)
}

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

// SetCostCategoryArn sets the CostCategoryArn field's value.
func (s *CostCategoryReference) SetCostCategoryArn(v string) *CostCategoryReference {
	s.CostCategoryArn = &v
	return s
}

// SetDefaultValue sets the DefaultValue field's value.
func (s *CostCategoryReference) SetDefaultValue(v string) *CostCategoryReference {
	s.DefaultValue = &v
	return s
}

// SetEffectiveEnd sets the EffectiveEnd field's value.
func (s *CostCategoryReference) SetEffectiveEnd(v string) *CostCategoryReference {
	s.EffectiveEnd = &v
	return s
}

// SetEffectiveStart sets the EffectiveStart field's value.
func (s *CostCategoryReference) SetEffectiveStart(v string) *CostCategoryReference {
	s.EffectiveStart = &v
	return s
}

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

// SetNumberOfRules sets the NumberOfRules field's value.
func (s *CostCategoryReference) SetNumberOfRules(v int64) *CostCategoryReference {
	s.NumberOfRules = &v
	return s
}

// SetProcessingStatus sets the ProcessingStatus field's value.
func (s *CostCategoryReference) SetProcessingStatus(v []*CostCategoryProcessingStatus) *CostCategoryReference {
	s.ProcessingStatus = v
	return s
}

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

// Rules are processed in order. If there are multiple rules that match the
// line item, then the first rule to match is used to determine that Cost Category
// value.
type CostCategoryRule struct {
	_ struct{} `type:"structure"`

	// The value the line item is categorized as if the line item contains the matched
	// dimension.
	InheritedValue *CostCategoryInheritedValueDimension `type:"structure"`

	// An Expression (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html)
	// object used to categorize costs. This supports dimensions, tags, and nested
	// expressions. Currently the only dimensions supported are LINKED_ACCOUNT,
	// SERVICE_CODE, RECORD_TYPE, LINKED_ACCOUNT_NAME, REGION, and USAGE_TYPE.
	//
	// RECORD_TYPE is a dimension used for Cost Explorer APIs, and is also supported
	// for Cost Category expressions. This dimension uses different terms, depending
	// on whether you're using the console or API/JSON editor. For a detailed comparison,
	// see Term Comparisons (https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/manage-cost-categories.html#cost-categories-terms)
	// in the Billing and Cost Management User Guide.
	Rule *Expression `type:"structure"`

	// You can define the CostCategoryRule rule type as either REGULAR or INHERITED_VALUE.
	// The INHERITED_VALUE rule type adds the flexibility to define a rule that
	// dynamically inherits the cost category value. This value is from the dimension
	// value that's defined by CostCategoryInheritedValueDimension. For example,
	// suppose that you want to costs to be dynamically grouped based on the value
	// of a specific tag key. First, choose an inherited value rule type, and then
	// choose the tag dimension and specify the tag key to use.
	Type *string `type:"string" enum:"CostCategoryRuleType"`

	// The default value for the cost category.
	Value *string `min:"1" type:"string"`
}

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

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

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

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

// SetInheritedValue sets the InheritedValue field's value.
func (s *CostCategoryRule) SetInheritedValue(v *CostCategoryInheritedValueDimension) *CostCategoryRule {
	s.InheritedValue = v
	return s
}

// SetRule sets the Rule field's value.
func (s *CostCategoryRule) SetRule(v *Expression) *CostCategoryRule {
	s.Rule = v
	return s
}

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

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

// Use the split charge rule to split the cost of one Cost Category value across
// several other target values.
type CostCategorySplitChargeRule struct {
	_ struct{} `type:"structure"`

	// The method that's used to define how to split your source costs across your
	// targets.
	//
	// Proportional - Allocates charges across your targets based on the proportional
	// weighted cost of each target.
	//
	// Fixed - Allocates charges across your targets based on your defined allocation
	// percentage.
	//
	// >Even - Allocates costs evenly across all targets.
	//
	// Method is a required field
	Method *string `type:"string" required:"true" enum:"CostCategorySplitChargeMethod"`

	// The parameters for a split charge method. This is only required for the FIXED
	// method.
	Parameters []*CostCategorySplitChargeRuleParameter `min:"1" type:"list"`

	// The Cost Category value that you want to split. That value can't be used
	// as a source or a target in other split charge rules. To indicate uncategorized
	// costs, you can use an empty string as the source.
	//
	// Source is a required field
	Source *string `type:"string" required:"true"`

	// The Cost Category values that you want to split costs across. These values
	// can't be used as a source in other split charge rules.
	//
	// Targets is a required field
	Targets []*string `min:"1" type:"list" required:"true"`
}

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

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

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

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

// SetMethod sets the Method field's value.
func (s *CostCategorySplitChargeRule) SetMethod(v string) *CostCategorySplitChargeRule {
	s.Method = &v
	return s
}

// SetParameters sets the Parameters field's value.
func (s *CostCategorySplitChargeRule) SetParameters(v []*CostCategorySplitChargeRuleParameter) *CostCategorySplitChargeRule {
	s.Parameters = v
	return s
}

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

// SetTargets sets the Targets field's value.
func (s *CostCategorySplitChargeRule) SetTargets(v []*string) *CostCategorySplitChargeRule {
	s.Targets = v
	return s
}

// The parameters for a split charge method.
type CostCategorySplitChargeRuleParameter struct {
	_ struct{} `type:"structure"`

	// The parameter type.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"CostCategorySplitChargeRuleParameterType"`

	// The parameter values.
	//
	// Values is a required field
	Values []*string `min:"1" type:"list" required:"true"`
}

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

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

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

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

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

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

// The Cost Categories values used for filtering the costs.
//
// If Values and Key are not specified, the ABSENT MatchOption is applied to
// all Cost Categories. That is, it filters on resources that aren't mapped
// to any Cost Categories.
//
// If Values is provided and Key isn't specified, the ABSENT MatchOption is
// applied to the Cost Categories Key only. That is, it filters on resources
// without the given Cost Categories key.
type CostCategoryValues struct {
	_ struct{} `type:"structure"`

	// The unique name of the Cost Category.
	Key *string `min:"1" type:"string"`

	// The match options that you can use to filter your results. MatchOptions is
	// only applicable for actions related to cost category. The default values
	// for MatchOptions is EQUALS and CASE_SENSITIVE.
	MatchOptions []*string `type:"list" enum:"MatchOption"`

	// The specific value of the Cost Category.
	Values []*string `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 CostCategoryValues) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetKey sets the Key field's value.
func (s *CostCategoryValues) SetKey(v string) *CostCategoryValues {
	s.Key = &v
	return s
}

// SetMatchOptions sets the MatchOptions field's value.
func (s *CostCategoryValues) SetMatchOptions(v []*string) *CostCategoryValues {
	s.MatchOptions = v
	return s
}

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

// The amount of instance usage that a reservation covered.
type Coverage struct {
	_ struct{} `type:"structure"`

	// The amount of cost that the reservation covered.
	CoverageCost *CoverageCost `type:"structure"`

	// The amount of instance usage that the reservation covered, in hours.
	CoverageHours *CoverageHours `type:"structure"`

	// The amount of instance usage that the reservation covered, in normalized
	// units.
	CoverageNormalizedUnits *CoverageNormalizedUnits `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 Coverage) String() string {
	return awsutil.Prettify(s)
}

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

// SetCoverageCost sets the CoverageCost field's value.
func (s *Coverage) SetCoverageCost(v *CoverageCost) *Coverage {
	s.CoverageCost = v
	return s
}

// SetCoverageHours sets the CoverageHours field's value.
func (s *Coverage) SetCoverageHours(v *CoverageHours) *Coverage {
	s.CoverageHours = v
	return s
}

// SetCoverageNormalizedUnits sets the CoverageNormalizedUnits field's value.
func (s *Coverage) SetCoverageNormalizedUnits(v *CoverageNormalizedUnits) *Coverage {
	s.CoverageNormalizedUnits = v
	return s
}

// Reservation coverage for a specified period, in hours.
type CoverageByTime struct {
	_ struct{} `type:"structure"`

	// The groups of instances that the reservation covered.
	Groups []*ReservationCoverageGroup `type:"list"`

	// The period that this coverage was used over.
	TimePeriod *DateInterval `type:"structure"`

	// The total reservation coverage, in hours.
	Total *Coverage `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 CoverageByTime) String() string {
	return awsutil.Prettify(s)
}

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

// SetGroups sets the Groups field's value.
func (s *CoverageByTime) SetGroups(v []*ReservationCoverageGroup) *CoverageByTime {
	s.Groups = v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *CoverageByTime) SetTimePeriod(v *DateInterval) *CoverageByTime {
	s.TimePeriod = v
	return s
}

// SetTotal sets the Total field's value.
func (s *CoverageByTime) SetTotal(v *Coverage) *CoverageByTime {
	s.Total = v
	return s
}

// How much it costs to run an instance.
type CoverageCost struct {
	_ struct{} `type:"structure"`

	// How much an On-Demand Instance costs.
	OnDemandCost *string `type:"string"`
}

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

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

// SetOnDemandCost sets the OnDemandCost field's value.
func (s *CoverageCost) SetOnDemandCost(v string) *CoverageCost {
	s.OnDemandCost = &v
	return s
}

// How long a running instance either used a reservation or was On-Demand.
type CoverageHours struct {
	_ struct{} `type:"structure"`

	// The percentage of instance hours that a reservation covered.
	CoverageHoursPercentage *string `type:"string"`

	// The number of instance running hours that On-Demand Instances covered.
	OnDemandHours *string `type:"string"`

	// The number of instance running hours that reservations covered.
	ReservedHours *string `type:"string"`

	// The total instance usage, in hours.
	TotalRunningHours *string `type:"string"`
}

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

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

// SetCoverageHoursPercentage sets the CoverageHoursPercentage field's value.
func (s *CoverageHours) SetCoverageHoursPercentage(v string) *CoverageHours {
	s.CoverageHoursPercentage = &v
	return s
}

// SetOnDemandHours sets the OnDemandHours field's value.
func (s *CoverageHours) SetOnDemandHours(v string) *CoverageHours {
	s.OnDemandHours = &v
	return s
}

// SetReservedHours sets the ReservedHours field's value.
func (s *CoverageHours) SetReservedHours(v string) *CoverageHours {
	s.ReservedHours = &v
	return s
}

// SetTotalRunningHours sets the TotalRunningHours field's value.
func (s *CoverageHours) SetTotalRunningHours(v string) *CoverageHours {
	s.TotalRunningHours = &v
	return s
}

// The amount of instance usage, in normalized units. You can use normalized
// units to see your EC2 usage for multiple sizes of instances in a uniform
// way. For example, suppose that you run an xlarge instance and a 2xlarge instance.
// If you run both instances for the same amount of time, the 2xlarge instance
// uses twice as much of your reservation as the xlarge instance, even though
// both instances show only one instance-hour. When you use normalized units
// instead of instance-hours, the xlarge instance used 8 normalized units, and
// the 2xlarge instance used 16 normalized units.
//
// For more information, see Modifying Reserved Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html)
// in the Amazon Elastic Compute Cloud User Guide for Linux Instances.
type CoverageNormalizedUnits struct {
	_ struct{} `type:"structure"`

	// The percentage of your used instance normalized units that a reservation
	// covers.
	CoverageNormalizedUnitsPercentage *string `type:"string"`

	// The number of normalized units that are covered by On-Demand Instances instead
	// of a reservation.
	OnDemandNormalizedUnits *string `type:"string"`

	// The number of normalized units that a reservation covers.
	ReservedNormalizedUnits *string `type:"string"`

	// The total number of normalized units that you used.
	TotalRunningNormalizedUnits *string `type:"string"`
}

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

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

// SetCoverageNormalizedUnitsPercentage sets the CoverageNormalizedUnitsPercentage field's value.
func (s *CoverageNormalizedUnits) SetCoverageNormalizedUnitsPercentage(v string) *CoverageNormalizedUnits {
	s.CoverageNormalizedUnitsPercentage = &v
	return s
}

// SetOnDemandNormalizedUnits sets the OnDemandNormalizedUnits field's value.
func (s *CoverageNormalizedUnits) SetOnDemandNormalizedUnits(v string) *CoverageNormalizedUnits {
	s.OnDemandNormalizedUnits = &v
	return s
}

// SetReservedNormalizedUnits sets the ReservedNormalizedUnits field's value.
func (s *CoverageNormalizedUnits) SetReservedNormalizedUnits(v string) *CoverageNormalizedUnits {
	s.ReservedNormalizedUnits = &v
	return s
}

// SetTotalRunningNormalizedUnits sets the TotalRunningNormalizedUnits field's value.
func (s *CoverageNormalizedUnits) SetTotalRunningNormalizedUnits(v string) *CoverageNormalizedUnits {
	s.TotalRunningNormalizedUnits = &v
	return s
}

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

	// The cost anomaly detection monitor object that you want to create.
	//
	// AnomalyMonitor is a required field
	AnomalyMonitor *AnomalyMonitor `type:"structure" required:"true"`

	// An optional list of tags to associate with the specified AnomalyMonitor (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AnomalyMonitor.html).
	// You can use resource tags to control access to your monitor using IAM policies.
	//
	// Each tag consists of a key and a value, and each key must be unique for the
	// resource. The following restrictions apply to resource tags:
	//
	//    * Although the maximum number of array members is 200, you can assign
	//    a maximum of 50 user-tags to one resource. The remaining are reserved
	//    for Amazon Web Services use
	//
	//    * The maximum length of a key is 128 characters
	//
	//    * The maximum length of a value is 256 characters
	//
	//    * Keys and values can only contain alphanumeric characters, spaces, and
	//    any of the following: _.:/=+@-
	//
	//    * Keys and values are case sensitive
	//
	//    * Keys and values are trimmed for any leading or trailing whitespaces
	//
	//    * Don’t use aws: as a prefix for your keys. This prefix is reserved
	//    for Amazon Web Services use
	ResourceTags []*ResourceTag `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 CreateAnomalyMonitorInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateAnomalyMonitorInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateAnomalyMonitorInput"}
	if s.AnomalyMonitor == nil {
		invalidParams.Add(request.NewErrParamRequired("AnomalyMonitor"))
	}
	if s.AnomalyMonitor != nil {
		if err := s.AnomalyMonitor.Validate(); err != nil {
			invalidParams.AddNested("AnomalyMonitor", err.(request.ErrInvalidParams))
		}
	}
	if s.ResourceTags != nil {
		for i, v := range s.ResourceTags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ResourceTags", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetAnomalyMonitor sets the AnomalyMonitor field's value.
func (s *CreateAnomalyMonitorInput) SetAnomalyMonitor(v *AnomalyMonitor) *CreateAnomalyMonitorInput {
	s.AnomalyMonitor = v
	return s
}

// SetResourceTags sets the ResourceTags field's value.
func (s *CreateAnomalyMonitorInput) SetResourceTags(v []*ResourceTag) *CreateAnomalyMonitorInput {
	s.ResourceTags = v
	return s
}

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

	// The unique identifier of your newly created cost anomaly detection monitor.
	//
	// MonitorArn is a required field
	MonitorArn *string `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 CreateAnomalyMonitorOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetMonitorArn sets the MonitorArn field's value.
func (s *CreateAnomalyMonitorOutput) SetMonitorArn(v string) *CreateAnomalyMonitorOutput {
	s.MonitorArn = &v
	return s
}

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

	// The cost anomaly subscription object that you want to create.
	//
	// AnomalySubscription is a required field
	AnomalySubscription *AnomalySubscription `type:"structure" required:"true"`

	// An optional list of tags to associate with the specified AnomalySubscription
	// (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AnomalySubscription.html).
	// You can use resource tags to control access to your subscription using IAM
	// policies.
	//
	// Each tag consists of a key and a value, and each key must be unique for the
	// resource. The following restrictions apply to resource tags:
	//
	//    * Although the maximum number of array members is 200, you can assign
	//    a maximum of 50 user-tags to one resource. The remaining are reserved
	//    for Amazon Web Services use
	//
	//    * The maximum length of a key is 128 characters
	//
	//    * The maximum length of a value is 256 characters
	//
	//    * Keys and values can only contain alphanumeric characters, spaces, and
	//    any of the following: _.:/=+@-
	//
	//    * Keys and values are case sensitive
	//
	//    * Keys and values are trimmed for any leading or trailing whitespaces
	//
	//    * Don’t use aws: as a prefix for your keys. This prefix is reserved
	//    for Amazon Web Services use
	ResourceTags []*ResourceTag `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 CreateAnomalySubscriptionInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateAnomalySubscriptionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateAnomalySubscriptionInput"}
	if s.AnomalySubscription == nil {
		invalidParams.Add(request.NewErrParamRequired("AnomalySubscription"))
	}
	if s.AnomalySubscription != nil {
		if err := s.AnomalySubscription.Validate(); err != nil {
			invalidParams.AddNested("AnomalySubscription", err.(request.ErrInvalidParams))
		}
	}
	if s.ResourceTags != nil {
		for i, v := range s.ResourceTags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ResourceTags", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetAnomalySubscription sets the AnomalySubscription field's value.
func (s *CreateAnomalySubscriptionInput) SetAnomalySubscription(v *AnomalySubscription) *CreateAnomalySubscriptionInput {
	s.AnomalySubscription = v
	return s
}

// SetResourceTags sets the ResourceTags field's value.
func (s *CreateAnomalySubscriptionInput) SetResourceTags(v []*ResourceTag) *CreateAnomalySubscriptionInput {
	s.ResourceTags = v
	return s
}

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

	// The unique identifier of your newly created cost anomaly subscription.
	//
	// SubscriptionArn is a required field
	SubscriptionArn *string `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 CreateAnomalySubscriptionOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetSubscriptionArn sets the SubscriptionArn field's value.
func (s *CreateAnomalySubscriptionOutput) SetSubscriptionArn(v string) *CreateAnomalySubscriptionOutput {
	s.SubscriptionArn = &v
	return s
}

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

	// The default value for the cost category.
	DefaultValue *string `min:"1" type:"string"`

	// The Cost Category's effective start date. It can only be a billing start
	// date (first day of the month). If the date isn't provided, it's the first
	// day of the current month. Dates can't be before the previous twelve months,
	// or in the future.
	EffectiveStart *string `min:"20" type:"string"`

	// The unique name of the Cost Category.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// An optional list of tags to associate with the specified CostCategory (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_CostCategory.html).
	// You can use resource tags to control access to your cost category using IAM
	// policies.
	//
	// Each tag consists of a key and a value, and each key must be unique for the
	// resource. The following restrictions apply to resource tags:
	//
	//    * Although the maximum number of array members is 200, you can assign
	//    a maximum of 50 user-tags to one resource. The remaining are reserved
	//    for Amazon Web Services use
	//
	//    * The maximum length of a key is 128 characters
	//
	//    * The maximum length of a value is 256 characters
	//
	//    * Keys and values can only contain alphanumeric characters, spaces, and
	//    any of the following: _.:/=+@-
	//
	//    * Keys and values are case sensitive
	//
	//    * Keys and values are trimmed for any leading or trailing whitespaces
	//
	//    * Don’t use aws: as a prefix for your keys. This prefix is reserved
	//    for Amazon Web Services use
	ResourceTags []*ResourceTag `type:"list"`

	// The rule schema version in this particular Cost Category.
	//
	// RuleVersion is a required field
	RuleVersion *string `type:"string" required:"true" enum:"CostCategoryRuleVersion"`

	// The Cost Category rules used to categorize costs. For more information, see
	// CostCategoryRule (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_CostCategoryRule.html).
	//
	// Rules is a required field
	Rules []*CostCategoryRule `min:"1" type:"list" required:"true"`

	// The split charge rules used to allocate your charges between your Cost Category
	// values.
	SplitChargeRules []*CostCategorySplitChargeRule `min:"1" type:"list"`
}

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

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

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

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

// SetDefaultValue sets the DefaultValue field's value.
func (s *CreateCostCategoryDefinitionInput) SetDefaultValue(v string) *CreateCostCategoryDefinitionInput {
	s.DefaultValue = &v
	return s
}

// SetEffectiveStart sets the EffectiveStart field's value.
func (s *CreateCostCategoryDefinitionInput) SetEffectiveStart(v string) *CreateCostCategoryDefinitionInput {
	s.EffectiveStart = &v
	return s
}

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

// SetResourceTags sets the ResourceTags field's value.
func (s *CreateCostCategoryDefinitionInput) SetResourceTags(v []*ResourceTag) *CreateCostCategoryDefinitionInput {
	s.ResourceTags = v
	return s
}

// SetRuleVersion sets the RuleVersion field's value.
func (s *CreateCostCategoryDefinitionInput) SetRuleVersion(v string) *CreateCostCategoryDefinitionInput {
	s.RuleVersion = &v
	return s
}

// SetRules sets the Rules field's value.
func (s *CreateCostCategoryDefinitionInput) SetRules(v []*CostCategoryRule) *CreateCostCategoryDefinitionInput {
	s.Rules = v
	return s
}

// SetSplitChargeRules sets the SplitChargeRules field's value.
func (s *CreateCostCategoryDefinitionInput) SetSplitChargeRules(v []*CostCategorySplitChargeRule) *CreateCostCategoryDefinitionInput {
	s.SplitChargeRules = v
	return s
}

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

	// The unique identifier for your newly created Cost Category.
	CostCategoryArn *string `min:"20" type:"string"`

	// The Cost Category's effective start date. It can only be a billing start
	// date (first day of the month).
	EffectiveStart *string `min:"20" type:"string"`
}

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

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

// SetCostCategoryArn sets the CostCategoryArn field's value.
func (s *CreateCostCategoryDefinitionOutput) SetCostCategoryArn(v string) *CreateCostCategoryDefinitionOutput {
	s.CostCategoryArn = &v
	return s
}

// SetEffectiveStart sets the EffectiveStart field's value.
func (s *CreateCostCategoryDefinitionOutput) SetEffectiveStart(v string) *CreateCostCategoryDefinitionOutput {
	s.EffectiveStart = &v
	return s
}

// Context about the current instance.
type CurrentInstance struct {
	_ struct{} `type:"structure"`

	// The currency code that Amazon Web Services used to calculate the costs for
	// this instance.
	CurrencyCode *string `type:"string"`

	// The name that you given an instance. This field shows as blank if you haven't
	// given the instance a name.
	InstanceName *string `type:"string"`

	// The current On-Demand cost of operating this instance on a monthly basis.
	MonthlyCost *string `type:"string"`

	// The number of hours during the lookback period that's billed at On-Demand
	// rates.
	OnDemandHoursInLookbackPeriod *string `type:"string"`

	// The number of hours during the lookback period that's covered by reservations.
	ReservationCoveredHoursInLookbackPeriod *string `type:"string"`

	// Details about the resource and utilization.
	ResourceDetails *ResourceDetails `type:"structure"`

	// Resource ID of the current instance.
	ResourceId *string `type:"string"`

	// Utilization information of the current instance during the lookback period.
	ResourceUtilization *ResourceUtilization `type:"structure"`

	// The number of hours during the lookback period that's covered by Savings
	// Plans.
	SavingsPlansCoveredHoursInLookbackPeriod *string `type:"string"`

	// Cost allocation resource tags that are applied to the instance.
	Tags []*TagValues `type:"list"`

	// The total number of hours that the instance ran during the lookback period.
	TotalRunningHoursInLookbackPeriod *string `type:"string"`
}

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

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

// SetCurrencyCode sets the CurrencyCode field's value.
func (s *CurrentInstance) SetCurrencyCode(v string) *CurrentInstance {
	s.CurrencyCode = &v
	return s
}

// SetInstanceName sets the InstanceName field's value.
func (s *CurrentInstance) SetInstanceName(v string) *CurrentInstance {
	s.InstanceName = &v
	return s
}

// SetMonthlyCost sets the MonthlyCost field's value.
func (s *CurrentInstance) SetMonthlyCost(v string) *CurrentInstance {
	s.MonthlyCost = &v
	return s
}

// SetOnDemandHoursInLookbackPeriod sets the OnDemandHoursInLookbackPeriod field's value.
func (s *CurrentInstance) SetOnDemandHoursInLookbackPeriod(v string) *CurrentInstance {
	s.OnDemandHoursInLookbackPeriod = &v
	return s
}

// SetReservationCoveredHoursInLookbackPeriod sets the ReservationCoveredHoursInLookbackPeriod field's value.
func (s *CurrentInstance) SetReservationCoveredHoursInLookbackPeriod(v string) *CurrentInstance {
	s.ReservationCoveredHoursInLookbackPeriod = &v
	return s
}

// SetResourceDetails sets the ResourceDetails field's value.
func (s *CurrentInstance) SetResourceDetails(v *ResourceDetails) *CurrentInstance {
	s.ResourceDetails = v
	return s
}

// SetResourceId sets the ResourceId field's value.
func (s *CurrentInstance) SetResourceId(v string) *CurrentInstance {
	s.ResourceId = &v
	return s
}

// SetResourceUtilization sets the ResourceUtilization field's value.
func (s *CurrentInstance) SetResourceUtilization(v *ResourceUtilization) *CurrentInstance {
	s.ResourceUtilization = v
	return s
}

// SetSavingsPlansCoveredHoursInLookbackPeriod sets the SavingsPlansCoveredHoursInLookbackPeriod field's value.
func (s *CurrentInstance) SetSavingsPlansCoveredHoursInLookbackPeriod(v string) *CurrentInstance {
	s.SavingsPlansCoveredHoursInLookbackPeriod = &v
	return s
}

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

// SetTotalRunningHoursInLookbackPeriod sets the TotalRunningHoursInLookbackPeriod field's value.
func (s *CurrentInstance) SetTotalRunningHoursInLookbackPeriod(v string) *CurrentInstance {
	s.TotalRunningHoursInLookbackPeriod = &v
	return s
}

// The requested data is unavailable.
type DataUnavailableException 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 DataUnavailableException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorDataUnavailableException(v protocol.ResponseMetadata) error {
	return &DataUnavailableException{
		RespMetadata: v,
	}
}

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

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

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

func (s *DataUnavailableException) 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 *DataUnavailableException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The time period of the request.
type DateInterval struct {
	_ struct{} `type:"structure"`

	// The end of the time period. The end date is exclusive. For example, if end
	// is 2017-05-01, Amazon Web Services retrieves cost and usage data from the
	// start date up to, but not including, 2017-05-01.
	//
	// End is a required field
	End *string `type:"string" required:"true"`

	// The beginning of the time period. The start date is inclusive. For example,
	// if start is 2017-01-01, Amazon Web Services retrieves cost and usage data
	// starting at 2017-01-01 up to the end date. The start date must be equal to
	// or no later than the current date to avoid a validation error.
	//
	// Start is a required field
	Start *string `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 DateInterval) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetEnd sets the End field's value.
func (s *DateInterval) SetEnd(v string) *DateInterval {
	s.End = &v
	return s
}

// SetStart sets the Start field's value.
func (s *DateInterval) SetStart(v string) *DateInterval {
	s.Start = &v
	return s
}

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

	// The unique identifier of the cost anomaly monitor that you want to delete.
	//
	// MonitorArn is a required field
	MonitorArn *string `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 DeleteAnomalyMonitorInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetMonitorArn sets the MonitorArn field's value.
func (s *DeleteAnomalyMonitorInput) SetMonitorArn(v string) *DeleteAnomalyMonitorInput {
	s.MonitorArn = &v
	return s
}

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

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

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

	// The unique identifier of the cost anomaly subscription that you want to delete.
	//
	// SubscriptionArn is a required field
	SubscriptionArn *string `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 DeleteAnomalySubscriptionInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetSubscriptionArn sets the SubscriptionArn field's value.
func (s *DeleteAnomalySubscriptionInput) SetSubscriptionArn(v string) *DeleteAnomalySubscriptionInput {
	s.SubscriptionArn = &v
	return s
}

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

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

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

	// The unique identifier for your Cost Category.
	//
	// CostCategoryArn is a required field
	CostCategoryArn *string `min:"20" type:"string" required:"true"`
}

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

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

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

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

// SetCostCategoryArn sets the CostCategoryArn field's value.
func (s *DeleteCostCategoryDefinitionInput) SetCostCategoryArn(v string) *DeleteCostCategoryDefinitionInput {
	s.CostCategoryArn = &v
	return s
}

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

	// The unique identifier for your Cost Category.
	CostCategoryArn *string `min:"20" type:"string"`

	// The effective end date of the Cost Category as a result of deleting it. No
	// costs after this date is categorized by the deleted Cost Category.
	EffectiveEnd *string `min:"20" type:"string"`
}

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

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

// SetCostCategoryArn sets the CostCategoryArn field's value.
func (s *DeleteCostCategoryDefinitionOutput) SetCostCategoryArn(v string) *DeleteCostCategoryDefinitionOutput {
	s.CostCategoryArn = &v
	return s
}

// SetEffectiveEnd sets the EffectiveEnd field's value.
func (s *DeleteCostCategoryDefinitionOutput) SetEffectiveEnd(v string) *DeleteCostCategoryDefinitionOutput {
	s.EffectiveEnd = &v
	return s
}

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

	// The unique identifier for your Cost Category.
	//
	// CostCategoryArn is a required field
	CostCategoryArn *string `min:"20" type:"string" required:"true"`

	// The date when the Cost Category was effective.
	EffectiveOn *string `min:"20" type:"string"`
}

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

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

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

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

// SetCostCategoryArn sets the CostCategoryArn field's value.
func (s *DescribeCostCategoryDefinitionInput) SetCostCategoryArn(v string) *DescribeCostCategoryDefinitionInput {
	s.CostCategoryArn = &v
	return s
}

// SetEffectiveOn sets the EffectiveOn field's value.
func (s *DescribeCostCategoryDefinitionInput) SetEffectiveOn(v string) *DescribeCostCategoryDefinitionInput {
	s.EffectiveOn = &v
	return s
}

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

	// The structure of Cost Categories. This includes detailed metadata and the
	// set of rules for the CostCategory object.
	CostCategory *CostCategory `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 DescribeCostCategoryDefinitionOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetCostCategory sets the CostCategory field's value.
func (s *DescribeCostCategoryDefinitionOutput) SetCostCategory(v *CostCategory) *DescribeCostCategoryDefinitionOutput {
	s.CostCategory = v
	return s
}

// The metadata that you can use to filter and group your results. You can use
// GetDimensionValues to find specific values.
type DimensionValues struct {
	_ struct{} `type:"structure"`

	// The names of the metadata types that you can use to filter and group your
	// results. For example, AZ returns a list of Availability Zones.
	//
	// Not all dimensions are supported in each API. Refer to the documentation
	// for each specific API to see what is supported.
	//
	// LINK_ACCOUNT_NAME and SERVICE_CODE can only be used in CostCategoryRule (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_CostCategoryRule.html).
	//
	// ANOMALY_TOTAL_IMPACT_ABSOLUTE and ANOMALY_TOTAL_IMPACT_PERCENTAGE can only
	// be used in AnomalySubscriptions (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AnomalySubscription.html).
	Key *string `type:"string" enum:"Dimension"`

	// The match options that you can use to filter your results.
	//
	// MatchOptions is only applicable for actions related to Cost Category and
	// Anomaly Subscriptions. Refer to the documentation for each specific API to
	// see what is supported.
	//
	// The default values for MatchOptions are EQUALS and CASE_SENSITIVE.
	MatchOptions []*string `type:"list" enum:"MatchOption"`

	// The metadata values that you can use to filter and group your results. You
	// can use GetDimensionValues to find specific values.
	Values []*string `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 DimensionValues) String() string {
	return awsutil.Prettify(s)
}

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

// SetKey sets the Key field's value.
func (s *DimensionValues) SetKey(v string) *DimensionValues {
	s.Key = &v
	return s
}

// SetMatchOptions sets the MatchOptions field's value.
func (s *DimensionValues) SetMatchOptions(v []*string) *DimensionValues {
	s.MatchOptions = v
	return s
}

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

// The metadata of a specific type that you can use to filter and group your
// results. You can use GetDimensionValues to find specific values.
type DimensionValuesWithAttributes struct {
	_ struct{} `type:"structure"`

	// The attribute that applies to a specific Dimension.
	Attributes map[string]*string `type:"map"`

	// The value of a dimension with a specific attribute.
	Value *string `type:"string"`
}

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

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

// SetAttributes sets the Attributes field's value.
func (s *DimensionValuesWithAttributes) SetAttributes(v map[string]*string) *DimensionValuesWithAttributes {
	s.Attributes = v
	return s
}

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

// The field that contains a list of disk (local storage) metrics that are associated
// with the current instance.
type DiskResourceUtilization struct {
	_ struct{} `type:"structure"`

	// The maximum read throughput operations per second.
	DiskReadBytesPerSecond *string `type:"string"`

	// The maximum number of read operations per second.
	DiskReadOpsPerSecond *string `type:"string"`

	// The maximum write throughput operations per second.
	DiskWriteBytesPerSecond *string `type:"string"`

	// The maximum number of write operations per second.
	DiskWriteOpsPerSecond *string `type:"string"`
}

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

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

// SetDiskReadBytesPerSecond sets the DiskReadBytesPerSecond field's value.
func (s *DiskResourceUtilization) SetDiskReadBytesPerSecond(v string) *DiskResourceUtilization {
	s.DiskReadBytesPerSecond = &v
	return s
}

// SetDiskReadOpsPerSecond sets the DiskReadOpsPerSecond field's value.
func (s *DiskResourceUtilization) SetDiskReadOpsPerSecond(v string) *DiskResourceUtilization {
	s.DiskReadOpsPerSecond = &v
	return s
}

// SetDiskWriteBytesPerSecond sets the DiskWriteBytesPerSecond field's value.
func (s *DiskResourceUtilization) SetDiskWriteBytesPerSecond(v string) *DiskResourceUtilization {
	s.DiskWriteBytesPerSecond = &v
	return s
}

// SetDiskWriteOpsPerSecond sets the DiskWriteOpsPerSecond field's value.
func (s *DiskResourceUtilization) SetDiskWriteOpsPerSecond(v string) *DiskResourceUtilization {
	s.DiskWriteOpsPerSecond = &v
	return s
}

// The EBS field that contains a list of EBS metrics that are associated with
// the current instance.
type EBSResourceUtilization struct {
	_ struct{} `type:"structure"`

	// The maximum size of read operations per second
	EbsReadBytesPerSecond *string `type:"string"`

	// The maximum number of read operations per second.
	EbsReadOpsPerSecond *string `type:"string"`

	// The maximum size of write operations per second.
	EbsWriteBytesPerSecond *string `type:"string"`

	// The maximum number of write operations per second.
	EbsWriteOpsPerSecond *string `type:"string"`
}

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

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

// SetEbsReadBytesPerSecond sets the EbsReadBytesPerSecond field's value.
func (s *EBSResourceUtilization) SetEbsReadBytesPerSecond(v string) *EBSResourceUtilization {
	s.EbsReadBytesPerSecond = &v
	return s
}

// SetEbsReadOpsPerSecond sets the EbsReadOpsPerSecond field's value.
func (s *EBSResourceUtilization) SetEbsReadOpsPerSecond(v string) *EBSResourceUtilization {
	s.EbsReadOpsPerSecond = &v
	return s
}

// SetEbsWriteBytesPerSecond sets the EbsWriteBytesPerSecond field's value.
func (s *EBSResourceUtilization) SetEbsWriteBytesPerSecond(v string) *EBSResourceUtilization {
	s.EbsWriteBytesPerSecond = &v
	return s
}

// SetEbsWriteOpsPerSecond sets the EbsWriteOpsPerSecond field's value.
func (s *EBSResourceUtilization) SetEbsWriteOpsPerSecond(v string) *EBSResourceUtilization {
	s.EbsWriteOpsPerSecond = &v
	return s
}

// Details about the Amazon EC2 reservations that Amazon Web Services recommends
// that you purchase.
type EC2InstanceDetails struct {
	_ struct{} `type:"structure"`

	// The Availability Zone of the recommended reservation.
	AvailabilityZone *string `type:"string"`

	// Determines whether the recommendation is for a current-generation instance.
	CurrentGeneration *bool `type:"boolean"`

	// The instance family of the recommended reservation.
	Family *string `type:"string"`

	// The type of instance that Amazon Web Services recommends.
	InstanceType *string `type:"string"`

	// The platform of the recommended reservation. The platform is the specific
	// combination of operating system, license model, and software on an instance.
	Platform *string `type:"string"`

	// The Amazon Web Services Region of the recommended reservation.
	Region *string `type:"string"`

	// Determines whether the recommended reservation is size flexible.
	SizeFlexEligible *bool `type:"boolean"`

	// Determines whether the recommended reservation is dedicated or shared.
	Tenancy *string `type:"string"`
}

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

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

// SetAvailabilityZone sets the AvailabilityZone field's value.
func (s *EC2InstanceDetails) SetAvailabilityZone(v string) *EC2InstanceDetails {
	s.AvailabilityZone = &v
	return s
}

// SetCurrentGeneration sets the CurrentGeneration field's value.
func (s *EC2InstanceDetails) SetCurrentGeneration(v bool) *EC2InstanceDetails {
	s.CurrentGeneration = &v
	return s
}

// SetFamily sets the Family field's value.
func (s *EC2InstanceDetails) SetFamily(v string) *EC2InstanceDetails {
	s.Family = &v
	return s
}

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

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

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

// SetSizeFlexEligible sets the SizeFlexEligible field's value.
func (s *EC2InstanceDetails) SetSizeFlexEligible(v bool) *EC2InstanceDetails {
	s.SizeFlexEligible = &v
	return s
}

// SetTenancy sets the Tenancy field's value.
func (s *EC2InstanceDetails) SetTenancy(v string) *EC2InstanceDetails {
	s.Tenancy = &v
	return s
}

// Details on the Amazon EC2 Resource.
type EC2ResourceDetails struct {
	_ struct{} `type:"structure"`

	// The hourly public On-Demand rate for the instance type.
	HourlyOnDemandRate *string `type:"string"`

	// The type of Amazon Web Services instance.
	InstanceType *string `type:"string"`

	// The memory capacity of the Amazon Web Services instance.
	Memory *string `type:"string"`

	// The network performance capacity of the Amazon Web Services instance.
	NetworkPerformance *string `type:"string"`

	// The platform of the Amazon Web Services instance. The platform is the specific
	// combination of operating system, license model, and software on an instance.
	Platform *string `type:"string"`

	// The Amazon Web Services Region of the instance.
	Region *string `type:"string"`

	// The SKU of the product.
	Sku *string `type:"string"`

	// The disk storage of the Amazon Web Services instance. This doesn't include
	// EBS storage.
	Storage *string `type:"string"`

	// The number of VCPU cores in the Amazon Web Services instance type.
	Vcpu *string `type:"string"`
}

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

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

// SetHourlyOnDemandRate sets the HourlyOnDemandRate field's value.
func (s *EC2ResourceDetails) SetHourlyOnDemandRate(v string) *EC2ResourceDetails {
	s.HourlyOnDemandRate = &v
	return s
}

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

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

// SetNetworkPerformance sets the NetworkPerformance field's value.
func (s *EC2ResourceDetails) SetNetworkPerformance(v string) *EC2ResourceDetails {
	s.NetworkPerformance = &v
	return s
}

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

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

// SetSku sets the Sku field's value.
func (s *EC2ResourceDetails) SetSku(v string) *EC2ResourceDetails {
	s.Sku = &v
	return s
}

// SetStorage sets the Storage field's value.
func (s *EC2ResourceDetails) SetStorage(v string) *EC2ResourceDetails {
	s.Storage = &v
	return s
}

// SetVcpu sets the Vcpu field's value.
func (s *EC2ResourceDetails) SetVcpu(v string) *EC2ResourceDetails {
	s.Vcpu = &v
	return s
}

// Utilization metrics for the instance.
type EC2ResourceUtilization struct {
	_ struct{} `type:"structure"`

	// The field that contains a list of disk (local storage) metrics that are associated
	// with the current instance.
	DiskResourceUtilization *DiskResourceUtilization `type:"structure"`

	// The EBS field that contains a list of EBS metrics that are associated with
	// the current instance.
	EBSResourceUtilization *EBSResourceUtilization `type:"structure"`

	// The maximum observed or expected CPU utilization of the instance.
	MaxCpuUtilizationPercentage *string `type:"string"`

	// The maximum observed or expected memory utilization of the instance.
	MaxMemoryUtilizationPercentage *string `type:"string"`

	// The maximum observed or expected storage utilization of the instance. This
	// doesn't include EBS storage.
	MaxStorageUtilizationPercentage *string `type:"string"`

	// The network field that contains a list of network metrics that are associated
	// with the current instance.
	NetworkResourceUtilization *NetworkResourceUtilization `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 EC2ResourceUtilization) String() string {
	return awsutil.Prettify(s)
}

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

// SetDiskResourceUtilization sets the DiskResourceUtilization field's value.
func (s *EC2ResourceUtilization) SetDiskResourceUtilization(v *DiskResourceUtilization) *EC2ResourceUtilization {
	s.DiskResourceUtilization = v
	return s
}

// SetEBSResourceUtilization sets the EBSResourceUtilization field's value.
func (s *EC2ResourceUtilization) SetEBSResourceUtilization(v *EBSResourceUtilization) *EC2ResourceUtilization {
	s.EBSResourceUtilization = v
	return s
}

// SetMaxCpuUtilizationPercentage sets the MaxCpuUtilizationPercentage field's value.
func (s *EC2ResourceUtilization) SetMaxCpuUtilizationPercentage(v string) *EC2ResourceUtilization {
	s.MaxCpuUtilizationPercentage = &v
	return s
}

// SetMaxMemoryUtilizationPercentage sets the MaxMemoryUtilizationPercentage field's value.
func (s *EC2ResourceUtilization) SetMaxMemoryUtilizationPercentage(v string) *EC2ResourceUtilization {
	s.MaxMemoryUtilizationPercentage = &v
	return s
}

// SetMaxStorageUtilizationPercentage sets the MaxStorageUtilizationPercentage field's value.
func (s *EC2ResourceUtilization) SetMaxStorageUtilizationPercentage(v string) *EC2ResourceUtilization {
	s.MaxStorageUtilizationPercentage = &v
	return s
}

// SetNetworkResourceUtilization sets the NetworkResourceUtilization field's value.
func (s *EC2ResourceUtilization) SetNetworkResourceUtilization(v *NetworkResourceUtilization) *EC2ResourceUtilization {
	s.NetworkResourceUtilization = v
	return s
}

// The Amazon EC2 hardware specifications that you want Amazon Web Services
// to provide recommendations for.
type EC2Specification struct {
	_ struct{} `type:"structure"`

	// Indicates whether you want a recommendation for standard or convertible reservations.
	OfferingClass *string `type:"string" enum:"OfferingClass"`
}

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

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

// SetOfferingClass sets the OfferingClass field's value.
func (s *EC2Specification) SetOfferingClass(v string) *EC2Specification {
	s.OfferingClass = &v
	return s
}

// Details about the Amazon OpenSearch Service reservations that Amazon Web
// Services recommends that you purchase.
type ESInstanceDetails struct {
	_ struct{} `type:"structure"`

	// Determines whether the recommendation is for a current-generation instance.
	CurrentGeneration *bool `type:"boolean"`

	// The class of instance that Amazon Web Services recommends.
	InstanceClass *string `type:"string"`

	// The size of instance that Amazon Web Services recommends.
	InstanceSize *string `type:"string"`

	// The Amazon Web Services Region of the recommended reservation.
	Region *string `type:"string"`

	// Determines whether the recommended reservation is size flexible.
	SizeFlexEligible *bool `type:"boolean"`
}

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

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

// SetCurrentGeneration sets the CurrentGeneration field's value.
func (s *ESInstanceDetails) SetCurrentGeneration(v bool) *ESInstanceDetails {
	s.CurrentGeneration = &v
	return s
}

// SetInstanceClass sets the InstanceClass field's value.
func (s *ESInstanceDetails) SetInstanceClass(v string) *ESInstanceDetails {
	s.InstanceClass = &v
	return s
}

// SetInstanceSize sets the InstanceSize field's value.
func (s *ESInstanceDetails) SetInstanceSize(v string) *ESInstanceDetails {
	s.InstanceSize = &v
	return s
}

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

// SetSizeFlexEligible sets the SizeFlexEligible field's value.
func (s *ESInstanceDetails) SetSizeFlexEligible(v bool) *ESInstanceDetails {
	s.SizeFlexEligible = &v
	return s
}

// Details about the Amazon ElastiCache reservations that Amazon Web Services
// recommends that you purchase.
type ElastiCacheInstanceDetails struct {
	_ struct{} `type:"structure"`

	// Determines whether the recommendation is for a current generation instance.
	CurrentGeneration *bool `type:"boolean"`

	// The instance family of the recommended reservation.
	Family *string `type:"string"`

	// The type of node that Amazon Web Services recommends.
	NodeType *string `type:"string"`

	// The description of the recommended reservation.
	ProductDescription *string `type:"string"`

	// The Amazon Web Services Region of the recommended reservation.
	Region *string `type:"string"`

	// Determines whether the recommended reservation is size flexible.
	SizeFlexEligible *bool `type:"boolean"`
}

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

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

// SetCurrentGeneration sets the CurrentGeneration field's value.
func (s *ElastiCacheInstanceDetails) SetCurrentGeneration(v bool) *ElastiCacheInstanceDetails {
	s.CurrentGeneration = &v
	return s
}

// SetFamily sets the Family field's value.
func (s *ElastiCacheInstanceDetails) SetFamily(v string) *ElastiCacheInstanceDetails {
	s.Family = &v
	return s
}

// SetNodeType sets the NodeType field's value.
func (s *ElastiCacheInstanceDetails) SetNodeType(v string) *ElastiCacheInstanceDetails {
	s.NodeType = &v
	return s
}

// SetProductDescription sets the ProductDescription field's value.
func (s *ElastiCacheInstanceDetails) SetProductDescription(v string) *ElastiCacheInstanceDetails {
	s.ProductDescription = &v
	return s
}

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

// SetSizeFlexEligible sets the SizeFlexEligible field's value.
func (s *ElastiCacheInstanceDetails) SetSizeFlexEligible(v bool) *ElastiCacheInstanceDetails {
	s.SizeFlexEligible = &v
	return s
}

// Use Expression to filter in various Cost Explorer APIs.
//
// Not all Expression types are supported in each API. Refer to the documentation
// for each specific API to see what is supported.
//
// There are two patterns:
//
//   - Simple dimension values. There are three types of simple dimension values:
//     CostCategories, Tags, and Dimensions. Specify the CostCategories field
//     to define a filter that acts on Cost Categories. Specify the Tags field
//     to define a filter that acts on Cost Allocation Tags. Specify the Dimensions
//     field to define a filter that acts on the DimensionValues (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_DimensionValues.html).
//     For each filter type, you can set the dimension name and values for the
//     filters that you plan to use. For example, you can filter for REGION==us-east-1
//     OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is
//     a full name (for example, REGION==US East (N. Virginia). The corresponding
//     Expression for this example is as follows: { "Dimensions": { "Key": "REGION",
//     "Values": [ "us-east-1", "us-west-1" ] } } As shown in the previous example,
//     lists of dimension values are combined with OR when applying the filter.
//     You can also set different match options to further control how the filter
//     behaves. Not all APIs support match options. Refer to the documentation
//     for each specific API to see what is supported. For example, you can filter
//     for linked account names that start with "a". The corresponding Expression
//     for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME",
//     "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } }
//
//   - Compound Expression types with logical operations. You can use multiple
//     Expression types and the logical operators AND/OR/NOT to create a list
//     of one or more Expression objects. By doing this, you can filter by more
//     advanced options. For example, you can filter by ((REGION == us-east-1
//     OR REGION == us-west-1) OR (TAG.Type == Type1)) AND (USAGE_TYPE != DataTransfer).
//     The corresponding Expression for this example is as follows: { "And":
//     [ {"Or": [ {"Dimensions": { "Key": "REGION", "Values": [ "us-east-1",
//     "us-west-1" ] }}, {"Tags": { "Key": "TagName", "Values": ["Value1"] }
//     } ]}, {"Not": {"Dimensions": { "Key": "USAGE_TYPE", "Values": ["DataTransfer"]
//     }}} ] } Because each Expression can have only one operator, the service
//     returns an error if more than one is specified. The following example
//     shows an Expression object that creates an error: { "And": [ ... ], "Dimensions":
//     { "Key": "USAGE_TYPE", "Values": [ "DataTransfer" ] } } The following
//     is an example of the corresponding error message: "Expression has more
//     than one roots. Only one root operator is allowed for each expression:
//     And, Or, Not, Dimensions, Tags, CostCategories"
//
// For the GetRightsizingRecommendation action, a combination of OR and NOT
// isn't supported. OR isn't supported between different dimensions, or dimensions
// and tags. NOT operators aren't supported. Dimensions are also limited to
// LINKED_ACCOUNT, REGION, or RIGHTSIZING_TYPE.
//
// For the GetReservationPurchaseRecommendation action, only NOT is supported.
// AND and OR aren't supported. Dimensions are limited to LINKED_ACCOUNT.
type Expression struct {
	_ struct{} `type:"structure"`

	// Return results that match both Dimension objects.
	And []*Expression `type:"list"`

	// The filter that's based on CostCategory values.
	CostCategories *CostCategoryValues `type:"structure"`

	// The specific Dimension to use for Expression.
	Dimensions *DimensionValues `type:"structure"`

	// Return results that don't match a Dimension object.
	Not *Expression `type:"structure"`

	// Return results that match either Dimension object.
	Or []*Expression `type:"list"`

	// The specific Tag to use for Expression.
	Tags *TagValues `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 Expression) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *Expression) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Expression"}
	if s.CostCategories != nil {
		if err := s.CostCategories.Validate(); err != nil {
			invalidParams.AddNested("CostCategories", err.(request.ErrInvalidParams))
		}
	}
	if s.Not != nil {
		if err := s.Not.Validate(); err != nil {
			invalidParams.AddNested("Not", err.(request.ErrInvalidParams))
		}
	}
	if s.Or != nil {
		for i, v := range s.Or {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Or", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetAnd sets the And field's value.
func (s *Expression) SetAnd(v []*Expression) *Expression {
	s.And = v
	return s
}

// SetCostCategories sets the CostCategories field's value.
func (s *Expression) SetCostCategories(v *CostCategoryValues) *Expression {
	s.CostCategories = v
	return s
}

// SetDimensions sets the Dimensions field's value.
func (s *Expression) SetDimensions(v *DimensionValues) *Expression {
	s.Dimensions = v
	return s
}

// SetNot sets the Not field's value.
func (s *Expression) SetNot(v *Expression) *Expression {
	s.Not = v
	return s
}

// SetOr sets the Or field's value.
func (s *Expression) SetOr(v []*Expression) *Expression {
	s.Or = v
	return s
}

// SetTags sets the Tags field's value.
func (s *Expression) SetTags(v *TagValues) *Expression {
	s.Tags = v
	return s
}

// The forecast that's created for your query.
type ForecastResult struct {
	_ struct{} `type:"structure"`

	// The mean value of the forecast.
	MeanValue *string `type:"string"`

	// The lower limit for the prediction interval.
	PredictionIntervalLowerBound *string `type:"string"`

	// The upper limit for the prediction interval.
	PredictionIntervalUpperBound *string `type:"string"`

	// The period of time that the forecast covers.
	TimePeriod *DateInterval `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 ForecastResult) String() string {
	return awsutil.Prettify(s)
}

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

// SetMeanValue sets the MeanValue field's value.
func (s *ForecastResult) SetMeanValue(v string) *ForecastResult {
	s.MeanValue = &v
	return s
}

// SetPredictionIntervalLowerBound sets the PredictionIntervalLowerBound field's value.
func (s *ForecastResult) SetPredictionIntervalLowerBound(v string) *ForecastResult {
	s.PredictionIntervalLowerBound = &v
	return s
}

// SetPredictionIntervalUpperBound sets the PredictionIntervalUpperBound field's value.
func (s *ForecastResult) SetPredictionIntervalUpperBound(v string) *ForecastResult {
	s.PredictionIntervalUpperBound = &v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *ForecastResult) SetTimePeriod(v *DateInterval) *ForecastResult {
	s.TimePeriod = v
	return s
}

// A request to generate a recommendation is already in progress.
type GenerationExistsException 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 GenerationExistsException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorGenerationExistsException(v protocol.ResponseMetadata) error {
	return &GenerationExistsException{
		RespMetadata: v,
	}
}

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

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

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

func (s *GenerationExistsException) 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 *GenerationExistsException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The summary of the Savings Plans recommendation generation.
type GenerationSummary struct {
	_ struct{} `type:"structure"`

	// Indicates the estimated time for when the recommendation generation will
	// complete.
	EstimatedCompletionTime *string `min:"20" type:"string"`

	// Indicates the completion time of the recommendation generation.
	GenerationCompletionTime *string `min:"20" type:"string"`

	// Indicates the start time of the recommendation generation.
	GenerationStartedTime *string `min:"20" type:"string"`

	// Indicates whether the recommendation generation succeeded, is processing,
	// or failed.
	GenerationStatus *string `type:"string" enum:"GenerationStatus"`

	// Indicates the ID for this specific recommendation.
	RecommendationId *string `min:"36" type:"string"`
}

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

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

// SetEstimatedCompletionTime sets the EstimatedCompletionTime field's value.
func (s *GenerationSummary) SetEstimatedCompletionTime(v string) *GenerationSummary {
	s.EstimatedCompletionTime = &v
	return s
}

// SetGenerationCompletionTime sets the GenerationCompletionTime field's value.
func (s *GenerationSummary) SetGenerationCompletionTime(v string) *GenerationSummary {
	s.GenerationCompletionTime = &v
	return s
}

// SetGenerationStartedTime sets the GenerationStartedTime field's value.
func (s *GenerationSummary) SetGenerationStartedTime(v string) *GenerationSummary {
	s.GenerationStartedTime = &v
	return s
}

// SetGenerationStatus sets the GenerationStatus field's value.
func (s *GenerationSummary) SetGenerationStatus(v string) *GenerationSummary {
	s.GenerationStatus = &v
	return s
}

// SetRecommendationId sets the RecommendationId field's value.
func (s *GenerationSummary) SetRecommendationId(v string) *GenerationSummary {
	s.RecommendationId = &v
	return s
}

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

	// Assigns the start and end dates for retrieving cost anomalies. The returned
	// anomaly object will have an AnomalyEndDate in the specified time range.
	//
	// DateInterval is a required field
	DateInterval *AnomalyDateInterval `type:"structure" required:"true"`

	// Filters anomaly results by the feedback field on the anomaly object.
	Feedback *string `type:"string" enum:"AnomalyFeedbackType"`

	// The number of entries a paginated response contains.
	MaxResults *int64 `type:"integer"`

	// Retrieves all of the cost anomalies detected for a specific cost anomaly
	// monitor Amazon Resource Name (ARN).
	MonitorArn *string `type:"string"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// Filters anomaly results by the total impact field on the anomaly object.
	// For example, you can filter anomalies GREATER_THAN 200.00 to retrieve anomalies,
	// with an estimated dollar impact greater than 200.
	TotalImpact *TotalImpactFilter `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 GetAnomaliesInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetAnomaliesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetAnomaliesInput"}
	if s.DateInterval == nil {
		invalidParams.Add(request.NewErrParamRequired("DateInterval"))
	}
	if s.DateInterval != nil {
		if err := s.DateInterval.Validate(); err != nil {
			invalidParams.AddNested("DateInterval", err.(request.ErrInvalidParams))
		}
	}
	if s.TotalImpact != nil {
		if err := s.TotalImpact.Validate(); err != nil {
			invalidParams.AddNested("TotalImpact", err.(request.ErrInvalidParams))
		}
	}

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

// SetDateInterval sets the DateInterval field's value.
func (s *GetAnomaliesInput) SetDateInterval(v *AnomalyDateInterval) *GetAnomaliesInput {
	s.DateInterval = v
	return s
}

// SetFeedback sets the Feedback field's value.
func (s *GetAnomaliesInput) SetFeedback(v string) *GetAnomaliesInput {
	s.Feedback = &v
	return s
}

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

// SetMonitorArn sets the MonitorArn field's value.
func (s *GetAnomaliesInput) SetMonitorArn(v string) *GetAnomaliesInput {
	s.MonitorArn = &v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetAnomaliesInput) SetNextPageToken(v string) *GetAnomaliesInput {
	s.NextPageToken = &v
	return s
}

// SetTotalImpact sets the TotalImpact field's value.
func (s *GetAnomaliesInput) SetTotalImpact(v *TotalImpactFilter) *GetAnomaliesInput {
	s.TotalImpact = v
	return s
}

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

	// A list of cost anomalies.
	//
	// Anomalies is a required field
	Anomalies []*Anomaly `type:"list" required:"true"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`
}

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

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

// SetAnomalies sets the Anomalies field's value.
func (s *GetAnomaliesOutput) SetAnomalies(v []*Anomaly) *GetAnomaliesOutput {
	s.Anomalies = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetAnomaliesOutput) SetNextPageToken(v string) *GetAnomaliesOutput {
	s.NextPageToken = &v
	return s
}

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

	// The number of entries that a paginated response contains.
	MaxResults *int64 `type:"integer"`

	// A list of cost anomaly monitor ARNs.
	MonitorArnList []*string `type:"list"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`
}

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

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

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

// SetMonitorArnList sets the MonitorArnList field's value.
func (s *GetAnomalyMonitorsInput) SetMonitorArnList(v []*string) *GetAnomalyMonitorsInput {
	s.MonitorArnList = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetAnomalyMonitorsInput) SetNextPageToken(v string) *GetAnomalyMonitorsInput {
	s.NextPageToken = &v
	return s
}

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

	// A list of cost anomaly monitors that includes the detailed metadata for each
	// monitor.
	//
	// AnomalyMonitors is a required field
	AnomalyMonitors []*AnomalyMonitor `type:"list" required:"true"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`
}

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

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

// SetAnomalyMonitors sets the AnomalyMonitors field's value.
func (s *GetAnomalyMonitorsOutput) SetAnomalyMonitors(v []*AnomalyMonitor) *GetAnomalyMonitorsOutput {
	s.AnomalyMonitors = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetAnomalyMonitorsOutput) SetNextPageToken(v string) *GetAnomalyMonitorsOutput {
	s.NextPageToken = &v
	return s
}

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

	// The number of entries a paginated response contains.
	MaxResults *int64 `type:"integer"`

	// Cost anomaly monitor ARNs.
	MonitorArn *string `type:"string"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// A list of cost anomaly subscription ARNs.
	SubscriptionArnList []*string `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 GetAnomalySubscriptionsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetMonitorArn sets the MonitorArn field's value.
func (s *GetAnomalySubscriptionsInput) SetMonitorArn(v string) *GetAnomalySubscriptionsInput {
	s.MonitorArn = &v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetAnomalySubscriptionsInput) SetNextPageToken(v string) *GetAnomalySubscriptionsInput {
	s.NextPageToken = &v
	return s
}

// SetSubscriptionArnList sets the SubscriptionArnList field's value.
func (s *GetAnomalySubscriptionsInput) SetSubscriptionArnList(v []*string) *GetAnomalySubscriptionsInput {
	s.SubscriptionArnList = v
	return s
}

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

	// A list of cost anomaly subscriptions that includes the detailed metadata
	// for each one.
	//
	// AnomalySubscriptions is a required field
	AnomalySubscriptions []*AnomalySubscription `type:"list" required:"true"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`
}

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

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

// SetAnomalySubscriptions sets the AnomalySubscriptions field's value.
func (s *GetAnomalySubscriptionsOutput) SetAnomalySubscriptions(v []*AnomalySubscription) *GetAnomalySubscriptionsOutput {
	s.AnomalySubscriptions = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetAnomalySubscriptionsOutput) SetNextPageToken(v string) *GetAnomalySubscriptionsOutput {
	s.NextPageToken = &v
	return s
}

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

	// The service to evaluate for the usage records. You can choose resource-level
	// data at daily granularity, or hourly granularity with or without resource-level
	// data.
	//
	// ApproximationDimension is a required field
	ApproximationDimension *string `type:"string" required:"true" enum:"ApproximationDimension"`

	// How granular you want the data to be. You can enable data at hourly or daily
	// granularity.
	//
	// Granularity is a required field
	Granularity *string `type:"string" required:"true" enum:"Granularity"`

	// The service metadata for the service or services you want to query. If not
	// specified, all elements are returned.
	Services []*string `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 GetApproximateUsageRecordsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetApproximationDimension sets the ApproximationDimension field's value.
func (s *GetApproximateUsageRecordsInput) SetApproximationDimension(v string) *GetApproximateUsageRecordsInput {
	s.ApproximationDimension = &v
	return s
}

// SetGranularity sets the Granularity field's value.
func (s *GetApproximateUsageRecordsInput) SetGranularity(v string) *GetApproximateUsageRecordsInput {
	s.Granularity = &v
	return s
}

// SetServices sets the Services field's value.
func (s *GetApproximateUsageRecordsInput) SetServices(v []*string) *GetApproximateUsageRecordsInput {
	s.Services = v
	return s
}

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

	// The lookback period that's used for the estimation.
	LookbackPeriod *DateInterval `type:"structure"`

	// The service metadata for the service or services in the response.
	Services map[string]*int64 `type:"map"`

	// The total number of usage records for all services in the services list.
	TotalRecords *int64 `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 GetApproximateUsageRecordsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetLookbackPeriod sets the LookbackPeriod field's value.
func (s *GetApproximateUsageRecordsOutput) SetLookbackPeriod(v *DateInterval) *GetApproximateUsageRecordsOutput {
	s.LookbackPeriod = v
	return s
}

// SetServices sets the Services field's value.
func (s *GetApproximateUsageRecordsOutput) SetServices(v map[string]*int64) *GetApproximateUsageRecordsOutput {
	s.Services = v
	return s
}

// SetTotalRecords sets the TotalRecords field's value.
func (s *GetApproximateUsageRecordsOutput) SetTotalRecords(v int64) *GetApproximateUsageRecordsOutput {
	s.TotalRecords = &v
	return s
}

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

	// Filters Amazon Web Services costs by different dimensions. For example, you
	// can specify SERVICE and LINKED_ACCOUNT and get the costs that are associated
	// with that account's usage of that service. You can nest Expression objects
	// to define any combination of dimension filters. For more information, see
	// Expression (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html).
	//
	// Valid values for MatchOptions for Dimensions are EQUALS and CASE_SENSITIVE.
	//
	// Valid values for MatchOptions for CostCategories and Tags are EQUALS, ABSENT,
	// and CASE_SENSITIVE. Default values are EQUALS and CASE_SENSITIVE.
	Filter *Expression `type:"structure"`

	// Sets the Amazon Web Services cost granularity to MONTHLY or DAILY, or HOURLY.
	// If Granularity isn't set, the response object doesn't include the Granularity,
	// either MONTHLY or DAILY, or HOURLY.
	//
	// Granularity is a required field
	Granularity *string `type:"string" required:"true" enum:"Granularity"`

	// You can group Amazon Web Services costs using up to two different groups,
	// either dimensions, tag keys, cost categories, or any two group by types.
	//
	// Valid values for the DIMENSION type are AZ, INSTANCE_TYPE, LEGAL_ENTITY_NAME,
	// INVOICING_ENTITY, LINKED_ACCOUNT, OPERATION, PLATFORM, PURCHASE_TYPE, SERVICE,
	// TENANCY, RECORD_TYPE, and USAGE_TYPE.
	//
	// When you group by the TAG type and include a valid tag key, you get all tag
	// values, including empty strings.
	GroupBy []*GroupDefinition `type:"list"`

	// Which metrics are returned in the query. For more information about blended
	// and unblended rates, see Why does the "blended" annotation appear on some
	// line items in my bill? (http://aws.amazon.com/premiumsupport/knowledge-center/blended-rates-intro/).
	//
	// Valid values are AmortizedCost, BlendedCost, NetAmortizedCost, NetUnblendedCost,
	// NormalizedUsageAmount, UnblendedCost, and UsageQuantity.
	//
	// If you return the UsageQuantity metric, the service aggregates all usage
	// numbers without taking into account the units. For example, if you aggregate
	// usageQuantity across all of Amazon EC2, the results aren't meaningful because
	// Amazon EC2 compute hours and data transfer are measured in different units
	// (for example, hours and GB). To get more meaningful UsageQuantity metrics,
	// filter by UsageType or UsageTypeGroups.
	//
	// Metrics is required for GetCostAndUsage requests.
	//
	// Metrics is a required field
	Metrics []*string `type:"list" required:"true"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// Sets the start date and end date for retrieving Amazon Web Services costs.
	// The start date is inclusive, but the end date is exclusive. For example,
	// if start is 2017-01-01 and end is 2017-05-01, then the cost and usage data
	// is retrieved from 2017-01-01 up to and including 2017-04-30 but not including
	// 2017-05-01.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `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 GetCostAndUsageInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetCostAndUsageInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetCostAndUsageInput"}
	if s.Granularity == nil {
		invalidParams.Add(request.NewErrParamRequired("Granularity"))
	}
	if s.Metrics == nil {
		invalidParams.Add(request.NewErrParamRequired("Metrics"))
	}
	if s.TimePeriod == nil {
		invalidParams.Add(request.NewErrParamRequired("TimePeriod"))
	}
	if s.Filter != nil {
		if err := s.Filter.Validate(); err != nil {
			invalidParams.AddNested("Filter", err.(request.ErrInvalidParams))
		}
	}
	if s.TimePeriod != nil {
		if err := s.TimePeriod.Validate(); err != nil {
			invalidParams.AddNested("TimePeriod", err.(request.ErrInvalidParams))
		}
	}

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

// SetFilter sets the Filter field's value.
func (s *GetCostAndUsageInput) SetFilter(v *Expression) *GetCostAndUsageInput {
	s.Filter = v
	return s
}

// SetGranularity sets the Granularity field's value.
func (s *GetCostAndUsageInput) SetGranularity(v string) *GetCostAndUsageInput {
	s.Granularity = &v
	return s
}

// SetGroupBy sets the GroupBy field's value.
func (s *GetCostAndUsageInput) SetGroupBy(v []*GroupDefinition) *GetCostAndUsageInput {
	s.GroupBy = v
	return s
}

// SetMetrics sets the Metrics field's value.
func (s *GetCostAndUsageInput) SetMetrics(v []*string) *GetCostAndUsageInput {
	s.Metrics = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetCostAndUsageInput) SetNextPageToken(v string) *GetCostAndUsageInput {
	s.NextPageToken = &v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *GetCostAndUsageInput) SetTimePeriod(v *DateInterval) *GetCostAndUsageInput {
	s.TimePeriod = v
	return s
}

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

	// The attributes that apply to a specific dimension value. For example, if
	// the value is a linked account, the attribute is that account name.
	DimensionValueAttributes []*DimensionValuesWithAttributes `type:"list"`

	// The groups that are specified by the Filter or GroupBy parameters in the
	// request.
	GroupDefinitions []*GroupDefinition `type:"list"`

	// The token for the next set of retrievable results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// The time period that's covered by the results in the response.
	ResultsByTime []*ResultByTime `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 GetCostAndUsageOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetDimensionValueAttributes sets the DimensionValueAttributes field's value.
func (s *GetCostAndUsageOutput) SetDimensionValueAttributes(v []*DimensionValuesWithAttributes) *GetCostAndUsageOutput {
	s.DimensionValueAttributes = v
	return s
}

// SetGroupDefinitions sets the GroupDefinitions field's value.
func (s *GetCostAndUsageOutput) SetGroupDefinitions(v []*GroupDefinition) *GetCostAndUsageOutput {
	s.GroupDefinitions = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetCostAndUsageOutput) SetNextPageToken(v string) *GetCostAndUsageOutput {
	s.NextPageToken = &v
	return s
}

// SetResultsByTime sets the ResultsByTime field's value.
func (s *GetCostAndUsageOutput) SetResultsByTime(v []*ResultByTime) *GetCostAndUsageOutput {
	s.ResultsByTime = v
	return s
}

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

	// Filters Amazon Web Services costs by different dimensions. For example, you
	// can specify SERVICE and LINKED_ACCOUNT and get the costs that are associated
	// with that account's usage of that service. You can nest Expression objects
	// to define any combination of dimension filters. For more information, see
	// Expression (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html).
	//
	// The GetCostAndUsageWithResources operation requires that you either group
	// by or filter by a ResourceId. It requires the Expression (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html)
	// "SERVICE = Amazon Elastic Compute Cloud - Compute" in the filter.
	//
	// Valid values for MatchOptions for Dimensions are EQUALS and CASE_SENSITIVE.
	//
	// Valid values for MatchOptions for CostCategories and Tags are EQUALS, ABSENT,
	// and CASE_SENSITIVE. Default values are EQUALS and CASE_SENSITIVE.
	//
	// Filter is a required field
	Filter *Expression `type:"structure" required:"true"`

	// Sets the Amazon Web Services cost granularity to MONTHLY, DAILY, or HOURLY.
	// If Granularity isn't set, the response object doesn't include the Granularity,
	// MONTHLY, DAILY, or HOURLY.
	//
	// Granularity is a required field
	Granularity *string `type:"string" required:"true" enum:"Granularity"`

	// You can group Amazon Web Services costs using up to two different groups:
	// DIMENSION, TAG, COST_CATEGORY.
	GroupBy []*GroupDefinition `type:"list"`

	// Which metrics are returned in the query. For more information about blended
	// and unblended rates, see Why does the "blended" annotation appear on some
	// line items in my bill? (http://aws.amazon.com/premiumsupport/knowledge-center/blended-rates-intro/).
	//
	// Valid values are AmortizedCost, BlendedCost, NetAmortizedCost, NetUnblendedCost,
	// NormalizedUsageAmount, UnblendedCost, and UsageQuantity.
	//
	// If you return the UsageQuantity metric, the service aggregates all usage
	// numbers without taking the units into account. For example, if you aggregate
	// usageQuantity across all of Amazon EC2, the results aren't meaningful because
	// Amazon EC2 compute hours and data transfer are measured in different units
	// (for example, hour or GB). To get more meaningful UsageQuantity metrics,
	// filter by UsageType or UsageTypeGroups.
	//
	// Metrics is required for GetCostAndUsageWithResources requests.
	Metrics []*string `type:"list"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// Sets the start and end dates for retrieving Amazon Web Services costs. The
	// range must be within the last 14 days (the start date cannot be earlier than
	// 14 days ago). The start date is inclusive, but the end date is exclusive.
	// For example, if start is 2017-01-01 and end is 2017-05-01, then the cost
	// and usage data is retrieved from 2017-01-01 up to and including 2017-04-30
	// but not including 2017-05-01.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `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 GetCostAndUsageWithResourcesInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetCostAndUsageWithResourcesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetCostAndUsageWithResourcesInput"}
	if s.Filter == nil {
		invalidParams.Add(request.NewErrParamRequired("Filter"))
	}
	if s.Granularity == nil {
		invalidParams.Add(request.NewErrParamRequired("Granularity"))
	}
	if s.TimePeriod == nil {
		invalidParams.Add(request.NewErrParamRequired("TimePeriod"))
	}
	if s.Filter != nil {
		if err := s.Filter.Validate(); err != nil {
			invalidParams.AddNested("Filter", err.(request.ErrInvalidParams))
		}
	}
	if s.TimePeriod != nil {
		if err := s.TimePeriod.Validate(); err != nil {
			invalidParams.AddNested("TimePeriod", err.(request.ErrInvalidParams))
		}
	}

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

// SetFilter sets the Filter field's value.
func (s *GetCostAndUsageWithResourcesInput) SetFilter(v *Expression) *GetCostAndUsageWithResourcesInput {
	s.Filter = v
	return s
}

// SetGranularity sets the Granularity field's value.
func (s *GetCostAndUsageWithResourcesInput) SetGranularity(v string) *GetCostAndUsageWithResourcesInput {
	s.Granularity = &v
	return s
}

// SetGroupBy sets the GroupBy field's value.
func (s *GetCostAndUsageWithResourcesInput) SetGroupBy(v []*GroupDefinition) *GetCostAndUsageWithResourcesInput {
	s.GroupBy = v
	return s
}

// SetMetrics sets the Metrics field's value.
func (s *GetCostAndUsageWithResourcesInput) SetMetrics(v []*string) *GetCostAndUsageWithResourcesInput {
	s.Metrics = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetCostAndUsageWithResourcesInput) SetNextPageToken(v string) *GetCostAndUsageWithResourcesInput {
	s.NextPageToken = &v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *GetCostAndUsageWithResourcesInput) SetTimePeriod(v *DateInterval) *GetCostAndUsageWithResourcesInput {
	s.TimePeriod = v
	return s
}

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

	// The attributes that apply to a specific dimension value. For example, if
	// the value is a linked account, the attribute is that account name.
	DimensionValueAttributes []*DimensionValuesWithAttributes `type:"list"`

	// The groups that are specified by the Filter or GroupBy parameters in the
	// request.
	GroupDefinitions []*GroupDefinition `type:"list"`

	// The token for the next set of retrievable results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// The time period that's covered by the results in the response.
	ResultsByTime []*ResultByTime `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 GetCostAndUsageWithResourcesOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetDimensionValueAttributes sets the DimensionValueAttributes field's value.
func (s *GetCostAndUsageWithResourcesOutput) SetDimensionValueAttributes(v []*DimensionValuesWithAttributes) *GetCostAndUsageWithResourcesOutput {
	s.DimensionValueAttributes = v
	return s
}

// SetGroupDefinitions sets the GroupDefinitions field's value.
func (s *GetCostAndUsageWithResourcesOutput) SetGroupDefinitions(v []*GroupDefinition) *GetCostAndUsageWithResourcesOutput {
	s.GroupDefinitions = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetCostAndUsageWithResourcesOutput) SetNextPageToken(v string) *GetCostAndUsageWithResourcesOutput {
	s.NextPageToken = &v
	return s
}

// SetResultsByTime sets the ResultsByTime field's value.
func (s *GetCostAndUsageWithResourcesOutput) SetResultsByTime(v []*ResultByTime) *GetCostAndUsageWithResourcesOutput {
	s.ResultsByTime = v
	return s
}

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

	// The unique name of the Cost Category.
	CostCategoryName *string `min:"1" type:"string"`

	// Use Expression to filter in various Cost Explorer APIs.
	//
	// Not all Expression types are supported in each API. Refer to the documentation
	// for each specific API to see what is supported.
	//
	// There are two patterns:
	//
	//    * Simple dimension values. There are three types of simple dimension values:
	//    CostCategories, Tags, and Dimensions. Specify the CostCategories field
	//    to define a filter that acts on Cost Categories. Specify the Tags field
	//    to define a filter that acts on Cost Allocation Tags. Specify the Dimensions
	//    field to define a filter that acts on the DimensionValues (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_DimensionValues.html).
	//    For each filter type, you can set the dimension name and values for the
	//    filters that you plan to use. For example, you can filter for REGION==us-east-1
	//    OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is
	//    a full name (for example, REGION==US East (N. Virginia). The corresponding
	//    Expression for this example is as follows: { "Dimensions": { "Key": "REGION",
	//    "Values": [ "us-east-1", "us-west-1" ] } } As shown in the previous example,
	//    lists of dimension values are combined with OR when applying the filter.
	//    You can also set different match options to further control how the filter
	//    behaves. Not all APIs support match options. Refer to the documentation
	//    for each specific API to see what is supported. For example, you can filter
	//    for linked account names that start with "a". The corresponding Expression
	//    for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME",
	//    "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } }
	//
	//    * Compound Expression types with logical operations. You can use multiple
	//    Expression types and the logical operators AND/OR/NOT to create a list
	//    of one or more Expression objects. By doing this, you can filter by more
	//    advanced options. For example, you can filter by ((REGION == us-east-1
	//    OR REGION == us-west-1) OR (TAG.Type == Type1)) AND (USAGE_TYPE != DataTransfer).
	//    The corresponding Expression for this example is as follows: { "And":
	//    [ {"Or": [ {"Dimensions": { "Key": "REGION", "Values": [ "us-east-1",
	//    "us-west-1" ] }}, {"Tags": { "Key": "TagName", "Values": ["Value1"] }
	//    } ]}, {"Not": {"Dimensions": { "Key": "USAGE_TYPE", "Values": ["DataTransfer"]
	//    }}} ] } Because each Expression can have only one operator, the service
	//    returns an error if more than one is specified. The following example
	//    shows an Expression object that creates an error: { "And": [ ... ], "Dimensions":
	//    { "Key": "USAGE_TYPE", "Values": [ "DataTransfer" ] } } The following
	//    is an example of the corresponding error message: "Expression has more
	//    than one roots. Only one root operator is allowed for each expression:
	//    And, Or, Not, Dimensions, Tags, CostCategories"
	//
	// For the GetRightsizingRecommendation action, a combination of OR and NOT
	// isn't supported. OR isn't supported between different dimensions, or dimensions
	// and tags. NOT operators aren't supported. Dimensions are also limited to
	// LINKED_ACCOUNT, REGION, or RIGHTSIZING_TYPE.
	//
	// For the GetReservationPurchaseRecommendation action, only NOT is supported.
	// AND and OR aren't supported. Dimensions are limited to LINKED_ACCOUNT.
	Filter *Expression `type:"structure"`

	// This field is only used when the SortBy value is provided in the request.
	//
	// The maximum number of objects that are returned for this request. If MaxResults
	// isn't specified with the SortBy value, the request returns 1000 results as
	// the default value for this parameter.
	//
	// For GetCostCategories, MaxResults has an upper quota of 1000.
	MaxResults *int64 `min:"1" type:"integer"`

	// If the number of objects that are still available for retrieval exceeds the
	// quota, Amazon Web Services returns a NextPageToken value in the response.
	// To retrieve the next batch of objects, provide the NextPageToken from the
	// previous call in your next request.
	NextPageToken *string `type:"string"`

	// The value that you want to search the filter values for.
	//
	// If you don't specify a CostCategoryName, SearchString is used to filter Cost
	// Category names that match the SearchString pattern. If you specify a CostCategoryName,
	// SearchString is used to filter Cost Category values that match the SearchString
	// pattern.
	SearchString *string `type:"string"`

	// The value that you sort the data by.
	//
	// The key represents the cost and usage metrics. The following values are supported:
	//
	//    * BlendedCost
	//
	//    * UnblendedCost
	//
	//    * AmortizedCost
	//
	//    * NetAmortizedCost
	//
	//    * NetUnblendedCost
	//
	//    * UsageQuantity
	//
	//    * NormalizedUsageAmount
	//
	// The supported key values for the SortOrder value are ASCENDING and DESCENDING.
	//
	// When you use the SortBy value, the NextPageToken and SearchString key values
	// aren't supported.
	SortBy []*SortDefinition `type:"list"`

	// The time period of the request.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `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 GetCostCategoriesInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetCostCategoryName sets the CostCategoryName field's value.
func (s *GetCostCategoriesInput) SetCostCategoryName(v string) *GetCostCategoriesInput {
	s.CostCategoryName = &v
	return s
}

// SetFilter sets the Filter field's value.
func (s *GetCostCategoriesInput) SetFilter(v *Expression) *GetCostCategoriesInput {
	s.Filter = v
	return s
}

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

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetCostCategoriesInput) SetNextPageToken(v string) *GetCostCategoriesInput {
	s.NextPageToken = &v
	return s
}

// SetSearchString sets the SearchString field's value.
func (s *GetCostCategoriesInput) SetSearchString(v string) *GetCostCategoriesInput {
	s.SearchString = &v
	return s
}

// SetSortBy sets the SortBy field's value.
func (s *GetCostCategoriesInput) SetSortBy(v []*SortDefinition) *GetCostCategoriesInput {
	s.SortBy = v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *GetCostCategoriesInput) SetTimePeriod(v *DateInterval) *GetCostCategoriesInput {
	s.TimePeriod = v
	return s
}

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

	// The names of the Cost Categories.
	CostCategoryNames []*string `type:"list"`

	// The Cost Category values.
	//
	// If the CostCategoryName key isn't specified in the request, the CostCategoryValues
	// fields aren't returned.
	CostCategoryValues []*string `type:"list"`

	// If the number of objects that are still available for retrieval exceeds the
	// quota, Amazon Web Services returns a NextPageToken value in the response.
	// To retrieve the next batch of objects, provide the marker from the prior
	// call in your next request.
	NextPageToken *string `type:"string"`

	// The number of objects that are returned.
	//
	// ReturnSize is a required field
	ReturnSize *int64 `type:"integer" required:"true"`

	// The total number of objects.
	//
	// TotalSize is a required field
	TotalSize *int64 `type:"integer" required:"true"`
}

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

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

// SetCostCategoryNames sets the CostCategoryNames field's value.
func (s *GetCostCategoriesOutput) SetCostCategoryNames(v []*string) *GetCostCategoriesOutput {
	s.CostCategoryNames = v
	return s
}

// SetCostCategoryValues sets the CostCategoryValues field's value.
func (s *GetCostCategoriesOutput) SetCostCategoryValues(v []*string) *GetCostCategoriesOutput {
	s.CostCategoryValues = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetCostCategoriesOutput) SetNextPageToken(v string) *GetCostCategoriesOutput {
	s.NextPageToken = &v
	return s
}

// SetReturnSize sets the ReturnSize field's value.
func (s *GetCostCategoriesOutput) SetReturnSize(v int64) *GetCostCategoriesOutput {
	s.ReturnSize = &v
	return s
}

// SetTotalSize sets the TotalSize field's value.
func (s *GetCostCategoriesOutput) SetTotalSize(v int64) *GetCostCategoriesOutput {
	s.TotalSize = &v
	return s
}

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

	// The filters that you want to use to filter your forecast. The GetCostForecast
	// API supports filtering by the following dimensions:
	//
	//    * AZ
	//
	//    * INSTANCE_TYPE
	//
	//    * LINKED_ACCOUNT
	//
	//    * LINKED_ACCOUNT_NAME
	//
	//    * OPERATION
	//
	//    * PURCHASE_TYPE
	//
	//    * REGION
	//
	//    * SERVICE
	//
	//    * USAGE_TYPE
	//
	//    * USAGE_TYPE_GROUP
	//
	//    * RECORD_TYPE
	//
	//    * OPERATING_SYSTEM
	//
	//    * TENANCY
	//
	//    * SCOPE
	//
	//    * PLATFORM
	//
	//    * SUBSCRIPTION_ID
	//
	//    * LEGAL_ENTITY_NAME
	//
	//    * DEPLOYMENT_OPTION
	//
	//    * DATABASE_ENGINE
	//
	//    * INSTANCE_TYPE_FAMILY
	//
	//    * BILLING_ENTITY
	//
	//    * RESERVATION_ID
	//
	//    * SAVINGS_PLAN_ARN
	Filter *Expression `type:"structure"`

	// How granular you want the forecast to be. You can get 3 months of DAILY forecasts
	// or 12 months of MONTHLY forecasts.
	//
	// The GetCostForecast operation supports only DAILY and MONTHLY granularities.
	//
	// Granularity is a required field
	Granularity *string `type:"string" required:"true" enum:"Granularity"`

	// Which metric Cost Explorer uses to create your forecast. For more information
	// about blended and unblended rates, see Why does the "blended" annotation
	// appear on some line items in my bill? (http://aws.amazon.com/premiumsupport/knowledge-center/blended-rates-intro/).
	//
	// Valid values for a GetCostForecast call are the following:
	//
	//    * AMORTIZED_COST
	//
	//    * BLENDED_COST
	//
	//    * NET_AMORTIZED_COST
	//
	//    * NET_UNBLENDED_COST
	//
	//    * UNBLENDED_COST
	//
	// Metric is a required field
	Metric *string `type:"string" required:"true" enum:"Metric"`

	// Cost Explorer always returns the mean forecast as a single point. You can
	// request a prediction interval around the mean by specifying a confidence
	// level. The higher the confidence level, the more confident Cost Explorer
	// is about the actual value falling in the prediction interval. Higher confidence
	// levels result in wider prediction intervals.
	PredictionIntervalLevel *int64 `min:"51" type:"integer"`

	// The period of time that you want the forecast to cover. The start date must
	// be equal to or no later than the current date to avoid a validation error.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `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 GetCostForecastInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetCostForecastInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetCostForecastInput"}
	if s.Granularity == nil {
		invalidParams.Add(request.NewErrParamRequired("Granularity"))
	}
	if s.Metric == nil {
		invalidParams.Add(request.NewErrParamRequired("Metric"))
	}
	if s.PredictionIntervalLevel != nil && *s.PredictionIntervalLevel < 51 {
		invalidParams.Add(request.NewErrParamMinValue("PredictionIntervalLevel", 51))
	}
	if s.TimePeriod == nil {
		invalidParams.Add(request.NewErrParamRequired("TimePeriod"))
	}
	if s.Filter != nil {
		if err := s.Filter.Validate(); err != nil {
			invalidParams.AddNested("Filter", err.(request.ErrInvalidParams))
		}
	}
	if s.TimePeriod != nil {
		if err := s.TimePeriod.Validate(); err != nil {
			invalidParams.AddNested("TimePeriod", err.(request.ErrInvalidParams))
		}
	}

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

// SetFilter sets the Filter field's value.
func (s *GetCostForecastInput) SetFilter(v *Expression) *GetCostForecastInput {
	s.Filter = v
	return s
}

// SetGranularity sets the Granularity field's value.
func (s *GetCostForecastInput) SetGranularity(v string) *GetCostForecastInput {
	s.Granularity = &v
	return s
}

// SetMetric sets the Metric field's value.
func (s *GetCostForecastInput) SetMetric(v string) *GetCostForecastInput {
	s.Metric = &v
	return s
}

// SetPredictionIntervalLevel sets the PredictionIntervalLevel field's value.
func (s *GetCostForecastInput) SetPredictionIntervalLevel(v int64) *GetCostForecastInput {
	s.PredictionIntervalLevel = &v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *GetCostForecastInput) SetTimePeriod(v *DateInterval) *GetCostForecastInput {
	s.TimePeriod = v
	return s
}

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

	// The forecasts for your query, in order. For DAILY forecasts, this is a list
	// of days. For MONTHLY forecasts, this is a list of months.
	ForecastResultsByTime []*ForecastResult `type:"list"`

	// How much you are forecasted to spend over the forecast period, in USD.
	Total *MetricValue `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 GetCostForecastOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetForecastResultsByTime sets the ForecastResultsByTime field's value.
func (s *GetCostForecastOutput) SetForecastResultsByTime(v []*ForecastResult) *GetCostForecastOutput {
	s.ForecastResultsByTime = v
	return s
}

// SetTotal sets the Total field's value.
func (s *GetCostForecastOutput) SetTotal(v *MetricValue) *GetCostForecastOutput {
	s.Total = v
	return s
}

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

	// The context for the call to GetDimensionValues. This can be RESERVATIONS
	// or COST_AND_USAGE. The default value is COST_AND_USAGE. If the context is
	// set to RESERVATIONS, the resulting dimension values can be used in the GetReservationUtilization
	// operation. If the context is set to COST_AND_USAGE, the resulting dimension
	// values can be used in the GetCostAndUsage operation.
	//
	// If you set the context to COST_AND_USAGE, you can use the following dimensions
	// for searching:
	//
	//    * AZ - The Availability Zone. An example is us-east-1a.
	//
	//    * BILLING_ENTITY - The Amazon Web Services seller that your account is
	//    with. Possible values are the following: - Amazon Web Services(Amazon
	//    Web Services): The entity that sells Amazon Web Services. - AISPL (Amazon
	//    Internet Services Pvt. Ltd.): The local Indian entity that's an acting
	//    reseller for Amazon Web Services in India. - Amazon Web Services Marketplace:
	//    The entity that supports the sale of solutions that are built on Amazon
	//    Web Services by third-party software providers.
	//
	//    * CACHE_ENGINE - The Amazon ElastiCache operating system. Examples are
	//    Windows or Linux.
	//
	//    * DEPLOYMENT_OPTION - The scope of Amazon Relational Database Service
	//    deployments. Valid values are SingleAZ and MultiAZ.
	//
	//    * DATABASE_ENGINE - The Amazon Relational Database Service database. Examples
	//    are Aurora or MySQL.
	//
	//    * INSTANCE_TYPE - The type of Amazon EC2 instance. An example is m4.xlarge.
	//
	//    * INSTANCE_TYPE_FAMILY - A family of instance types optimized to fit different
	//    use cases. Examples are Compute Optimized (for example, C4, C5, C6g, and
	//    C7g), Memory Optimization (for example, R4, R5n, R5b, and R6g).
	//
	//    * INVOICING_ENTITY - The name of the entity that issues the Amazon Web
	//    Services invoice.
	//
	//    * LEGAL_ENTITY_NAME - The name of the organization that sells you Amazon
	//    Web Services services, such as Amazon Web Services.
	//
	//    * LINKED_ACCOUNT - The description in the attribute map that includes
	//    the full name of the member account. The value field contains the Amazon
	//    Web Services ID of the member account.
	//
	//    * OPERATING_SYSTEM - The operating system. Examples are Windows or Linux.
	//
	//    * OPERATION - The action performed. Examples include RunInstance and CreateBucket.
	//
	//    * PLATFORM - The Amazon EC2 operating system. Examples are Windows or
	//    Linux.
	//
	//    * PURCHASE_TYPE - The reservation type of the purchase that this usage
	//    is related to. Examples include On-Demand Instances and Standard Reserved
	//    Instances.
	//
	//    * RESERVATION_ID - The unique identifier for an Amazon Web Services Reservation
	//    Instance.
	//
	//    * SAVINGS_PLAN_ARN - The unique identifier for your Savings Plans.
	//
	//    * SAVINGS_PLANS_TYPE - Type of Savings Plans (EC2 Instance or Compute).
	//
	//    * SERVICE - The Amazon Web Services service such as Amazon DynamoDB.
	//
	//    * TENANCY - The tenancy of a resource. Examples are shared or dedicated.
	//
	//    * USAGE_TYPE - The type of usage. An example is DataTransfer-In-Bytes.
	//    The response for the GetDimensionValues operation includes a unit attribute.
	//    Examples include GB and Hrs.
	//
	//    * USAGE_TYPE_GROUP - The grouping of common usage types. An example is
	//    Amazon EC2: CloudWatch – Alarms. The response for this operation includes
	//    a unit attribute.
	//
	//    * REGION - The Amazon Web Services Region.
	//
	//    * RECORD_TYPE - The different types of charges such as Reserved Instance
	//    (RI) fees, usage costs, tax refunds, and credits.
	//
	//    * RESOURCE_ID - The unique identifier of the resource. ResourceId is an
	//    opt-in feature only available for last 14 days for EC2-Compute Service.
	//
	// If you set the context to RESERVATIONS, you can use the following dimensions
	// for searching:
	//
	//    * AZ - The Availability Zone. An example is us-east-1a.
	//
	//    * CACHE_ENGINE - The Amazon ElastiCache operating system. Examples are
	//    Windows or Linux.
	//
	//    * DEPLOYMENT_OPTION - The scope of Amazon Relational Database Service
	//    deployments. Valid values are SingleAZ and MultiAZ.
	//
	//    * INSTANCE_TYPE - The type of Amazon EC2 instance. An example is m4.xlarge.
	//
	//    * LINKED_ACCOUNT - The description in the attribute map that includes
	//    the full name of the member account. The value field contains the Amazon
	//    Web Services ID of the member account.
	//
	//    * PLATFORM - The Amazon EC2 operating system. Examples are Windows or
	//    Linux.
	//
	//    * REGION - The Amazon Web Services Region.
	//
	//    * SCOPE (Utilization only) - The scope of a Reserved Instance (RI). Values
	//    are regional or a single Availability Zone.
	//
	//    * TAG (Coverage only) - The tags that are associated with a Reserved Instance
	//    (RI).
	//
	//    * TENANCY - The tenancy of a resource. Examples are shared or dedicated.
	//
	// If you set the context to SAVINGS_PLANS, you can use the following dimensions
	// for searching:
	//
	//    * SAVINGS_PLANS_TYPE - Type of Savings Plans (EC2 Instance or Compute)
	//
	//    * PAYMENT_OPTION - The payment option for the given Savings Plans (for
	//    example, All Upfront)
	//
	//    * REGION - The Amazon Web Services Region.
	//
	//    * INSTANCE_TYPE_FAMILY - The family of instances (For example, m5)
	//
	//    * LINKED_ACCOUNT - The description in the attribute map that includes
	//    the full name of the member account. The value field contains the Amazon
	//    Web Services ID of the member account.
	//
	//    * SAVINGS_PLAN_ARN - The unique identifier for your Savings Plans.
	Context *string `type:"string" enum:"Context"`

	// The name of the dimension. Each Dimension is available for a different Context.
	// For more information, see Context. LINK_ACCOUNT_NAME and SERVICE_CODE can
	// only be used in CostCategoryRule (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/AAPI_CostCategoryRule.html).
	//
	// Dimension is a required field
	Dimension *string `type:"string" required:"true" enum:"Dimension"`

	// Use Expression to filter in various Cost Explorer APIs.
	//
	// Not all Expression types are supported in each API. Refer to the documentation
	// for each specific API to see what is supported.
	//
	// There are two patterns:
	//
	//    * Simple dimension values. There are three types of simple dimension values:
	//    CostCategories, Tags, and Dimensions. Specify the CostCategories field
	//    to define a filter that acts on Cost Categories. Specify the Tags field
	//    to define a filter that acts on Cost Allocation Tags. Specify the Dimensions
	//    field to define a filter that acts on the DimensionValues (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_DimensionValues.html).
	//    For each filter type, you can set the dimension name and values for the
	//    filters that you plan to use. For example, you can filter for REGION==us-east-1
	//    OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is
	//    a full name (for example, REGION==US East (N. Virginia). The corresponding
	//    Expression for this example is as follows: { "Dimensions": { "Key": "REGION",
	//    "Values": [ "us-east-1", "us-west-1" ] } } As shown in the previous example,
	//    lists of dimension values are combined with OR when applying the filter.
	//    You can also set different match options to further control how the filter
	//    behaves. Not all APIs support match options. Refer to the documentation
	//    for each specific API to see what is supported. For example, you can filter
	//    for linked account names that start with "a". The corresponding Expression
	//    for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME",
	//    "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } }
	//
	//    * Compound Expression types with logical operations. You can use multiple
	//    Expression types and the logical operators AND/OR/NOT to create a list
	//    of one or more Expression objects. By doing this, you can filter by more
	//    advanced options. For example, you can filter by ((REGION == us-east-1
	//    OR REGION == us-west-1) OR (TAG.Type == Type1)) AND (USAGE_TYPE != DataTransfer).
	//    The corresponding Expression for this example is as follows: { "And":
	//    [ {"Or": [ {"Dimensions": { "Key": "REGION", "Values": [ "us-east-1",
	//    "us-west-1" ] }}, {"Tags": { "Key": "TagName", "Values": ["Value1"] }
	//    } ]}, {"Not": {"Dimensions": { "Key": "USAGE_TYPE", "Values": ["DataTransfer"]
	//    }}} ] } Because each Expression can have only one operator, the service
	//    returns an error if more than one is specified. The following example
	//    shows an Expression object that creates an error: { "And": [ ... ], "Dimensions":
	//    { "Key": "USAGE_TYPE", "Values": [ "DataTransfer" ] } } The following
	//    is an example of the corresponding error message: "Expression has more
	//    than one roots. Only one root operator is allowed for each expression:
	//    And, Or, Not, Dimensions, Tags, CostCategories"
	//
	// For the GetRightsizingRecommendation action, a combination of OR and NOT
	// isn't supported. OR isn't supported between different dimensions, or dimensions
	// and tags. NOT operators aren't supported. Dimensions are also limited to
	// LINKED_ACCOUNT, REGION, or RIGHTSIZING_TYPE.
	//
	// For the GetReservationPurchaseRecommendation action, only NOT is supported.
	// AND and OR aren't supported. Dimensions are limited to LINKED_ACCOUNT.
	Filter *Expression `type:"structure"`

	// This field is only used when SortBy is provided in the request. The maximum
	// number of objects that are returned for this request. If MaxResults isn't
	// specified with SortBy, the request returns 1000 results as the default value
	// for this parameter.
	//
	// For GetDimensionValues, MaxResults has an upper limit of 1000.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// The value that you want to search the filter values for.
	SearchString *string `type:"string"`

	// The value that you want to sort the data by.
	//
	// The key represents cost and usage metrics. The following values are supported:
	//
	//    * BlendedCost
	//
	//    * UnblendedCost
	//
	//    * AmortizedCost
	//
	//    * NetAmortizedCost
	//
	//    * NetUnblendedCost
	//
	//    * UsageQuantity
	//
	//    * NormalizedUsageAmount
	//
	// The supported values for the SortOrder key are ASCENDING or DESCENDING.
	//
	// When you specify a SortBy paramater, the context must be COST_AND_USAGE.
	// Further, when using SortBy, NextPageToken and SearchString aren't supported.
	SortBy []*SortDefinition `type:"list"`

	// The start date and end date for retrieving the dimension values. The start
	// date is inclusive, but the end date is exclusive. For example, if start is
	// 2017-01-01 and end is 2017-05-01, then the cost and usage data is retrieved
	// from 2017-01-01 up to and including 2017-04-30 but not including 2017-05-01.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `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 GetDimensionValuesInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetDimensionValuesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetDimensionValuesInput"}
	if s.Dimension == nil {
		invalidParams.Add(request.NewErrParamRequired("Dimension"))
	}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.TimePeriod == nil {
		invalidParams.Add(request.NewErrParamRequired("TimePeriod"))
	}
	if s.Filter != nil {
		if err := s.Filter.Validate(); err != nil {
			invalidParams.AddNested("Filter", err.(request.ErrInvalidParams))
		}
	}
	if s.SortBy != nil {
		for i, v := range s.SortBy {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "SortBy", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.TimePeriod != nil {
		if err := s.TimePeriod.Validate(); err != nil {
			invalidParams.AddNested("TimePeriod", err.(request.ErrInvalidParams))
		}
	}

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

// SetContext sets the Context field's value.
func (s *GetDimensionValuesInput) SetContext(v string) *GetDimensionValuesInput {
	s.Context = &v
	return s
}

// SetDimension sets the Dimension field's value.
func (s *GetDimensionValuesInput) SetDimension(v string) *GetDimensionValuesInput {
	s.Dimension = &v
	return s
}

// SetFilter sets the Filter field's value.
func (s *GetDimensionValuesInput) SetFilter(v *Expression) *GetDimensionValuesInput {
	s.Filter = v
	return s
}

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

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetDimensionValuesInput) SetNextPageToken(v string) *GetDimensionValuesInput {
	s.NextPageToken = &v
	return s
}

// SetSearchString sets the SearchString field's value.
func (s *GetDimensionValuesInput) SetSearchString(v string) *GetDimensionValuesInput {
	s.SearchString = &v
	return s
}

// SetSortBy sets the SortBy field's value.
func (s *GetDimensionValuesInput) SetSortBy(v []*SortDefinition) *GetDimensionValuesInput {
	s.SortBy = v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *GetDimensionValuesInput) SetTimePeriod(v *DateInterval) *GetDimensionValuesInput {
	s.TimePeriod = v
	return s
}

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

	// The filters that you used to filter your request. Some dimensions are available
	// only for a specific context.
	//
	// If you set the context to COST_AND_USAGE, you can use the following dimensions
	// for searching:
	//
	//    * AZ - The Availability Zone. An example is us-east-1a.
	//
	//    * DATABASE_ENGINE - The Amazon Relational Database Service database. Examples
	//    are Aurora or MySQL.
	//
	//    * INSTANCE_TYPE - The type of Amazon EC2 instance. An example is m4.xlarge.
	//
	//    * LEGAL_ENTITY_NAME - The name of the organization that sells you Amazon
	//    Web Services services, such as Amazon Web Services.
	//
	//    * LINKED_ACCOUNT - The description in the attribute map that includes
	//    the full name of the member account. The value field contains the Amazon
	//    Web Services ID of the member account.
	//
	//    * OPERATING_SYSTEM - The operating system. Examples are Windows or Linux.
	//
	//    * OPERATION - The action performed. Examples include RunInstance and CreateBucket.
	//
	//    * PLATFORM - The Amazon EC2 operating system. Examples are Windows or
	//    Linux.
	//
	//    * PURCHASE_TYPE - The reservation type of the purchase to which this usage
	//    is related. Examples include On-Demand Instances and Standard Reserved
	//    Instances.
	//
	//    * SERVICE - The Amazon Web Services service such as Amazon DynamoDB.
	//
	//    * USAGE_TYPE - The type of usage. An example is DataTransfer-In-Bytes.
	//    The response for the GetDimensionValues operation includes a unit attribute.
	//    Examples include GB and Hrs.
	//
	//    * USAGE_TYPE_GROUP - The grouping of common usage types. An example is
	//    Amazon EC2: CloudWatch – Alarms. The response for this operation includes
	//    a unit attribute.
	//
	//    * RECORD_TYPE - The different types of charges such as RI fees, usage
	//    costs, tax refunds, and credits.
	//
	//    * RESOURCE_ID - The unique identifier of the resource. ResourceId is an
	//    opt-in feature only available for last 14 days for EC2-Compute Service.
	//    You can opt-in by enabling Hourly and Resource Level Data in Cost Management
	//    Console preferences.
	//
	// If you set the context to RESERVATIONS, you can use the following dimensions
	// for searching:
	//
	//    * AZ - The Availability Zone. An example is us-east-1a.
	//
	//    * CACHE_ENGINE - The Amazon ElastiCache operating system. Examples are
	//    Windows or Linux.
	//
	//    * DEPLOYMENT_OPTION - The scope of Amazon Relational Database Service
	//    deployments. Valid values are SingleAZ and MultiAZ.
	//
	//    * INSTANCE_TYPE - The type of Amazon EC2 instance. An example is m4.xlarge.
	//
	//    * LINKED_ACCOUNT - The description in the attribute map that includes
	//    the full name of the member account. The value field contains the Amazon
	//    Web Services ID of the member account.
	//
	//    * PLATFORM - The Amazon EC2 operating system. Examples are Windows or
	//    Linux.
	//
	//    * REGION - The Amazon Web Services Region.
	//
	//    * SCOPE (Utilization only) - The scope of a Reserved Instance (RI). Values
	//    are regional or a single Availability Zone.
	//
	//    * TAG (Coverage only) - The tags that are associated with a Reserved Instance
	//    (RI).
	//
	//    * TENANCY - The tenancy of a resource. Examples are shared or dedicated.
	//
	// If you set the context to SAVINGS_PLANS, you can use the following dimensions
	// for searching:
	//
	//    * SAVINGS_PLANS_TYPE - Type of Savings Plans (EC2 Instance or Compute)
	//
	//    * PAYMENT_OPTION - Payment option for the given Savings Plans (for example,
	//    All Upfront)
	//
	//    * REGION - The Amazon Web Services Region.
	//
	//    * INSTANCE_TYPE_FAMILY - The family of instances (For example, m5)
	//
	//    * LINKED_ACCOUNT - The description in the attribute map that includes
	//    the full name of the member account. The value field contains the Amazon
	//    Web Services ID of the member account.
	//
	//    * SAVINGS_PLAN_ARN - The unique identifier for your Savings Plan
	//
	// DimensionValues is a required field
	DimensionValues []*DimensionValuesWithAttributes `type:"list" required:"true"`

	// The token for the next set of retrievable results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// The number of results that Amazon Web Services returned at one time.
	//
	// ReturnSize is a required field
	ReturnSize *int64 `type:"integer" required:"true"`

	// The total number of search results.
	//
	// TotalSize is a required field
	TotalSize *int64 `type:"integer" required:"true"`
}

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

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

// SetDimensionValues sets the DimensionValues field's value.
func (s *GetDimensionValuesOutput) SetDimensionValues(v []*DimensionValuesWithAttributes) *GetDimensionValuesOutput {
	s.DimensionValues = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetDimensionValuesOutput) SetNextPageToken(v string) *GetDimensionValuesOutput {
	s.NextPageToken = &v
	return s
}

// SetReturnSize sets the ReturnSize field's value.
func (s *GetDimensionValuesOutput) SetReturnSize(v int64) *GetDimensionValuesOutput {
	s.ReturnSize = &v
	return s
}

// SetTotalSize sets the TotalSize field's value.
func (s *GetDimensionValuesOutput) SetTotalSize(v int64) *GetDimensionValuesOutput {
	s.TotalSize = &v
	return s
}

// You can use the following request parameters to query for how much of your
// instance usage a reservation covered.
type GetReservationCoverageInput struct {
	_ struct{} `type:"structure"`

	// Filters utilization data by dimensions. You can filter by the following dimensions:
	//
	//    * AZ
	//
	//    * CACHE_ENGINE
	//
	//    * DATABASE_ENGINE
	//
	//    * DEPLOYMENT_OPTION
	//
	//    * INSTANCE_TYPE
	//
	//    * LINKED_ACCOUNT
	//
	//    * OPERATING_SYSTEM
	//
	//    * PLATFORM
	//
	//    * REGION
	//
	//    * SERVICE
	//
	//    * TAG
	//
	//    * TENANCY
	//
	// GetReservationCoverage uses the same Expression (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html)
	// object as the other operations, but only AND is supported among each dimension.
	// You can nest only one level deep. If there are multiple values for a dimension,
	// they are OR'd together.
	//
	// If you don't provide a SERVICE filter, Cost Explorer defaults to EC2.
	//
	// Cost category is also supported.
	Filter *Expression `type:"structure"`

	// The granularity of the Amazon Web Services cost data for the reservation.
	// Valid values are MONTHLY and DAILY.
	//
	// If GroupBy is set, Granularity can't be set. If Granularity isn't set, the
	// response object doesn't include Granularity, either MONTHLY or DAILY.
	//
	// The GetReservationCoverage operation supports only DAILY and MONTHLY granularities.
	Granularity *string `type:"string" enum:"Granularity"`

	// You can group the data by the following attributes:
	//
	//    * AZ
	//
	//    * CACHE_ENGINE
	//
	//    * DATABASE_ENGINE
	//
	//    * DEPLOYMENT_OPTION
	//
	//    * INSTANCE_TYPE
	//
	//    * INVOICING_ENTITY
	//
	//    * LINKED_ACCOUNT
	//
	//    * OPERATING_SYSTEM
	//
	//    * PLATFORM
	//
	//    * REGION
	//
	//    * TENANCY
	GroupBy []*GroupDefinition `type:"list"`

	// The maximum number of objects that you returned for this request. If more
	// objects are available, in the response, Amazon Web Services provides a NextPageToken
	// value that you can use in a subsequent call to get the next batch of objects.
	MaxResults *int64 `min:"1" type:"integer"`

	// The measurement that you want your reservation coverage reported in.
	//
	// Valid values are Hour, Unit, and Cost. You can use multiple values in a request.
	Metrics []*string `type:"list"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// The value by which you want to sort the data.
	//
	// The following values are supported for Key:
	//
	//    * OnDemandCost
	//
	//    * CoverageHoursPercentage
	//
	//    * OnDemandHours
	//
	//    * ReservedHours
	//
	//    * TotalRunningHours
	//
	//    * CoverageNormalizedUnitsPercentage
	//
	//    * OnDemandNormalizedUnits
	//
	//    * ReservedNormalizedUnits
	//
	//    * TotalRunningNormalizedUnits
	//
	//    * Time
	//
	// Supported values for SortOrder are ASCENDING or DESCENDING.
	SortBy *SortDefinition `type:"structure"`

	// The start and end dates of the period that you want to retrieve data about
	// reservation coverage for. You can retrieve data for a maximum of 13 months:
	// the last 12 months and the current month. The start date is inclusive, but
	// the end date is exclusive. For example, if start is 2017-01-01 and end is
	// 2017-05-01, then the cost and usage data is retrieved from 2017-01-01 up
	// to and including 2017-04-30 but not including 2017-05-01.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `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 GetReservationCoverageInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetReservationCoverageInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetReservationCoverageInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.TimePeriod == nil {
		invalidParams.Add(request.NewErrParamRequired("TimePeriod"))
	}
	if s.Filter != nil {
		if err := s.Filter.Validate(); err != nil {
			invalidParams.AddNested("Filter", err.(request.ErrInvalidParams))
		}
	}
	if s.SortBy != nil {
		if err := s.SortBy.Validate(); err != nil {
			invalidParams.AddNested("SortBy", err.(request.ErrInvalidParams))
		}
	}
	if s.TimePeriod != nil {
		if err := s.TimePeriod.Validate(); err != nil {
			invalidParams.AddNested("TimePeriod", err.(request.ErrInvalidParams))
		}
	}

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

// SetFilter sets the Filter field's value.
func (s *GetReservationCoverageInput) SetFilter(v *Expression) *GetReservationCoverageInput {
	s.Filter = v
	return s
}

// SetGranularity sets the Granularity field's value.
func (s *GetReservationCoverageInput) SetGranularity(v string) *GetReservationCoverageInput {
	s.Granularity = &v
	return s
}

// SetGroupBy sets the GroupBy field's value.
func (s *GetReservationCoverageInput) SetGroupBy(v []*GroupDefinition) *GetReservationCoverageInput {
	s.GroupBy = v
	return s
}

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

// SetMetrics sets the Metrics field's value.
func (s *GetReservationCoverageInput) SetMetrics(v []*string) *GetReservationCoverageInput {
	s.Metrics = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetReservationCoverageInput) SetNextPageToken(v string) *GetReservationCoverageInput {
	s.NextPageToken = &v
	return s
}

// SetSortBy sets the SortBy field's value.
func (s *GetReservationCoverageInput) SetSortBy(v *SortDefinition) *GetReservationCoverageInput {
	s.SortBy = v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *GetReservationCoverageInput) SetTimePeriod(v *DateInterval) *GetReservationCoverageInput {
	s.TimePeriod = v
	return s
}

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

	// The amount of time that your reservations covered.
	//
	// CoveragesByTime is a required field
	CoveragesByTime []*CoverageByTime `type:"list" required:"true"`

	// The token for the next set of retrievable results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// The total amount of instance usage that a reservation covered.
	Total *Coverage `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 GetReservationCoverageOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetCoveragesByTime sets the CoveragesByTime field's value.
func (s *GetReservationCoverageOutput) SetCoveragesByTime(v []*CoverageByTime) *GetReservationCoverageOutput {
	s.CoveragesByTime = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetReservationCoverageOutput) SetNextPageToken(v string) *GetReservationCoverageOutput {
	s.NextPageToken = &v
	return s
}

// SetTotal sets the Total field's value.
func (s *GetReservationCoverageOutput) SetTotal(v *Coverage) *GetReservationCoverageOutput {
	s.Total = v
	return s
}

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

	// The account ID that's associated with the recommendation.
	AccountId *string `type:"string"`

	// The account scope that you want your recommendations for. Amazon Web Services
	// calculates recommendations including the management account and member accounts
	// if the value is set to PAYER. If the value is LINKED, recommendations are
	// calculated for individual member accounts only.
	AccountScope *string `type:"string" enum:"AccountScope"`

	// Use Expression to filter in various Cost Explorer APIs.
	//
	// Not all Expression types are supported in each API. Refer to the documentation
	// for each specific API to see what is supported.
	//
	// There are two patterns:
	//
	//    * Simple dimension values. There are three types of simple dimension values:
	//    CostCategories, Tags, and Dimensions. Specify the CostCategories field
	//    to define a filter that acts on Cost Categories. Specify the Tags field
	//    to define a filter that acts on Cost Allocation Tags. Specify the Dimensions
	//    field to define a filter that acts on the DimensionValues (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_DimensionValues.html).
	//    For each filter type, you can set the dimension name and values for the
	//    filters that you plan to use. For example, you can filter for REGION==us-east-1
	//    OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is
	//    a full name (for example, REGION==US East (N. Virginia). The corresponding
	//    Expression for this example is as follows: { "Dimensions": { "Key": "REGION",
	//    "Values": [ "us-east-1", "us-west-1" ] } } As shown in the previous example,
	//    lists of dimension values are combined with OR when applying the filter.
	//    You can also set different match options to further control how the filter
	//    behaves. Not all APIs support match options. Refer to the documentation
	//    for each specific API to see what is supported. For example, you can filter
	//    for linked account names that start with "a". The corresponding Expression
	//    for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME",
	//    "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } }
	//
	//    * Compound Expression types with logical operations. You can use multiple
	//    Expression types and the logical operators AND/OR/NOT to create a list
	//    of one or more Expression objects. By doing this, you can filter by more
	//    advanced options. For example, you can filter by ((REGION == us-east-1
	//    OR REGION == us-west-1) OR (TAG.Type == Type1)) AND (USAGE_TYPE != DataTransfer).
	//    The corresponding Expression for this example is as follows: { "And":
	//    [ {"Or": [ {"Dimensions": { "Key": "REGION", "Values": [ "us-east-1",
	//    "us-west-1" ] }}, {"Tags": { "Key": "TagName", "Values": ["Value1"] }
	//    } ]}, {"Not": {"Dimensions": { "Key": "USAGE_TYPE", "Values": ["DataTransfer"]
	//    }}} ] } Because each Expression can have only one operator, the service
	//    returns an error if more than one is specified. The following example
	//    shows an Expression object that creates an error: { "And": [ ... ], "Dimensions":
	//    { "Key": "USAGE_TYPE", "Values": [ "DataTransfer" ] } } The following
	//    is an example of the corresponding error message: "Expression has more
	//    than one roots. Only one root operator is allowed for each expression:
	//    And, Or, Not, Dimensions, Tags, CostCategories"
	//
	// For the GetRightsizingRecommendation action, a combination of OR and NOT
	// isn't supported. OR isn't supported between different dimensions, or dimensions
	// and tags. NOT operators aren't supported. Dimensions are also limited to
	// LINKED_ACCOUNT, REGION, or RIGHTSIZING_TYPE.
	//
	// For the GetReservationPurchaseRecommendation action, only NOT is supported.
	// AND and OR aren't supported. Dimensions are limited to LINKED_ACCOUNT.
	Filter *Expression `type:"structure"`

	// The number of previous days that you want Amazon Web Services to consider
	// when it calculates your recommendations.
	LookbackPeriodInDays *string `type:"string" enum:"LookbackPeriodInDays"`

	// The pagination token that indicates the next set of results that you want
	// to retrieve.
	NextPageToken *string `type:"string"`

	// The number of recommendations that you want returned in a single response
	// object.
	PageSize *int64 `type:"integer"`

	// The reservation purchase option that you want recommendations for.
	PaymentOption *string `type:"string" enum:"PaymentOption"`

	// The specific service that you want recommendations for.
	//
	// Service is a required field
	Service *string `type:"string" required:"true"`

	// The hardware specifications for the service instances that you want recommendations
	// for, such as standard or convertible Amazon EC2 instances.
	ServiceSpecification *ServiceSpecification `type:"structure"`

	// The reservation term that you want recommendations for.
	TermInYears *string `type:"string" enum:"TermInYears"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetReservationPurchaseRecommendationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetReservationPurchaseRecommendationInput"}
	if s.Service == nil {
		invalidParams.Add(request.NewErrParamRequired("Service"))
	}
	if s.Filter != nil {
		if err := s.Filter.Validate(); err != nil {
			invalidParams.AddNested("Filter", err.(request.ErrInvalidParams))
		}
	}

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

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

// SetAccountScope sets the AccountScope field's value.
func (s *GetReservationPurchaseRecommendationInput) SetAccountScope(v string) *GetReservationPurchaseRecommendationInput {
	s.AccountScope = &v
	return s
}

// SetFilter sets the Filter field's value.
func (s *GetReservationPurchaseRecommendationInput) SetFilter(v *Expression) *GetReservationPurchaseRecommendationInput {
	s.Filter = v
	return s
}

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

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetReservationPurchaseRecommendationInput) SetNextPageToken(v string) *GetReservationPurchaseRecommendationInput {
	s.NextPageToken = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *GetReservationPurchaseRecommendationInput) SetPageSize(v int64) *GetReservationPurchaseRecommendationInput {
	s.PageSize = &v
	return s
}

// SetPaymentOption sets the PaymentOption field's value.
func (s *GetReservationPurchaseRecommendationInput) SetPaymentOption(v string) *GetReservationPurchaseRecommendationInput {
	s.PaymentOption = &v
	return s
}

// SetService sets the Service field's value.
func (s *GetReservationPurchaseRecommendationInput) SetService(v string) *GetReservationPurchaseRecommendationInput {
	s.Service = &v
	return s
}

// SetServiceSpecification sets the ServiceSpecification field's value.
func (s *GetReservationPurchaseRecommendationInput) SetServiceSpecification(v *ServiceSpecification) *GetReservationPurchaseRecommendationInput {
	s.ServiceSpecification = v
	return s
}

// SetTermInYears sets the TermInYears field's value.
func (s *GetReservationPurchaseRecommendationInput) SetTermInYears(v string) *GetReservationPurchaseRecommendationInput {
	s.TermInYears = &v
	return s
}

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

	// Information about this specific recommendation call, such as the time stamp
	// for when Cost Explorer generated this recommendation.
	Metadata *ReservationPurchaseRecommendationMetadata `type:"structure"`

	// The pagination token for the next set of retrievable results.
	NextPageToken *string `type:"string"`

	// Recommendations for reservations to purchase.
	Recommendations []*ReservationPurchaseRecommendation `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 GetReservationPurchaseRecommendationOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetMetadata sets the Metadata field's value.
func (s *GetReservationPurchaseRecommendationOutput) SetMetadata(v *ReservationPurchaseRecommendationMetadata) *GetReservationPurchaseRecommendationOutput {
	s.Metadata = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetReservationPurchaseRecommendationOutput) SetNextPageToken(v string) *GetReservationPurchaseRecommendationOutput {
	s.NextPageToken = &v
	return s
}

// SetRecommendations sets the Recommendations field's value.
func (s *GetReservationPurchaseRecommendationOutput) SetRecommendations(v []*ReservationPurchaseRecommendation) *GetReservationPurchaseRecommendationOutput {
	s.Recommendations = v
	return s
}

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

	// Filters utilization data by dimensions. You can filter by the following dimensions:
	//
	//    * AZ
	//
	//    * CACHE_ENGINE
	//
	//    * DEPLOYMENT_OPTION
	//
	//    * INSTANCE_TYPE
	//
	//    * LINKED_ACCOUNT
	//
	//    * OPERATING_SYSTEM
	//
	//    * PLATFORM
	//
	//    * REGION
	//
	//    * SERVICE
	//
	//    * SCOPE
	//
	//    * TENANCY
	//
	// GetReservationUtilization uses the same Expression (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html)
	// object as the other operations, but only AND is supported among each dimension,
	// and nesting is supported up to only one level deep. If there are multiple
	// values for a dimension, they are OR'd together.
	Filter *Expression `type:"structure"`

	// If GroupBy is set, Granularity can't be set. If Granularity isn't set, the
	// response object doesn't include Granularity, either MONTHLY or DAILY. If
	// both GroupBy and Granularity aren't set, GetReservationUtilization defaults
	// to DAILY.
	//
	// The GetReservationUtilization operation supports only DAILY and MONTHLY granularities.
	Granularity *string `type:"string" enum:"Granularity"`

	// Groups only by SUBSCRIPTION_ID. Metadata is included.
	GroupBy []*GroupDefinition `type:"list"`

	// The maximum number of objects that you returned for this request. If more
	// objects are available, in the response, Amazon Web Services provides a NextPageToken
	// value that you can use in a subsequent call to get the next batch of objects.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// The value that you want to sort the data by.
	//
	// The following values are supported for Key:
	//
	//    * UtilizationPercentage
	//
	//    * UtilizationPercentageInUnits
	//
	//    * PurchasedHours
	//
	//    * PurchasedUnits
	//
	//    * TotalActualHours
	//
	//    * TotalActualUnits
	//
	//    * UnusedHours
	//
	//    * UnusedUnits
	//
	//    * OnDemandCostOfRIHoursUsed
	//
	//    * NetRISavings
	//
	//    * TotalPotentialRISavings
	//
	//    * AmortizedUpfrontFee
	//
	//    * AmortizedRecurringFee
	//
	//    * TotalAmortizedFee
	//
	//    * RICostForUnusedHours
	//
	//    * RealizedSavings
	//
	//    * UnrealizedSavings
	//
	// The supported values for SortOrder are ASCENDING and DESCENDING.
	SortBy *SortDefinition `type:"structure"`

	// Sets the start and end dates for retrieving Reserved Instance (RI) utilization.
	// The start date is inclusive, but the end date is exclusive. For example,
	// if start is 2017-01-01 and end is 2017-05-01, then the cost and usage data
	// is retrieved from 2017-01-01 up to and including 2017-04-30 but not including
	// 2017-05-01.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `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 GetReservationUtilizationInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetReservationUtilizationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetReservationUtilizationInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.TimePeriod == nil {
		invalidParams.Add(request.NewErrParamRequired("TimePeriod"))
	}
	if s.Filter != nil {
		if err := s.Filter.Validate(); err != nil {
			invalidParams.AddNested("Filter", err.(request.ErrInvalidParams))
		}
	}
	if s.SortBy != nil {
		if err := s.SortBy.Validate(); err != nil {
			invalidParams.AddNested("SortBy", err.(request.ErrInvalidParams))
		}
	}
	if s.TimePeriod != nil {
		if err := s.TimePeriod.Validate(); err != nil {
			invalidParams.AddNested("TimePeriod", err.(request.ErrInvalidParams))
		}
	}

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

// SetFilter sets the Filter field's value.
func (s *GetReservationUtilizationInput) SetFilter(v *Expression) *GetReservationUtilizationInput {
	s.Filter = v
	return s
}

// SetGranularity sets the Granularity field's value.
func (s *GetReservationUtilizationInput) SetGranularity(v string) *GetReservationUtilizationInput {
	s.Granularity = &v
	return s
}

// SetGroupBy sets the GroupBy field's value.
func (s *GetReservationUtilizationInput) SetGroupBy(v []*GroupDefinition) *GetReservationUtilizationInput {
	s.GroupBy = v
	return s
}

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

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetReservationUtilizationInput) SetNextPageToken(v string) *GetReservationUtilizationInput {
	s.NextPageToken = &v
	return s
}

// SetSortBy sets the SortBy field's value.
func (s *GetReservationUtilizationInput) SetSortBy(v *SortDefinition) *GetReservationUtilizationInput {
	s.SortBy = v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *GetReservationUtilizationInput) SetTimePeriod(v *DateInterval) *GetReservationUtilizationInput {
	s.TimePeriod = v
	return s
}

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

	// The token for the next set of retrievable results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// The total amount of time that you used your Reserved Instances (RIs).
	Total *ReservationAggregates `type:"structure"`

	// The amount of time that you used your Reserved Instances (RIs).
	//
	// UtilizationsByTime is a required field
	UtilizationsByTime []*UtilizationByTime `type:"list" required:"true"`
}

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

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

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetReservationUtilizationOutput) SetNextPageToken(v string) *GetReservationUtilizationOutput {
	s.NextPageToken = &v
	return s
}

// SetTotal sets the Total field's value.
func (s *GetReservationUtilizationOutput) SetTotal(v *ReservationAggregates) *GetReservationUtilizationOutput {
	s.Total = v
	return s
}

// SetUtilizationsByTime sets the UtilizationsByTime field's value.
func (s *GetReservationUtilizationOutput) SetUtilizationsByTime(v []*UtilizationByTime) *GetReservationUtilizationOutput {
	s.UtilizationsByTime = v
	return s
}

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

	// You can use Configuration to customize recommendations across two attributes.
	// You can choose to view recommendations for instances within the same instance
	// families or across different instance families. You can also choose to view
	// your estimated savings that are associated with recommendations with consideration
	// of existing Savings Plans or RI benefits, or neither.
	Configuration *RightsizingRecommendationConfiguration `type:"structure"`

	// Use Expression to filter in various Cost Explorer APIs.
	//
	// Not all Expression types are supported in each API. Refer to the documentation
	// for each specific API to see what is supported.
	//
	// There are two patterns:
	//
	//    * Simple dimension values. There are three types of simple dimension values:
	//    CostCategories, Tags, and Dimensions. Specify the CostCategories field
	//    to define a filter that acts on Cost Categories. Specify the Tags field
	//    to define a filter that acts on Cost Allocation Tags. Specify the Dimensions
	//    field to define a filter that acts on the DimensionValues (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_DimensionValues.html).
	//    For each filter type, you can set the dimension name and values for the
	//    filters that you plan to use. For example, you can filter for REGION==us-east-1
	//    OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is
	//    a full name (for example, REGION==US East (N. Virginia). The corresponding
	//    Expression for this example is as follows: { "Dimensions": { "Key": "REGION",
	//    "Values": [ "us-east-1", "us-west-1" ] } } As shown in the previous example,
	//    lists of dimension values are combined with OR when applying the filter.
	//    You can also set different match options to further control how the filter
	//    behaves. Not all APIs support match options. Refer to the documentation
	//    for each specific API to see what is supported. For example, you can filter
	//    for linked account names that start with "a". The corresponding Expression
	//    for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME",
	//    "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } }
	//
	//    * Compound Expression types with logical operations. You can use multiple
	//    Expression types and the logical operators AND/OR/NOT to create a list
	//    of one or more Expression objects. By doing this, you can filter by more
	//    advanced options. For example, you can filter by ((REGION == us-east-1
	//    OR REGION == us-west-1) OR (TAG.Type == Type1)) AND (USAGE_TYPE != DataTransfer).
	//    The corresponding Expression for this example is as follows: { "And":
	//    [ {"Or": [ {"Dimensions": { "Key": "REGION", "Values": [ "us-east-1",
	//    "us-west-1" ] }}, {"Tags": { "Key": "TagName", "Values": ["Value1"] }
	//    } ]}, {"Not": {"Dimensions": { "Key": "USAGE_TYPE", "Values": ["DataTransfer"]
	//    }}} ] } Because each Expression can have only one operator, the service
	//    returns an error if more than one is specified. The following example
	//    shows an Expression object that creates an error: { "And": [ ... ], "Dimensions":
	//    { "Key": "USAGE_TYPE", "Values": [ "DataTransfer" ] } } The following
	//    is an example of the corresponding error message: "Expression has more
	//    than one roots. Only one root operator is allowed for each expression:
	//    And, Or, Not, Dimensions, Tags, CostCategories"
	//
	// For the GetRightsizingRecommendation action, a combination of OR and NOT
	// isn't supported. OR isn't supported between different dimensions, or dimensions
	// and tags. NOT operators aren't supported. Dimensions are also limited to
	// LINKED_ACCOUNT, REGION, or RIGHTSIZING_TYPE.
	//
	// For the GetReservationPurchaseRecommendation action, only NOT is supported.
	// AND and OR aren't supported. Dimensions are limited to LINKED_ACCOUNT.
	Filter *Expression `type:"structure"`

	// The pagination token that indicates the next set of results that you want
	// to retrieve.
	NextPageToken *string `type:"string"`

	// The number of recommendations that you want returned in a single response
	// object.
	PageSize *int64 `type:"integer"`

	// The specific service that you want recommendations for. The only valid value
	// for GetRightsizingRecommendation is "AmazonEC2".
	//
	// Service is a required field
	Service *string `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 GetRightsizingRecommendationInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetRightsizingRecommendationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetRightsizingRecommendationInput"}
	if s.Service == nil {
		invalidParams.Add(request.NewErrParamRequired("Service"))
	}
	if s.Configuration != nil {
		if err := s.Configuration.Validate(); err != nil {
			invalidParams.AddNested("Configuration", err.(request.ErrInvalidParams))
		}
	}
	if s.Filter != nil {
		if err := s.Filter.Validate(); err != nil {
			invalidParams.AddNested("Filter", err.(request.ErrInvalidParams))
		}
	}

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

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

// SetFilter sets the Filter field's value.
func (s *GetRightsizingRecommendationInput) SetFilter(v *Expression) *GetRightsizingRecommendationInput {
	s.Filter = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetRightsizingRecommendationInput) SetNextPageToken(v string) *GetRightsizingRecommendationInput {
	s.NextPageToken = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *GetRightsizingRecommendationInput) SetPageSize(v int64) *GetRightsizingRecommendationInput {
	s.PageSize = &v
	return s
}

// SetService sets the Service field's value.
func (s *GetRightsizingRecommendationInput) SetService(v string) *GetRightsizingRecommendationInput {
	s.Service = &v
	return s
}

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

	// You can use Configuration to customize recommendations across two attributes.
	// You can choose to view recommendations for instances within the same instance
	// families or across different instance families. You can also choose to view
	// your estimated savings that are associated with recommendations with consideration
	// of existing Savings Plans or RI benefits, or neither.
	Configuration *RightsizingRecommendationConfiguration `type:"structure"`

	// Information regarding this specific recommendation set.
	Metadata *RightsizingRecommendationMetadata `type:"structure"`

	// The token to retrieve the next set of results.
	NextPageToken *string `type:"string"`

	// Recommendations to rightsize resources.
	RightsizingRecommendations []*RightsizingRecommendation `type:"list"`

	// Summary of this recommendation set.
	Summary *RightsizingRecommendationSummary `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 GetRightsizingRecommendationOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetMetadata sets the Metadata field's value.
func (s *GetRightsizingRecommendationOutput) SetMetadata(v *RightsizingRecommendationMetadata) *GetRightsizingRecommendationOutput {
	s.Metadata = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetRightsizingRecommendationOutput) SetNextPageToken(v string) *GetRightsizingRecommendationOutput {
	s.NextPageToken = &v
	return s
}

// SetRightsizingRecommendations sets the RightsizingRecommendations field's value.
func (s *GetRightsizingRecommendationOutput) SetRightsizingRecommendations(v []*RightsizingRecommendation) *GetRightsizingRecommendationOutput {
	s.RightsizingRecommendations = v
	return s
}

// SetSummary sets the Summary field's value.
func (s *GetRightsizingRecommendationOutput) SetSummary(v *RightsizingRecommendationSummary) *GetRightsizingRecommendationOutput {
	s.Summary = v
	return s
}

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

	// The ID that is associated with the Savings Plan recommendation.
	//
	// RecommendationDetailId is a required field
	RecommendationDetailId *string `min:"36" 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 GetSavingsPlanPurchaseRecommendationDetailsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetRecommendationDetailId sets the RecommendationDetailId field's value.
func (s *GetSavingsPlanPurchaseRecommendationDetailsInput) SetRecommendationDetailId(v string) *GetSavingsPlanPurchaseRecommendationDetailsInput {
	s.RecommendationDetailId = &v
	return s
}

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

	// Contains detailed information about a specific Savings Plan recommendation.
	RecommendationDetailData *RecommendationDetailData `type:"structure"`

	// The ID that is associated with the Savings Plan recommendation.
	RecommendationDetailId *string `min:"36" type:"string"`
}

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

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

// SetRecommendationDetailData sets the RecommendationDetailData field's value.
func (s *GetSavingsPlanPurchaseRecommendationDetailsOutput) SetRecommendationDetailData(v *RecommendationDetailData) *GetSavingsPlanPurchaseRecommendationDetailsOutput {
	s.RecommendationDetailData = v
	return s
}

// SetRecommendationDetailId sets the RecommendationDetailId field's value.
func (s *GetSavingsPlanPurchaseRecommendationDetailsOutput) SetRecommendationDetailId(v string) *GetSavingsPlanPurchaseRecommendationDetailsOutput {
	s.RecommendationDetailId = &v
	return s
}

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

	// Filters Savings Plans coverage data by dimensions. You can filter data for
	// Savings Plans usage with the following dimensions:
	//
	//    * LINKED_ACCOUNT
	//
	//    * REGION
	//
	//    * SERVICE
	//
	//    * INSTANCE_FAMILY
	//
	// GetSavingsPlansCoverage uses the same Expression (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html)
	// object as the other operations, but only AND is supported among each dimension.
	// If there are multiple values for a dimension, they are OR'd together.
	//
	// Cost category is also supported.
	Filter *Expression `type:"structure"`

	// The granularity of the Amazon Web Services cost data for your Savings Plans.
	// Granularity can't be set if GroupBy is set.
	//
	// The GetSavingsPlansCoverage operation supports only DAILY and MONTHLY granularities.
	Granularity *string `type:"string" enum:"Granularity"`

	// You can group the data using the attributes INSTANCE_FAMILY, REGION, or SERVICE.
	GroupBy []*GroupDefinition `type:"list"`

	// The number of items to be returned in a response. The default is 20, with
	// a minimum value of 1.
	MaxResults *int64 `min:"1" type:"integer"`

	// The measurement that you want your Savings Plans coverage reported in. The
	// only valid value is SpendCoveredBySavingsPlans.
	Metrics []*string `type:"list"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextToken *string `type:"string"`

	// The value that you want to sort the data by.
	//
	// The following values are supported for Key:
	//
	//    * SpendCoveredBySavingsPlan
	//
	//    * OnDemandCost
	//
	//    * CoveragePercentage
	//
	//    * TotalCost
	//
	//    * InstanceFamily
	//
	//    * Region
	//
	//    * Service
	//
	// The supported values for SortOrder are ASCENDING and DESCENDING.
	SortBy *SortDefinition `type:"structure"`

	// The time period that you want the usage and costs for. The Start date must
	// be within 13 months. The End date must be after the Start date, and before
	// the current date. Future dates can't be used as an End date.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `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 GetSavingsPlansCoverageInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetSavingsPlansCoverageInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetSavingsPlansCoverageInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.TimePeriod == nil {
		invalidParams.Add(request.NewErrParamRequired("TimePeriod"))
	}
	if s.Filter != nil {
		if err := s.Filter.Validate(); err != nil {
			invalidParams.AddNested("Filter", err.(request.ErrInvalidParams))
		}
	}
	if s.SortBy != nil {
		if err := s.SortBy.Validate(); err != nil {
			invalidParams.AddNested("SortBy", err.(request.ErrInvalidParams))
		}
	}
	if s.TimePeriod != nil {
		if err := s.TimePeriod.Validate(); err != nil {
			invalidParams.AddNested("TimePeriod", err.(request.ErrInvalidParams))
		}
	}

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

// SetFilter sets the Filter field's value.
func (s *GetSavingsPlansCoverageInput) SetFilter(v *Expression) *GetSavingsPlansCoverageInput {
	s.Filter = v
	return s
}

// SetGranularity sets the Granularity field's value.
func (s *GetSavingsPlansCoverageInput) SetGranularity(v string) *GetSavingsPlansCoverageInput {
	s.Granularity = &v
	return s
}

// SetGroupBy sets the GroupBy field's value.
func (s *GetSavingsPlansCoverageInput) SetGroupBy(v []*GroupDefinition) *GetSavingsPlansCoverageInput {
	s.GroupBy = v
	return s
}

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

// SetMetrics sets the Metrics field's value.
func (s *GetSavingsPlansCoverageInput) SetMetrics(v []*string) *GetSavingsPlansCoverageInput {
	s.Metrics = v
	return s
}

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

// SetSortBy sets the SortBy field's value.
func (s *GetSavingsPlansCoverageInput) SetSortBy(v *SortDefinition) *GetSavingsPlansCoverageInput {
	s.SortBy = v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *GetSavingsPlansCoverageInput) SetTimePeriod(v *DateInterval) *GetSavingsPlansCoverageInput {
	s.TimePeriod = v
	return s
}

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

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextToken *string `type:"string"`

	// The amount of spend that your Savings Plans covered.
	//
	// SavingsPlansCoverages is a required field
	SavingsPlansCoverages []*SavingsPlansCoverage `type:"list" required:"true"`
}

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

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

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

// SetSavingsPlansCoverages sets the SavingsPlansCoverages field's value.
func (s *GetSavingsPlansCoverageOutput) SetSavingsPlansCoverages(v []*SavingsPlansCoverage) *GetSavingsPlansCoverageOutput {
	s.SavingsPlansCoverages = v
	return s
}

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

	// The account scope that you want your recommendations for. Amazon Web Services
	// calculates recommendations including the management account and member accounts
	// if the value is set to PAYER. If the value is LINKED, recommendations are
	// calculated for individual member accounts only.
	AccountScope *string `type:"string" enum:"AccountScope"`

	// You can filter your recommendations by Account ID with the LINKED_ACCOUNT
	// dimension. To filter your recommendations by Account ID, specify Key as LINKED_ACCOUNT
	// and Value as the comma-separated Acount ID(s) that you want to see Savings
	// Plans purchase recommendations for.
	//
	// For GetSavingsPlansPurchaseRecommendation, the Filter doesn't include CostCategories
	// or Tags. It only includes Dimensions. With Dimensions, Key must be LINKED_ACCOUNT
	// and Value can be a single Account ID or multiple comma-separated Account
	// IDs that you want to see Savings Plans Purchase Recommendations for. AND
	// and OR operators are not supported.
	Filter *Expression `type:"structure"`

	// The lookback period that's used to generate the recommendation.
	//
	// LookbackPeriodInDays is a required field
	LookbackPeriodInDays *string `type:"string" required:"true" enum:"LookbackPeriodInDays"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// The number of recommendations that you want returned in a single response
	// object.
	PageSize *int64 `type:"integer"`

	// The payment option that's used to generate these recommendations.
	//
	// PaymentOption is a required field
	PaymentOption *string `type:"string" required:"true" enum:"PaymentOption"`

	// The Savings Plans recommendation type that's requested.
	//
	// SavingsPlansType is a required field
	SavingsPlansType *string `type:"string" required:"true" enum:"SupportedSavingsPlansType"`

	// The savings plan recommendation term that's used to generate these recommendations.
	//
	// TermInYears is a required field
	TermInYears *string `type:"string" required:"true" enum:"TermInYears"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetSavingsPlansPurchaseRecommendationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetSavingsPlansPurchaseRecommendationInput"}
	if s.LookbackPeriodInDays == nil {
		invalidParams.Add(request.NewErrParamRequired("LookbackPeriodInDays"))
	}
	if s.PaymentOption == nil {
		invalidParams.Add(request.NewErrParamRequired("PaymentOption"))
	}
	if s.SavingsPlansType == nil {
		invalidParams.Add(request.NewErrParamRequired("SavingsPlansType"))
	}
	if s.TermInYears == nil {
		invalidParams.Add(request.NewErrParamRequired("TermInYears"))
	}
	if s.Filter != nil {
		if err := s.Filter.Validate(); err != nil {
			invalidParams.AddNested("Filter", err.(request.ErrInvalidParams))
		}
	}

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

// SetAccountScope sets the AccountScope field's value.
func (s *GetSavingsPlansPurchaseRecommendationInput) SetAccountScope(v string) *GetSavingsPlansPurchaseRecommendationInput {
	s.AccountScope = &v
	return s
}

// SetFilter sets the Filter field's value.
func (s *GetSavingsPlansPurchaseRecommendationInput) SetFilter(v *Expression) *GetSavingsPlansPurchaseRecommendationInput {
	s.Filter = v
	return s
}

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

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetSavingsPlansPurchaseRecommendationInput) SetNextPageToken(v string) *GetSavingsPlansPurchaseRecommendationInput {
	s.NextPageToken = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *GetSavingsPlansPurchaseRecommendationInput) SetPageSize(v int64) *GetSavingsPlansPurchaseRecommendationInput {
	s.PageSize = &v
	return s
}

// SetPaymentOption sets the PaymentOption field's value.
func (s *GetSavingsPlansPurchaseRecommendationInput) SetPaymentOption(v string) *GetSavingsPlansPurchaseRecommendationInput {
	s.PaymentOption = &v
	return s
}

// SetSavingsPlansType sets the SavingsPlansType field's value.
func (s *GetSavingsPlansPurchaseRecommendationInput) SetSavingsPlansType(v string) *GetSavingsPlansPurchaseRecommendationInput {
	s.SavingsPlansType = &v
	return s
}

// SetTermInYears sets the TermInYears field's value.
func (s *GetSavingsPlansPurchaseRecommendationInput) SetTermInYears(v string) *GetSavingsPlansPurchaseRecommendationInput {
	s.TermInYears = &v
	return s
}

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

	// Information that regards this specific recommendation set.
	Metadata *SavingsPlansPurchaseRecommendationMetadata `type:"structure"`

	// The token for the next set of retrievable results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// Contains your request parameters, Savings Plan Recommendations Summary, and
	// Details.
	SavingsPlansPurchaseRecommendation *SavingsPlansPurchaseRecommendation `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 GetSavingsPlansPurchaseRecommendationOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetMetadata sets the Metadata field's value.
func (s *GetSavingsPlansPurchaseRecommendationOutput) SetMetadata(v *SavingsPlansPurchaseRecommendationMetadata) *GetSavingsPlansPurchaseRecommendationOutput {
	s.Metadata = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetSavingsPlansPurchaseRecommendationOutput) SetNextPageToken(v string) *GetSavingsPlansPurchaseRecommendationOutput {
	s.NextPageToken = &v
	return s
}

// SetSavingsPlansPurchaseRecommendation sets the SavingsPlansPurchaseRecommendation field's value.
func (s *GetSavingsPlansPurchaseRecommendationOutput) SetSavingsPlansPurchaseRecommendation(v *SavingsPlansPurchaseRecommendation) *GetSavingsPlansPurchaseRecommendationOutput {
	s.SavingsPlansPurchaseRecommendation = v
	return s
}

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

	// The data type.
	DataType []*string `type:"list" enum:"SavingsPlansDataType"`

	// Filters Savings Plans utilization coverage data for active Savings Plans
	// dimensions. You can filter data with the following dimensions:
	//
	//    * LINKED_ACCOUNT
	//
	//    * SAVINGS_PLAN_ARN
	//
	//    * REGION
	//
	//    * PAYMENT_OPTION
	//
	//    * INSTANCE_TYPE_FAMILY
	//
	// GetSavingsPlansUtilizationDetails uses the same Expression (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html)
	// object as the other operations, but only AND is supported among each dimension.
	Filter *Expression `type:"structure"`

	// The number of items to be returned in a response. The default is 20, with
	// a minimum value of 1.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextToken *string `type:"string"`

	// The value that you want to sort the data by.
	//
	// The following values are supported for Key:
	//
	//    * UtilizationPercentage
	//
	//    * TotalCommitment
	//
	//    * UsedCommitment
	//
	//    * UnusedCommitment
	//
	//    * NetSavings
	//
	//    * AmortizedRecurringCommitment
	//
	//    * AmortizedUpfrontCommitment
	//
	// The supported values for SortOrder are ASCENDING and DESCENDING.
	SortBy *SortDefinition `type:"structure"`

	// The time period that you want the usage and costs for. The Start date must
	// be within 13 months. The End date must be after the Start date, and before
	// the current date. Future dates can't be used as an End date.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `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 GetSavingsPlansUtilizationDetailsInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetSavingsPlansUtilizationDetailsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetSavingsPlansUtilizationDetailsInput"}
	if s.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}
	if s.TimePeriod == nil {
		invalidParams.Add(request.NewErrParamRequired("TimePeriod"))
	}
	if s.Filter != nil {
		if err := s.Filter.Validate(); err != nil {
			invalidParams.AddNested("Filter", err.(request.ErrInvalidParams))
		}
	}
	if s.SortBy != nil {
		if err := s.SortBy.Validate(); err != nil {
			invalidParams.AddNested("SortBy", err.(request.ErrInvalidParams))
		}
	}
	if s.TimePeriod != nil {
		if err := s.TimePeriod.Validate(); err != nil {
			invalidParams.AddNested("TimePeriod", err.(request.ErrInvalidParams))
		}
	}

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

// SetDataType sets the DataType field's value.
func (s *GetSavingsPlansUtilizationDetailsInput) SetDataType(v []*string) *GetSavingsPlansUtilizationDetailsInput {
	s.DataType = v
	return s
}

// SetFilter sets the Filter field's value.
func (s *GetSavingsPlansUtilizationDetailsInput) SetFilter(v *Expression) *GetSavingsPlansUtilizationDetailsInput {
	s.Filter = v
	return s
}

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

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

// SetSortBy sets the SortBy field's value.
func (s *GetSavingsPlansUtilizationDetailsInput) SetSortBy(v *SortDefinition) *GetSavingsPlansUtilizationDetailsInput {
	s.SortBy = v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *GetSavingsPlansUtilizationDetailsInput) SetTimePeriod(v *DateInterval) *GetSavingsPlansUtilizationDetailsInput {
	s.TimePeriod = v
	return s
}

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

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextToken *string `type:"string"`

	// Retrieves a single daily or monthly Savings Plans utilization rate and details
	// for your account.
	//
	// SavingsPlansUtilizationDetails is a required field
	SavingsPlansUtilizationDetails []*SavingsPlansUtilizationDetail `type:"list" required:"true"`

	// The time period of the request.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `type:"structure" required:"true"`

	// The total Savings Plans utilization, regardless of time period.
	Total *SavingsPlansUtilizationAggregates `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 GetSavingsPlansUtilizationDetailsOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetSavingsPlansUtilizationDetails sets the SavingsPlansUtilizationDetails field's value.
func (s *GetSavingsPlansUtilizationDetailsOutput) SetSavingsPlansUtilizationDetails(v []*SavingsPlansUtilizationDetail) *GetSavingsPlansUtilizationDetailsOutput {
	s.SavingsPlansUtilizationDetails = v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *GetSavingsPlansUtilizationDetailsOutput) SetTimePeriod(v *DateInterval) *GetSavingsPlansUtilizationDetailsOutput {
	s.TimePeriod = v
	return s
}

// SetTotal sets the Total field's value.
func (s *GetSavingsPlansUtilizationDetailsOutput) SetTotal(v *SavingsPlansUtilizationAggregates) *GetSavingsPlansUtilizationDetailsOutput {
	s.Total = v
	return s
}

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

	// Filters Savings Plans utilization coverage data for active Savings Plans
	// dimensions. You can filter data with the following dimensions:
	//
	//    * LINKED_ACCOUNT
	//
	//    * SAVINGS_PLAN_ARN
	//
	//    * SAVINGS_PLANS_TYPE
	//
	//    * REGION
	//
	//    * PAYMENT_OPTION
	//
	//    * INSTANCE_TYPE_FAMILY
	//
	// GetSavingsPlansUtilization uses the same Expression (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html)
	// object as the other operations, but only AND is supported among each dimension.
	Filter *Expression `type:"structure"`

	// The granularity of the Amazon Web Services utillization data for your Savings
	// Plans.
	//
	// The GetSavingsPlansUtilization operation supports only DAILY and MONTHLY
	// granularities.
	Granularity *string `type:"string" enum:"Granularity"`

	// The value that you want to sort the data by.
	//
	// The following values are supported for Key:
	//
	//    * UtilizationPercentage
	//
	//    * TotalCommitment
	//
	//    * UsedCommitment
	//
	//    * UnusedCommitment
	//
	//    * NetSavings
	//
	// The supported values for SortOrder are ASCENDING and DESCENDING.
	SortBy *SortDefinition `type:"structure"`

	// The time period that you want the usage and costs for. The Start date must
	// be within 13 months. The End date must be after the Start date, and before
	// the current date. Future dates can't be used as an End date.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `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 GetSavingsPlansUtilizationInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetSavingsPlansUtilizationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetSavingsPlansUtilizationInput"}
	if s.TimePeriod == nil {
		invalidParams.Add(request.NewErrParamRequired("TimePeriod"))
	}
	if s.Filter != nil {
		if err := s.Filter.Validate(); err != nil {
			invalidParams.AddNested("Filter", err.(request.ErrInvalidParams))
		}
	}
	if s.SortBy != nil {
		if err := s.SortBy.Validate(); err != nil {
			invalidParams.AddNested("SortBy", err.(request.ErrInvalidParams))
		}
	}
	if s.TimePeriod != nil {
		if err := s.TimePeriod.Validate(); err != nil {
			invalidParams.AddNested("TimePeriod", err.(request.ErrInvalidParams))
		}
	}

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

// SetFilter sets the Filter field's value.
func (s *GetSavingsPlansUtilizationInput) SetFilter(v *Expression) *GetSavingsPlansUtilizationInput {
	s.Filter = v
	return s
}

// SetGranularity sets the Granularity field's value.
func (s *GetSavingsPlansUtilizationInput) SetGranularity(v string) *GetSavingsPlansUtilizationInput {
	s.Granularity = &v
	return s
}

// SetSortBy sets the SortBy field's value.
func (s *GetSavingsPlansUtilizationInput) SetSortBy(v *SortDefinition) *GetSavingsPlansUtilizationInput {
	s.SortBy = v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *GetSavingsPlansUtilizationInput) SetTimePeriod(v *DateInterval) *GetSavingsPlansUtilizationInput {
	s.TimePeriod = v
	return s
}

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

	// The amount of cost/commitment that you used your Savings Plans. You can use
	// it to specify date ranges.
	SavingsPlansUtilizationsByTime []*SavingsPlansUtilizationByTime `type:"list"`

	// The total amount of cost/commitment that you used your Savings Plans, regardless
	// of date ranges.
	//
	// Total is a required field
	Total *SavingsPlansUtilizationAggregates `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 GetSavingsPlansUtilizationOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetSavingsPlansUtilizationsByTime sets the SavingsPlansUtilizationsByTime field's value.
func (s *GetSavingsPlansUtilizationOutput) SetSavingsPlansUtilizationsByTime(v []*SavingsPlansUtilizationByTime) *GetSavingsPlansUtilizationOutput {
	s.SavingsPlansUtilizationsByTime = v
	return s
}

// SetTotal sets the Total field's value.
func (s *GetSavingsPlansUtilizationOutput) SetTotal(v *SavingsPlansUtilizationAggregates) *GetSavingsPlansUtilizationOutput {
	s.Total = v
	return s
}

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

	// Use Expression to filter in various Cost Explorer APIs.
	//
	// Not all Expression types are supported in each API. Refer to the documentation
	// for each specific API to see what is supported.
	//
	// There are two patterns:
	//
	//    * Simple dimension values. There are three types of simple dimension values:
	//    CostCategories, Tags, and Dimensions. Specify the CostCategories field
	//    to define a filter that acts on Cost Categories. Specify the Tags field
	//    to define a filter that acts on Cost Allocation Tags. Specify the Dimensions
	//    field to define a filter that acts on the DimensionValues (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_DimensionValues.html).
	//    For each filter type, you can set the dimension name and values for the
	//    filters that you plan to use. For example, you can filter for REGION==us-east-1
	//    OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is
	//    a full name (for example, REGION==US East (N. Virginia). The corresponding
	//    Expression for this example is as follows: { "Dimensions": { "Key": "REGION",
	//    "Values": [ "us-east-1", "us-west-1" ] } } As shown in the previous example,
	//    lists of dimension values are combined with OR when applying the filter.
	//    You can also set different match options to further control how the filter
	//    behaves. Not all APIs support match options. Refer to the documentation
	//    for each specific API to see what is supported. For example, you can filter
	//    for linked account names that start with "a". The corresponding Expression
	//    for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME",
	//    "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } }
	//
	//    * Compound Expression types with logical operations. You can use multiple
	//    Expression types and the logical operators AND/OR/NOT to create a list
	//    of one or more Expression objects. By doing this, you can filter by more
	//    advanced options. For example, you can filter by ((REGION == us-east-1
	//    OR REGION == us-west-1) OR (TAG.Type == Type1)) AND (USAGE_TYPE != DataTransfer).
	//    The corresponding Expression for this example is as follows: { "And":
	//    [ {"Or": [ {"Dimensions": { "Key": "REGION", "Values": [ "us-east-1",
	//    "us-west-1" ] }}, {"Tags": { "Key": "TagName", "Values": ["Value1"] }
	//    } ]}, {"Not": {"Dimensions": { "Key": "USAGE_TYPE", "Values": ["DataTransfer"]
	//    }}} ] } Because each Expression can have only one operator, the service
	//    returns an error if more than one is specified. The following example
	//    shows an Expression object that creates an error: { "And": [ ... ], "Dimensions":
	//    { "Key": "USAGE_TYPE", "Values": [ "DataTransfer" ] } } The following
	//    is an example of the corresponding error message: "Expression has more
	//    than one roots. Only one root operator is allowed for each expression:
	//    And, Or, Not, Dimensions, Tags, CostCategories"
	//
	// For the GetRightsizingRecommendation action, a combination of OR and NOT
	// isn't supported. OR isn't supported between different dimensions, or dimensions
	// and tags. NOT operators aren't supported. Dimensions are also limited to
	// LINKED_ACCOUNT, REGION, or RIGHTSIZING_TYPE.
	//
	// For the GetReservationPurchaseRecommendation action, only NOT is supported.
	// AND and OR aren't supported. Dimensions are limited to LINKED_ACCOUNT.
	Filter *Expression `type:"structure"`

	// This field is only used when SortBy is provided in the request. The maximum
	// number of objects that are returned for this request. If MaxResults isn't
	// specified with SortBy, the request returns 1000 results as the default value
	// for this parameter.
	//
	// For GetTags, MaxResults has an upper quota of 1000.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// The value that you want to search for.
	SearchString *string `type:"string"`

	// The value that you want to sort the data by.
	//
	// The key represents cost and usage metrics. The following values are supported:
	//
	//    * BlendedCost
	//
	//    * UnblendedCost
	//
	//    * AmortizedCost
	//
	//    * NetAmortizedCost
	//
	//    * NetUnblendedCost
	//
	//    * UsageQuantity
	//
	//    * NormalizedUsageAmount
	//
	// The supported values for SortOrder are ASCENDING and DESCENDING.
	//
	// When you use SortBy, NextPageToken and SearchString aren't supported.
	SortBy []*SortDefinition `type:"list"`

	// The key of the tag that you want to return values for.
	TagKey *string `type:"string"`

	// The start and end dates for retrieving the dimension values. The start date
	// is inclusive, but the end date is exclusive. For example, if start is 2017-01-01
	// and end is 2017-05-01, then the cost and usage data is retrieved from 2017-01-01
	// up to and including 2017-04-30 but not including 2017-05-01.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `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 GetTagsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetFilter sets the Filter field's value.
func (s *GetTagsInput) SetFilter(v *Expression) *GetTagsInput {
	s.Filter = v
	return s
}

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

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetTagsInput) SetNextPageToken(v string) *GetTagsInput {
	s.NextPageToken = &v
	return s
}

// SetSearchString sets the SearchString field's value.
func (s *GetTagsInput) SetSearchString(v string) *GetTagsInput {
	s.SearchString = &v
	return s
}

// SetSortBy sets the SortBy field's value.
func (s *GetTagsInput) SetSortBy(v []*SortDefinition) *GetTagsInput {
	s.SortBy = v
	return s
}

// SetTagKey sets the TagKey field's value.
func (s *GetTagsInput) SetTagKey(v string) *GetTagsInput {
	s.TagKey = &v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *GetTagsInput) SetTimePeriod(v *DateInterval) *GetTagsInput {
	s.TimePeriod = v
	return s
}

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

	// The token for the next set of retrievable results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextPageToken *string `type:"string"`

	// The number of query results that Amazon Web Services returns at a time.
	//
	// ReturnSize is a required field
	ReturnSize *int64 `type:"integer" required:"true"`

	// The tags that match your request.
	//
	// Tags is a required field
	Tags []*string `type:"list" required:"true"`

	// The total number of query results.
	//
	// TotalSize is a required field
	TotalSize *int64 `type:"integer" required:"true"`
}

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

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

// SetNextPageToken sets the NextPageToken field's value.
func (s *GetTagsOutput) SetNextPageToken(v string) *GetTagsOutput {
	s.NextPageToken = &v
	return s
}

// SetReturnSize sets the ReturnSize field's value.
func (s *GetTagsOutput) SetReturnSize(v int64) *GetTagsOutput {
	s.ReturnSize = &v
	return s
}

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

// SetTotalSize sets the TotalSize field's value.
func (s *GetTagsOutput) SetTotalSize(v int64) *GetTagsOutput {
	s.TotalSize = &v
	return s
}

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

	// The filters that you want to use to filter your forecast. The GetUsageForecast
	// API supports filtering by the following dimensions:
	//
	//    * AZ
	//
	//    * INSTANCE_TYPE
	//
	//    * LINKED_ACCOUNT
	//
	//    * LINKED_ACCOUNT_NAME
	//
	//    * OPERATION
	//
	//    * PURCHASE_TYPE
	//
	//    * REGION
	//
	//    * SERVICE
	//
	//    * USAGE_TYPE
	//
	//    * USAGE_TYPE_GROUP
	//
	//    * RECORD_TYPE
	//
	//    * OPERATING_SYSTEM
	//
	//    * TENANCY
	//
	//    * SCOPE
	//
	//    * PLATFORM
	//
	//    * SUBSCRIPTION_ID
	//
	//    * LEGAL_ENTITY_NAME
	//
	//    * DEPLOYMENT_OPTION
	//
	//    * DATABASE_ENGINE
	//
	//    * INSTANCE_TYPE_FAMILY
	//
	//    * BILLING_ENTITY
	//
	//    * RESERVATION_ID
	//
	//    * SAVINGS_PLAN_ARN
	Filter *Expression `type:"structure"`

	// How granular you want the forecast to be. You can get 3 months of DAILY forecasts
	// or 12 months of MONTHLY forecasts.
	//
	// The GetUsageForecast operation supports only DAILY and MONTHLY granularities.
	//
	// Granularity is a required field
	Granularity *string `type:"string" required:"true" enum:"Granularity"`

	// Which metric Cost Explorer uses to create your forecast.
	//
	// Valid values for a GetUsageForecast call are the following:
	//
	//    * USAGE_QUANTITY
	//
	//    * NORMALIZED_USAGE_AMOUNT
	//
	// Metric is a required field
	Metric *string `type:"string" required:"true" enum:"Metric"`

	// Amazon Web Services Cost Explorer always returns the mean forecast as a single
	// point. You can request a prediction interval around the mean by specifying
	// a confidence level. The higher the confidence level, the more confident Cost
	// Explorer is about the actual value falling in the prediction interval. Higher
	// confidence levels result in wider prediction intervals.
	PredictionIntervalLevel *int64 `min:"51" type:"integer"`

	// The start and end dates of the period that you want to retrieve usage forecast
	// for. The start date is included in the period, but the end date isn't included
	// in the period. For example, if start is 2017-01-01 and end is 2017-05-01,
	// then the cost and usage data is retrieved from 2017-01-01 up to and including
	// 2017-04-30 but not including 2017-05-01. The start date must be equal to
	// or later than the current date to avoid a validation error.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `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 GetUsageForecastInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetUsageForecastInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetUsageForecastInput"}
	if s.Granularity == nil {
		invalidParams.Add(request.NewErrParamRequired("Granularity"))
	}
	if s.Metric == nil {
		invalidParams.Add(request.NewErrParamRequired("Metric"))
	}
	if s.PredictionIntervalLevel != nil && *s.PredictionIntervalLevel < 51 {
		invalidParams.Add(request.NewErrParamMinValue("PredictionIntervalLevel", 51))
	}
	if s.TimePeriod == nil {
		invalidParams.Add(request.NewErrParamRequired("TimePeriod"))
	}
	if s.Filter != nil {
		if err := s.Filter.Validate(); err != nil {
			invalidParams.AddNested("Filter", err.(request.ErrInvalidParams))
		}
	}
	if s.TimePeriod != nil {
		if err := s.TimePeriod.Validate(); err != nil {
			invalidParams.AddNested("TimePeriod", err.(request.ErrInvalidParams))
		}
	}

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

// SetFilter sets the Filter field's value.
func (s *GetUsageForecastInput) SetFilter(v *Expression) *GetUsageForecastInput {
	s.Filter = v
	return s
}

// SetGranularity sets the Granularity field's value.
func (s *GetUsageForecastInput) SetGranularity(v string) *GetUsageForecastInput {
	s.Granularity = &v
	return s
}

// SetMetric sets the Metric field's value.
func (s *GetUsageForecastInput) SetMetric(v string) *GetUsageForecastInput {
	s.Metric = &v
	return s
}

// SetPredictionIntervalLevel sets the PredictionIntervalLevel field's value.
func (s *GetUsageForecastInput) SetPredictionIntervalLevel(v int64) *GetUsageForecastInput {
	s.PredictionIntervalLevel = &v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *GetUsageForecastInput) SetTimePeriod(v *DateInterval) *GetUsageForecastInput {
	s.TimePeriod = v
	return s
}

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

	// The forecasts for your query, in order. For DAILY forecasts, this is a list
	// of days. For MONTHLY forecasts, this is a list of months.
	ForecastResultsByTime []*ForecastResult `type:"list"`

	// How much you're forecasted to use over the forecast period.
	Total *MetricValue `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 GetUsageForecastOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetForecastResultsByTime sets the ForecastResultsByTime field's value.
func (s *GetUsageForecastOutput) SetForecastResultsByTime(v []*ForecastResult) *GetUsageForecastOutput {
	s.ForecastResultsByTime = v
	return s
}

// SetTotal sets the Total field's value.
func (s *GetUsageForecastOutput) SetTotal(v *MetricValue) *GetUsageForecastOutput {
	s.Total = v
	return s
}

// One level of grouped data in the results.
type Group struct {
	_ struct{} `type:"structure"`

	// The keys that are included in this group.
	Keys []*string `type:"list"`

	// The metrics that are included in this group.
	Metrics map[string]*MetricValue `type:"map"`
}

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

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

// SetKeys sets the Keys field's value.
func (s *Group) SetKeys(v []*string) *Group {
	s.Keys = v
	return s
}

// SetMetrics sets the Metrics field's value.
func (s *Group) SetMetrics(v map[string]*MetricValue) *Group {
	s.Metrics = v
	return s
}

// Represents a group when you specify a group by criteria or in the response
// to a query with a specific grouping.
type GroupDefinition struct {
	_ struct{} `type:"structure"`

	// The string that represents a key for a specified group.
	Key *string `type:"string"`

	// The string that represents the type of group.
	Type *string `type:"string" enum:"GroupDefinitionType"`
}

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

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

// SetKey sets the Key field's value.
func (s *GroupDefinition) SetKey(v string) *GroupDefinition {
	s.Key = &v
	return s
}

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

// The dollar value of the anomaly.
type Impact struct {
	_ struct{} `type:"structure"`

	// The maximum dollar value that's observed for an anomaly.
	//
	// MaxImpact is a required field
	MaxImpact *float64 `type:"double" required:"true"`

	// The cumulative dollar amount that was actually spent during the anomaly.
	TotalActualSpend *float64 `type:"double"`

	// The cumulative dollar amount that was expected to be spent during the anomaly.
	// It is calculated using advanced machine learning models to determine the
	// typical spending pattern based on historical data for a customer.
	TotalExpectedSpend *float64 `type:"double"`

	// The cumulative dollar difference between the total actual spend and total
	// expected spend. It is calculated as TotalActualSpend - TotalExpectedSpend.
	TotalImpact *float64 `type:"double"`

	// The cumulative percentage difference between the total actual spend and total
	// expected spend. It is calculated as (TotalImpact / TotalExpectedSpend) *
	// 100. When TotalExpectedSpend is zero, this field is omitted. Expected spend
	// can be zero in situations such as when you start to use a service for the
	// first time.
	TotalImpactPercentage *float64 `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 Impact) String() string {
	return awsutil.Prettify(s)
}

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

// SetMaxImpact sets the MaxImpact field's value.
func (s *Impact) SetMaxImpact(v float64) *Impact {
	s.MaxImpact = &v
	return s
}

// SetTotalActualSpend sets the TotalActualSpend field's value.
func (s *Impact) SetTotalActualSpend(v float64) *Impact {
	s.TotalActualSpend = &v
	return s
}

// SetTotalExpectedSpend sets the TotalExpectedSpend field's value.
func (s *Impact) SetTotalExpectedSpend(v float64) *Impact {
	s.TotalExpectedSpend = &v
	return s
}

// SetTotalImpact sets the TotalImpact field's value.
func (s *Impact) SetTotalImpact(v float64) *Impact {
	s.TotalImpact = &v
	return s
}

// SetTotalImpactPercentage sets the TotalImpactPercentage field's value.
func (s *Impact) SetTotalImpactPercentage(v float64) *Impact {
	s.TotalImpactPercentage = &v
	return s
}

// Details about the reservations that Amazon Web Services recommends that you
// purchase.
type InstanceDetails struct {
	_ struct{} `type:"structure"`

	// The Amazon EC2 reservations that Amazon Web Services recommends that you
	// purchase.
	EC2InstanceDetails *EC2InstanceDetails `type:"structure"`

	// The Amazon OpenSearch Service reservations that Amazon Web Services recommends
	// that you purchase.
	ESInstanceDetails *ESInstanceDetails `type:"structure"`

	// The ElastiCache reservations that Amazon Web Services recommends that you
	// purchase.
	ElastiCacheInstanceDetails *ElastiCacheInstanceDetails `type:"structure"`

	// The MemoryDB reservations that Amazon Web Services recommends that you purchase.
	MemoryDBInstanceDetails *MemoryDBInstanceDetails `type:"structure"`

	// The Amazon RDS reservations that Amazon Web Services recommends that you
	// purchase.
	RDSInstanceDetails *RDSInstanceDetails `type:"structure"`

	// The Amazon Redshift reservations that Amazon Web Services recommends that
	// you purchase.
	RedshiftInstanceDetails *RedshiftInstanceDetails `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 InstanceDetails) String() string {
	return awsutil.Prettify(s)
}

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

// SetEC2InstanceDetails sets the EC2InstanceDetails field's value.
func (s *InstanceDetails) SetEC2InstanceDetails(v *EC2InstanceDetails) *InstanceDetails {
	s.EC2InstanceDetails = v
	return s
}

// SetESInstanceDetails sets the ESInstanceDetails field's value.
func (s *InstanceDetails) SetESInstanceDetails(v *ESInstanceDetails) *InstanceDetails {
	s.ESInstanceDetails = v
	return s
}

// SetElastiCacheInstanceDetails sets the ElastiCacheInstanceDetails field's value.
func (s *InstanceDetails) SetElastiCacheInstanceDetails(v *ElastiCacheInstanceDetails) *InstanceDetails {
	s.ElastiCacheInstanceDetails = v
	return s
}

// SetMemoryDBInstanceDetails sets the MemoryDBInstanceDetails field's value.
func (s *InstanceDetails) SetMemoryDBInstanceDetails(v *MemoryDBInstanceDetails) *InstanceDetails {
	s.MemoryDBInstanceDetails = v
	return s
}

// SetRDSInstanceDetails sets the RDSInstanceDetails field's value.
func (s *InstanceDetails) SetRDSInstanceDetails(v *RDSInstanceDetails) *InstanceDetails {
	s.RDSInstanceDetails = v
	return s
}

// SetRedshiftInstanceDetails sets the RedshiftInstanceDetails field's value.
func (s *InstanceDetails) SetRedshiftInstanceDetails(v *RedshiftInstanceDetails) *InstanceDetails {
	s.RedshiftInstanceDetails = v
	return s
}

// The pagination token is invalid. Try again without a pagination token.
type InvalidNextTokenException 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 InvalidNextTokenException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorInvalidNextTokenException(v protocol.ResponseMetadata) error {
	return &InvalidNextTokenException{
		RespMetadata: v,
	}
}

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

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

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

func (s *InvalidNextTokenException) 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 *InvalidNextTokenException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// You made too many calls in a short period of time. Try again later.
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
}

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

	// The maximum number of objects that are returned for this request.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextToken *string `type:"string"`
}

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

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

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

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

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

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

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

	// The list of historical cost allocation tag backfill requests.
	BackfillRequests []*CostAllocationTagBackfillRequest `type:"list"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextToken *string `type:"string"`
}

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

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

// SetBackfillRequests sets the BackfillRequests field's value.
func (s *ListCostAllocationTagBackfillHistoryOutput) SetBackfillRequests(v []*CostAllocationTagBackfillRequest) *ListCostAllocationTagBackfillHistoryOutput {
	s.BackfillRequests = v
	return s
}

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

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

	// The maximum number of objects that are returned for this request. By default,
	// the request returns 100 results.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextToken *string `type:"string"`

	// The status of cost allocation tag keys that are returned for this request.
	Status *string `type:"string" enum:"CostAllocationTagStatus"`

	// The list of cost allocation tag keys that are returned for this request.
	TagKeys []*string `min:"1" type:"list"`

	// The type of CostAllocationTag object that are returned for this request.
	// The AWSGenerated type tags are tags that Amazon Web Services defines and
	// applies to support Amazon Web Services resources for cost allocation purposes.
	// The UserDefined type tags are tags that you define, create, and apply to
	// resources.
	Type *string `type:"string" enum:"CostAllocationTagType"`
}

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

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

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

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

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

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

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

// SetTagKeys sets the TagKeys field's value.
func (s *ListCostAllocationTagsInput) SetTagKeys(v []*string) *ListCostAllocationTagsInput {
	s.TagKeys = v
	return s
}

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

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

	// A list of cost allocation tags that includes the detailed metadata for each
	// one.
	CostAllocationTags []*CostAllocationTag `type:"list"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextToken *string `type:"string"`
}

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

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

// SetCostAllocationTags sets the CostAllocationTags field's value.
func (s *ListCostAllocationTagsOutput) SetCostAllocationTags(v []*CostAllocationTag) *ListCostAllocationTagsOutput {
	s.CostAllocationTags = v
	return s
}

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

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

	// The date when the Cost Category was effective.
	EffectiveOn *string `min:"20" type:"string"`

	// The number of entries a paginated response contains.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextToken *string `type:"string"`
}

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

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

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

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

// SetEffectiveOn sets the EffectiveOn field's value.
func (s *ListCostCategoryDefinitionsInput) SetEffectiveOn(v string) *ListCostCategoryDefinitionsInput {
	s.EffectiveOn = &v
	return s
}

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

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

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

	// A reference to a Cost Category that contains enough information to identify
	// the Cost Category.
	CostCategoryReferences []*CostCategoryReference `type:"list"`

	// The token to retrieve the next set of results. Amazon Web Services provides
	// the token when the response from a previous call has more results than the
	// maximum page size.
	NextToken *string `type:"string"`
}

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

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

// SetCostCategoryReferences sets the CostCategoryReferences field's value.
func (s *ListCostCategoryDefinitionsOutput) SetCostCategoryReferences(v []*CostCategoryReference) *ListCostCategoryDefinitionsOutput {
	s.CostCategoryReferences = v
	return s
}

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

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

	// The status of the recommendation generation.
	GenerationStatus *string `type:"string" enum:"GenerationStatus"`

	// The token to retrieve the next set of results.
	NextPageToken *string `type:"string"`

	// The number of recommendations that you want returned in a single response
	// object.
	PageSize *int64 `type:"integer"`

	// The IDs for each specific recommendation.
	RecommendationIds []*string `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 ListSavingsPlansPurchaseRecommendationGenerationInput) String() string {
	return awsutil.Prettify(s)
}

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

// SetGenerationStatus sets the GenerationStatus field's value.
func (s *ListSavingsPlansPurchaseRecommendationGenerationInput) SetGenerationStatus(v string) *ListSavingsPlansPurchaseRecommendationGenerationInput {
	s.GenerationStatus = &v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *ListSavingsPlansPurchaseRecommendationGenerationInput) SetNextPageToken(v string) *ListSavingsPlansPurchaseRecommendationGenerationInput {
	s.NextPageToken = &v
	return s
}

// SetPageSize sets the PageSize field's value.
func (s *ListSavingsPlansPurchaseRecommendationGenerationInput) SetPageSize(v int64) *ListSavingsPlansPurchaseRecommendationGenerationInput {
	s.PageSize = &v
	return s
}

// SetRecommendationIds sets the RecommendationIds field's value.
func (s *ListSavingsPlansPurchaseRecommendationGenerationInput) SetRecommendationIds(v []*string) *ListSavingsPlansPurchaseRecommendationGenerationInput {
	s.RecommendationIds = v
	return s
}

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

	// The list of historical recommendation generations.
	GenerationSummaryList []*GenerationSummary `type:"list"`

	// The token to retrieve the next set of results.
	NextPageToken *string `type:"string"`
}

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

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

// SetGenerationSummaryList sets the GenerationSummaryList field's value.
func (s *ListSavingsPlansPurchaseRecommendationGenerationOutput) SetGenerationSummaryList(v []*GenerationSummary) *ListSavingsPlansPurchaseRecommendationGenerationOutput {
	s.GenerationSummaryList = v
	return s
}

// SetNextPageToken sets the NextPageToken field's value.
func (s *ListSavingsPlansPurchaseRecommendationGenerationOutput) SetNextPageToken(v string) *ListSavingsPlansPurchaseRecommendationGenerationOutput {
	s.NextPageToken = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the resource. For a list of supported resources,
	// see ResourceTag (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_ResourceTag.html).
	//
	// ResourceArn is a required field
	ResourceArn *string `min:"20" type:"string" required:"true"`
}

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

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

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

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

// SetResourceArn sets the ResourceArn field's value.
func (s *ListTagsForResourceInput) SetResourceArn(v string) *ListTagsForResourceInput {
	s.ResourceArn = &v
	return s
}

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

	// A list of tag key value pairs that are associated with the resource.
	ResourceTags []*ResourceTag `type:"list"`
}

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

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

// SetResourceTags sets the ResourceTags field's value.
func (s *ListTagsForResourceOutput) SetResourceTags(v []*ResourceTag) *ListTagsForResourceOutput {
	s.ResourceTags = v
	return s
}

// Details about the MemoryDB reservations that Amazon Web Services recommends
// that you purchase.
type MemoryDBInstanceDetails struct {
	_ struct{} `type:"structure"`

	// Determines whether the recommendation is for a current generation instance.
	CurrentGeneration *bool `type:"boolean"`

	// The instance family of the recommended reservation.
	Family *string `type:"string"`

	// The node type of the recommended reservation.
	NodeType *string `type:"string"`

	// The Amazon Web Services Region of the recommended reservation.
	Region *string `type:"string"`

	// Determines whether the recommended reservation is size flexible.
	SizeFlexEligible *bool `type:"boolean"`
}

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

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

// SetCurrentGeneration sets the CurrentGeneration field's value.
func (s *MemoryDBInstanceDetails) SetCurrentGeneration(v bool) *MemoryDBInstanceDetails {
	s.CurrentGeneration = &v
	return s
}

// SetFamily sets the Family field's value.
func (s *MemoryDBInstanceDetails) SetFamily(v string) *MemoryDBInstanceDetails {
	s.Family = &v
	return s
}

// SetNodeType sets the NodeType field's value.
func (s *MemoryDBInstanceDetails) SetNodeType(v string) *MemoryDBInstanceDetails {
	s.NodeType = &v
	return s
}

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

// SetSizeFlexEligible sets the SizeFlexEligible field's value.
func (s *MemoryDBInstanceDetails) SetSizeFlexEligible(v bool) *MemoryDBInstanceDetails {
	s.SizeFlexEligible = &v
	return s
}

// The aggregated value for a metric.
type MetricValue struct {
	_ struct{} `type:"structure"`

	// The actual number that represents the metric.
	Amount *string `type:"string"`

	// The unit that the metric is given in.
	Unit *string `type:"string"`
}

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

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

// SetAmount sets the Amount field's value.
func (s *MetricValue) SetAmount(v string) *MetricValue {
	s.Amount = &v
	return s
}

// SetUnit sets the Unit field's value.
func (s *MetricValue) SetUnit(v string) *MetricValue {
	s.Unit = &v
	return s
}

// Details for the modification recommendation.
type ModifyRecommendationDetail struct {
	_ struct{} `type:"structure"`

	// Determines whether this instance type is the Amazon Web Services default
	// recommendation.
	TargetInstances []*TargetInstance `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 ModifyRecommendationDetail) String() string {
	return awsutil.Prettify(s)
}

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

// SetTargetInstances sets the TargetInstances field's value.
func (s *ModifyRecommendationDetail) SetTargetInstances(v []*TargetInstance) *ModifyRecommendationDetail {
	s.TargetInstances = v
	return s
}

// The network field that contains a list of network metrics that are associated
// with the current instance.
type NetworkResourceUtilization struct {
	_ struct{} `type:"structure"`

	// The network inbound throughput utilization measured in Bytes per second (Bps).
	NetworkInBytesPerSecond *string `type:"string"`

	// The network outbound throughput utilization measured in Bytes per second
	// (Bps).
	NetworkOutBytesPerSecond *string `type:"string"`

	// The network inbound packets that are measured in packets per second.
	NetworkPacketsInPerSecond *string `type:"string"`

	// The network outbound packets that are measured in packets per second.
	NetworkPacketsOutPerSecond *string `type:"string"`
}

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

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

// SetNetworkInBytesPerSecond sets the NetworkInBytesPerSecond field's value.
func (s *NetworkResourceUtilization) SetNetworkInBytesPerSecond(v string) *NetworkResourceUtilization {
	s.NetworkInBytesPerSecond = &v
	return s
}

// SetNetworkOutBytesPerSecond sets the NetworkOutBytesPerSecond field's value.
func (s *NetworkResourceUtilization) SetNetworkOutBytesPerSecond(v string) *NetworkResourceUtilization {
	s.NetworkOutBytesPerSecond = &v
	return s
}

// SetNetworkPacketsInPerSecond sets the NetworkPacketsInPerSecond field's value.
func (s *NetworkResourceUtilization) SetNetworkPacketsInPerSecond(v string) *NetworkResourceUtilization {
	s.NetworkPacketsInPerSecond = &v
	return s
}

// SetNetworkPacketsOutPerSecond sets the NetworkPacketsOutPerSecond field's value.
func (s *NetworkResourceUtilization) SetNetworkPacketsOutPerSecond(v string) *NetworkResourceUtilization {
	s.NetworkPacketsOutPerSecond = &v
	return s
}

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

	// A cost anomaly ID.
	//
	// AnomalyId is a required field
	AnomalyId *string `type:"string" required:"true"`

	// Describes whether the cost anomaly was a planned activity or you considered
	// it an anomaly.
	//
	// Feedback is a required field
	Feedback *string `type:"string" required:"true" enum:"AnomalyFeedbackType"`
}

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

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

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

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

// SetAnomalyId sets the AnomalyId field's value.
func (s *ProvideAnomalyFeedbackInput) SetAnomalyId(v string) *ProvideAnomalyFeedbackInput {
	s.AnomalyId = &v
	return s
}

// SetFeedback sets the Feedback field's value.
func (s *ProvideAnomalyFeedbackInput) SetFeedback(v string) *ProvideAnomalyFeedbackInput {
	s.Feedback = &v
	return s
}

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

	// The ID of the modified cost anomaly.
	//
	// AnomalyId is a required field
	AnomalyId *string `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 ProvideAnomalyFeedbackOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetAnomalyId sets the AnomalyId field's value.
func (s *ProvideAnomalyFeedbackOutput) SetAnomalyId(v string) *ProvideAnomalyFeedbackOutput {
	s.AnomalyId = &v
	return s
}

// Details about the Amazon RDS reservations that Amazon Web Services recommends
// that you purchase.
type RDSInstanceDetails struct {
	_ struct{} `type:"structure"`

	// Determines whether the recommendation is for a current-generation instance.
	CurrentGeneration *bool `type:"boolean"`

	// The database edition that the recommended reservation supports.
	DatabaseEdition *string `type:"string"`

	// The database engine that the recommended reservation supports.
	DatabaseEngine *string `type:"string"`

	// Determines whether the recommendation is for a reservation in a single Availability
	// Zone or a reservation with a backup in a second Availability Zone.
	DeploymentOption *string `type:"string"`

	// The instance family of the recommended reservation.
	Family *string `type:"string"`

	// The type of instance that Amazon Web Services recommends.
	InstanceType *string `type:"string"`

	// The license model that the recommended reservation supports.
	LicenseModel *string `type:"string"`

	// The Amazon Web Services Region of the recommended reservation.
	Region *string `type:"string"`

	// Determines whether the recommended reservation is size flexible.
	SizeFlexEligible *bool `type:"boolean"`
}

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

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

// SetCurrentGeneration sets the CurrentGeneration field's value.
func (s *RDSInstanceDetails) SetCurrentGeneration(v bool) *RDSInstanceDetails {
	s.CurrentGeneration = &v
	return s
}

// SetDatabaseEdition sets the DatabaseEdition field's value.
func (s *RDSInstanceDetails) SetDatabaseEdition(v string) *RDSInstanceDetails {
	s.DatabaseEdition = &v
	return s
}

// SetDatabaseEngine sets the DatabaseEngine field's value.
func (s *RDSInstanceDetails) SetDatabaseEngine(v string) *RDSInstanceDetails {
	s.DatabaseEngine = &v
	return s
}

// SetDeploymentOption sets the DeploymentOption field's value.
func (s *RDSInstanceDetails) SetDeploymentOption(v string) *RDSInstanceDetails {
	s.DeploymentOption = &v
	return s
}

// SetFamily sets the Family field's value.
func (s *RDSInstanceDetails) SetFamily(v string) *RDSInstanceDetails {
	s.Family = &v
	return s
}

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

// SetLicenseModel sets the LicenseModel field's value.
func (s *RDSInstanceDetails) SetLicenseModel(v string) *RDSInstanceDetails {
	s.LicenseModel = &v
	return s
}

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

// SetSizeFlexEligible sets the SizeFlexEligible field's value.
func (s *RDSInstanceDetails) SetSizeFlexEligible(v bool) *RDSInstanceDetails {
	s.SizeFlexEligible = &v
	return s
}

// The details and metrics for the given recommendation.
type RecommendationDetailData struct {
	_ struct{} `type:"structure"`

	// The AccountID that the recommendation is generated for.
	AccountId *string `type:"string"`

	// The account scope that you want your recommendations for. Amazon Web Services
	// calculates recommendations including the management account and member accounts
	// if the value is set to PAYER. If the value is LINKED, recommendations are
	// calculated for individual member accounts only.
	AccountScope *string `type:"string" enum:"AccountScope"`

	// The currency code that Amazon Web Services used to generate the recommendation
	// and present potential savings.
	CurrencyCode *string `type:"string"`

	// The average value of hourly coverage over the lookback period.
	CurrentAverageCoverage *string `type:"string"`

	// The average value of hourly On-Demand spend over the lookback period of the
	// applicable usage type.
	CurrentAverageHourlyOnDemandSpend *string `type:"string"`

	// The highest value of hourly On-Demand spend over the lookback period of the
	// applicable usage type.
	CurrentMaximumHourlyOnDemandSpend *string `type:"string"`

	// The lowest value of hourly On-Demand spend over the lookback period of the
	// applicable usage type.
	CurrentMinimumHourlyOnDemandSpend *string `type:"string"`

	// The estimated coverage of the recommended Savings Plan.
	EstimatedAverageCoverage *string `type:"string"`

	// The estimated utilization of the recommended Savings Plan.
	EstimatedAverageUtilization *string `type:"string"`

	// The estimated monthly savings amount based on the recommended Savings Plan.
	EstimatedMonthlySavingsAmount *string `type:"string"`

	// The remaining On-Demand cost estimated to not be covered by the recommended
	// Savings Plan, over the length of the lookback period.
	EstimatedOnDemandCost *string `type:"string"`

	// The estimated On-Demand costs you expect with no additional commitment, based
	// on your usage of the selected time period and the Savings Plan you own.
	EstimatedOnDemandCostWithCurrentCommitment *string `type:"string"`

	// The estimated return on investment that's based on the recommended Savings
	// Plan that you purchased. This is calculated as estimatedSavingsAmount/estimatedSPCost*100.
	EstimatedROI *string `type:"string"`

	// The cost of the recommended Savings Plan over the length of the lookback
	// period.
	EstimatedSPCost *string `type:"string"`

	// The estimated savings amount that's based on the recommended Savings Plan
	// over the length of the lookback period.
	EstimatedSavingsAmount *string `type:"string"`

	// The estimated savings percentage relative to the total cost of applicable
	// On-Demand usage over the lookback period.
	EstimatedSavingsPercentage *string `type:"string"`

	// The existing hourly commitment for the Savings Plan type.
	ExistingHourlyCommitment *string `type:"string"`

	// The period of time that you want the usage and costs for.
	GenerationTimestamp *string `min:"20" type:"string"`

	// The recommended hourly commitment level for the Savings Plan type and the
	// configuration that's based on the usage during the lookback period.
	HourlyCommitmentToPurchase *string `type:"string"`

	// The instance family of the recommended Savings Plan.
	InstanceFamily *string `type:"string"`

	// The period of time that you want the usage and costs for.
	LatestUsageTimestamp *string `min:"20" type:"string"`

	// How many days of previous usage that Amazon Web Services considers when making
	// this recommendation.
	LookbackPeriodInDays *string `type:"string" enum:"LookbackPeriodInDays"`

	// The related hourly cost, coverage, and utilization metrics over the lookback
	// period.
	MetricsOverLookbackPeriod []*RecommendationDetailHourlyMetrics `type:"list"`

	// The unique ID that's used to distinguish Savings Plans from one another.
	OfferingId *string `type:"string"`

	// The payment option for the commitment (for example, All Upfront or No Upfront).
	PaymentOption *string `type:"string" enum:"PaymentOption"`

	// The region the recommendation is generated for.
	Region *string `type:"string"`

	// The requested Savings Plan recommendation type.
	SavingsPlansType *string `type:"string" enum:"SupportedSavingsPlansType"`

	// The term of the commitment in years.
	TermInYears *string `type:"string" enum:"TermInYears"`

	// The upfront cost of the recommended Savings Plan, based on the selected payment
	// option.
	UpfrontCost *string `type:"string"`
}

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

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

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

// SetAccountScope sets the AccountScope field's value.
func (s *RecommendationDetailData) SetAccountScope(v string) *RecommendationDetailData {
	s.AccountScope = &v
	return s
}

// SetCurrencyCode sets the CurrencyCode field's value.
func (s *RecommendationDetailData) SetCurrencyCode(v string) *RecommendationDetailData {
	s.CurrencyCode = &v
	return s
}

// SetCurrentAverageCoverage sets the CurrentAverageCoverage field's value.
func (s *RecommendationDetailData) SetCurrentAverageCoverage(v string) *RecommendationDetailData {
	s.CurrentAverageCoverage = &v
	return s
}

// SetCurrentAverageHourlyOnDemandSpend sets the CurrentAverageHourlyOnDemandSpend field's value.
func (s *RecommendationDetailData) SetCurrentAverageHourlyOnDemandSpend(v string) *RecommendationDetailData {
	s.CurrentAverageHourlyOnDemandSpend = &v
	return s
}

// SetCurrentMaximumHourlyOnDemandSpend sets the CurrentMaximumHourlyOnDemandSpend field's value.
func (s *RecommendationDetailData) SetCurrentMaximumHourlyOnDemandSpend(v string) *RecommendationDetailData {
	s.CurrentMaximumHourlyOnDemandSpend = &v
	return s
}

// SetCurrentMinimumHourlyOnDemandSpend sets the CurrentMinimumHourlyOnDemandSpend field's value.
func (s *RecommendationDetailData) SetCurrentMinimumHourlyOnDemandSpend(v string) *RecommendationDetailData {
	s.CurrentMinimumHourlyOnDemandSpend = &v
	return s
}

// SetEstimatedAverageCoverage sets the EstimatedAverageCoverage field's value.
func (s *RecommendationDetailData) SetEstimatedAverageCoverage(v string) *RecommendationDetailData {
	s.EstimatedAverageCoverage = &v
	return s
}

// SetEstimatedAverageUtilization sets the EstimatedAverageUtilization field's value.
func (s *RecommendationDetailData) SetEstimatedAverageUtilization(v string) *RecommendationDetailData {
	s.EstimatedAverageUtilization = &v
	return s
}

// SetEstimatedMonthlySavingsAmount sets the EstimatedMonthlySavingsAmount field's value.
func (s *RecommendationDetailData) SetEstimatedMonthlySavingsAmount(v string) *RecommendationDetailData {
	s.EstimatedMonthlySavingsAmount = &v
	return s
}

// SetEstimatedOnDemandCost sets the EstimatedOnDemandCost field's value.
func (s *RecommendationDetailData) SetEstimatedOnDemandCost(v string) *RecommendationDetailData {
	s.EstimatedOnDemandCost = &v
	return s
}

// SetEstimatedOnDemandCostWithCurrentCommitment sets the EstimatedOnDemandCostWithCurrentCommitment field's value.
func (s *RecommendationDetailData) SetEstimatedOnDemandCostWithCurrentCommitment(v string) *RecommendationDetailData {
	s.EstimatedOnDemandCostWithCurrentCommitment = &v
	return s
}

// SetEstimatedROI sets the EstimatedROI field's value.
func (s *RecommendationDetailData) SetEstimatedROI(v string) *RecommendationDetailData {
	s.EstimatedROI = &v
	return s
}

// SetEstimatedSPCost sets the EstimatedSPCost field's value.
func (s *RecommendationDetailData) SetEstimatedSPCost(v string) *RecommendationDetailData {
	s.EstimatedSPCost = &v
	return s
}

// SetEstimatedSavingsAmount sets the EstimatedSavingsAmount field's value.
func (s *RecommendationDetailData) SetEstimatedSavingsAmount(v string) *RecommendationDetailData {
	s.EstimatedSavingsAmount = &v
	return s
}

// SetEstimatedSavingsPercentage sets the EstimatedSavingsPercentage field's value.
func (s *RecommendationDetailData) SetEstimatedSavingsPercentage(v string) *RecommendationDetailData {
	s.EstimatedSavingsPercentage = &v
	return s
}

// SetExistingHourlyCommitment sets the ExistingHourlyCommitment field's value.
func (s *RecommendationDetailData) SetExistingHourlyCommitment(v string) *RecommendationDetailData {
	s.ExistingHourlyCommitment = &v
	return s
}

// SetGenerationTimestamp sets the GenerationTimestamp field's value.
func (s *RecommendationDetailData) SetGenerationTimestamp(v string) *RecommendationDetailData {
	s.GenerationTimestamp = &v
	return s
}

// SetHourlyCommitmentToPurchase sets the HourlyCommitmentToPurchase field's value.
func (s *RecommendationDetailData) SetHourlyCommitmentToPurchase(v string) *RecommendationDetailData {
	s.HourlyCommitmentToPurchase = &v
	return s
}

// SetInstanceFamily sets the InstanceFamily field's value.
func (s *RecommendationDetailData) SetInstanceFamily(v string) *RecommendationDetailData {
	s.InstanceFamily = &v
	return s
}

// SetLatestUsageTimestamp sets the LatestUsageTimestamp field's value.
func (s *RecommendationDetailData) SetLatestUsageTimestamp(v string) *RecommendationDetailData {
	s.LatestUsageTimestamp = &v
	return s
}

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

// SetMetricsOverLookbackPeriod sets the MetricsOverLookbackPeriod field's value.
func (s *RecommendationDetailData) SetMetricsOverLookbackPeriod(v []*RecommendationDetailHourlyMetrics) *RecommendationDetailData {
	s.MetricsOverLookbackPeriod = v
	return s
}

// SetOfferingId sets the OfferingId field's value.
func (s *RecommendationDetailData) SetOfferingId(v string) *RecommendationDetailData {
	s.OfferingId = &v
	return s
}

// SetPaymentOption sets the PaymentOption field's value.
func (s *RecommendationDetailData) SetPaymentOption(v string) *RecommendationDetailData {
	s.PaymentOption = &v
	return s
}

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

// SetSavingsPlansType sets the SavingsPlansType field's value.
func (s *RecommendationDetailData) SetSavingsPlansType(v string) *RecommendationDetailData {
	s.SavingsPlansType = &v
	return s
}

// SetTermInYears sets the TermInYears field's value.
func (s *RecommendationDetailData) SetTermInYears(v string) *RecommendationDetailData {
	s.TermInYears = &v
	return s
}

// SetUpfrontCost sets the UpfrontCost field's value.
func (s *RecommendationDetailData) SetUpfrontCost(v string) *RecommendationDetailData {
	s.UpfrontCost = &v
	return s
}

// Contains the hourly metrics for the given recommendation over the lookback
// period.
type RecommendationDetailHourlyMetrics struct {
	_ struct{} `type:"structure"`

	// The current amount of Savings Plans eligible usage that the Savings Plan
	// covered.
	CurrentCoverage *string `type:"string"`

	// The estimated coverage amount based on the recommended Savings Plan.
	EstimatedCoverage *string `type:"string"`

	// The estimated utilization for the recommended Savings Plan.
	EstimatedNewCommitmentUtilization *string `type:"string"`

	// The remaining On-Demand cost estimated to not be covered by the recommended
	// Savings Plan, over the length of the lookback period.
	EstimatedOnDemandCost *string `type:"string"`

	// The period of time that you want the usage and costs for.
	StartTime *string `min:"20" type:"string"`
}

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

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

// SetCurrentCoverage sets the CurrentCoverage field's value.
func (s *RecommendationDetailHourlyMetrics) SetCurrentCoverage(v string) *RecommendationDetailHourlyMetrics {
	s.CurrentCoverage = &v
	return s
}

// SetEstimatedCoverage sets the EstimatedCoverage field's value.
func (s *RecommendationDetailHourlyMetrics) SetEstimatedCoverage(v string) *RecommendationDetailHourlyMetrics {
	s.EstimatedCoverage = &v
	return s
}

// SetEstimatedNewCommitmentUtilization sets the EstimatedNewCommitmentUtilization field's value.
func (s *RecommendationDetailHourlyMetrics) SetEstimatedNewCommitmentUtilization(v string) *RecommendationDetailHourlyMetrics {
	s.EstimatedNewCommitmentUtilization = &v
	return s
}

// SetEstimatedOnDemandCost sets the EstimatedOnDemandCost field's value.
func (s *RecommendationDetailHourlyMetrics) SetEstimatedOnDemandCost(v string) *RecommendationDetailHourlyMetrics {
	s.EstimatedOnDemandCost = &v
	return s
}

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

// Details about the Amazon Redshift reservations that Amazon Web Services recommends
// that you purchase.
type RedshiftInstanceDetails struct {
	_ struct{} `type:"structure"`

	// Determines whether the recommendation is for a current-generation instance.
	CurrentGeneration *bool `type:"boolean"`

	// The instance family of the recommended reservation.
	Family *string `type:"string"`

	// The type of node that Amazon Web Services recommends.
	NodeType *string `type:"string"`

	// The Amazon Web Services Region of the recommended reservation.
	Region *string `type:"string"`

	// Determines whether the recommended reservation is size flexible.
	SizeFlexEligible *bool `type:"boolean"`
}

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

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

// SetCurrentGeneration sets the CurrentGeneration field's value.
func (s *RedshiftInstanceDetails) SetCurrentGeneration(v bool) *RedshiftInstanceDetails {
	s.CurrentGeneration = &v
	return s
}

// SetFamily sets the Family field's value.
func (s *RedshiftInstanceDetails) SetFamily(v string) *RedshiftInstanceDetails {
	s.Family = &v
	return s
}

// SetNodeType sets the NodeType field's value.
func (s *RedshiftInstanceDetails) SetNodeType(v string) *RedshiftInstanceDetails {
	s.NodeType = &v
	return s
}

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

// SetSizeFlexEligible sets the SizeFlexEligible field's value.
func (s *RedshiftInstanceDetails) SetSizeFlexEligible(v bool) *RedshiftInstanceDetails {
	s.SizeFlexEligible = &v
	return s
}

// Your request parameters changed between pages. Try again with the old parameters
// or without a pagination token.
type RequestChangedException 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 RequestChangedException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorRequestChangedException(v protocol.ResponseMetadata) error {
	return &RequestChangedException{
		RespMetadata: v,
	}
}

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

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

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

func (s *RequestChangedException) 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 *RequestChangedException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The aggregated numbers for your reservation usage.
type ReservationAggregates struct {
	_ struct{} `type:"structure"`

	// The monthly cost of your reservation. It's amortized over the reservation
	// period.
	AmortizedRecurringFee *string `type:"string"`

	// The upfront cost of your reservation. It's amortized over the reservation
	// period.
	AmortizedUpfrontFee *string `type:"string"`

	// How much you saved due to purchasing and utilizing reservation. Amazon Web
	// Services calculates this by subtracting TotalAmortizedFee from OnDemandCostOfRIHoursUsed.
	NetRISavings *string `type:"string"`

	// How much your reservation costs if charged On-Demand rates.
	OnDemandCostOfRIHoursUsed *string `type:"string"`

	// How many reservation hours that you purchased.
	PurchasedHours *string `type:"string"`

	// The number of Amazon EC2 reservation hours that you purchased. It's converted
	// to normalized units. Normalized units are available only for Amazon EC2 usage
	// after November 11, 2017.
	PurchasedUnits *string `type:"string"`

	// The cost of unused hours for your reservation.
	RICostForUnusedHours *string `type:"string"`

	// The realized savings because of purchasing and using a reservation.
	RealizedSavings *string `type:"string"`

	// The total number of reservation hours that you used.
	TotalActualHours *string `type:"string"`

	// The total number of Amazon EC2 reservation hours that you used. It's converted
	// to normalized units. Normalized units are available only for Amazon EC2 usage
	// after November 11, 2017.
	TotalActualUnits *string `type:"string"`

	// The total cost of your reservation. It's amortized over the reservation period.
	TotalAmortizedFee *string `type:"string"`

	// How much you might save if you use your entire reservation.
	TotalPotentialRISavings *string `type:"string"`

	// The unrealized savings because of purchasing and using a reservation.
	UnrealizedSavings *string `type:"string"`

	// The number of reservation hours that you didn't use.
	UnusedHours *string `type:"string"`

	// The number of Amazon EC2 reservation hours that you didn't use. It's converted
	// to normalized units. Normalized units are available only for Amazon EC2 usage
	// after November 11, 2017.
	UnusedUnits *string `type:"string"`

	// The percentage of reservation time that you used.
	UtilizationPercentage *string `type:"string"`

	// The percentage of Amazon EC2 reservation time that you used. It's converted
	// to normalized units. Normalized units are available only for Amazon EC2 usage
	// after November 11, 2017.
	UtilizationPercentageInUnits *string `type:"string"`
}

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

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

// SetAmortizedRecurringFee sets the AmortizedRecurringFee field's value.
func (s *ReservationAggregates) SetAmortizedRecurringFee(v string) *ReservationAggregates {
	s.AmortizedRecurringFee = &v
	return s
}

// SetAmortizedUpfrontFee sets the AmortizedUpfrontFee field's value.
func (s *ReservationAggregates) SetAmortizedUpfrontFee(v string) *ReservationAggregates {
	s.AmortizedUpfrontFee = &v
	return s
}

// SetNetRISavings sets the NetRISavings field's value.
func (s *ReservationAggregates) SetNetRISavings(v string) *ReservationAggregates {
	s.NetRISavings = &v
	return s
}

// SetOnDemandCostOfRIHoursUsed sets the OnDemandCostOfRIHoursUsed field's value.
func (s *ReservationAggregates) SetOnDemandCostOfRIHoursUsed(v string) *ReservationAggregates {
	s.OnDemandCostOfRIHoursUsed = &v
	return s
}

// SetPurchasedHours sets the PurchasedHours field's value.
func (s *ReservationAggregates) SetPurchasedHours(v string) *ReservationAggregates {
	s.PurchasedHours = &v
	return s
}

// SetPurchasedUnits sets the PurchasedUnits field's value.
func (s *ReservationAggregates) SetPurchasedUnits(v string) *ReservationAggregates {
	s.PurchasedUnits = &v
	return s
}

// SetRICostForUnusedHours sets the RICostForUnusedHours field's value.
func (s *ReservationAggregates) SetRICostForUnusedHours(v string) *ReservationAggregates {
	s.RICostForUnusedHours = &v
	return s
}

// SetRealizedSavings sets the RealizedSavings field's value.
func (s *ReservationAggregates) SetRealizedSavings(v string) *ReservationAggregates {
	s.RealizedSavings = &v
	return s
}

// SetTotalActualHours sets the TotalActualHours field's value.
func (s *ReservationAggregates) SetTotalActualHours(v string) *ReservationAggregates {
	s.TotalActualHours = &v
	return s
}

// SetTotalActualUnits sets the TotalActualUnits field's value.
func (s *ReservationAggregates) SetTotalActualUnits(v string) *ReservationAggregates {
	s.TotalActualUnits = &v
	return s
}

// SetTotalAmortizedFee sets the TotalAmortizedFee field's value.
func (s *ReservationAggregates) SetTotalAmortizedFee(v string) *ReservationAggregates {
	s.TotalAmortizedFee = &v
	return s
}

// SetTotalPotentialRISavings sets the TotalPotentialRISavings field's value.
func (s *ReservationAggregates) SetTotalPotentialRISavings(v string) *ReservationAggregates {
	s.TotalPotentialRISavings = &v
	return s
}

// SetUnrealizedSavings sets the UnrealizedSavings field's value.
func (s *ReservationAggregates) SetUnrealizedSavings(v string) *ReservationAggregates {
	s.UnrealizedSavings = &v
	return s
}

// SetUnusedHours sets the UnusedHours field's value.
func (s *ReservationAggregates) SetUnusedHours(v string) *ReservationAggregates {
	s.UnusedHours = &v
	return s
}

// SetUnusedUnits sets the UnusedUnits field's value.
func (s *ReservationAggregates) SetUnusedUnits(v string) *ReservationAggregates {
	s.UnusedUnits = &v
	return s
}

// SetUtilizationPercentage sets the UtilizationPercentage field's value.
func (s *ReservationAggregates) SetUtilizationPercentage(v string) *ReservationAggregates {
	s.UtilizationPercentage = &v
	return s
}

// SetUtilizationPercentageInUnits sets the UtilizationPercentageInUnits field's value.
func (s *ReservationAggregates) SetUtilizationPercentageInUnits(v string) *ReservationAggregates {
	s.UtilizationPercentageInUnits = &v
	return s
}

// A group of reservations that share a set of attributes.
type ReservationCoverageGroup struct {
	_ struct{} `type:"structure"`

	// The attributes for this group of reservations.
	Attributes map[string]*string `type:"map"`

	// How much instance usage this group of reservations covered.
	Coverage *Coverage `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 ReservationCoverageGroup) String() string {
	return awsutil.Prettify(s)
}

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

// SetAttributes sets the Attributes field's value.
func (s *ReservationCoverageGroup) SetAttributes(v map[string]*string) *ReservationCoverageGroup {
	s.Attributes = v
	return s
}

// SetCoverage sets the Coverage field's value.
func (s *ReservationCoverageGroup) SetCoverage(v *Coverage) *ReservationCoverageGroup {
	s.Coverage = v
	return s
}

// A specific reservation that Amazon Web Services recommends for purchase.
type ReservationPurchaseRecommendation struct {
	_ struct{} `type:"structure"`

	// The account scope that Amazon Web Services recommends that you purchase this
	// instance for. For example, you can purchase this reservation for an entire
	// organization in Amazon Web Services Organizations.
	AccountScope *string `type:"string" enum:"AccountScope"`

	// How many days of previous usage that Amazon Web Services considers when making
	// this recommendation.
	LookbackPeriodInDays *string `type:"string" enum:"LookbackPeriodInDays"`

	// The payment option for the reservation (for example, AllUpfront or NoUpfront).
	PaymentOption *string `type:"string" enum:"PaymentOption"`

	// Details about the recommended purchases.
	RecommendationDetails []*ReservationPurchaseRecommendationDetail `type:"list"`

	// A summary about the recommended purchase.
	RecommendationSummary *ReservationPurchaseRecommendationSummary `type:"structure"`

	// Hardware specifications for the service that you want recommendations for.
	ServiceSpecification *ServiceSpecification `type:"structure"`

	// The term of the reservation that you want recommendations for, in years.
	TermInYears *string `type:"string" enum:"TermInYears"`
}

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

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

// SetAccountScope sets the AccountScope field's value.
func (s *ReservationPurchaseRecommendation) SetAccountScope(v string) *ReservationPurchaseRecommendation {
	s.AccountScope = &v
	return s
}

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

// SetPaymentOption sets the PaymentOption field's value.
func (s *ReservationPurchaseRecommendation) SetPaymentOption(v string) *ReservationPurchaseRecommendation {
	s.PaymentOption = &v
	return s
}

// SetRecommendationDetails sets the RecommendationDetails field's value.
func (s *ReservationPurchaseRecommendation) SetRecommendationDetails(v []*ReservationPurchaseRecommendationDetail) *ReservationPurchaseRecommendation {
	s.RecommendationDetails = v
	return s
}

// SetRecommendationSummary sets the RecommendationSummary field's value.
func (s *ReservationPurchaseRecommendation) SetRecommendationSummary(v *ReservationPurchaseRecommendationSummary) *ReservationPurchaseRecommendation {
	s.RecommendationSummary = v
	return s
}

// SetServiceSpecification sets the ServiceSpecification field's value.
func (s *ReservationPurchaseRecommendation) SetServiceSpecification(v *ServiceSpecification) *ReservationPurchaseRecommendation {
	s.ServiceSpecification = v
	return s
}

// SetTermInYears sets the TermInYears field's value.
func (s *ReservationPurchaseRecommendation) SetTermInYears(v string) *ReservationPurchaseRecommendation {
	s.TermInYears = &v
	return s
}

// Details about your recommended reservation purchase.
type ReservationPurchaseRecommendationDetail struct {
	_ struct{} `type:"structure"`

	// The account that this Reserved Instance (RI) recommendation is for.
	AccountId *string `type:"string"`

	// The average number of normalized units that you used in an hour during the
	// historical period. Amazon Web Services uses this to calculate your recommended
	// reservation purchases.
	AverageNormalizedUnitsUsedPerHour *string `type:"string"`

	// The average number of instances that you used in an hour during the historical
	// period. Amazon Web Services uses this to calculate your recommended reservation
	// purchases.
	AverageNumberOfInstancesUsedPerHour *string `type:"string"`

	// The average utilization of your instances. Amazon Web Services uses this
	// to calculate your recommended reservation purchases.
	AverageUtilization *string `type:"string"`

	// The currency code that Amazon Web Services used to calculate the costs for
	// this instance.
	CurrencyCode *string `type:"string"`

	// How long Amazon Web Services estimates that it takes for this instance to
	// start saving you money, in months.
	EstimatedBreakEvenInMonths *string `type:"string"`

	// How much Amazon Web Services estimates that you spend on On-Demand Instances
	// in a month.
	EstimatedMonthlyOnDemandCost *string `type:"string"`

	// How much Amazon Web Services estimates that this specific recommendation
	// might save you in a month.
	EstimatedMonthlySavingsAmount *string `type:"string"`

	// How much Amazon Web Services estimates that this specific recommendation
	// might save you in a month, as a percentage of your overall costs.
	EstimatedMonthlySavingsPercentage *string `type:"string"`

	// How much Amazon Web Services estimates that you might spend for all usage
	// during the specified historical period if you had a reservation.
	EstimatedReservationCostForLookbackPeriod *string `type:"string"`

	// Details about the reservations that Amazon Web Services recommends that you
	// purchase.
	InstanceDetails *InstanceDetails `type:"structure"`

	// The maximum number of normalized units that you used in an hour during the
	// historical period. Amazon Web Services uses this to calculate your recommended
	// reservation purchases.
	MaximumNormalizedUnitsUsedPerHour *string `type:"string"`

	// The maximum number of instances that you used in an hour during the historical
	// period. Amazon Web Services uses this to calculate your recommended reservation
	// purchases.
	MaximumNumberOfInstancesUsedPerHour *string `type:"string"`

	// The minimum number of normalized units that you used in an hour during the
	// historical period. Amazon Web Services uses this to calculate your recommended
	// reservation purchases.
	MinimumNormalizedUnitsUsedPerHour *string `type:"string"`

	// The minimum number of instances that you used in an hour during the historical
	// period. Amazon Web Services uses this to calculate your recommended reservation
	// purchases.
	MinimumNumberOfInstancesUsedPerHour *string `type:"string"`

	// The number of normalized units that Amazon Web Services recommends that you
	// purchase.
	RecommendedNormalizedUnitsToPurchase *string `type:"string"`

	// The number of instances that Amazon Web Services recommends that you purchase.
	RecommendedNumberOfInstancesToPurchase *string `type:"string"`

	// How much purchasing this instance costs you on a monthly basis.
	RecurringStandardMonthlyCost *string `type:"string"`

	// How much purchasing this instance costs you upfront.
	UpfrontCost *string `type:"string"`
}

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

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

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

// SetAverageNormalizedUnitsUsedPerHour sets the AverageNormalizedUnitsUsedPerHour field's value.
func (s *ReservationPurchaseRecommendationDetail) SetAverageNormalizedUnitsUsedPerHour(v string) *ReservationPurchaseRecommendationDetail {
	s.AverageNormalizedUnitsUsedPerHour = &v
	return s
}

// SetAverageNumberOfInstancesUsedPerHour sets the AverageNumberOfInstancesUsedPerHour field's value.
func (s *ReservationPurchaseRecommendationDetail) SetAverageNumberOfInstancesUsedPerHour(v string) *ReservationPurchaseRecommendationDetail {
	s.AverageNumberOfInstancesUsedPerHour = &v
	return s
}

// SetAverageUtilization sets the AverageUtilization field's value.
func (s *ReservationPurchaseRecommendationDetail) SetAverageUtilization(v string) *ReservationPurchaseRecommendationDetail {
	s.AverageUtilization = &v
	return s
}

// SetCurrencyCode sets the CurrencyCode field's value.
func (s *ReservationPurchaseRecommendationDetail) SetCurrencyCode(v string) *ReservationPurchaseRecommendationDetail {
	s.CurrencyCode = &v
	return s
}

// SetEstimatedBreakEvenInMonths sets the EstimatedBreakEvenInMonths field's value.
func (s *ReservationPurchaseRecommendationDetail) SetEstimatedBreakEvenInMonths(v string) *ReservationPurchaseRecommendationDetail {
	s.EstimatedBreakEvenInMonths = &v
	return s
}

// SetEstimatedMonthlyOnDemandCost sets the EstimatedMonthlyOnDemandCost field's value.
func (s *ReservationPurchaseRecommendationDetail) SetEstimatedMonthlyOnDemandCost(v string) *ReservationPurchaseRecommendationDetail {
	s.EstimatedMonthlyOnDemandCost = &v
	return s
}

// SetEstimatedMonthlySavingsAmount sets the EstimatedMonthlySavingsAmount field's value.
func (s *ReservationPurchaseRecommendationDetail) SetEstimatedMonthlySavingsAmount(v string) *ReservationPurchaseRecommendationDetail {
	s.EstimatedMonthlySavingsAmount = &v
	return s
}

// SetEstimatedMonthlySavingsPercentage sets the EstimatedMonthlySavingsPercentage field's value.
func (s *ReservationPurchaseRecommendationDetail) SetEstimatedMonthlySavingsPercentage(v string) *ReservationPurchaseRecommendationDetail {
	s.EstimatedMonthlySavingsPercentage = &v
	return s
}

// SetEstimatedReservationCostForLookbackPeriod sets the EstimatedReservationCostForLookbackPeriod field's value.
func (s *ReservationPurchaseRecommendationDetail) SetEstimatedReservationCostForLookbackPeriod(v string) *ReservationPurchaseRecommendationDetail {
	s.EstimatedReservationCostForLookbackPeriod = &v
	return s
}

// SetInstanceDetails sets the InstanceDetails field's value.
func (s *ReservationPurchaseRecommendationDetail) SetInstanceDetails(v *InstanceDetails) *ReservationPurchaseRecommendationDetail {
	s.InstanceDetails = v
	return s
}

// SetMaximumNormalizedUnitsUsedPerHour sets the MaximumNormalizedUnitsUsedPerHour field's value.
func (s *ReservationPurchaseRecommendationDetail) SetMaximumNormalizedUnitsUsedPerHour(v string) *ReservationPurchaseRecommendationDetail {
	s.MaximumNormalizedUnitsUsedPerHour = &v
	return s
}

// SetMaximumNumberOfInstancesUsedPerHour sets the MaximumNumberOfInstancesUsedPerHour field's value.
func (s *ReservationPurchaseRecommendationDetail) SetMaximumNumberOfInstancesUsedPerHour(v string) *ReservationPurchaseRecommendationDetail {
	s.MaximumNumberOfInstancesUsedPerHour = &v
	return s
}

// SetMinimumNormalizedUnitsUsedPerHour sets the MinimumNormalizedUnitsUsedPerHour field's value.
func (s *ReservationPurchaseRecommendationDetail) SetMinimumNormalizedUnitsUsedPerHour(v string) *ReservationPurchaseRecommendationDetail {
	s.MinimumNormalizedUnitsUsedPerHour = &v
	return s
}

// SetMinimumNumberOfInstancesUsedPerHour sets the MinimumNumberOfInstancesUsedPerHour field's value.
func (s *ReservationPurchaseRecommendationDetail) SetMinimumNumberOfInstancesUsedPerHour(v string) *ReservationPurchaseRecommendationDetail {
	s.MinimumNumberOfInstancesUsedPerHour = &v
	return s
}

// SetRecommendedNormalizedUnitsToPurchase sets the RecommendedNormalizedUnitsToPurchase field's value.
func (s *ReservationPurchaseRecommendationDetail) SetRecommendedNormalizedUnitsToPurchase(v string) *ReservationPurchaseRecommendationDetail {
	s.RecommendedNormalizedUnitsToPurchase = &v
	return s
}

// SetRecommendedNumberOfInstancesToPurchase sets the RecommendedNumberOfInstancesToPurchase field's value.
func (s *ReservationPurchaseRecommendationDetail) SetRecommendedNumberOfInstancesToPurchase(v string) *ReservationPurchaseRecommendationDetail {
	s.RecommendedNumberOfInstancesToPurchase = &v
	return s
}

// SetRecurringStandardMonthlyCost sets the RecurringStandardMonthlyCost field's value.
func (s *ReservationPurchaseRecommendationDetail) SetRecurringStandardMonthlyCost(v string) *ReservationPurchaseRecommendationDetail {
	s.RecurringStandardMonthlyCost = &v
	return s
}

// SetUpfrontCost sets the UpfrontCost field's value.
func (s *ReservationPurchaseRecommendationDetail) SetUpfrontCost(v string) *ReservationPurchaseRecommendationDetail {
	s.UpfrontCost = &v
	return s
}

// Information about a recommendation, such as the timestamp for when Amazon
// Web Services made a specific recommendation.
type ReservationPurchaseRecommendationMetadata struct {
	_ struct{} `type:"structure"`

	// Additional metadata that might be applicable to the recommendation.
	AdditionalMetadata *string `type:"string"`

	// The timestamp for when Amazon Web Services made the recommendation.
	GenerationTimestamp *string `type:"string"`

	// The ID for the recommendation.
	RecommendationId *string `type:"string"`
}

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

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

// SetAdditionalMetadata sets the AdditionalMetadata field's value.
func (s *ReservationPurchaseRecommendationMetadata) SetAdditionalMetadata(v string) *ReservationPurchaseRecommendationMetadata {
	s.AdditionalMetadata = &v
	return s
}

// SetGenerationTimestamp sets the GenerationTimestamp field's value.
func (s *ReservationPurchaseRecommendationMetadata) SetGenerationTimestamp(v string) *ReservationPurchaseRecommendationMetadata {
	s.GenerationTimestamp = &v
	return s
}

// SetRecommendationId sets the RecommendationId field's value.
func (s *ReservationPurchaseRecommendationMetadata) SetRecommendationId(v string) *ReservationPurchaseRecommendationMetadata {
	s.RecommendationId = &v
	return s
}

// A summary about this recommendation, such as the currency code, the amount
// that Amazon Web Services estimates that you could save, and the total amount
// of reservation to purchase.
type ReservationPurchaseRecommendationSummary struct {
	_ struct{} `type:"structure"`

	// The currency code used for this recommendation.
	CurrencyCode *string `type:"string"`

	// The total amount that Amazon Web Services estimates that this recommendation
	// could save you in a month.
	TotalEstimatedMonthlySavingsAmount *string `type:"string"`

	// The total amount that Amazon Web Services estimates that this recommendation
	// could save you in a month, as a percentage of your costs.
	TotalEstimatedMonthlySavingsPercentage *string `type:"string"`
}

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

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

// SetCurrencyCode sets the CurrencyCode field's value.
func (s *ReservationPurchaseRecommendationSummary) SetCurrencyCode(v string) *ReservationPurchaseRecommendationSummary {
	s.CurrencyCode = &v
	return s
}

// SetTotalEstimatedMonthlySavingsAmount sets the TotalEstimatedMonthlySavingsAmount field's value.
func (s *ReservationPurchaseRecommendationSummary) SetTotalEstimatedMonthlySavingsAmount(v string) *ReservationPurchaseRecommendationSummary {
	s.TotalEstimatedMonthlySavingsAmount = &v
	return s
}

// SetTotalEstimatedMonthlySavingsPercentage sets the TotalEstimatedMonthlySavingsPercentage field's value.
func (s *ReservationPurchaseRecommendationSummary) SetTotalEstimatedMonthlySavingsPercentage(v string) *ReservationPurchaseRecommendationSummary {
	s.TotalEstimatedMonthlySavingsPercentage = &v
	return s
}

// A group of reservations that share a set of attributes.
type ReservationUtilizationGroup struct {
	_ struct{} `type:"structure"`

	// The attributes for this group of reservations.
	Attributes map[string]*string `type:"map"`

	// The key for a specific reservation attribute.
	Key *string `type:"string"`

	// How much you used this group of reservations.
	Utilization *ReservationAggregates `type:"structure"`

	// The value of a specific reservation attribute.
	Value *string `type:"string"`
}

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

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

// SetAttributes sets the Attributes field's value.
func (s *ReservationUtilizationGroup) SetAttributes(v map[string]*string) *ReservationUtilizationGroup {
	s.Attributes = v
	return s
}

// SetKey sets the Key field's value.
func (s *ReservationUtilizationGroup) SetKey(v string) *ReservationUtilizationGroup {
	s.Key = &v
	return s
}

// SetUtilization sets the Utilization field's value.
func (s *ReservationUtilizationGroup) SetUtilization(v *ReservationAggregates) *ReservationUtilizationGroup {
	s.Utilization = v
	return s
}

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

// Details for the resource.
type ResourceDetails struct {
	_ struct{} `type:"structure"`

	// Details for the Amazon EC2 resource.
	EC2ResourceDetails *EC2ResourceDetails `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 ResourceDetails) String() string {
	return awsutil.Prettify(s)
}

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

// SetEC2ResourceDetails sets the EC2ResourceDetails field's value.
func (s *ResourceDetails) SetEC2ResourceDetails(v *EC2ResourceDetails) *ResourceDetails {
	s.EC2ResourceDetails = v
	return s
}

// The specified ARN in the request doesn't exist.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

	ResourceName *string `min:"20" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s 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\n%s", s.Code(), s.Message(), s.String())
}

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

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

// The tag structure that contains a tag key and value.
//
// Tagging is supported only for the following Cost Explorer resource types:
// AnomalyMonitor (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AnomalyMonitor.html),
// AnomalySubscription (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AnomalySubscription.html),
// CostCategory (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_CostCategory.html).
type ResourceTag struct {
	_ struct{} `type:"structure"`

	// The key that's associated with the tag.
	//
	// Key is a required field
	Key *string `min:"1" type:"string" required:"true"`

	// The value that's associated with the tag.
	//
	// Value is a required field
	Value *string `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 ResourceTag) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetKey sets the Key field's value.
func (s *ResourceTag) SetKey(v string) *ResourceTag {
	s.Key = &v
	return s
}

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

// Resource utilization of current resource.
type ResourceUtilization struct {
	_ struct{} `type:"structure"`

	// The utilization of current Amazon EC2 instance.
	EC2ResourceUtilization *EC2ResourceUtilization `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 ResourceUtilization) String() string {
	return awsutil.Prettify(s)
}

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

// SetEC2ResourceUtilization sets the EC2ResourceUtilization field's value.
func (s *ResourceUtilization) SetEC2ResourceUtilization(v *EC2ResourceUtilization) *ResourceUtilization {
	s.EC2ResourceUtilization = v
	return s
}

// The result that's associated with a time period.
type ResultByTime struct {
	_ struct{} `type:"structure"`

	// Determines whether the result is estimated.
	Estimated *bool `type:"boolean"`

	// The groups that this time period includes.
	Groups []*Group `type:"list"`

	// The time period that the result covers.
	TimePeriod *DateInterval `type:"structure"`

	// The total amount of cost or usage accrued during the time period.
	Total map[string]*MetricValue `type:"map"`
}

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

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

// SetEstimated sets the Estimated field's value.
func (s *ResultByTime) SetEstimated(v bool) *ResultByTime {
	s.Estimated = &v
	return s
}

// SetGroups sets the Groups field's value.
func (s *ResultByTime) SetGroups(v []*Group) *ResultByTime {
	s.Groups = v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *ResultByTime) SetTimePeriod(v *DateInterval) *ResultByTime {
	s.TimePeriod = v
	return s
}

// SetTotal sets the Total field's value.
func (s *ResultByTime) SetTotal(v map[string]*MetricValue) *ResultByTime {
	s.Total = v
	return s
}

// Recommendations to rightsize resources.
type RightsizingRecommendation struct {
	_ struct{} `type:"structure"`

	// The account that this recommendation is for.
	AccountId *string `type:"string"`

	// Context regarding the current instance.
	CurrentInstance *CurrentInstance `type:"structure"`

	// The list of possible reasons why the recommendation is generated, such as
	// under- or over-utilization of specific metrics (for example, CPU, Memory,
	// Network).
	FindingReasonCodes []*string `type:"list" enum:"FindingReasonCode"`

	// The details for the modification recommendations.
	ModifyRecommendationDetail *ModifyRecommendationDetail `type:"structure"`

	// A recommendation to either terminate or modify the resource.
	RightsizingType *string `type:"string" enum:"RightsizingType"`

	// The details for termination recommendations.
	TerminateRecommendationDetail *TerminateRecommendationDetail `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 RightsizingRecommendation) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetCurrentInstance sets the CurrentInstance field's value.
func (s *RightsizingRecommendation) SetCurrentInstance(v *CurrentInstance) *RightsizingRecommendation {
	s.CurrentInstance = v
	return s
}

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

// SetModifyRecommendationDetail sets the ModifyRecommendationDetail field's value.
func (s *RightsizingRecommendation) SetModifyRecommendationDetail(v *ModifyRecommendationDetail) *RightsizingRecommendation {
	s.ModifyRecommendationDetail = v
	return s
}

// SetRightsizingType sets the RightsizingType field's value.
func (s *RightsizingRecommendation) SetRightsizingType(v string) *RightsizingRecommendation {
	s.RightsizingType = &v
	return s
}

// SetTerminateRecommendationDetail sets the TerminateRecommendationDetail field's value.
func (s *RightsizingRecommendation) SetTerminateRecommendationDetail(v *TerminateRecommendationDetail) *RightsizingRecommendation {
	s.TerminateRecommendationDetail = v
	return s
}

// You can use RightsizingRecommendationConfiguration to customize recommendations
// across two attributes. You can choose to view recommendations for instances
// within the same instance families or across different instance families.
// You can also choose to view your estimated savings that are associated with
// recommendations with consideration of existing Savings Plans or Reserved
// Instance (RI) benefits, or neither.
type RightsizingRecommendationConfiguration struct {
	_ struct{} `type:"structure"`

	// The option to consider RI or Savings Plans discount benefits in your savings
	// calculation. The default value is TRUE.
	//
	// BenefitsConsidered is a required field
	BenefitsConsidered *bool `type:"boolean" required:"true"`

	// The option to see recommendations within the same instance family or recommendations
	// for instances across other families. The default value is SAME_INSTANCE_FAMILY.
	//
	// RecommendationTarget is a required field
	RecommendationTarget *string `type:"string" required:"true" enum:"RecommendationTarget"`
}

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

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

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

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

// SetBenefitsConsidered sets the BenefitsConsidered field's value.
func (s *RightsizingRecommendationConfiguration) SetBenefitsConsidered(v bool) *RightsizingRecommendationConfiguration {
	s.BenefitsConsidered = &v
	return s
}

// SetRecommendationTarget sets the RecommendationTarget field's value.
func (s *RightsizingRecommendationConfiguration) SetRecommendationTarget(v string) *RightsizingRecommendationConfiguration {
	s.RecommendationTarget = &v
	return s
}

// Metadata for a recommendation set.
type RightsizingRecommendationMetadata struct {
	_ struct{} `type:"structure"`

	// Additional metadata that might be applicable to the recommendation.
	AdditionalMetadata *string `type:"string"`

	// The timestamp for when Amazon Web Services made the recommendation.
	GenerationTimestamp *string `type:"string"`

	// The number of days of previous usage that Amazon Web Services considers when
	// making the recommendation.
	LookbackPeriodInDays *string `type:"string" enum:"LookbackPeriodInDays"`

	// The ID for the recommendation.
	RecommendationId *string `type:"string"`
}

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

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

// SetAdditionalMetadata sets the AdditionalMetadata field's value.
func (s *RightsizingRecommendationMetadata) SetAdditionalMetadata(v string) *RightsizingRecommendationMetadata {
	s.AdditionalMetadata = &v
	return s
}

// SetGenerationTimestamp sets the GenerationTimestamp field's value.
func (s *RightsizingRecommendationMetadata) SetGenerationTimestamp(v string) *RightsizingRecommendationMetadata {
	s.GenerationTimestamp = &v
	return s
}

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

// SetRecommendationId sets the RecommendationId field's value.
func (s *RightsizingRecommendationMetadata) SetRecommendationId(v string) *RightsizingRecommendationMetadata {
	s.RecommendationId = &v
	return s
}

// The summary of rightsizing recommendations
type RightsizingRecommendationSummary struct {
	_ struct{} `type:"structure"`

	// The estimated total savings resulting from modifications, on a monthly basis.
	EstimatedTotalMonthlySavingsAmount *string `type:"string"`

	// The currency code that Amazon Web Services used to calculate the savings.
	SavingsCurrencyCode *string `type:"string"`

	// The savings percentage based on the recommended modifications. It's relative
	// to the total On-Demand costs that are associated with these instances.
	SavingsPercentage *string `type:"string"`

	// The total number of instance recommendations.
	TotalRecommendationCount *string `type:"string"`
}

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

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

// SetEstimatedTotalMonthlySavingsAmount sets the EstimatedTotalMonthlySavingsAmount field's value.
func (s *RightsizingRecommendationSummary) SetEstimatedTotalMonthlySavingsAmount(v string) *RightsizingRecommendationSummary {
	s.EstimatedTotalMonthlySavingsAmount = &v
	return s
}

// SetSavingsCurrencyCode sets the SavingsCurrencyCode field's value.
func (s *RightsizingRecommendationSummary) SetSavingsCurrencyCode(v string) *RightsizingRecommendationSummary {
	s.SavingsCurrencyCode = &v
	return s
}

// SetSavingsPercentage sets the SavingsPercentage field's value.
func (s *RightsizingRecommendationSummary) SetSavingsPercentage(v string) *RightsizingRecommendationSummary {
	s.SavingsPercentage = &v
	return s
}

// SetTotalRecommendationCount sets the TotalRecommendationCount field's value.
func (s *RightsizingRecommendationSummary) SetTotalRecommendationCount(v string) *RightsizingRecommendationSummary {
	s.TotalRecommendationCount = &v
	return s
}

// The combination of Amazon Web Service, linked account, linked account name,
// Region, and usage type where a cost anomaly is observed. The linked account
// name will only be available when the account name can be identified.
type RootCause struct {
	_ struct{} `type:"structure"`

	// The member account value that's associated with the cost anomaly.
	LinkedAccount *string `type:"string"`

	// The member account name value that's associated with the cost anomaly.
	LinkedAccountName *string `type:"string"`

	// The Amazon Web Services Region that's associated with the cost anomaly.
	Region *string `type:"string"`

	// The Amazon Web Service name that's associated with the cost anomaly.
	Service *string `type:"string"`

	// The UsageType value that's associated with the cost anomaly.
	UsageType *string `type:"string"`
}

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

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

// SetLinkedAccount sets the LinkedAccount field's value.
func (s *RootCause) SetLinkedAccount(v string) *RootCause {
	s.LinkedAccount = &v
	return s
}

// SetLinkedAccountName sets the LinkedAccountName field's value.
func (s *RootCause) SetLinkedAccountName(v string) *RootCause {
	s.LinkedAccountName = &v
	return s
}

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

// SetService sets the Service field's value.
func (s *RootCause) SetService(v string) *RootCause {
	s.Service = &v
	return s
}

// SetUsageType sets the UsageType field's value.
func (s *RootCause) SetUsageType(v string) *RootCause {
	s.UsageType = &v
	return s
}

// The amortized amount of Savings Plans purchased in a specific account during
// a specific time interval.
type SavingsPlansAmortizedCommitment struct {
	_ struct{} `type:"structure"`

	// The amortized amount of your Savings Plans commitment that was purchased
	// with either a Partial or a NoUpfront.
	AmortizedRecurringCommitment *string `type:"string"`

	// The amortized amount of your Savings Plans commitment that was purchased
	// with an Upfront or PartialUpfront Savings Plans.
	AmortizedUpfrontCommitment *string `type:"string"`

	// The total amortized amount of your Savings Plans commitment, regardless of
	// your Savings Plans purchase method.
	TotalAmortizedCommitment *string `type:"string"`
}

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

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

// SetAmortizedRecurringCommitment sets the AmortizedRecurringCommitment field's value.
func (s *SavingsPlansAmortizedCommitment) SetAmortizedRecurringCommitment(v string) *SavingsPlansAmortizedCommitment {
	s.AmortizedRecurringCommitment = &v
	return s
}

// SetAmortizedUpfrontCommitment sets the AmortizedUpfrontCommitment field's value.
func (s *SavingsPlansAmortizedCommitment) SetAmortizedUpfrontCommitment(v string) *SavingsPlansAmortizedCommitment {
	s.AmortizedUpfrontCommitment = &v
	return s
}

// SetTotalAmortizedCommitment sets the TotalAmortizedCommitment field's value.
func (s *SavingsPlansAmortizedCommitment) SetTotalAmortizedCommitment(v string) *SavingsPlansAmortizedCommitment {
	s.TotalAmortizedCommitment = &v
	return s
}

// The amount of Savings Plans eligible usage that's covered by Savings Plans.
// All calculations consider the On-Demand equivalent of your Savings Plans
// usage.
type SavingsPlansCoverage struct {
	_ struct{} `type:"structure"`

	// The attribute that applies to a specific Dimension.
	Attributes map[string]*string `type:"map"`

	// The amount of Savings Plans eligible usage that the Savings Plans covered.
	Coverage *SavingsPlansCoverageData `type:"structure"`

	// The time period of the request.
	TimePeriod *DateInterval `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 SavingsPlansCoverage) String() string {
	return awsutil.Prettify(s)
}

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

// SetAttributes sets the Attributes field's value.
func (s *SavingsPlansCoverage) SetAttributes(v map[string]*string) *SavingsPlansCoverage {
	s.Attributes = v
	return s
}

// SetCoverage sets the Coverage field's value.
func (s *SavingsPlansCoverage) SetCoverage(v *SavingsPlansCoverageData) *SavingsPlansCoverage {
	s.Coverage = v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *SavingsPlansCoverage) SetTimePeriod(v *DateInterval) *SavingsPlansCoverage {
	s.TimePeriod = v
	return s
}

// Specific coverage percentage, On-Demand costs, and spend covered by Savings
// Plans, and total Savings Plans costs for an account.
type SavingsPlansCoverageData struct {
	_ struct{} `type:"structure"`

	// The percentage of your existing Savings Plans covered usage, divided by all
	// of your eligible Savings Plans usage in an account (or set of accounts).
	CoveragePercentage *string `type:"string"`

	// The cost of your Amazon Web Services usage at the public On-Demand rate.
	OnDemandCost *string `type:"string"`

	// The amount of your Amazon Web Services usage that's covered by a Savings
	// Plans.
	SpendCoveredBySavingsPlans *string `type:"string"`

	// The total cost of your Amazon Web Services usage, regardless of your purchase
	// option.
	TotalCost *string `type:"string"`
}

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

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

// SetCoveragePercentage sets the CoveragePercentage field's value.
func (s *SavingsPlansCoverageData) SetCoveragePercentage(v string) *SavingsPlansCoverageData {
	s.CoveragePercentage = &v
	return s
}

// SetOnDemandCost sets the OnDemandCost field's value.
func (s *SavingsPlansCoverageData) SetOnDemandCost(v string) *SavingsPlansCoverageData {
	s.OnDemandCost = &v
	return s
}

// SetSpendCoveredBySavingsPlans sets the SpendCoveredBySavingsPlans field's value.
func (s *SavingsPlansCoverageData) SetSpendCoveredBySavingsPlans(v string) *SavingsPlansCoverageData {
	s.SpendCoveredBySavingsPlans = &v
	return s
}

// SetTotalCost sets the TotalCost field's value.
func (s *SavingsPlansCoverageData) SetTotalCost(v string) *SavingsPlansCoverageData {
	s.TotalCost = &v
	return s
}

// The attribute details on a specific Savings Plan.
type SavingsPlansDetails struct {
	_ struct{} `type:"structure"`

	// A group of instance types that Savings Plans applies to.
	InstanceFamily *string `type:"string"`

	// The unique ID that's used to distinguish Savings Plans from one another.
	OfferingId *string `type:"string"`

	// A collection of Amazon Web Services resources in a geographic area. Each
	// Amazon Web Services Region is isolated and independent of the other Regions.
	Region *string `type:"string"`
}

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

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

// SetInstanceFamily sets the InstanceFamily field's value.
func (s *SavingsPlansDetails) SetInstanceFamily(v string) *SavingsPlansDetails {
	s.InstanceFamily = &v
	return s
}

// SetOfferingId sets the OfferingId field's value.
func (s *SavingsPlansDetails) SetOfferingId(v string) *SavingsPlansDetails {
	s.OfferingId = &v
	return s
}

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

// Contains your request parameters, Savings Plan Recommendations Summary, and
// Details.
type SavingsPlansPurchaseRecommendation struct {
	_ struct{} `type:"structure"`

	// The account scope that you want your recommendations for. Amazon Web Services
	// calculates recommendations that include the management account and member
	// accounts if the value is set to PAYER. If the value is LINKED, recommendations
	// are calculated for individual member accounts only.
	AccountScope *string `type:"string" enum:"AccountScope"`

	// The lookback period in days that's used to generate the recommendation.
	LookbackPeriodInDays *string `type:"string" enum:"LookbackPeriodInDays"`

	// The payment option that's used to generate the recommendation.
	PaymentOption *string `type:"string" enum:"PaymentOption"`

	// Details for the Savings Plans that we recommend that you purchase to cover
	// existing Savings Plans eligible workloads.
	SavingsPlansPurchaseRecommendationDetails []*SavingsPlansPurchaseRecommendationDetail `type:"list"`

	// Summary metrics for your Savings Plans Recommendations.
	SavingsPlansPurchaseRecommendationSummary *SavingsPlansPurchaseRecommendationSummary `type:"structure"`

	// The requested Savings Plans recommendation type.
	SavingsPlansType *string `type:"string" enum:"SupportedSavingsPlansType"`

	// The Savings Plans recommendation term in years. It's used to generate the
	// recommendation.
	TermInYears *string `type:"string" enum:"TermInYears"`
}

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

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

// SetAccountScope sets the AccountScope field's value.
func (s *SavingsPlansPurchaseRecommendation) SetAccountScope(v string) *SavingsPlansPurchaseRecommendation {
	s.AccountScope = &v
	return s
}

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

// SetPaymentOption sets the PaymentOption field's value.
func (s *SavingsPlansPurchaseRecommendation) SetPaymentOption(v string) *SavingsPlansPurchaseRecommendation {
	s.PaymentOption = &v
	return s
}

// SetSavingsPlansPurchaseRecommendationDetails sets the SavingsPlansPurchaseRecommendationDetails field's value.
func (s *SavingsPlansPurchaseRecommendation) SetSavingsPlansPurchaseRecommendationDetails(v []*SavingsPlansPurchaseRecommendationDetail) *SavingsPlansPurchaseRecommendation {
	s.SavingsPlansPurchaseRecommendationDetails = v
	return s
}

// SetSavingsPlansPurchaseRecommendationSummary sets the SavingsPlansPurchaseRecommendationSummary field's value.
func (s *SavingsPlansPurchaseRecommendation) SetSavingsPlansPurchaseRecommendationSummary(v *SavingsPlansPurchaseRecommendationSummary) *SavingsPlansPurchaseRecommendation {
	s.SavingsPlansPurchaseRecommendationSummary = v
	return s
}

// SetSavingsPlansType sets the SavingsPlansType field's value.
func (s *SavingsPlansPurchaseRecommendation) SetSavingsPlansType(v string) *SavingsPlansPurchaseRecommendation {
	s.SavingsPlansType = &v
	return s
}

// SetTermInYears sets the TermInYears field's value.
func (s *SavingsPlansPurchaseRecommendation) SetTermInYears(v string) *SavingsPlansPurchaseRecommendation {
	s.TermInYears = &v
	return s
}

// Details for your recommended Savings Plans.
type SavingsPlansPurchaseRecommendationDetail struct {
	_ struct{} `type:"structure"`

	// The AccountID the recommendation is generated for.
	AccountId *string `type:"string"`

	// The currency code that Amazon Web Services used to generate the recommendations
	// and present potential savings.
	CurrencyCode *string `type:"string"`

	// The average value of hourly On-Demand spend over the lookback period of the
	// applicable usage type.
	CurrentAverageHourlyOnDemandSpend *string `type:"string"`

	// The highest value of hourly On-Demand spend over the lookback period of the
	// applicable usage type.
	CurrentMaximumHourlyOnDemandSpend *string `type:"string"`

	// The lowest value of hourly On-Demand spend over the lookback period of the
	// applicable usage type.
	CurrentMinimumHourlyOnDemandSpend *string `type:"string"`

	// The estimated utilization of the recommended Savings Plans.
	EstimatedAverageUtilization *string `type:"string"`

	// The estimated monthly savings amount based on the recommended Savings Plans.
	EstimatedMonthlySavingsAmount *string `type:"string"`

	// The remaining On-Demand cost estimated to not be covered by the recommended
	// Savings Plans, over the length of the lookback period.
	EstimatedOnDemandCost *string `type:"string"`

	// The estimated On-Demand costs you expect with no additional commitment, based
	// on your usage of the selected time period and the Savings Plans you own.
	EstimatedOnDemandCostWithCurrentCommitment *string `type:"string"`

	// The estimated return on investment that's based on the recommended Savings
	// Plans that you purchased. This is calculated as estimatedSavingsAmount/ estimatedSPCost*100.
	EstimatedROI *string `type:"string"`

	// The cost of the recommended Savings Plans over the length of the lookback
	// period.
	EstimatedSPCost *string `type:"string"`

	// The estimated savings amount that's based on the recommended Savings Plans
	// over the length of the lookback period.
	EstimatedSavingsAmount *string `type:"string"`

	// The estimated savings percentage relative to the total cost of applicable
	// On-Demand usage over the lookback period.
	EstimatedSavingsPercentage *string `type:"string"`

	// The recommended hourly commitment level for the Savings Plans type and the
	// configuration that's based on the usage during the lookback period.
	HourlyCommitmentToPurchase *string `type:"string"`

	// Contains detailed information about a specific Savings Plan recommendation.
	RecommendationDetailId *string `min:"36" type:"string"`

	// Details for your recommended Savings Plans.
	SavingsPlansDetails *SavingsPlansDetails `type:"structure"`

	// The upfront cost of the recommended Savings Plans, based on the selected
	// payment option.
	UpfrontCost *string `type:"string"`
}

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

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

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

// SetCurrencyCode sets the CurrencyCode field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetCurrencyCode(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.CurrencyCode = &v
	return s
}

// SetCurrentAverageHourlyOnDemandSpend sets the CurrentAverageHourlyOnDemandSpend field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetCurrentAverageHourlyOnDemandSpend(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.CurrentAverageHourlyOnDemandSpend = &v
	return s
}

// SetCurrentMaximumHourlyOnDemandSpend sets the CurrentMaximumHourlyOnDemandSpend field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetCurrentMaximumHourlyOnDemandSpend(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.CurrentMaximumHourlyOnDemandSpend = &v
	return s
}

// SetCurrentMinimumHourlyOnDemandSpend sets the CurrentMinimumHourlyOnDemandSpend field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetCurrentMinimumHourlyOnDemandSpend(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.CurrentMinimumHourlyOnDemandSpend = &v
	return s
}

// SetEstimatedAverageUtilization sets the EstimatedAverageUtilization field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetEstimatedAverageUtilization(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.EstimatedAverageUtilization = &v
	return s
}

// SetEstimatedMonthlySavingsAmount sets the EstimatedMonthlySavingsAmount field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetEstimatedMonthlySavingsAmount(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.EstimatedMonthlySavingsAmount = &v
	return s
}

// SetEstimatedOnDemandCost sets the EstimatedOnDemandCost field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetEstimatedOnDemandCost(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.EstimatedOnDemandCost = &v
	return s
}

// SetEstimatedOnDemandCostWithCurrentCommitment sets the EstimatedOnDemandCostWithCurrentCommitment field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetEstimatedOnDemandCostWithCurrentCommitment(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.EstimatedOnDemandCostWithCurrentCommitment = &v
	return s
}

// SetEstimatedROI sets the EstimatedROI field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetEstimatedROI(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.EstimatedROI = &v
	return s
}

// SetEstimatedSPCost sets the EstimatedSPCost field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetEstimatedSPCost(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.EstimatedSPCost = &v
	return s
}

// SetEstimatedSavingsAmount sets the EstimatedSavingsAmount field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetEstimatedSavingsAmount(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.EstimatedSavingsAmount = &v
	return s
}

// SetEstimatedSavingsPercentage sets the EstimatedSavingsPercentage field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetEstimatedSavingsPercentage(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.EstimatedSavingsPercentage = &v
	return s
}

// SetHourlyCommitmentToPurchase sets the HourlyCommitmentToPurchase field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetHourlyCommitmentToPurchase(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.HourlyCommitmentToPurchase = &v
	return s
}

// SetRecommendationDetailId sets the RecommendationDetailId field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetRecommendationDetailId(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.RecommendationDetailId = &v
	return s
}

// SetSavingsPlansDetails sets the SavingsPlansDetails field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetSavingsPlansDetails(v *SavingsPlansDetails) *SavingsPlansPurchaseRecommendationDetail {
	s.SavingsPlansDetails = v
	return s
}

// SetUpfrontCost sets the UpfrontCost field's value.
func (s *SavingsPlansPurchaseRecommendationDetail) SetUpfrontCost(v string) *SavingsPlansPurchaseRecommendationDetail {
	s.UpfrontCost = &v
	return s
}

// Metadata about your Savings Plans Purchase Recommendations.
type SavingsPlansPurchaseRecommendationMetadata struct {
	_ struct{} `type:"structure"`

	// Additional metadata that might be applicable to the recommendation.
	AdditionalMetadata *string `type:"string"`

	// The timestamp that shows when the recommendations were generated.
	GenerationTimestamp *string `type:"string"`

	// The unique identifier for the recommendation set.
	RecommendationId *string `type:"string"`
}

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

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

// SetAdditionalMetadata sets the AdditionalMetadata field's value.
func (s *SavingsPlansPurchaseRecommendationMetadata) SetAdditionalMetadata(v string) *SavingsPlansPurchaseRecommendationMetadata {
	s.AdditionalMetadata = &v
	return s
}

// SetGenerationTimestamp sets the GenerationTimestamp field's value.
func (s *SavingsPlansPurchaseRecommendationMetadata) SetGenerationTimestamp(v string) *SavingsPlansPurchaseRecommendationMetadata {
	s.GenerationTimestamp = &v
	return s
}

// SetRecommendationId sets the RecommendationId field's value.
func (s *SavingsPlansPurchaseRecommendationMetadata) SetRecommendationId(v string) *SavingsPlansPurchaseRecommendationMetadata {
	s.RecommendationId = &v
	return s
}

// Summary metrics for your Savings Plans Purchase Recommendations.
type SavingsPlansPurchaseRecommendationSummary struct {
	_ struct{} `type:"structure"`

	// The currency code that Amazon Web Services used to generate the recommendations
	// and present potential savings.
	CurrencyCode *string `type:"string"`

	// The current total on demand spend of the applicable usage types over the
	// lookback period.
	CurrentOnDemandSpend *string `type:"string"`

	// The recommended Savings Plans cost on a daily (24 hourly) basis.
	DailyCommitmentToPurchase *string `type:"string"`

	// The estimated monthly savings amount that's based on the recommended Savings
	// Plans purchase.
	EstimatedMonthlySavingsAmount *string `type:"string"`

	// The estimated On-Demand costs you expect with no additional commitment. It's
	// based on your usage of the selected time period and the Savings Plans you
	// own.
	EstimatedOnDemandCostWithCurrentCommitment *string `type:"string"`

	// The estimated return on investment that's based on the recommended Savings
	// Plans and estimated savings.
	EstimatedROI *string `type:"string"`

	// The estimated total savings over the lookback period, based on the purchase
	// of the recommended Savings Plans.
	EstimatedSavingsAmount *string `type:"string"`

	// The estimated savings relative to the total cost of On-Demand usage, over
	// the lookback period. This is calculated as estimatedSavingsAmount/ CurrentOnDemandSpend*100.
	EstimatedSavingsPercentage *string `type:"string"`

	// The estimated total cost of the usage after purchasing the recommended Savings
	// Plans. This is a sum of the cost of Savings Plans during this term, and the
	// remaining On-Demand usage.
	EstimatedTotalCost *string `type:"string"`

	// The recommended hourly commitment that's based on the recommendation parameters.
	HourlyCommitmentToPurchase *string `type:"string"`

	// The aggregate number of Savings Plans recommendations that exist for your
	// account.
	TotalRecommendationCount *string `type:"string"`
}

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

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

// SetCurrencyCode sets the CurrencyCode field's value.
func (s *SavingsPlansPurchaseRecommendationSummary) SetCurrencyCode(v string) *SavingsPlansPurchaseRecommendationSummary {
	s.CurrencyCode = &v
	return s
}

// SetCurrentOnDemandSpend sets the CurrentOnDemandSpend field's value.
func (s *SavingsPlansPurchaseRecommendationSummary) SetCurrentOnDemandSpend(v string) *SavingsPlansPurchaseRecommendationSummary {
	s.CurrentOnDemandSpend = &v
	return s
}

// SetDailyCommitmentToPurchase sets the DailyCommitmentToPurchase field's value.
func (s *SavingsPlansPurchaseRecommendationSummary) SetDailyCommitmentToPurchase(v string) *SavingsPlansPurchaseRecommendationSummary {
	s.DailyCommitmentToPurchase = &v
	return s
}

// SetEstimatedMonthlySavingsAmount sets the EstimatedMonthlySavingsAmount field's value.
func (s *SavingsPlansPurchaseRecommendationSummary) SetEstimatedMonthlySavingsAmount(v string) *SavingsPlansPurchaseRecommendationSummary {
	s.EstimatedMonthlySavingsAmount = &v
	return s
}

// SetEstimatedOnDemandCostWithCurrentCommitment sets the EstimatedOnDemandCostWithCurrentCommitment field's value.
func (s *SavingsPlansPurchaseRecommendationSummary) SetEstimatedOnDemandCostWithCurrentCommitment(v string) *SavingsPlansPurchaseRecommendationSummary {
	s.EstimatedOnDemandCostWithCurrentCommitment = &v
	return s
}

// SetEstimatedROI sets the EstimatedROI field's value.
func (s *SavingsPlansPurchaseRecommendationSummary) SetEstimatedROI(v string) *SavingsPlansPurchaseRecommendationSummary {
	s.EstimatedROI = &v
	return s
}

// SetEstimatedSavingsAmount sets the EstimatedSavingsAmount field's value.
func (s *SavingsPlansPurchaseRecommendationSummary) SetEstimatedSavingsAmount(v string) *SavingsPlansPurchaseRecommendationSummary {
	s.EstimatedSavingsAmount = &v
	return s
}

// SetEstimatedSavingsPercentage sets the EstimatedSavingsPercentage field's value.
func (s *SavingsPlansPurchaseRecommendationSummary) SetEstimatedSavingsPercentage(v string) *SavingsPlansPurchaseRecommendationSummary {
	s.EstimatedSavingsPercentage = &v
	return s
}

// SetEstimatedTotalCost sets the EstimatedTotalCost field's value.
func (s *SavingsPlansPurchaseRecommendationSummary) SetEstimatedTotalCost(v string) *SavingsPlansPurchaseRecommendationSummary {
	s.EstimatedTotalCost = &v
	return s
}

// SetHourlyCommitmentToPurchase sets the HourlyCommitmentToPurchase field's value.
func (s *SavingsPlansPurchaseRecommendationSummary) SetHourlyCommitmentToPurchase(v string) *SavingsPlansPurchaseRecommendationSummary {
	s.HourlyCommitmentToPurchase = &v
	return s
}

// SetTotalRecommendationCount sets the TotalRecommendationCount field's value.
func (s *SavingsPlansPurchaseRecommendationSummary) SetTotalRecommendationCount(v string) *SavingsPlansPurchaseRecommendationSummary {
	s.TotalRecommendationCount = &v
	return s
}

// The amount of savings that you're accumulating, against the public On-Demand
// rate of the usage accrued in an account.
type SavingsPlansSavings struct {
	_ struct{} `type:"structure"`

	// The savings amount that you're accumulating for the usage that's covered
	// by a Savings Plans, when compared to the On-Demand equivalent of the same
	// usage.
	NetSavings *string `type:"string"`

	// How much the amount that the usage would have cost if it was accrued at the
	// On-Demand rate.
	OnDemandCostEquivalent *string `type:"string"`
}

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

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

// SetNetSavings sets the NetSavings field's value.
func (s *SavingsPlansSavings) SetNetSavings(v string) *SavingsPlansSavings {
	s.NetSavings = &v
	return s
}

// SetOnDemandCostEquivalent sets the OnDemandCostEquivalent field's value.
func (s *SavingsPlansSavings) SetOnDemandCostEquivalent(v string) *SavingsPlansSavings {
	s.OnDemandCostEquivalent = &v
	return s
}

// The measurement of how well you're using your existing Savings Plans.
type SavingsPlansUtilization struct {
	_ struct{} `type:"structure"`

	// The total amount of Savings Plans commitment that's been purchased in an
	// account (or set of accounts).
	TotalCommitment *string `type:"string"`

	// The amount of your Savings Plans commitment that wasn't consumed from Savings
	// Plans eligible usage in a specific period.
	UnusedCommitment *string `type:"string"`

	// The amount of your Savings Plans commitment that was consumed from Savings
	// Plans eligible usage in a specific period.
	UsedCommitment *string `type:"string"`

	// The amount of UsedCommitment divided by the TotalCommitment for your Savings
	// Plans.
	UtilizationPercentage *string `type:"string"`
}

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

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

// SetTotalCommitment sets the TotalCommitment field's value.
func (s *SavingsPlansUtilization) SetTotalCommitment(v string) *SavingsPlansUtilization {
	s.TotalCommitment = &v
	return s
}

// SetUnusedCommitment sets the UnusedCommitment field's value.
func (s *SavingsPlansUtilization) SetUnusedCommitment(v string) *SavingsPlansUtilization {
	s.UnusedCommitment = &v
	return s
}

// SetUsedCommitment sets the UsedCommitment field's value.
func (s *SavingsPlansUtilization) SetUsedCommitment(v string) *SavingsPlansUtilization {
	s.UsedCommitment = &v
	return s
}

// SetUtilizationPercentage sets the UtilizationPercentage field's value.
func (s *SavingsPlansUtilization) SetUtilizationPercentage(v string) *SavingsPlansUtilization {
	s.UtilizationPercentage = &v
	return s
}

// The aggregated utilization metrics for your Savings Plans usage.
type SavingsPlansUtilizationAggregates struct {
	_ struct{} `type:"structure"`

	// The total amortized commitment for a Savings Plans. This includes the sum
	// of the upfront and recurring Savings Plans fees.
	AmortizedCommitment *SavingsPlansAmortizedCommitment `type:"structure"`

	// The amount that's saved by using existing Savings Plans. Savings returns
	// both net savings from Savings Plans and also the onDemandCostEquivalent of
	// the Savings Plans when considering the utilization rate.
	Savings *SavingsPlansSavings `type:"structure"`

	// A ratio of your effectiveness of using existing Savings Plans to apply to
	// workloads that are Savings Plans eligible.
	//
	// Utilization is a required field
	Utilization *SavingsPlansUtilization `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 SavingsPlansUtilizationAggregates) String() string {
	return awsutil.Prettify(s)
}

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

// SetAmortizedCommitment sets the AmortizedCommitment field's value.
func (s *SavingsPlansUtilizationAggregates) SetAmortizedCommitment(v *SavingsPlansAmortizedCommitment) *SavingsPlansUtilizationAggregates {
	s.AmortizedCommitment = v
	return s
}

// SetSavings sets the Savings field's value.
func (s *SavingsPlansUtilizationAggregates) SetSavings(v *SavingsPlansSavings) *SavingsPlansUtilizationAggregates {
	s.Savings = v
	return s
}

// SetUtilization sets the Utilization field's value.
func (s *SavingsPlansUtilizationAggregates) SetUtilization(v *SavingsPlansUtilization) *SavingsPlansUtilizationAggregates {
	s.Utilization = v
	return s
}

// The amount of Savings Plans utilization (in hours).
type SavingsPlansUtilizationByTime struct {
	_ struct{} `type:"structure"`

	// The total amortized commitment for a Savings Plans. This includes the sum
	// of the upfront and recurring Savings Plans fees.
	AmortizedCommitment *SavingsPlansAmortizedCommitment `type:"structure"`

	// The amount that's saved by using existing Savings Plans. Savings returns
	// both net savings from Savings Plans and also the onDemandCostEquivalent of
	// the Savings Plans when considering the utilization rate.
	Savings *SavingsPlansSavings `type:"structure"`

	// The time period of the request.
	//
	// TimePeriod is a required field
	TimePeriod *DateInterval `type:"structure" required:"true"`

	// A ratio of your effectiveness of using existing Savings Plans to apply to
	// workloads that are Savings Plans eligible.
	//
	// Utilization is a required field
	Utilization *SavingsPlansUtilization `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 SavingsPlansUtilizationByTime) String() string {
	return awsutil.Prettify(s)
}

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

// SetAmortizedCommitment sets the AmortizedCommitment field's value.
func (s *SavingsPlansUtilizationByTime) SetAmortizedCommitment(v *SavingsPlansAmortizedCommitment) *SavingsPlansUtilizationByTime {
	s.AmortizedCommitment = v
	return s
}

// SetSavings sets the Savings field's value.
func (s *SavingsPlansUtilizationByTime) SetSavings(v *SavingsPlansSavings) *SavingsPlansUtilizationByTime {
	s.Savings = v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *SavingsPlansUtilizationByTime) SetTimePeriod(v *DateInterval) *SavingsPlansUtilizationByTime {
	s.TimePeriod = v
	return s
}

// SetUtilization sets the Utilization field's value.
func (s *SavingsPlansUtilizationByTime) SetUtilization(v *SavingsPlansUtilization) *SavingsPlansUtilizationByTime {
	s.Utilization = v
	return s
}

// A single daily or monthly Savings Plans utilization rate and details for
// your account. A management account in an organization have access to member
// accounts. You can use GetDimensionValues to determine the possible dimension
// values.
type SavingsPlansUtilizationDetail struct {
	_ struct{} `type:"structure"`

	// The total amortized commitment for a Savings Plans. Includes the sum of the
	// upfront and recurring Savings Plans fees.
	AmortizedCommitment *SavingsPlansAmortizedCommitment `type:"structure"`

	// The attribute that applies to a specific Dimension.
	Attributes map[string]*string `type:"map"`

	// The amount saved by using existing Savings Plans. Savings returns both net
	// savings from savings plans and also the onDemandCostEquivalent of the Savings
	// Plans when considering the utilization rate.
	Savings *SavingsPlansSavings `type:"structure"`

	// The unique Amazon Resource Name (ARN) for a particular Savings Plan.
	SavingsPlanArn *string `type:"string"`

	// A ratio of your effectiveness of using existing Savings Plans to apply to
	// workloads that are Savings Plans eligible.
	Utilization *SavingsPlansUtilization `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 SavingsPlansUtilizationDetail) String() string {
	return awsutil.Prettify(s)
}

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

// SetAmortizedCommitment sets the AmortizedCommitment field's value.
func (s *SavingsPlansUtilizationDetail) SetAmortizedCommitment(v *SavingsPlansAmortizedCommitment) *SavingsPlansUtilizationDetail {
	s.AmortizedCommitment = v
	return s
}

// SetAttributes sets the Attributes field's value.
func (s *SavingsPlansUtilizationDetail) SetAttributes(v map[string]*string) *SavingsPlansUtilizationDetail {
	s.Attributes = v
	return s
}

// SetSavings sets the Savings field's value.
func (s *SavingsPlansUtilizationDetail) SetSavings(v *SavingsPlansSavings) *SavingsPlansUtilizationDetail {
	s.Savings = v
	return s
}

// SetSavingsPlanArn sets the SavingsPlanArn field's value.
func (s *SavingsPlansUtilizationDetail) SetSavingsPlanArn(v string) *SavingsPlansUtilizationDetail {
	s.SavingsPlanArn = &v
	return s
}

// SetUtilization sets the Utilization field's value.
func (s *SavingsPlansUtilizationDetail) SetUtilization(v *SavingsPlansUtilization) *SavingsPlansUtilizationDetail {
	s.Utilization = v
	return s
}

// You've reached the limit on the number of resources you can create, or exceeded
// the size of an individual resource.
type ServiceQuotaExceededException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

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

func newErrorServiceQuotaExceededException(v protocol.ResponseMetadata) error {
	return &ServiceQuotaExceededException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

// Hardware specifications for the service that you want recommendations for.
type ServiceSpecification struct {
	_ struct{} `type:"structure"`

	// The Amazon EC2 hardware specifications that you want Amazon Web Services
	// to provide recommendations for.
	EC2Specification *EC2Specification `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 ServiceSpecification) String() string {
	return awsutil.Prettify(s)
}

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

// SetEC2Specification sets the EC2Specification field's value.
func (s *ServiceSpecification) SetEC2Specification(v *EC2Specification) *ServiceSpecification {
	s.EC2Specification = v
	return s
}

// The details for how to sort the data.
type SortDefinition struct {
	_ struct{} `type:"structure"`

	// The key that's used to sort the data.
	//
	// Key is a required field
	Key *string `type:"string" required:"true"`

	// The order that's used to sort the data.
	SortOrder *string `type:"string" enum:"SortOrder"`
}

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

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

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

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

// SetKey sets the Key field's value.
func (s *SortDefinition) SetKey(v string) *SortDefinition {
	s.Key = &v
	return s
}

// SetSortOrder sets the SortOrder field's value.
func (s *SortDefinition) SetSortOrder(v string) *SortDefinition {
	s.SortOrder = &v
	return s
}

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

	// The date you want the backfill to start from. The date can only be a first
	// day of the month (a billing start date). Dates can't precede the previous
	// twelve months, or in the future.
	//
	// BackfillFrom is a required field
	BackfillFrom *string `min:"20" type:"string" required:"true"`
}

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

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

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

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

// SetBackfillFrom sets the BackfillFrom field's value.
func (s *StartCostAllocationTagBackfillInput) SetBackfillFrom(v string) *StartCostAllocationTagBackfillInput {
	s.BackfillFrom = &v
	return s
}

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

	// An object containing detailed metadata of your new backfill request.
	BackfillRequest *CostAllocationTagBackfillRequest `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 StartCostAllocationTagBackfillOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetBackfillRequest sets the BackfillRequest field's value.
func (s *StartCostAllocationTagBackfillOutput) SetBackfillRequest(v *CostAllocationTagBackfillRequest) *StartCostAllocationTagBackfillOutput {
	s.BackfillRequest = v
	return s
}

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

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

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

	// The estimated time for when the recommendation generation will complete.
	EstimatedCompletionTime *string `min:"20" type:"string"`

	// The start time of the recommendation generation.
	GenerationStartedTime *string `min:"20" type:"string"`

	// The ID for this specific recommendation.
	RecommendationId *string `min:"36" type:"string"`
}

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

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

// SetEstimatedCompletionTime sets the EstimatedCompletionTime field's value.
func (s *StartSavingsPlansPurchaseRecommendationGenerationOutput) SetEstimatedCompletionTime(v string) *StartSavingsPlansPurchaseRecommendationGenerationOutput {
	s.EstimatedCompletionTime = &v
	return s
}

// SetGenerationStartedTime sets the GenerationStartedTime field's value.
func (s *StartSavingsPlansPurchaseRecommendationGenerationOutput) SetGenerationStartedTime(v string) *StartSavingsPlansPurchaseRecommendationGenerationOutput {
	s.GenerationStartedTime = &v
	return s
}

// SetRecommendationId sets the RecommendationId field's value.
func (s *StartSavingsPlansPurchaseRecommendationGenerationOutput) SetRecommendationId(v string) *StartSavingsPlansPurchaseRecommendationGenerationOutput {
	s.RecommendationId = &v
	return s
}

// The recipient of AnomalySubscription notifications.
type Subscriber struct {
	_ struct{} `type:"structure"`

	// The email address or SNS Amazon Resource Name (ARN). This depends on the
	// Type.
	Address *string `min:"6" type:"string"`

	// Indicates if the subscriber accepts the notifications.
	Status *string `type:"string" enum:"SubscriberStatus"`

	// The notification delivery channel.
	Type *string `type:"string" enum:"SubscriberType"`
}

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

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

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

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

// SetAddress sets the Address field's value.
func (s *Subscriber) SetAddress(v string) *Subscriber {
	s.Address = &v
	return s
}

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

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

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

	// The Amazon Resource Name (ARN) of the resource. For a list of supported resources,
	// see ResourceTag (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_ResourceTag.html).
	//
	// ResourceArn is a required field
	ResourceArn *string `min:"20" type:"string" required:"true"`

	// A list of tag key-value pairs to be added to the resource.
	//
	// Each tag consists of a key and a value, and each key must be unique for the
	// resource. The following restrictions apply to resource tags:
	//
	//    * Although the maximum number of array members is 200, you can assign
	//    a maximum of 50 user-tags to one resource. The remaining are reserved
	//    for Amazon Web Services use
	//
	//    * The maximum length of a key is 128 characters
	//
	//    * The maximum length of a value is 256 characters
	//
	//    * Keys and values can only contain alphanumeric characters, spaces, and
	//    any of the following: _.:/=+@-
	//
	//    * Keys and values are case sensitive
	//
	//    * Keys and values are trimmed for any leading or trailing whitespaces
	//
	//    * Don’t use aws: as a prefix for your keys. This prefix is reserved
	//    for Amazon Web Services use
	//
	// ResourceTags is a required field
	ResourceTags []*ResourceTag `type:"list" required:"true"`
}

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

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

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

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

// SetResourceArn sets the ResourceArn field's value.
func (s *TagResourceInput) SetResourceArn(v string) *TagResourceInput {
	s.ResourceArn = &v
	return s
}

// SetResourceTags sets the ResourceTags field's value.
func (s *TagResourceInput) SetResourceTags(v []*ResourceTag) *TagResourceInput {
	s.ResourceTags = v
	return s
}

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

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

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

// The values that are available for a tag.
//
// If Values and Key aren't specified, the ABSENT MatchOption is applied to
// all tags. That is, it's filtered on resources with no tags.
//
// If Key is provided and Values isn't specified, the ABSENT MatchOption is
// applied to the tag Key only. That is, it's filtered on resources without
// the given tag key.
type TagValues struct {
	_ struct{} `type:"structure"`

	// The key for the tag.
	Key *string `type:"string"`

	// The match options that you can use to filter your results. MatchOptions is
	// only applicable for actions related to Cost Category. The default values
	// for MatchOptions are EQUALS and CASE_SENSITIVE.
	MatchOptions []*string `type:"list" enum:"MatchOption"`

	// The specific value of the tag.
	Values []*string `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 TagValues) String() string {
	return awsutil.Prettify(s)
}

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

// SetKey sets the Key field's value.
func (s *TagValues) SetKey(v string) *TagValues {
	s.Key = &v
	return s
}

// SetMatchOptions sets the MatchOptions field's value.
func (s *TagValues) SetMatchOptions(v []*string) *TagValues {
	s.MatchOptions = v
	return s
}

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

// Details on recommended instance.
type TargetInstance struct {
	_ struct{} `type:"structure"`

	// The currency code that Amazon Web Services used to calculate the costs for
	// this instance.
	CurrencyCode *string `type:"string"`

	// Determines whether this recommendation is the defaulted Amazon Web Services
	// recommendation.
	DefaultTargetInstance *bool `type:"boolean"`

	// The expected cost to operate this instance type on a monthly basis.
	EstimatedMonthlyCost *string `type:"string"`

	// The estimated savings that result from modification, on a monthly basis.
	EstimatedMonthlySavings *string `type:"string"`

	// The expected utilization metrics for target instance type.
	ExpectedResourceUtilization *ResourceUtilization `type:"structure"`

	// Explains the actions that you might need to take to successfully migrate
	// your workloads from the current instance type to the recommended instance
	// type.
	PlatformDifferences []*string `type:"list" enum:"PlatformDifference"`

	// Details on the target instance type.
	ResourceDetails *ResourceDetails `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 TargetInstance) String() string {
	return awsutil.Prettify(s)
}

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

// SetCurrencyCode sets the CurrencyCode field's value.
func (s *TargetInstance) SetCurrencyCode(v string) *TargetInstance {
	s.CurrencyCode = &v
	return s
}

// SetDefaultTargetInstance sets the DefaultTargetInstance field's value.
func (s *TargetInstance) SetDefaultTargetInstance(v bool) *TargetInstance {
	s.DefaultTargetInstance = &v
	return s
}

// SetEstimatedMonthlyCost sets the EstimatedMonthlyCost field's value.
func (s *TargetInstance) SetEstimatedMonthlyCost(v string) *TargetInstance {
	s.EstimatedMonthlyCost = &v
	return s
}

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

// SetExpectedResourceUtilization sets the ExpectedResourceUtilization field's value.
func (s *TargetInstance) SetExpectedResourceUtilization(v *ResourceUtilization) *TargetInstance {
	s.ExpectedResourceUtilization = v
	return s
}

// SetPlatformDifferences sets the PlatformDifferences field's value.
func (s *TargetInstance) SetPlatformDifferences(v []*string) *TargetInstance {
	s.PlatformDifferences = v
	return s
}

// SetResourceDetails sets the ResourceDetails field's value.
func (s *TargetInstance) SetResourceDetails(v *ResourceDetails) *TargetInstance {
	s.ResourceDetails = v
	return s
}

// Details on termination recommendation.
type TerminateRecommendationDetail struct {
	_ struct{} `type:"structure"`

	// The currency code that Amazon Web Services used to calculate the costs for
	// this instance.
	CurrencyCode *string `type:"string"`

	// The estimated savings that result from modification, on a monthly basis.
	EstimatedMonthlySavings *string `type:"string"`
}

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

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

// SetCurrencyCode sets the CurrencyCode field's value.
func (s *TerminateRecommendationDetail) SetCurrencyCode(v string) *TerminateRecommendationDetail {
	s.CurrencyCode = &v
	return s
}

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

// Can occur if you specify a number of tags for a resource greater than the
// maximum 50 user tags per resource.
type TooManyTagsException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

	ResourceName *string `min:"20" type:"string"`
}

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

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

func newErrorTooManyTagsException(v protocol.ResponseMetadata) error {
	return &TooManyTagsException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

// Filters cost anomalies based on the total impact.
type TotalImpactFilter struct {
	_ struct{} `type:"structure"`

	// The upper bound dollar value that's used in the filter.
	EndValue *float64 `type:"double"`

	// The comparing value that's used in the filter.
	//
	// NumericOperator is a required field
	NumericOperator *string `type:"string" required:"true" enum:"NumericOperator"`

	// The lower bound dollar value that's used in the filter.
	//
	// StartValue is a required field
	StartValue *float64 `type:"double" required:"true"`
}

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

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

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

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

// SetEndValue sets the EndValue field's value.
func (s *TotalImpactFilter) SetEndValue(v float64) *TotalImpactFilter {
	s.EndValue = &v
	return s
}

// SetNumericOperator sets the NumericOperator field's value.
func (s *TotalImpactFilter) SetNumericOperator(v string) *TotalImpactFilter {
	s.NumericOperator = &v
	return s
}

// SetStartValue sets the StartValue field's value.
func (s *TotalImpactFilter) SetStartValue(v float64) *TotalImpactFilter {
	s.StartValue = &v
	return s
}

// The cost anomaly monitor does not exist for the account.
type UnknownMonitorException 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 UnknownMonitorException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorUnknownMonitorException(v protocol.ResponseMetadata) error {
	return &UnknownMonitorException{
		RespMetadata: v,
	}
}

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

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

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

func (s *UnknownMonitorException) 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 *UnknownMonitorException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The cost anomaly subscription does not exist for the account.
type UnknownSubscriptionException 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 UnknownSubscriptionException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorUnknownSubscriptionException(v protocol.ResponseMetadata) error {
	return &UnknownSubscriptionException{
		RespMetadata: v,
	}
}

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

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

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

func (s *UnknownSubscriptionException) 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 *UnknownSubscriptionException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// Cost Explorer was unable to identify the usage unit. Provide UsageType/UsageTypeGroup
// filter selections that contain matching units, for example: hours.
type UnresolvableUsageUnitException 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 UnresolvableUsageUnitException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorUnresolvableUsageUnitException(v protocol.ResponseMetadata) error {
	return &UnresolvableUsageUnitException{
		RespMetadata: v,
	}
}

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

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

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

func (s *UnresolvableUsageUnitException) 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 *UnresolvableUsageUnitException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

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

	// The Amazon Resource Name (ARN) of the resource. For a list of supported resources,
	// see ResourceTag (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_ResourceTag.html).
	//
	// ResourceArn is a required field
	ResourceArn *string `min:"20" type:"string" required:"true"`

	// A list of tag keys associated with tags that need to be removed from the
	// resource. If you specify a tag key that doesn't exist, it's ignored. Although
	// the maximum number of array members is 200, user-tag maximum is 50. The remaining
	// are reserved for Amazon Web Services use.
	//
	// ResourceTagKeys is a required field
	ResourceTagKeys []*string `type:"list" required:"true"`
}

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

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

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

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

// SetResourceArn sets the ResourceArn field's value.
func (s *UntagResourceInput) SetResourceArn(v string) *UntagResourceInput {
	s.ResourceArn = &v
	return s
}

// SetResourceTagKeys sets the ResourceTagKeys field's value.
func (s *UntagResourceInput) SetResourceTagKeys(v []*string) *UntagResourceInput {
	s.ResourceTagKeys = v
	return s
}

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

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

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

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

	// Cost anomaly monitor Amazon Resource Names (ARNs).
	//
	// MonitorArn is a required field
	MonitorArn *string `type:"string" required:"true"`

	// The new name for the cost anomaly monitor.
	MonitorName *string `type:"string"`
}

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

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

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

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

// SetMonitorArn sets the MonitorArn field's value.
func (s *UpdateAnomalyMonitorInput) SetMonitorArn(v string) *UpdateAnomalyMonitorInput {
	s.MonitorArn = &v
	return s
}

// SetMonitorName sets the MonitorName field's value.
func (s *UpdateAnomalyMonitorInput) SetMonitorName(v string) *UpdateAnomalyMonitorInput {
	s.MonitorName = &v
	return s
}

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

	// A cost anomaly monitor ARN.
	//
	// MonitorArn is a required field
	MonitorArn *string `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 UpdateAnomalyMonitorOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetMonitorArn sets the MonitorArn field's value.
func (s *UpdateAnomalyMonitorOutput) SetMonitorArn(v string) *UpdateAnomalyMonitorOutput {
	s.MonitorArn = &v
	return s
}

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

	// The update to the frequency value that subscribers receive notifications.
	Frequency *string `type:"string" enum:"AnomalySubscriptionFrequency"`

	// A list of cost anomaly monitor ARNs.
	MonitorArnList []*string `type:"list"`

	// The update to the subscriber list.
	Subscribers []*Subscriber `type:"list"`

	// A cost anomaly subscription Amazon Resource Name (ARN).
	//
	// SubscriptionArn is a required field
	SubscriptionArn *string `type:"string" required:"true"`

	// The new name of the subscription.
	SubscriptionName *string `type:"string"`

	// (deprecated)
	//
	// The update to the threshold value for receiving notifications.
	//
	// This field has been deprecated. To update a threshold, use ThresholdExpression.
	// Continued use of Threshold will be treated as shorthand syntax for a ThresholdExpression.
	//
	// You can specify either Threshold or ThresholdExpression, but not both.
	//
	// Deprecated: Threshold has been deprecated in favor of ThresholdExpression
	Threshold *float64 `deprecated:"true" type:"double"`

	// The update to the Expression (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html)
	// object used to specify the anomalies that you want to generate alerts for.
	// This supports dimensions and nested expressions. The supported dimensions
	// are ANOMALY_TOTAL_IMPACT_ABSOLUTE and ANOMALY_TOTAL_IMPACT_PERCENTAGE, corresponding
	// to an anomaly’s TotalImpact and TotalImpactPercentage, respectively (see
	// Impact (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Impact.html)
	// for more details). The supported nested expression types are AND and OR.
	// The match option GREATER_THAN_OR_EQUAL is required. Values must be numbers
	// between 0 and 10,000,000,000 in string format.
	//
	// You can specify either Threshold or ThresholdExpression, but not both.
	//
	// The following are examples of valid ThresholdExpressions:
	//
	//    * Absolute threshold: { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_ABSOLUTE",
	//    "MatchOptions": [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } }
	//
	//    * Percentage threshold: { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_PERCENTAGE",
	//    "MatchOptions": [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } }
	//
	//    * AND two thresholds together: { "And": [ { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_ABSOLUTE",
	//    "MatchOptions": [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } },
	//    { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_PERCENTAGE", "MatchOptions":
	//    [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } } ] }
	//
	//    * OR two thresholds together: { "Or": [ { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_ABSOLUTE",
	//    "MatchOptions": [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } },
	//    { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_PERCENTAGE", "MatchOptions":
	//    [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } } ] }
	ThresholdExpression *Expression `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 UpdateAnomalySubscriptionInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateAnomalySubscriptionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateAnomalySubscriptionInput"}
	if s.SubscriptionArn == nil {
		invalidParams.Add(request.NewErrParamRequired("SubscriptionArn"))
	}
	if s.Subscribers != nil {
		for i, v := range s.Subscribers {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Subscribers", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.ThresholdExpression != nil {
		if err := s.ThresholdExpression.Validate(); err != nil {
			invalidParams.AddNested("ThresholdExpression", err.(request.ErrInvalidParams))
		}
	}

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

// SetFrequency sets the Frequency field's value.
func (s *UpdateAnomalySubscriptionInput) SetFrequency(v string) *UpdateAnomalySubscriptionInput {
	s.Frequency = &v
	return s
}

// SetMonitorArnList sets the MonitorArnList field's value.
func (s *UpdateAnomalySubscriptionInput) SetMonitorArnList(v []*string) *UpdateAnomalySubscriptionInput {
	s.MonitorArnList = v
	return s
}

// SetSubscribers sets the Subscribers field's value.
func (s *UpdateAnomalySubscriptionInput) SetSubscribers(v []*Subscriber) *UpdateAnomalySubscriptionInput {
	s.Subscribers = v
	return s
}

// SetSubscriptionArn sets the SubscriptionArn field's value.
func (s *UpdateAnomalySubscriptionInput) SetSubscriptionArn(v string) *UpdateAnomalySubscriptionInput {
	s.SubscriptionArn = &v
	return s
}

// SetSubscriptionName sets the SubscriptionName field's value.
func (s *UpdateAnomalySubscriptionInput) SetSubscriptionName(v string) *UpdateAnomalySubscriptionInput {
	s.SubscriptionName = &v
	return s
}

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

// SetThresholdExpression sets the ThresholdExpression field's value.
func (s *UpdateAnomalySubscriptionInput) SetThresholdExpression(v *Expression) *UpdateAnomalySubscriptionInput {
	s.ThresholdExpression = v
	return s
}

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

	// A cost anomaly subscription ARN.
	//
	// SubscriptionArn is a required field
	SubscriptionArn *string `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 UpdateAnomalySubscriptionOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetSubscriptionArn sets the SubscriptionArn field's value.
func (s *UpdateAnomalySubscriptionOutput) SetSubscriptionArn(v string) *UpdateAnomalySubscriptionOutput {
	s.SubscriptionArn = &v
	return s
}

// Gives a detailed description of the result of an action. It's on each cost
// allocation tag entry in the request.
type UpdateCostAllocationTagsStatusError struct {
	_ struct{} `type:"structure"`

	// An error code representing why the action failed on this entry.
	Code *string `type:"string"`

	// A message explaining why the action failed on this entry.
	Message *string `type:"string"`

	// The key for the cost allocation tag.
	TagKey *string `type:"string"`
}

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

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

// SetCode sets the Code field's value.
func (s *UpdateCostAllocationTagsStatusError) SetCode(v string) *UpdateCostAllocationTagsStatusError {
	s.Code = &v
	return s
}

// SetMessage sets the Message field's value.
func (s *UpdateCostAllocationTagsStatusError) SetMessage(v string) *UpdateCostAllocationTagsStatusError {
	s.Message = &v
	return s
}

// SetTagKey sets the TagKey field's value.
func (s *UpdateCostAllocationTagsStatusError) SetTagKey(v string) *UpdateCostAllocationTagsStatusError {
	s.TagKey = &v
	return s
}

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

	// The list of CostAllocationTagStatusEntry objects that are used to update
	// cost allocation tags status for this request.
	//
	// CostAllocationTagsStatus is a required field
	CostAllocationTagsStatus []*CostAllocationTagStatusEntry `min:"1" type:"list" required:"true"`
}

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

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

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

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

// SetCostAllocationTagsStatus sets the CostAllocationTagsStatus field's value.
func (s *UpdateCostAllocationTagsStatusInput) SetCostAllocationTagsStatus(v []*CostAllocationTagStatusEntry) *UpdateCostAllocationTagsStatusInput {
	s.CostAllocationTagsStatus = v
	return s
}

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

	// A list of UpdateCostAllocationTagsStatusError objects with error details
	// about each cost allocation tag that can't be updated. If there's no failure,
	// an empty array returns.
	Errors []*UpdateCostAllocationTagsStatusError `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 UpdateCostAllocationTagsStatusOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

	// The unique identifier for your Cost Category.
	//
	// CostCategoryArn is a required field
	CostCategoryArn *string `min:"20" type:"string" required:"true"`

	// The default value for the cost category.
	DefaultValue *string `min:"1" type:"string"`

	// The Cost Category's effective start date. It can only be a billing start
	// date (first day of the month). If the date isn't provided, it's the first
	// day of the current month. Dates can't be before the previous twelve months,
	// or in the future.
	EffectiveStart *string `min:"20" type:"string"`

	// The rule schema version in this particular Cost Category.
	//
	// RuleVersion is a required field
	RuleVersion *string `type:"string" required:"true" enum:"CostCategoryRuleVersion"`

	// The Expression object used to categorize costs. For more information, see
	// CostCategoryRule (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_CostCategoryRule.html).
	//
	// Rules is a required field
	Rules []*CostCategoryRule `min:"1" type:"list" required:"true"`

	// The split charge rules used to allocate your charges between your Cost Category
	// values.
	SplitChargeRules []*CostCategorySplitChargeRule `min:"1" type:"list"`
}

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

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

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

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

// SetCostCategoryArn sets the CostCategoryArn field's value.
func (s *UpdateCostCategoryDefinitionInput) SetCostCategoryArn(v string) *UpdateCostCategoryDefinitionInput {
	s.CostCategoryArn = &v
	return s
}

// SetDefaultValue sets the DefaultValue field's value.
func (s *UpdateCostCategoryDefinitionInput) SetDefaultValue(v string) *UpdateCostCategoryDefinitionInput {
	s.DefaultValue = &v
	return s
}

// SetEffectiveStart sets the EffectiveStart field's value.
func (s *UpdateCostCategoryDefinitionInput) SetEffectiveStart(v string) *UpdateCostCategoryDefinitionInput {
	s.EffectiveStart = &v
	return s
}

// SetRuleVersion sets the RuleVersion field's value.
func (s *UpdateCostCategoryDefinitionInput) SetRuleVersion(v string) *UpdateCostCategoryDefinitionInput {
	s.RuleVersion = &v
	return s
}

// SetRules sets the Rules field's value.
func (s *UpdateCostCategoryDefinitionInput) SetRules(v []*CostCategoryRule) *UpdateCostCategoryDefinitionInput {
	s.Rules = v
	return s
}

// SetSplitChargeRules sets the SplitChargeRules field's value.
func (s *UpdateCostCategoryDefinitionInput) SetSplitChargeRules(v []*CostCategorySplitChargeRule) *UpdateCostCategoryDefinitionInput {
	s.SplitChargeRules = v
	return s
}

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

	// The unique identifier for your Cost Category.
	CostCategoryArn *string `min:"20" type:"string"`

	// The Cost Category's effective start date. It can only be a billing start
	// date (first day of the month).
	EffectiveStart *string `min:"20" type:"string"`
}

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

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

// SetCostCategoryArn sets the CostCategoryArn field's value.
func (s *UpdateCostCategoryDefinitionOutput) SetCostCategoryArn(v string) *UpdateCostCategoryDefinitionOutput {
	s.CostCategoryArn = &v
	return s
}

// SetEffectiveStart sets the EffectiveStart field's value.
func (s *UpdateCostCategoryDefinitionOutput) SetEffectiveStart(v string) *UpdateCostCategoryDefinitionOutput {
	s.EffectiveStart = &v
	return s
}

// The amount of utilization, in hours.
type UtilizationByTime struct {
	_ struct{} `type:"structure"`

	// The groups that this utilization result uses.
	Groups []*ReservationUtilizationGroup `type:"list"`

	// The period of time that this utilization was used for.
	TimePeriod *DateInterval `type:"structure"`

	// The total number of reservation hours that were used.
	Total *ReservationAggregates `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 UtilizationByTime) String() string {
	return awsutil.Prettify(s)
}

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

// SetGroups sets the Groups field's value.
func (s *UtilizationByTime) SetGroups(v []*ReservationUtilizationGroup) *UtilizationByTime {
	s.Groups = v
	return s
}

// SetTimePeriod sets the TimePeriod field's value.
func (s *UtilizationByTime) SetTimePeriod(v *DateInterval) *UtilizationByTime {
	s.TimePeriod = v
	return s
}

// SetTotal sets the Total field's value.
func (s *UtilizationByTime) SetTotal(v *ReservationAggregates) *UtilizationByTime {
	s.Total = v
	return s
}

const (
	// AccountScopePayer is a AccountScope enum value
	AccountScopePayer = "PAYER"

	// AccountScopeLinked is a AccountScope enum value
	AccountScopeLinked = "LINKED"
)

// AccountScope_Values returns all elements of the AccountScope enum
func AccountScope_Values() []string {
	return []string{
		AccountScopePayer,
		AccountScopeLinked,
	}
}

const (
	// AnomalyFeedbackTypeYes is a AnomalyFeedbackType enum value
	AnomalyFeedbackTypeYes = "YES"

	// AnomalyFeedbackTypeNo is a AnomalyFeedbackType enum value
	AnomalyFeedbackTypeNo = "NO"

	// AnomalyFeedbackTypePlannedActivity is a AnomalyFeedbackType enum value
	AnomalyFeedbackTypePlannedActivity = "PLANNED_ACTIVITY"
)

// AnomalyFeedbackType_Values returns all elements of the AnomalyFeedbackType enum
func AnomalyFeedbackType_Values() []string {
	return []string{
		AnomalyFeedbackTypeYes,
		AnomalyFeedbackTypeNo,
		AnomalyFeedbackTypePlannedActivity,
	}
}

const (
	// AnomalySubscriptionFrequencyDaily is a AnomalySubscriptionFrequency enum value
	AnomalySubscriptionFrequencyDaily = "DAILY"

	// AnomalySubscriptionFrequencyImmediate is a AnomalySubscriptionFrequency enum value
	AnomalySubscriptionFrequencyImmediate = "IMMEDIATE"

	// AnomalySubscriptionFrequencyWeekly is a AnomalySubscriptionFrequency enum value
	AnomalySubscriptionFrequencyWeekly = "WEEKLY"
)

// AnomalySubscriptionFrequency_Values returns all elements of the AnomalySubscriptionFrequency enum
func AnomalySubscriptionFrequency_Values() []string {
	return []string{
		AnomalySubscriptionFrequencyDaily,
		AnomalySubscriptionFrequencyImmediate,
		AnomalySubscriptionFrequencyWeekly,
	}
}

const (
	// ApproximationDimensionService is a ApproximationDimension enum value
	ApproximationDimensionService = "SERVICE"

	// ApproximationDimensionResource is a ApproximationDimension enum value
	ApproximationDimensionResource = "RESOURCE"
)

// ApproximationDimension_Values returns all elements of the ApproximationDimension enum
func ApproximationDimension_Values() []string {
	return []string{
		ApproximationDimensionService,
		ApproximationDimensionResource,
	}
}

const (
	// ContextCostAndUsage is a Context enum value
	ContextCostAndUsage = "COST_AND_USAGE"

	// ContextReservations is a Context enum value
	ContextReservations = "RESERVATIONS"

	// ContextSavingsPlans is a Context enum value
	ContextSavingsPlans = "SAVINGS_PLANS"
)

// Context_Values returns all elements of the Context enum
func Context_Values() []string {
	return []string{
		ContextCostAndUsage,
		ContextReservations,
		ContextSavingsPlans,
	}
}

const (
	// CostAllocationTagBackfillStatusSucceeded is a CostAllocationTagBackfillStatus enum value
	CostAllocationTagBackfillStatusSucceeded = "SUCCEEDED"

	// CostAllocationTagBackfillStatusProcessing is a CostAllocationTagBackfillStatus enum value
	CostAllocationTagBackfillStatusProcessing = "PROCESSING"

	// CostAllocationTagBackfillStatusFailed is a CostAllocationTagBackfillStatus enum value
	CostAllocationTagBackfillStatusFailed = "FAILED"
)

// CostAllocationTagBackfillStatus_Values returns all elements of the CostAllocationTagBackfillStatus enum
func CostAllocationTagBackfillStatus_Values() []string {
	return []string{
		CostAllocationTagBackfillStatusSucceeded,
		CostAllocationTagBackfillStatusProcessing,
		CostAllocationTagBackfillStatusFailed,
	}
}

const (
	// CostAllocationTagStatusActive is a CostAllocationTagStatus enum value
	CostAllocationTagStatusActive = "Active"

	// CostAllocationTagStatusInactive is a CostAllocationTagStatus enum value
	CostAllocationTagStatusInactive = "Inactive"
)

// CostAllocationTagStatus_Values returns all elements of the CostAllocationTagStatus enum
func CostAllocationTagStatus_Values() []string {
	return []string{
		CostAllocationTagStatusActive,
		CostAllocationTagStatusInactive,
	}
}

const (
	// CostAllocationTagTypeAwsgenerated is a CostAllocationTagType enum value
	CostAllocationTagTypeAwsgenerated = "AWSGenerated"

	// CostAllocationTagTypeUserDefined is a CostAllocationTagType enum value
	CostAllocationTagTypeUserDefined = "UserDefined"
)

// CostAllocationTagType_Values returns all elements of the CostAllocationTagType enum
func CostAllocationTagType_Values() []string {
	return []string{
		CostAllocationTagTypeAwsgenerated,
		CostAllocationTagTypeUserDefined,
	}
}

const (
	// CostCategoryInheritedValueDimensionNameLinkedAccountName is a CostCategoryInheritedValueDimensionName enum value
	CostCategoryInheritedValueDimensionNameLinkedAccountName = "LINKED_ACCOUNT_NAME"

	// CostCategoryInheritedValueDimensionNameTag is a CostCategoryInheritedValueDimensionName enum value
	CostCategoryInheritedValueDimensionNameTag = "TAG"
)

// CostCategoryInheritedValueDimensionName_Values returns all elements of the CostCategoryInheritedValueDimensionName enum
func CostCategoryInheritedValueDimensionName_Values() []string {
	return []string{
		CostCategoryInheritedValueDimensionNameLinkedAccountName,
		CostCategoryInheritedValueDimensionNameTag,
	}
}

const (
	// CostCategoryRuleTypeRegular is a CostCategoryRuleType enum value
	CostCategoryRuleTypeRegular = "REGULAR"

	// CostCategoryRuleTypeInheritedValue is a CostCategoryRuleType enum value
	CostCategoryRuleTypeInheritedValue = "INHERITED_VALUE"
)

// CostCategoryRuleType_Values returns all elements of the CostCategoryRuleType enum
func CostCategoryRuleType_Values() []string {
	return []string{
		CostCategoryRuleTypeRegular,
		CostCategoryRuleTypeInheritedValue,
	}
}

// The rule schema version in this particular Cost Category.
const (
	// CostCategoryRuleVersionCostCategoryExpressionV1 is a CostCategoryRuleVersion enum value
	CostCategoryRuleVersionCostCategoryExpressionV1 = "CostCategoryExpression.v1"
)

// CostCategoryRuleVersion_Values returns all elements of the CostCategoryRuleVersion enum
func CostCategoryRuleVersion_Values() []string {
	return []string{
		CostCategoryRuleVersionCostCategoryExpressionV1,
	}
}

const (
	// CostCategorySplitChargeMethodFixed is a CostCategorySplitChargeMethod enum value
	CostCategorySplitChargeMethodFixed = "FIXED"

	// CostCategorySplitChargeMethodProportional is a CostCategorySplitChargeMethod enum value
	CostCategorySplitChargeMethodProportional = "PROPORTIONAL"

	// CostCategorySplitChargeMethodEven is a CostCategorySplitChargeMethod enum value
	CostCategorySplitChargeMethodEven = "EVEN"
)

// CostCategorySplitChargeMethod_Values returns all elements of the CostCategorySplitChargeMethod enum
func CostCategorySplitChargeMethod_Values() []string {
	return []string{
		CostCategorySplitChargeMethodFixed,
		CostCategorySplitChargeMethodProportional,
		CostCategorySplitChargeMethodEven,
	}
}

const (
	// CostCategorySplitChargeRuleParameterTypeAllocationPercentages is a CostCategorySplitChargeRuleParameterType enum value
	CostCategorySplitChargeRuleParameterTypeAllocationPercentages = "ALLOCATION_PERCENTAGES"
)

// CostCategorySplitChargeRuleParameterType_Values returns all elements of the CostCategorySplitChargeRuleParameterType enum
func CostCategorySplitChargeRuleParameterType_Values() []string {
	return []string{
		CostCategorySplitChargeRuleParameterTypeAllocationPercentages,
	}
}

const (
	// CostCategoryStatusProcessing is a CostCategoryStatus enum value
	CostCategoryStatusProcessing = "PROCESSING"

	// CostCategoryStatusApplied is a CostCategoryStatus enum value
	CostCategoryStatusApplied = "APPLIED"
)

// CostCategoryStatus_Values returns all elements of the CostCategoryStatus enum
func CostCategoryStatus_Values() []string {
	return []string{
		CostCategoryStatusProcessing,
		CostCategoryStatusApplied,
	}
}

const (
	// CostCategoryStatusComponentCostExplorer is a CostCategoryStatusComponent enum value
	CostCategoryStatusComponentCostExplorer = "COST_EXPLORER"
)

// CostCategoryStatusComponent_Values returns all elements of the CostCategoryStatusComponent enum
func CostCategoryStatusComponent_Values() []string {
	return []string{
		CostCategoryStatusComponentCostExplorer,
	}
}

const (
	// DimensionAz is a Dimension enum value
	DimensionAz = "AZ"

	// DimensionInstanceType is a Dimension enum value
	DimensionInstanceType = "INSTANCE_TYPE"

	// DimensionLinkedAccount is a Dimension enum value
	DimensionLinkedAccount = "LINKED_ACCOUNT"

	// DimensionLinkedAccountName is a Dimension enum value
	DimensionLinkedAccountName = "LINKED_ACCOUNT_NAME"

	// DimensionOperation is a Dimension enum value
	DimensionOperation = "OPERATION"

	// DimensionPurchaseType is a Dimension enum value
	DimensionPurchaseType = "PURCHASE_TYPE"

	// DimensionRegion is a Dimension enum value
	DimensionRegion = "REGION"

	// DimensionService is a Dimension enum value
	DimensionService = "SERVICE"

	// DimensionServiceCode is a Dimension enum value
	DimensionServiceCode = "SERVICE_CODE"

	// DimensionUsageType is a Dimension enum value
	DimensionUsageType = "USAGE_TYPE"

	// DimensionUsageTypeGroup is a Dimension enum value
	DimensionUsageTypeGroup = "USAGE_TYPE_GROUP"

	// DimensionRecordType is a Dimension enum value
	DimensionRecordType = "RECORD_TYPE"

	// DimensionOperatingSystem is a Dimension enum value
	DimensionOperatingSystem = "OPERATING_SYSTEM"

	// DimensionTenancy is a Dimension enum value
	DimensionTenancy = "TENANCY"

	// DimensionScope is a Dimension enum value
	DimensionScope = "SCOPE"

	// DimensionPlatform is a Dimension enum value
	DimensionPlatform = "PLATFORM"

	// DimensionSubscriptionId is a Dimension enum value
	DimensionSubscriptionId = "SUBSCRIPTION_ID"

	// DimensionLegalEntityName is a Dimension enum value
	DimensionLegalEntityName = "LEGAL_ENTITY_NAME"

	// DimensionDeploymentOption is a Dimension enum value
	DimensionDeploymentOption = "DEPLOYMENT_OPTION"

	// DimensionDatabaseEngine is a Dimension enum value
	DimensionDatabaseEngine = "DATABASE_ENGINE"

	// DimensionCacheEngine is a Dimension enum value
	DimensionCacheEngine = "CACHE_ENGINE"

	// DimensionInstanceTypeFamily is a Dimension enum value
	DimensionInstanceTypeFamily = "INSTANCE_TYPE_FAMILY"

	// DimensionBillingEntity is a Dimension enum value
	DimensionBillingEntity = "BILLING_ENTITY"

	// DimensionReservationId is a Dimension enum value
	DimensionReservationId = "RESERVATION_ID"

	// DimensionResourceId is a Dimension enum value
	DimensionResourceId = "RESOURCE_ID"

	// DimensionRightsizingType is a Dimension enum value
	DimensionRightsizingType = "RIGHTSIZING_TYPE"

	// DimensionSavingsPlansType is a Dimension enum value
	DimensionSavingsPlansType = "SAVINGS_PLANS_TYPE"

	// DimensionSavingsPlanArn is a Dimension enum value
	DimensionSavingsPlanArn = "SAVINGS_PLAN_ARN"

	// DimensionPaymentOption is a Dimension enum value
	DimensionPaymentOption = "PAYMENT_OPTION"

	// DimensionAgreementEndDateTimeAfter is a Dimension enum value
	DimensionAgreementEndDateTimeAfter = "AGREEMENT_END_DATE_TIME_AFTER"

	// DimensionAgreementEndDateTimeBefore is a Dimension enum value
	DimensionAgreementEndDateTimeBefore = "AGREEMENT_END_DATE_TIME_BEFORE"

	// DimensionInvoicingEntity is a Dimension enum value
	DimensionInvoicingEntity = "INVOICING_ENTITY"

	// DimensionAnomalyTotalImpactAbsolute is a Dimension enum value
	DimensionAnomalyTotalImpactAbsolute = "ANOMALY_TOTAL_IMPACT_ABSOLUTE"

	// DimensionAnomalyTotalImpactPercentage is a Dimension enum value
	DimensionAnomalyTotalImpactPercentage = "ANOMALY_TOTAL_IMPACT_PERCENTAGE"
)

// Dimension_Values returns all elements of the Dimension enum
func Dimension_Values() []string {
	return []string{
		DimensionAz,
		DimensionInstanceType,
		DimensionLinkedAccount,
		DimensionLinkedAccountName,
		DimensionOperation,
		DimensionPurchaseType,
		DimensionRegion,
		DimensionService,
		DimensionServiceCode,
		DimensionUsageType,
		DimensionUsageTypeGroup,
		DimensionRecordType,
		DimensionOperatingSystem,
		DimensionTenancy,
		DimensionScope,
		DimensionPlatform,
		DimensionSubscriptionId,
		DimensionLegalEntityName,
		DimensionDeploymentOption,
		DimensionDatabaseEngine,
		DimensionCacheEngine,
		DimensionInstanceTypeFamily,
		DimensionBillingEntity,
		DimensionReservationId,
		DimensionResourceId,
		DimensionRightsizingType,
		DimensionSavingsPlansType,
		DimensionSavingsPlanArn,
		DimensionPaymentOption,
		DimensionAgreementEndDateTimeAfter,
		DimensionAgreementEndDateTimeBefore,
		DimensionInvoicingEntity,
		DimensionAnomalyTotalImpactAbsolute,
		DimensionAnomalyTotalImpactPercentage,
	}
}

const (
	// FindingReasonCodeCpuOverProvisioned is a FindingReasonCode enum value
	FindingReasonCodeCpuOverProvisioned = "CPU_OVER_PROVISIONED"

	// FindingReasonCodeCpuUnderProvisioned is a FindingReasonCode enum value
	FindingReasonCodeCpuUnderProvisioned = "CPU_UNDER_PROVISIONED"

	// FindingReasonCodeMemoryOverProvisioned is a FindingReasonCode enum value
	FindingReasonCodeMemoryOverProvisioned = "MEMORY_OVER_PROVISIONED"

	// FindingReasonCodeMemoryUnderProvisioned is a FindingReasonCode enum value
	FindingReasonCodeMemoryUnderProvisioned = "MEMORY_UNDER_PROVISIONED"

	// FindingReasonCodeEbsThroughputOverProvisioned is a FindingReasonCode enum value
	FindingReasonCodeEbsThroughputOverProvisioned = "EBS_THROUGHPUT_OVER_PROVISIONED"

	// FindingReasonCodeEbsThroughputUnderProvisioned is a FindingReasonCode enum value
	FindingReasonCodeEbsThroughputUnderProvisioned = "EBS_THROUGHPUT_UNDER_PROVISIONED"

	// FindingReasonCodeEbsIopsOverProvisioned is a FindingReasonCode enum value
	FindingReasonCodeEbsIopsOverProvisioned = "EBS_IOPS_OVER_PROVISIONED"

	// FindingReasonCodeEbsIopsUnderProvisioned is a FindingReasonCode enum value
	FindingReasonCodeEbsIopsUnderProvisioned = "EBS_IOPS_UNDER_PROVISIONED"

	// FindingReasonCodeNetworkBandwidthOverProvisioned is a FindingReasonCode enum value
	FindingReasonCodeNetworkBandwidthOverProvisioned = "NETWORK_BANDWIDTH_OVER_PROVISIONED"

	// FindingReasonCodeNetworkBandwidthUnderProvisioned is a FindingReasonCode enum value
	FindingReasonCodeNetworkBandwidthUnderProvisioned = "NETWORK_BANDWIDTH_UNDER_PROVISIONED"

	// FindingReasonCodeNetworkPpsOverProvisioned is a FindingReasonCode enum value
	FindingReasonCodeNetworkPpsOverProvisioned = "NETWORK_PPS_OVER_PROVISIONED"

	// FindingReasonCodeNetworkPpsUnderProvisioned is a FindingReasonCode enum value
	FindingReasonCodeNetworkPpsUnderProvisioned = "NETWORK_PPS_UNDER_PROVISIONED"

	// FindingReasonCodeDiskIopsOverProvisioned is a FindingReasonCode enum value
	FindingReasonCodeDiskIopsOverProvisioned = "DISK_IOPS_OVER_PROVISIONED"

	// FindingReasonCodeDiskIopsUnderProvisioned is a FindingReasonCode enum value
	FindingReasonCodeDiskIopsUnderProvisioned = "DISK_IOPS_UNDER_PROVISIONED"

	// FindingReasonCodeDiskThroughputOverProvisioned is a FindingReasonCode enum value
	FindingReasonCodeDiskThroughputOverProvisioned = "DISK_THROUGHPUT_OVER_PROVISIONED"

	// FindingReasonCodeDiskThroughputUnderProvisioned is a FindingReasonCode enum value
	FindingReasonCodeDiskThroughputUnderProvisioned = "DISK_THROUGHPUT_UNDER_PROVISIONED"
)

// FindingReasonCode_Values returns all elements of the FindingReasonCode enum
func FindingReasonCode_Values() []string {
	return []string{
		FindingReasonCodeCpuOverProvisioned,
		FindingReasonCodeCpuUnderProvisioned,
		FindingReasonCodeMemoryOverProvisioned,
		FindingReasonCodeMemoryUnderProvisioned,
		FindingReasonCodeEbsThroughputOverProvisioned,
		FindingReasonCodeEbsThroughputUnderProvisioned,
		FindingReasonCodeEbsIopsOverProvisioned,
		FindingReasonCodeEbsIopsUnderProvisioned,
		FindingReasonCodeNetworkBandwidthOverProvisioned,
		FindingReasonCodeNetworkBandwidthUnderProvisioned,
		FindingReasonCodeNetworkPpsOverProvisioned,
		FindingReasonCodeNetworkPpsUnderProvisioned,
		FindingReasonCodeDiskIopsOverProvisioned,
		FindingReasonCodeDiskIopsUnderProvisioned,
		FindingReasonCodeDiskThroughputOverProvisioned,
		FindingReasonCodeDiskThroughputUnderProvisioned,
	}
}

const (
	// GenerationStatusSucceeded is a GenerationStatus enum value
	GenerationStatusSucceeded = "SUCCEEDED"

	// GenerationStatusProcessing is a GenerationStatus enum value
	GenerationStatusProcessing = "PROCESSING"

	// GenerationStatusFailed is a GenerationStatus enum value
	GenerationStatusFailed = "FAILED"
)

// GenerationStatus_Values returns all elements of the GenerationStatus enum
func GenerationStatus_Values() []string {
	return []string{
		GenerationStatusSucceeded,
		GenerationStatusProcessing,
		GenerationStatusFailed,
	}
}

const (
	// GranularityDaily is a Granularity enum value
	GranularityDaily = "DAILY"

	// GranularityMonthly is a Granularity enum value
	GranularityMonthly = "MONTHLY"

	// GranularityHourly is a Granularity enum value
	GranularityHourly = "HOURLY"
)

// Granularity_Values returns all elements of the Granularity enum
func Granularity_Values() []string {
	return []string{
		GranularityDaily,
		GranularityMonthly,
		GranularityHourly,
	}
}

const (
	// GroupDefinitionTypeDimension is a GroupDefinitionType enum value
	GroupDefinitionTypeDimension = "DIMENSION"

	// GroupDefinitionTypeTag is a GroupDefinitionType enum value
	GroupDefinitionTypeTag = "TAG"

	// GroupDefinitionTypeCostCategory is a GroupDefinitionType enum value
	GroupDefinitionTypeCostCategory = "COST_CATEGORY"
)

// GroupDefinitionType_Values returns all elements of the GroupDefinitionType enum
func GroupDefinitionType_Values() []string {
	return []string{
		GroupDefinitionTypeDimension,
		GroupDefinitionTypeTag,
		GroupDefinitionTypeCostCategory,
	}
}

const (
	// LookbackPeriodInDaysSevenDays is a LookbackPeriodInDays enum value
	LookbackPeriodInDaysSevenDays = "SEVEN_DAYS"

	// LookbackPeriodInDaysThirtyDays is a LookbackPeriodInDays enum value
	LookbackPeriodInDaysThirtyDays = "THIRTY_DAYS"

	// LookbackPeriodInDaysSixtyDays is a LookbackPeriodInDays enum value
	LookbackPeriodInDaysSixtyDays = "SIXTY_DAYS"
)

// LookbackPeriodInDays_Values returns all elements of the LookbackPeriodInDays enum
func LookbackPeriodInDays_Values() []string {
	return []string{
		LookbackPeriodInDaysSevenDays,
		LookbackPeriodInDaysThirtyDays,
		LookbackPeriodInDaysSixtyDays,
	}
}

const (
	// MatchOptionEquals is a MatchOption enum value
	MatchOptionEquals = "EQUALS"

	// MatchOptionAbsent is a MatchOption enum value
	MatchOptionAbsent = "ABSENT"

	// MatchOptionStartsWith is a MatchOption enum value
	MatchOptionStartsWith = "STARTS_WITH"

	// MatchOptionEndsWith is a MatchOption enum value
	MatchOptionEndsWith = "ENDS_WITH"

	// MatchOptionContains is a MatchOption enum value
	MatchOptionContains = "CONTAINS"

	// MatchOptionCaseSensitive is a MatchOption enum value
	MatchOptionCaseSensitive = "CASE_SENSITIVE"

	// MatchOptionCaseInsensitive is a MatchOption enum value
	MatchOptionCaseInsensitive = "CASE_INSENSITIVE"

	// MatchOptionGreaterThanOrEqual is a MatchOption enum value
	MatchOptionGreaterThanOrEqual = "GREATER_THAN_OR_EQUAL"
)

// MatchOption_Values returns all elements of the MatchOption enum
func MatchOption_Values() []string {
	return []string{
		MatchOptionEquals,
		MatchOptionAbsent,
		MatchOptionStartsWith,
		MatchOptionEndsWith,
		MatchOptionContains,
		MatchOptionCaseSensitive,
		MatchOptionCaseInsensitive,
		MatchOptionGreaterThanOrEqual,
	}
}

const (
	// MetricBlendedCost is a Metric enum value
	MetricBlendedCost = "BLENDED_COST"

	// MetricUnblendedCost is a Metric enum value
	MetricUnblendedCost = "UNBLENDED_COST"

	// MetricAmortizedCost is a Metric enum value
	MetricAmortizedCost = "AMORTIZED_COST"

	// MetricNetUnblendedCost is a Metric enum value
	MetricNetUnblendedCost = "NET_UNBLENDED_COST"

	// MetricNetAmortizedCost is a Metric enum value
	MetricNetAmortizedCost = "NET_AMORTIZED_COST"

	// MetricUsageQuantity is a Metric enum value
	MetricUsageQuantity = "USAGE_QUANTITY"

	// MetricNormalizedUsageAmount is a Metric enum value
	MetricNormalizedUsageAmount = "NORMALIZED_USAGE_AMOUNT"
)

// Metric_Values returns all elements of the Metric enum
func Metric_Values() []string {
	return []string{
		MetricBlendedCost,
		MetricUnblendedCost,
		MetricAmortizedCost,
		MetricNetUnblendedCost,
		MetricNetAmortizedCost,
		MetricUsageQuantity,
		MetricNormalizedUsageAmount,
	}
}

const (
	// MonitorDimensionService is a MonitorDimension enum value
	MonitorDimensionService = "SERVICE"
)

// MonitorDimension_Values returns all elements of the MonitorDimension enum
func MonitorDimension_Values() []string {
	return []string{
		MonitorDimensionService,
	}
}

const (
	// MonitorTypeDimensional is a MonitorType enum value
	MonitorTypeDimensional = "DIMENSIONAL"

	// MonitorTypeCustom is a MonitorType enum value
	MonitorTypeCustom = "CUSTOM"
)

// MonitorType_Values returns all elements of the MonitorType enum
func MonitorType_Values() []string {
	return []string{
		MonitorTypeDimensional,
		MonitorTypeCustom,
	}
}

const (
	// NumericOperatorEqual is a NumericOperator enum value
	NumericOperatorEqual = "EQUAL"

	// NumericOperatorGreaterThanOrEqual is a NumericOperator enum value
	NumericOperatorGreaterThanOrEqual = "GREATER_THAN_OR_EQUAL"

	// NumericOperatorLessThanOrEqual is a NumericOperator enum value
	NumericOperatorLessThanOrEqual = "LESS_THAN_OR_EQUAL"

	// NumericOperatorGreaterThan is a NumericOperator enum value
	NumericOperatorGreaterThan = "GREATER_THAN"

	// NumericOperatorLessThan is a NumericOperator enum value
	NumericOperatorLessThan = "LESS_THAN"

	// NumericOperatorBetween is a NumericOperator enum value
	NumericOperatorBetween = "BETWEEN"
)

// NumericOperator_Values returns all elements of the NumericOperator enum
func NumericOperator_Values() []string {
	return []string{
		NumericOperatorEqual,
		NumericOperatorGreaterThanOrEqual,
		NumericOperatorLessThanOrEqual,
		NumericOperatorGreaterThan,
		NumericOperatorLessThan,
		NumericOperatorBetween,
	}
}

const (
	// OfferingClassStandard is a OfferingClass enum value
	OfferingClassStandard = "STANDARD"

	// OfferingClassConvertible is a OfferingClass enum value
	OfferingClassConvertible = "CONVERTIBLE"
)

// OfferingClass_Values returns all elements of the OfferingClass enum
func OfferingClass_Values() []string {
	return []string{
		OfferingClassStandard,
		OfferingClassConvertible,
	}
}

const (
	// PaymentOptionNoUpfront is a PaymentOption enum value
	PaymentOptionNoUpfront = "NO_UPFRONT"

	// PaymentOptionPartialUpfront is a PaymentOption enum value
	PaymentOptionPartialUpfront = "PARTIAL_UPFRONT"

	// PaymentOptionAllUpfront is a PaymentOption enum value
	PaymentOptionAllUpfront = "ALL_UPFRONT"

	// PaymentOptionLightUtilization is a PaymentOption enum value
	PaymentOptionLightUtilization = "LIGHT_UTILIZATION"

	// PaymentOptionMediumUtilization is a PaymentOption enum value
	PaymentOptionMediumUtilization = "MEDIUM_UTILIZATION"

	// PaymentOptionHeavyUtilization is a PaymentOption enum value
	PaymentOptionHeavyUtilization = "HEAVY_UTILIZATION"
)

// PaymentOption_Values returns all elements of the PaymentOption enum
func PaymentOption_Values() []string {
	return []string{
		PaymentOptionNoUpfront,
		PaymentOptionPartialUpfront,
		PaymentOptionAllUpfront,
		PaymentOptionLightUtilization,
		PaymentOptionMediumUtilization,
		PaymentOptionHeavyUtilization,
	}
}

const (
	// PlatformDifferenceHypervisor is a PlatformDifference enum value
	PlatformDifferenceHypervisor = "HYPERVISOR"

	// PlatformDifferenceNetworkInterface is a PlatformDifference enum value
	PlatformDifferenceNetworkInterface = "NETWORK_INTERFACE"

	// PlatformDifferenceStorageInterface is a PlatformDifference enum value
	PlatformDifferenceStorageInterface = "STORAGE_INTERFACE"

	// PlatformDifferenceInstanceStoreAvailability is a PlatformDifference enum value
	PlatformDifferenceInstanceStoreAvailability = "INSTANCE_STORE_AVAILABILITY"

	// PlatformDifferenceVirtualizationType is a PlatformDifference enum value
	PlatformDifferenceVirtualizationType = "VIRTUALIZATION_TYPE"
)

// PlatformDifference_Values returns all elements of the PlatformDifference enum
func PlatformDifference_Values() []string {
	return []string{
		PlatformDifferenceHypervisor,
		PlatformDifferenceNetworkInterface,
		PlatformDifferenceStorageInterface,
		PlatformDifferenceInstanceStoreAvailability,
		PlatformDifferenceVirtualizationType,
	}
}

const (
	// RecommendationTargetSameInstanceFamily is a RecommendationTarget enum value
	RecommendationTargetSameInstanceFamily = "SAME_INSTANCE_FAMILY"

	// RecommendationTargetCrossInstanceFamily is a RecommendationTarget enum value
	RecommendationTargetCrossInstanceFamily = "CROSS_INSTANCE_FAMILY"
)

// RecommendationTarget_Values returns all elements of the RecommendationTarget enum
func RecommendationTarget_Values() []string {
	return []string{
		RecommendationTargetSameInstanceFamily,
		RecommendationTargetCrossInstanceFamily,
	}
}

const (
	// RightsizingTypeTerminate is a RightsizingType enum value
	RightsizingTypeTerminate = "TERMINATE"

	// RightsizingTypeModify is a RightsizingType enum value
	RightsizingTypeModify = "MODIFY"
)

// RightsizingType_Values returns all elements of the RightsizingType enum
func RightsizingType_Values() []string {
	return []string{
		RightsizingTypeTerminate,
		RightsizingTypeModify,
	}
}

const (
	// SavingsPlansDataTypeAttributes is a SavingsPlansDataType enum value
	SavingsPlansDataTypeAttributes = "ATTRIBUTES"

	// SavingsPlansDataTypeUtilization is a SavingsPlansDataType enum value
	SavingsPlansDataTypeUtilization = "UTILIZATION"

	// SavingsPlansDataTypeAmortizedCommitment is a SavingsPlansDataType enum value
	SavingsPlansDataTypeAmortizedCommitment = "AMORTIZED_COMMITMENT"

	// SavingsPlansDataTypeSavings is a SavingsPlansDataType enum value
	SavingsPlansDataTypeSavings = "SAVINGS"
)

// SavingsPlansDataType_Values returns all elements of the SavingsPlansDataType enum
func SavingsPlansDataType_Values() []string {
	return []string{
		SavingsPlansDataTypeAttributes,
		SavingsPlansDataTypeUtilization,
		SavingsPlansDataTypeAmortizedCommitment,
		SavingsPlansDataTypeSavings,
	}
}

const (
	// SortOrderAscending is a SortOrder enum value
	SortOrderAscending = "ASCENDING"

	// SortOrderDescending is a SortOrder enum value
	SortOrderDescending = "DESCENDING"
)

// SortOrder_Values returns all elements of the SortOrder enum
func SortOrder_Values() []string {
	return []string{
		SortOrderAscending,
		SortOrderDescending,
	}
}

const (
	// SubscriberStatusConfirmed is a SubscriberStatus enum value
	SubscriberStatusConfirmed = "CONFIRMED"

	// SubscriberStatusDeclined is a SubscriberStatus enum value
	SubscriberStatusDeclined = "DECLINED"
)

// SubscriberStatus_Values returns all elements of the SubscriberStatus enum
func SubscriberStatus_Values() []string {
	return []string{
		SubscriberStatusConfirmed,
		SubscriberStatusDeclined,
	}
}

const (
	// SubscriberTypeEmail is a SubscriberType enum value
	SubscriberTypeEmail = "EMAIL"

	// SubscriberTypeSns is a SubscriberType enum value
	SubscriberTypeSns = "SNS"
)

// SubscriberType_Values returns all elements of the SubscriberType enum
func SubscriberType_Values() []string {
	return []string{
		SubscriberTypeEmail,
		SubscriberTypeSns,
	}
}

const (
	// SupportedSavingsPlansTypeComputeSp is a SupportedSavingsPlansType enum value
	SupportedSavingsPlansTypeComputeSp = "COMPUTE_SP"

	// SupportedSavingsPlansTypeEc2InstanceSp is a SupportedSavingsPlansType enum value
	SupportedSavingsPlansTypeEc2InstanceSp = "EC2_INSTANCE_SP"

	// SupportedSavingsPlansTypeSagemakerSp is a SupportedSavingsPlansType enum value
	SupportedSavingsPlansTypeSagemakerSp = "SAGEMAKER_SP"
)

// SupportedSavingsPlansType_Values returns all elements of the SupportedSavingsPlansType enum
func SupportedSavingsPlansType_Values() []string {
	return []string{
		SupportedSavingsPlansTypeComputeSp,
		SupportedSavingsPlansTypeEc2InstanceSp,
		SupportedSavingsPlansTypeSagemakerSp,
	}
}

const (
	// TermInYearsOneYear is a TermInYears enum value
	TermInYearsOneYear = "ONE_YEAR"

	// TermInYearsThreeYears is a TermInYears enum value
	TermInYearsThreeYears = "THREE_YEARS"
)

// TermInYears_Values returns all elements of the TermInYears enum
func TermInYears_Values() []string {
	return []string{
		TermInYearsOneYear,
		TermInYearsThreeYears,
	}
}
