// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.

// Package configservice provides a client for AWS Config.
package configservice

import (
	"time"

	"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 opDeleteConfigRule = "DeleteConfigRule"

// DeleteConfigRuleRequest generates a request for the DeleteConfigRule operation.
func (c *ConfigService) DeleteConfigRuleRequest(input *DeleteConfigRuleInput) (req *request.Request, output *DeleteConfigRuleOutput) {
	op := &request.Operation{
		Name:       opDeleteConfigRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteConfigRuleInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DeleteConfigRuleOutput{}
	req.Data = output
	return
}

// Deletes the specified AWS Config rule and all of its evaluation results.
//
// AWS Config sets the state of a rule to DELETING until the deletion is complete.
// You cannot update a rule while it is in this state. If you make a PutConfigRule
// request for the rule, you will receive a ResourceInUseException.
//
// You can check the state of a rule by using the DescribeConfigRules request.
func (c *ConfigService) DeleteConfigRule(input *DeleteConfigRuleInput) (*DeleteConfigRuleOutput, error) {
	req, out := c.DeleteConfigRuleRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteDeliveryChannel = "DeleteDeliveryChannel"

// DeleteDeliveryChannelRequest generates a request for the DeleteDeliveryChannel operation.
func (c *ConfigService) DeleteDeliveryChannelRequest(input *DeleteDeliveryChannelInput) (req *request.Request, output *DeleteDeliveryChannelOutput) {
	op := &request.Operation{
		Name:       opDeleteDeliveryChannel,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteDeliveryChannelInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DeleteDeliveryChannelOutput{}
	req.Data = output
	return
}

// Deletes the specified delivery channel.
//
// The delivery channel cannot be deleted if it is the only delivery channel
// and the configuration recorder is still running. To delete the delivery channel,
// stop the running configuration recorder using the StopConfigurationRecorder
// action.
func (c *ConfigService) DeleteDeliveryChannel(input *DeleteDeliveryChannelInput) (*DeleteDeliveryChannelOutput, error) {
	req, out := c.DeleteDeliveryChannelRequest(input)
	err := req.Send()
	return out, err
}

const opDeliverConfigSnapshot = "DeliverConfigSnapshot"

// DeliverConfigSnapshotRequest generates a request for the DeliverConfigSnapshot operation.
func (c *ConfigService) DeliverConfigSnapshotRequest(input *DeliverConfigSnapshotInput) (req *request.Request, output *DeliverConfigSnapshotOutput) {
	op := &request.Operation{
		Name:       opDeliverConfigSnapshot,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeliverConfigSnapshotInput{}
	}

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

// Schedules delivery of a configuration snapshot to the Amazon S3 bucket in
// the specified delivery channel. After the delivery has started, AWS Config
// sends following notifications using an Amazon SNS topic that you have specified.
//
//  Notification of starting the delivery. Notification of delivery completed,
// if the delivery was successfully completed. Notification of delivery failure,
// if the delivery failed to complete.
func (c *ConfigService) DeliverConfigSnapshot(input *DeliverConfigSnapshotInput) (*DeliverConfigSnapshotOutput, error) {
	req, out := c.DeliverConfigSnapshotRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeComplianceByConfigRule = "DescribeComplianceByConfigRule"

// DescribeComplianceByConfigRuleRequest generates a request for the DescribeComplianceByConfigRule operation.
func (c *ConfigService) DescribeComplianceByConfigRuleRequest(input *DescribeComplianceByConfigRuleInput) (req *request.Request, output *DescribeComplianceByConfigRuleOutput) {
	op := &request.Operation{
		Name:       opDescribeComplianceByConfigRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeComplianceByConfigRuleInput{}
	}

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

// Indicates whether the specified AWS Config rules are compliant. If a rule
// is noncompliant, this action returns the number of AWS resources that do
// not comply with the rule.
//
// A rule is compliant if all of the evaluated resources comply with it, and
// it is noncompliant if any of these resources do not comply.
//
// If AWS Config has no current evaluation results for the rule, it returns
// InsufficientData. This result might indicate one of the following conditions:
//  AWS Config has never invoked an evaluation for the rule. To check whether
// it has, use the DescribeConfigRuleEvaluationStatus action to get the LastSuccessfulInvocationTime
// and LastFailedInvocationTime. The rule's AWS Lambda function is failing to
// send evaluation results to AWS Config. Verify that the role that you assigned
// to your configuration recorder includes the config:PutEvaluations permission.
// If the rule is a customer managed rule, verify that the AWS Lambda execution
// role includes the config:PutEvaluations permission. The rule's AWS Lambda
// function has returned NOT_APPLICABLE for all evaluation results. This can
// occur if the resources were deleted or removed from the rule's scope.
func (c *ConfigService) DescribeComplianceByConfigRule(input *DescribeComplianceByConfigRuleInput) (*DescribeComplianceByConfigRuleOutput, error) {
	req, out := c.DescribeComplianceByConfigRuleRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeComplianceByResource = "DescribeComplianceByResource"

// DescribeComplianceByResourceRequest generates a request for the DescribeComplianceByResource operation.
func (c *ConfigService) DescribeComplianceByResourceRequest(input *DescribeComplianceByResourceInput) (req *request.Request, output *DescribeComplianceByResourceOutput) {
	op := &request.Operation{
		Name:       opDescribeComplianceByResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeComplianceByResourceInput{}
	}

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

// Indicates whether the specified AWS resources are compliant. If a resource
// is noncompliant, this action returns the number of AWS Config rules that
// the resource does not comply with.
//
// A resource is compliant if it complies with all the AWS Config rules that
// evaluate it. It is noncompliant if it does not comply with one or more of
// these rules.
//
// If AWS Config has no current evaluation results for the resource, it returns
// InsufficientData. This result might indicate one of the following conditions
// about the rules that evaluate the resource:  AWS Config has never invoked
// an evaluation for the rule. To check whether it has, use the DescribeConfigRuleEvaluationStatus
// action to get the LastSuccessfulInvocationTime and LastFailedInvocationTime.
// The rule's AWS Lambda function is failing to send evaluation results to AWS
// Config. Verify that the role that you assigned to your configuration recorder
// includes the config:PutEvaluations permission. If the rule is a customer
// managed rule, verify that the AWS Lambda execution role includes the config:PutEvaluations
// permission. The rule's AWS Lambda function has returned NOT_APPLICABLE for
// all evaluation results. This can occur if the resources were deleted or removed
// from the rule's scope.
func (c *ConfigService) DescribeComplianceByResource(input *DescribeComplianceByResourceInput) (*DescribeComplianceByResourceOutput, error) {
	req, out := c.DescribeComplianceByResourceRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeConfigRuleEvaluationStatus = "DescribeConfigRuleEvaluationStatus"

// DescribeConfigRuleEvaluationStatusRequest generates a request for the DescribeConfigRuleEvaluationStatus operation.
func (c *ConfigService) DescribeConfigRuleEvaluationStatusRequest(input *DescribeConfigRuleEvaluationStatusInput) (req *request.Request, output *DescribeConfigRuleEvaluationStatusOutput) {
	op := &request.Operation{
		Name:       opDescribeConfigRuleEvaluationStatus,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeConfigRuleEvaluationStatusInput{}
	}

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

// Returns status information for each of your AWS managed Config rules. The
// status includes information such as the last time AWS Config invoked the
// rule, the last time AWS Config failed to invoke the rule, and the related
// error for the last failure.
func (c *ConfigService) DescribeConfigRuleEvaluationStatus(input *DescribeConfigRuleEvaluationStatusInput) (*DescribeConfigRuleEvaluationStatusOutput, error) {
	req, out := c.DescribeConfigRuleEvaluationStatusRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeConfigRules = "DescribeConfigRules"

// DescribeConfigRulesRequest generates a request for the DescribeConfigRules operation.
func (c *ConfigService) DescribeConfigRulesRequest(input *DescribeConfigRulesInput) (req *request.Request, output *DescribeConfigRulesOutput) {
	op := &request.Operation{
		Name:       opDescribeConfigRules,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeConfigRulesInput{}
	}

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

// Returns details about your AWS Config rules.
func (c *ConfigService) DescribeConfigRules(input *DescribeConfigRulesInput) (*DescribeConfigRulesOutput, error) {
	req, out := c.DescribeConfigRulesRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeConfigurationRecorderStatus = "DescribeConfigurationRecorderStatus"

// DescribeConfigurationRecorderStatusRequest generates a request for the DescribeConfigurationRecorderStatus operation.
func (c *ConfigService) DescribeConfigurationRecorderStatusRequest(input *DescribeConfigurationRecorderStatusInput) (req *request.Request, output *DescribeConfigurationRecorderStatusOutput) {
	op := &request.Operation{
		Name:       opDescribeConfigurationRecorderStatus,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeConfigurationRecorderStatusInput{}
	}

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

// Returns the current status of the specified configuration recorder. If a
// configuration recorder is not specified, this action returns the status of
// all configuration recorder associated with the account.
//
// Currently, you can specify only one configuration recorder per account.
func (c *ConfigService) DescribeConfigurationRecorderStatus(input *DescribeConfigurationRecorderStatusInput) (*DescribeConfigurationRecorderStatusOutput, error) {
	req, out := c.DescribeConfigurationRecorderStatusRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeConfigurationRecorders = "DescribeConfigurationRecorders"

// DescribeConfigurationRecordersRequest generates a request for the DescribeConfigurationRecorders operation.
func (c *ConfigService) DescribeConfigurationRecordersRequest(input *DescribeConfigurationRecordersInput) (req *request.Request, output *DescribeConfigurationRecordersOutput) {
	op := &request.Operation{
		Name:       opDescribeConfigurationRecorders,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeConfigurationRecordersInput{}
	}

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

// Returns the name of one or more specified configuration recorders. If the
// recorder name is not specified, this action returns the names of all the
// configuration recorders associated with the account.
//
//  Currently, you can specify only one configuration recorder per account.
func (c *ConfigService) DescribeConfigurationRecorders(input *DescribeConfigurationRecordersInput) (*DescribeConfigurationRecordersOutput, error) {
	req, out := c.DescribeConfigurationRecordersRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeDeliveryChannelStatus = "DescribeDeliveryChannelStatus"

// DescribeDeliveryChannelStatusRequest generates a request for the DescribeDeliveryChannelStatus operation.
func (c *ConfigService) DescribeDeliveryChannelStatusRequest(input *DescribeDeliveryChannelStatusInput) (req *request.Request, output *DescribeDeliveryChannelStatusOutput) {
	op := &request.Operation{
		Name:       opDescribeDeliveryChannelStatus,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeDeliveryChannelStatusInput{}
	}

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

// Returns the current status of the specified delivery channel. If a delivery
// channel is not specified, this action returns the current status of all delivery
// channels associated with the account.
//
// Currently, you can specify only one delivery channel per account.
func (c *ConfigService) DescribeDeliveryChannelStatus(input *DescribeDeliveryChannelStatusInput) (*DescribeDeliveryChannelStatusOutput, error) {
	req, out := c.DescribeDeliveryChannelStatusRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeDeliveryChannels = "DescribeDeliveryChannels"

// DescribeDeliveryChannelsRequest generates a request for the DescribeDeliveryChannels operation.
func (c *ConfigService) DescribeDeliveryChannelsRequest(input *DescribeDeliveryChannelsInput) (req *request.Request, output *DescribeDeliveryChannelsOutput) {
	op := &request.Operation{
		Name:       opDescribeDeliveryChannels,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeDeliveryChannelsInput{}
	}

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

// Returns details about the specified delivery channel. If a delivery channel
// is not specified, this action returns the details of all delivery channels
// associated with the account.
//
//  Currently, you can specify only one delivery channel per account.
func (c *ConfigService) DescribeDeliveryChannels(input *DescribeDeliveryChannelsInput) (*DescribeDeliveryChannelsOutput, error) {
	req, out := c.DescribeDeliveryChannelsRequest(input)
	err := req.Send()
	return out, err
}

const opGetComplianceDetailsByConfigRule = "GetComplianceDetailsByConfigRule"

// GetComplianceDetailsByConfigRuleRequest generates a request for the GetComplianceDetailsByConfigRule operation.
func (c *ConfigService) GetComplianceDetailsByConfigRuleRequest(input *GetComplianceDetailsByConfigRuleInput) (req *request.Request, output *GetComplianceDetailsByConfigRuleOutput) {
	op := &request.Operation{
		Name:       opGetComplianceDetailsByConfigRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetComplianceDetailsByConfigRuleInput{}
	}

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

// Returns the evaluation results for the specified AWS Config rule. The results
// indicate which AWS resources were evaluated by the rule, when each resource
// was last evaluated, and whether each resource complies with the rule.
func (c *ConfigService) GetComplianceDetailsByConfigRule(input *GetComplianceDetailsByConfigRuleInput) (*GetComplianceDetailsByConfigRuleOutput, error) {
	req, out := c.GetComplianceDetailsByConfigRuleRequest(input)
	err := req.Send()
	return out, err
}

const opGetComplianceDetailsByResource = "GetComplianceDetailsByResource"

// GetComplianceDetailsByResourceRequest generates a request for the GetComplianceDetailsByResource operation.
func (c *ConfigService) GetComplianceDetailsByResourceRequest(input *GetComplianceDetailsByResourceInput) (req *request.Request, output *GetComplianceDetailsByResourceOutput) {
	op := &request.Operation{
		Name:       opGetComplianceDetailsByResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetComplianceDetailsByResourceInput{}
	}

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

// Returns the evaluation results for the specified AWS resource. The results
// indicate which AWS Config rules were used to evaluate the resource, when
// each rule was last used, and whether the resource complies with each rule.
func (c *ConfigService) GetComplianceDetailsByResource(input *GetComplianceDetailsByResourceInput) (*GetComplianceDetailsByResourceOutput, error) {
	req, out := c.GetComplianceDetailsByResourceRequest(input)
	err := req.Send()
	return out, err
}

const opGetComplianceSummaryByConfigRule = "GetComplianceSummaryByConfigRule"

// GetComplianceSummaryByConfigRuleRequest generates a request for the GetComplianceSummaryByConfigRule operation.
func (c *ConfigService) GetComplianceSummaryByConfigRuleRequest(input *GetComplianceSummaryByConfigRuleInput) (req *request.Request, output *GetComplianceSummaryByConfigRuleOutput) {
	op := &request.Operation{
		Name:       opGetComplianceSummaryByConfigRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetComplianceSummaryByConfigRuleInput{}
	}

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

// Returns the number of AWS Config rules that are compliant and noncompliant,
// up to a maximum of 25 for each.
func (c *ConfigService) GetComplianceSummaryByConfigRule(input *GetComplianceSummaryByConfigRuleInput) (*GetComplianceSummaryByConfigRuleOutput, error) {
	req, out := c.GetComplianceSummaryByConfigRuleRequest(input)
	err := req.Send()
	return out, err
}

const opGetComplianceSummaryByResourceType = "GetComplianceSummaryByResourceType"

// GetComplianceSummaryByResourceTypeRequest generates a request for the GetComplianceSummaryByResourceType operation.
func (c *ConfigService) GetComplianceSummaryByResourceTypeRequest(input *GetComplianceSummaryByResourceTypeInput) (req *request.Request, output *GetComplianceSummaryByResourceTypeOutput) {
	op := &request.Operation{
		Name:       opGetComplianceSummaryByResourceType,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetComplianceSummaryByResourceTypeInput{}
	}

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

// Returns the number of resources that are compliant and the number that are
// noncompliant. You can specify one or more resource types to get these numbers
// for each resource type. The maximum number returned is 100.
func (c *ConfigService) GetComplianceSummaryByResourceType(input *GetComplianceSummaryByResourceTypeInput) (*GetComplianceSummaryByResourceTypeOutput, error) {
	req, out := c.GetComplianceSummaryByResourceTypeRequest(input)
	err := req.Send()
	return out, err
}

const opGetResourceConfigHistory = "GetResourceConfigHistory"

// GetResourceConfigHistoryRequest generates a request for the GetResourceConfigHistory operation.
func (c *ConfigService) GetResourceConfigHistoryRequest(input *GetResourceConfigHistoryInput) (req *request.Request, output *GetResourceConfigHistoryOutput) {
	op := &request.Operation{
		Name:       opGetResourceConfigHistory,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "limit",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &GetResourceConfigHistoryInput{}
	}

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

// Returns a list of configuration items for the specified resource. The list
// contains details about each state of the resource during the specified time
// interval.
//
// The response is paginated, and by default, AWS Config returns a limit of
// 10 configuration items per page. You can customize this number with the limit
// parameter. The response includes a nextToken string, and to get the next
// page of results, run the request again and enter this string for the nextToken
// parameter.
//
//  Each call to the API is limited to span a duration of seven days. It is
// likely that the number of records returned is smaller than the specified
// limit. In such cases, you can make another call, using the nextToken.
func (c *ConfigService) GetResourceConfigHistory(input *GetResourceConfigHistoryInput) (*GetResourceConfigHistoryOutput, error) {
	req, out := c.GetResourceConfigHistoryRequest(input)
	err := req.Send()
	return out, err
}

func (c *ConfigService) GetResourceConfigHistoryPages(input *GetResourceConfigHistoryInput, fn func(p *GetResourceConfigHistoryOutput, lastPage bool) (shouldContinue bool)) error {
	page, _ := c.GetResourceConfigHistoryRequest(input)
	page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator"))
	return page.EachPage(func(p interface{}, lastPage bool) bool {
		return fn(p.(*GetResourceConfigHistoryOutput), lastPage)
	})
}

const opListDiscoveredResources = "ListDiscoveredResources"

// ListDiscoveredResourcesRequest generates a request for the ListDiscoveredResources operation.
func (c *ConfigService) ListDiscoveredResourcesRequest(input *ListDiscoveredResourcesInput) (req *request.Request, output *ListDiscoveredResourcesOutput) {
	op := &request.Operation{
		Name:       opListDiscoveredResources,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListDiscoveredResourcesInput{}
	}

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

// Accepts a resource type and returns a list of resource identifiers for the
// resources of that type. A resource identifier includes the resource type,
// ID, and (if available) the custom resource name. The results consist of resources
// that AWS Config has discovered, including those that AWS Config is not currently
// recording. You can narrow the results to include only resources that have
// specific resource IDs or a resource name.
//
// You can specify either resource IDs or a resource name but not both in the
// same request. The response is paginated, and by default AWS Config lists
// 100 resource identifiers on each page. You can customize this number with
// the limit parameter. The response includes a nextToken string, and to get
// the next page of results, run the request again and enter this string for
// the nextToken parameter.
func (c *ConfigService) ListDiscoveredResources(input *ListDiscoveredResourcesInput) (*ListDiscoveredResourcesOutput, error) {
	req, out := c.ListDiscoveredResourcesRequest(input)
	err := req.Send()
	return out, err
}

const opPutConfigRule = "PutConfigRule"

// PutConfigRuleRequest generates a request for the PutConfigRule operation.
func (c *ConfigService) PutConfigRuleRequest(input *PutConfigRuleInput) (req *request.Request, output *PutConfigRuleOutput) {
	op := &request.Operation{
		Name:       opPutConfigRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutConfigRuleInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &PutConfigRuleOutput{}
	req.Data = output
	return
}

// Adds or updates an AWS Config rule for evaluating whether your AWS resources
// comply with your desired configurations.
//
// You can use this action for customer managed Config rules and AWS managed
// Config rules. A customer managed Config rule is a custom rule that you develop
// and maintain. An AWS managed Config rule is a customizable, predefined rule
// that is provided by AWS Config.
//
// If you are adding a new customer managed Config rule, you must first create
// the AWS Lambda function that the rule invokes to evaluate your resources.
// When you use the PutConfigRule action to add the rule to AWS Config, you
// must specify the Amazon Resource Name (ARN) that AWS Lambda assigns to the
// function. Specify the ARN for the SourceIdentifier key. This key is part
// of the Source object, which is part of the ConfigRule object.
//
// If you are adding a new AWS managed Config rule, specify the rule's identifier
// for the SourceIdentifier key. To reference AWS managed Config rule identifiers,
// see Using AWS Managed Config Rules (http://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html).
//
// For any new rule that you add, specify the ConfigRuleName in the ConfigRule
// object. Do not specify the ConfigRuleArn or the ConfigRuleId. These values
// are generated by AWS Config for new rules.
//
// If you are updating a rule that you have added previously, specify the rule's
// ConfigRuleName, ConfigRuleId, or ConfigRuleArn in the ConfigRule data type
// that you use in this request.
//
// The maximum number of rules that AWS Config supports is 25.
//
// For more information about developing and using AWS Config rules, see Evaluating
// AWS Resource Configurations with AWS Config (http://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html)
// in the AWS Config Developer Guide.
func (c *ConfigService) PutConfigRule(input *PutConfigRuleInput) (*PutConfigRuleOutput, error) {
	req, out := c.PutConfigRuleRequest(input)
	err := req.Send()
	return out, err
}

const opPutConfigurationRecorder = "PutConfigurationRecorder"

// PutConfigurationRecorderRequest generates a request for the PutConfigurationRecorder operation.
func (c *ConfigService) PutConfigurationRecorderRequest(input *PutConfigurationRecorderInput) (req *request.Request, output *PutConfigurationRecorderOutput) {
	op := &request.Operation{
		Name:       opPutConfigurationRecorder,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutConfigurationRecorderInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &PutConfigurationRecorderOutput{}
	req.Data = output
	return
}

// Creates a new configuration recorder to record the selected resource configurations.
//
// You can use this action to change the role roleARN and/or the recordingGroup
// of an existing recorder. To change the role, call the action on the existing
// configuration recorder and specify a role.
//
//  Currently, you can specify only one configuration recorder per account.
//
// If ConfigurationRecorder does not have the recordingGroup parameter specified,
// the default is to record all supported resource types.
func (c *ConfigService) PutConfigurationRecorder(input *PutConfigurationRecorderInput) (*PutConfigurationRecorderOutput, error) {
	req, out := c.PutConfigurationRecorderRequest(input)
	err := req.Send()
	return out, err
}

const opPutDeliveryChannel = "PutDeliveryChannel"

// PutDeliveryChannelRequest generates a request for the PutDeliveryChannel operation.
func (c *ConfigService) PutDeliveryChannelRequest(input *PutDeliveryChannelInput) (req *request.Request, output *PutDeliveryChannelOutput) {
	op := &request.Operation{
		Name:       opPutDeliveryChannel,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutDeliveryChannelInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &PutDeliveryChannelOutput{}
	req.Data = output
	return
}

// Creates a new delivery channel object to deliver the configuration information
// to an Amazon S3 bucket, and to an Amazon SNS topic.
//
// You can use this action to change the Amazon S3 bucket or an Amazon SNS
// topic of the existing delivery channel. To change the Amazon S3 bucket or
// an Amazon SNS topic, call this action and specify the changed values for
// the S3 bucket and the SNS topic. If you specify a different value for either
// the S3 bucket or the SNS topic, this action will keep the existing value
// for the parameter that is not changed.
//
//  Currently, you can specify only one delivery channel per account.
func (c *ConfigService) PutDeliveryChannel(input *PutDeliveryChannelInput) (*PutDeliveryChannelOutput, error) {
	req, out := c.PutDeliveryChannelRequest(input)
	err := req.Send()
	return out, err
}

const opPutEvaluations = "PutEvaluations"

// PutEvaluationsRequest generates a request for the PutEvaluations operation.
func (c *ConfigService) PutEvaluationsRequest(input *PutEvaluationsInput) (req *request.Request, output *PutEvaluationsOutput) {
	op := &request.Operation{
		Name:       opPutEvaluations,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutEvaluationsInput{}
	}

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

// Used by an AWS Lambda function to deliver evaluation results to AWS Config.
// This action is required in every AWS Lambda function that is invoked by an
// AWS Config rule.
func (c *ConfigService) PutEvaluations(input *PutEvaluationsInput) (*PutEvaluationsOutput, error) {
	req, out := c.PutEvaluationsRequest(input)
	err := req.Send()
	return out, err
}

const opStartConfigurationRecorder = "StartConfigurationRecorder"

// StartConfigurationRecorderRequest generates a request for the StartConfigurationRecorder operation.
func (c *ConfigService) StartConfigurationRecorderRequest(input *StartConfigurationRecorderInput) (req *request.Request, output *StartConfigurationRecorderOutput) {
	op := &request.Operation{
		Name:       opStartConfigurationRecorder,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StartConfigurationRecorderInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &StartConfigurationRecorderOutput{}
	req.Data = output
	return
}

// Starts recording configurations of the AWS resources you have selected to
// record in your AWS account.
//
// You must have created at least one delivery channel to successfully start
// the configuration recorder.
func (c *ConfigService) StartConfigurationRecorder(input *StartConfigurationRecorderInput) (*StartConfigurationRecorderOutput, error) {
	req, out := c.StartConfigurationRecorderRequest(input)
	err := req.Send()
	return out, err
}

const opStopConfigurationRecorder = "StopConfigurationRecorder"

// StopConfigurationRecorderRequest generates a request for the StopConfigurationRecorder operation.
func (c *ConfigService) StopConfigurationRecorderRequest(input *StopConfigurationRecorderInput) (req *request.Request, output *StopConfigurationRecorderOutput) {
	op := &request.Operation{
		Name:       opStopConfigurationRecorder,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StopConfigurationRecorderInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &StopConfigurationRecorderOutput{}
	req.Data = output
	return
}

// Stops recording configurations of the AWS resources you have selected to
// record in your AWS account.
func (c *ConfigService) StopConfigurationRecorder(input *StopConfigurationRecorderInput) (*StopConfigurationRecorderOutput, error) {
	req, out := c.StopConfigurationRecorderRequest(input)
	err := req.Send()
	return out, err
}

// Indicates whether an AWS resource or AWS Config rule is compliant and provides
// the number of contributors that affect the compliance.
type Compliance struct {
	_ struct{} `type:"structure"`

	// The number of AWS resources or AWS Config rules that cause a result of NON_COMPLIANT,
	// up to a maximum of 25.
	ComplianceContributorCount *ComplianceContributorCount `type:"structure"`

	// Indicates whether an AWS resource or AWS Config rule is compliant.
	//
	// A resource is compliant if it complies with all of the AWS Config rules
	// that evaluate it, and it is noncompliant if it does not comply with one or
	// more of these rules.
	//
	// A rule is compliant if all of the resources that the rule evaluates comply
	// with it, and it is noncompliant if any of these resources do not comply.
	ComplianceType *string `type:"string" enum:"ComplianceType"`
}

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

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

// Indicates whether an AWS Config rule is compliant. A rule is compliant if
// all of the resources that the rule evaluated comply with it, and it is noncompliant
// if any of these resources do not comply.
type ComplianceByConfigRule struct {
	_ struct{} `type:"structure"`

	// Indicates whether the AWS Config rule is compliant.
	Compliance *Compliance `type:"structure"`

	// The name of the AWS Config rule.
	ConfigRuleName *string `min:"1" type:"string"`
}

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

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

// Indicates whether an AWS resource that is evaluated according to one or more
// AWS Config rules is compliant. A resource is compliant if it complies with
// all of the rules that evaluate it, and it is noncompliant if it does not
// comply with one or more of these rules.
type ComplianceByResource struct {
	_ struct{} `type:"structure"`

	// Indicates whether the AWS resource complies with all of the AWS Config rules
	// that evaluated it.
	Compliance *Compliance `type:"structure"`

	// The ID of the AWS resource that was evaluated.
	ResourceId *string `min:"1" type:"string"`

	// The type of the AWS resource that was evaluated.
	ResourceType *string `min:"1" type:"string"`
}

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

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

// The number of AWS resources or AWS Config rules responsible for the current
// compliance of the item, up to a maximum number.
type ComplianceContributorCount struct {
	_ struct{} `type:"structure"`

	// Indicates whether the maximum count is reached.
	CapExceeded *bool `type:"boolean"`

	// The number of AWS resources or AWS Config rules responsible for the current
	// compliance of the item.
	CappedCount *int64 `type:"integer"`
}

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

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

// The number of AWS Config rules or AWS resources that are compliant and noncompliant,
// up to a maximum.
type ComplianceSummary struct {
	_ struct{} `type:"structure"`

	// The time that AWS Config created the compliance summary.
	ComplianceSummaryTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The number of AWS Config rules or AWS resources that are compliant, up to
	// a maximum of 25 for rules and 100 for resources.
	CompliantResourceCount *ComplianceContributorCount `type:"structure"`

	// The number of AWS Config rules or AWS resources that are noncompliant, up
	// to a maximum of 25 for rules and 100 for resources.
	NonCompliantResourceCount *ComplianceContributorCount `type:"structure"`
}

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

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

// The number of AWS resources of a specific type that are compliant or noncompliant,
// up to a maximum of 100 for each compliance.
type ComplianceSummaryByResourceType struct {
	_ struct{} `type:"structure"`

	// The number of AWS resources that are compliant or noncompliant, up to a maximum
	// of 100 for each compliance.
	ComplianceSummary *ComplianceSummary `type:"structure"`

	// The type of AWS resource.
	ResourceType *string `min:"1" type:"string"`
}

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

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

// A list that contains the status of the delivery of either the snapshot or
// the configuration history to the specified Amazon S3 bucket.
type ConfigExportDeliveryInfo struct {
	_ struct{} `type:"structure"`

	// The time of the last attempted delivery.
	LastAttemptTime *time.Time `locationName:"lastAttemptTime" type:"timestamp" timestampFormat:"unix"`

	// The error code from the last attempted delivery.
	LastErrorCode *string `locationName:"lastErrorCode" type:"string"`

	// The error message from the last attempted delivery.
	LastErrorMessage *string `locationName:"lastErrorMessage" type:"string"`

	// Status of the last attempted delivery.
	LastStatus *string `locationName:"lastStatus" type:"string" enum:"DeliveryStatus"`

	// The time of the last successful delivery.
	LastSuccessfulTime *time.Time `locationName:"lastSuccessfulTime" type:"timestamp" timestampFormat:"unix"`

	// The time that the next delivery occurs.
	NextDeliveryTime *time.Time `locationName:"nextDeliveryTime" type:"timestamp" timestampFormat:"unix"`
}

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

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

// An AWS Lambda function that evaluates configuration items to assess whether
// your AWS resources comply with your desired configurations. This function
// can run when AWS Config detects a configuration change or delivers a configuration
// snapshot. This function can evaluate any resource in the recording group.
// To define which of these are evaluated, specify a value for the Scope key.
//
// For more information about developing and using AWS Config rules, see Evaluating
// AWS Resource Configurations with AWS Config (http://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html)
// in the AWS Config Developer Guide.
type ConfigRule struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the AWS Config rule.
	ConfigRuleArn *string `type:"string"`

	// The ID of the AWS Config rule.
	ConfigRuleId *string `type:"string"`

	// The name that you assign to the AWS Config rule. The name is required if
	// you are adding a new rule.
	ConfigRuleName *string `min:"1" type:"string"`

	// Indicates whether the AWS Config rule is active or currently being deleted
	// by AWS Config.
	//
	// AWS Config sets the state of a rule to DELETING temporarily after you use
	// the DeleteConfigRule request to delete the rule. After AWS Config finishes
	// deleting a rule, the rule and all of its evaluations are erased and no longer
	// available.
	//
	// You cannot add a rule to AWS Config that has the state set to DELETING.
	// If you want to delete a rule, you must use the DeleteConfigRule request.
	ConfigRuleState *string `type:"string" enum:"ConfigRuleState"`

	// The description that you provide for the AWS Config rule.
	Description *string `type:"string"`

	// A string in JSON format that is passed to the AWS Config rule Lambda function.
	InputParameters *string `min:"1" type:"string"`

	// The maximum frequency at which the AWS Config rule runs evaluations.
	//
	// If your rule is periodic, meaning it runs an evaluation when AWS Config
	// delivers a configuration snapshot, then it cannot run evaluations more frequently
	// than AWS Config delivers the snapshots. For periodic rules, set the value
	// of the MaximumExecutionFrequency key to be equal to or greater than the value
	// of the deliveryFrequency key, which is part of ConfigSnapshotDeliveryProperties.
	// To update the frequency with which AWS Config delivers your snapshots, use
	// the PutDeliveryChannel action.
	MaximumExecutionFrequency *string `type:"string" enum:"MaximumExecutionFrequency"`

	// Defines which resources the AWS Config rule evaluates. The scope can include
	// one or more resource types, a combination of a tag key and value, or a combination
	// of one resource type and one or more resource IDs. Specify a scope to constrain
	// the resources that are evaluated. If you do not specify a scope, the AWS
	// Config Rule evaluates all resources in the recording group.
	Scope *Scope `type:"structure"`

	// Provides the rule owner (AWS or customer), the rule identifier, and the events
	// that cause the function to evaluate your AWS resources.
	Source *Source `type:"structure" required:"true"`
}

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

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

// Status information for your AWS managed Config rules. The status includes
// information such as the last time the rule ran, the last time it failed,
// and the related error for the last failure.
//
// This action does not return status information about customer managed Config
// rules.
type ConfigRuleEvaluationStatus struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the AWS Config rule.
	ConfigRuleArn *string `type:"string"`

	// The ID of the AWS Config rule.
	ConfigRuleId *string `type:"string"`

	// The name of the AWS Config rule.
	ConfigRuleName *string `min:"1" type:"string"`

	// The time that you first activated the AWS Config rule.
	FirstActivatedTime *time.Time `type:"timestamp" timestampFormat:"unix"`

	// Indicates whether AWS Config has evaluated your resources against the rule
	// at least once.
	//
	//  true - AWS Config has evaluated your AWS resources against the rule at
	// least once. false - AWS Config has not once finished evaluating your AWS
	// resources against the rule.
	FirstEvaluationStarted *bool `type:"boolean"`

	// The error code that AWS Config returned when the rule last failed.
	LastErrorCode *string `type:"string"`

	// The error message that AWS Config returned when the rule last failed.
	LastErrorMessage *string `type:"string"`

	// The time that AWS Config last failed to evaluate your AWS resources against
	// the rule.
	LastFailedEvaluationTime *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The time that AWS Config last failed to invoke the AWS Config rule to evaluate
	// your AWS resources.
	LastFailedInvocationTime *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The time that AWS Config last successfully evaluated your AWS resources against
	// the rule.
	LastSuccessfulEvaluationTime *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The time that AWS Config last successfully invoked the AWS Config rule to
	// evaluate your AWS resources.
	LastSuccessfulInvocationTime *time.Time `type:"timestamp" timestampFormat:"unix"`
}

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

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

// Options for how AWS Config delivers configuration snapshots to the Amazon
// S3 bucket in your delivery channel.
type ConfigSnapshotDeliveryProperties struct {
	_ struct{} `type:"structure"`

	// The frequency with which a AWS Config recurringly delivers configuration
	// snapshots.
	DeliveryFrequency *string `locationName:"deliveryFrequency" type:"string" enum:"MaximumExecutionFrequency"`
}

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

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

// A list that contains the status of the delivery of the configuration stream
// notification to the Amazon SNS topic.
type ConfigStreamDeliveryInfo struct {
	_ struct{} `type:"structure"`

	// The error code from the last attempted delivery.
	LastErrorCode *string `locationName:"lastErrorCode" type:"string"`

	// The error message from the last attempted delivery.
	LastErrorMessage *string `locationName:"lastErrorMessage" type:"string"`

	// Status of the last attempted delivery.
	//
	// Note Providing an SNS topic on a DeliveryChannel (http://docs.aws.amazon.com/config/latest/APIReference/API_DeliveryChannel.html)
	// for AWS Config is optional. If the SNS delivery is turned off, the last status
	// will be Not_Applicable.
	LastStatus *string `locationName:"lastStatus" type:"string" enum:"DeliveryStatus"`

	// The time from the last status change.
	LastStatusChangeTime *time.Time `locationName:"lastStatusChangeTime" type:"timestamp" timestampFormat:"unix"`
}

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

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

// A list that contains detailed configurations of a specified resource.
//
//  Currently, the list does not contain information about non-AWS components
// (for example, applications on your Amazon EC2 instances).
type ConfigurationItem struct {
	_ struct{} `type:"structure"`

	// The 12 digit AWS account ID associated with the resource.
	AccountId *string `locationName:"accountId" type:"string"`

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

	// The Availability Zone associated with the resource.
	AvailabilityZone *string `locationName:"availabilityZone" type:"string"`

	// The region where the resource resides.
	AwsRegion *string `locationName:"awsRegion" type:"string"`

	// The description of the resource configuration.
	Configuration *string `locationName:"configuration" type:"string"`

	// The time when the configuration recording was initiated.
	ConfigurationItemCaptureTime *time.Time `locationName:"configurationItemCaptureTime" type:"timestamp" timestampFormat:"unix"`

	// Unique MD5 hash that represents the configuration item's state.
	//
	// You can use MD5 hash to compare the states of two or more configuration
	// items that are associated with the same resource.
	ConfigurationItemMD5Hash *string `locationName:"configurationItemMD5Hash" type:"string"`

	// The configuration item status.
	ConfigurationItemStatus *string `locationName:"configurationItemStatus" type:"string" enum:"ConfigurationItemStatus"`

	// An identifier that indicates the ordering of the configuration items of a
	// resource.
	ConfigurationStateId *string `locationName:"configurationStateId" type:"string"`

	// A list of CloudTrail event IDs.
	//
	// A populated field indicates that the current configuration was initiated
	// by the events recorded in the CloudTrail log. For more information about
	// CloudTrail, see What is AWS CloudTrail? (http://docs.aws.amazon.com/awscloudtrail/latest/userguide/what_is_cloud_trail_top_level.html).
	//
	// An empty field indicates that the current configuration was not initiated
	// by any event.
	RelatedEvents []*string `locationName:"relatedEvents" type:"list"`

	// A list of related AWS resources.
	Relationships []*Relationship `locationName:"relationships" type:"list"`

	// The time stamp when the resource was created.
	ResourceCreationTime *time.Time `locationName:"resourceCreationTime" type:"timestamp" timestampFormat:"unix"`

	// The ID of the resource (for example., sg-xxxxxx).
	ResourceId *string `locationName:"resourceId" type:"string"`

	// The custom name of the resource, if available.
	ResourceName *string `locationName:"resourceName" type:"string"`

	// The type of AWS resource.
	ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"`

	// A mapping of key value tags associated with the resource.
	Tags map[string]*string `locationName:"tags" type:"map"`

	// The version number of the resource configuration.
	Version *string `locationName:"version" type:"string"`
}

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

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

// An object that represents the recording of configuration changes of an AWS
// resource.
type ConfigurationRecorder struct {
	_ struct{} `type:"structure"`

	// The name of the recorder. By default, AWS Config automatically assigns the
	// name "default" when creating the configuration recorder. You cannot change
	// the assigned name.
	Name *string `locationName:"name" min:"1" type:"string"`

	// Specifies the types of AWS resource for which AWS Config records configuration
	// changes.
	RecordingGroup *RecordingGroup `locationName:"recordingGroup" type:"structure"`

	// Amazon Resource Name (ARN) of the IAM role used to describe the AWS resources
	// associated with the account.
	RoleARN *string `locationName:"roleARN" type:"string"`
}

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

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

// The current status of the configuration recorder.
type ConfigurationRecorderStatus struct {
	_ struct{} `type:"structure"`

	// The error code indicating that the recording failed.
	LastErrorCode *string `locationName:"lastErrorCode" type:"string"`

	// The message indicating that the recording failed due to an error.
	LastErrorMessage *string `locationName:"lastErrorMessage" type:"string"`

	// The time the recorder was last started.
	LastStartTime *time.Time `locationName:"lastStartTime" type:"timestamp" timestampFormat:"unix"`

	// The last (previous) status of the recorder.
	LastStatus *string `locationName:"lastStatus" type:"string" enum:"RecorderStatus"`

	// The time when the status was last changed.
	LastStatusChangeTime *time.Time `locationName:"lastStatusChangeTime" type:"timestamp" timestampFormat:"unix"`

	// The time the recorder was last stopped.
	LastStopTime *time.Time `locationName:"lastStopTime" type:"timestamp" timestampFormat:"unix"`

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

	// Specifies whether the recorder is currently recording or not.
	Recording *bool `locationName:"recording" type:"boolean"`
}

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

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

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

	// The name of the AWS Config rule that you want to delete.
	ConfigRuleName *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

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

// The input for the DeleteDeliveryChannel action. The action accepts the following
// data in JSON format.
type DeleteDeliveryChannelInput struct {
	_ struct{} `type:"structure"`

	// The name of the delivery channel to delete.
	DeliveryChannelName *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

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

// The input for the DeliverConfigSnapshot action.
type DeliverConfigSnapshotInput struct {
	_ struct{} `type:"structure"`

	// The name of the delivery channel through which the snapshot is delivered.
	DeliveryChannelName *string `locationName:"deliveryChannelName" min:"1" type:"string" required:"true"`
}

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

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

// The output for the DeliverConfigSnapshot action in JSON format.
type DeliverConfigSnapshotOutput struct {
	_ struct{} `type:"structure"`

	// The ID of the snapshot that is being created.
	ConfigSnapshotId *string `locationName:"configSnapshotId" type:"string"`
}

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

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

// A logical container used for storing the configuration changes of an AWS
// resource.
type DeliveryChannel struct {
	_ struct{} `type:"structure"`

	// Options for how AWS Config delivers configuration snapshots to the Amazon
	// S3 bucket in your delivery channel.
	ConfigSnapshotDeliveryProperties *ConfigSnapshotDeliveryProperties `locationName:"configSnapshotDeliveryProperties" type:"structure"`

	// The name of the delivery channel. By default, AWS Config automatically assigns
	// the name "default" when creating the delivery channel. You cannot change
	// the assigned name.
	Name *string `locationName:"name" min:"1" type:"string"`

	// The name of the Amazon S3 bucket used to store configuration history for
	// the delivery channel.
	S3BucketName *string `locationName:"s3BucketName" type:"string"`

	// The prefix for the specified Amazon S3 bucket.
	S3KeyPrefix *string `locationName:"s3KeyPrefix" type:"string"`

	// The Amazon Resource Name (ARN) of the SNS topic that AWS Config delivers
	// notifications to.
	SnsTopicARN *string `locationName:"snsTopicARN" type:"string"`
}

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

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

// The status of a specified delivery channel.
//
// Valid values: Success | Failure
type DeliveryChannelStatus struct {
	_ struct{} `type:"structure"`

	// A list that contains the status of the delivery of the configuration history
	// to the specified Amazon S3 bucket.
	ConfigHistoryDeliveryInfo *ConfigExportDeliveryInfo `locationName:"configHistoryDeliveryInfo" type:"structure"`

	// A list containing the status of the delivery of the snapshot to the specified
	// Amazon S3 bucket.
	ConfigSnapshotDeliveryInfo *ConfigExportDeliveryInfo `locationName:"configSnapshotDeliveryInfo" type:"structure"`

	// A list containing the status of the delivery of the configuration stream
	// notification to the specified Amazon SNS topic.
	ConfigStreamDeliveryInfo *ConfigStreamDeliveryInfo `locationName:"configStreamDeliveryInfo" type:"structure"`

	// The name of the delivery channel.
	Name *string `locationName:"name" type:"string"`
}

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

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

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

	// Filters the results by compliance. The valid values are Compliant and NonCompliant.
	ComplianceTypes []*string `type:"list"`

	// Specify one or more AWS Config rule names to filter the results by rule.
	ConfigRuleNames []*string `type:"list"`

	// The nextToken string returned on a previous page that you use to get the
	// next page of results in a paginated response.
	NextToken *string `type:"string"`
}

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

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

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

	// Indicates whether each of the specified AWS Config rules is compliant.
	ComplianceByConfigRules []*ComplianceByConfigRule `type:"list"`

	// The string that you use in a subsequent request to get the next page of results
	// in a paginated response.
	NextToken *string `type:"string"`
}

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

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

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

	// Filters the results by compliance. The valid values are Compliant and NonCompliant.
	ComplianceTypes []*string `type:"list"`

	// The maximum number of evaluation results returned on each page. The default
	// is 10. You cannot specify a limit greater than 100. If you specify 0, AWS
	// Config uses the default.
	Limit *int64 `type:"integer"`

	// The nextToken string returned on a previous page that you use to get the
	// next page of results in a paginated response.
	NextToken *string `type:"string"`

	// The ID of the AWS resource for which you want compliance information. You
	// can specify only one resource ID. If you specify a resource ID, you must
	// also specify a type for ResourceType.
	ResourceId *string `min:"1" type:"string"`

	// The types of AWS resources for which you want compliance information; for
	// example, AWS::EC2::Instance. For this action, you can specify that the resource
	// type is an AWS account by specifying AWS::::Account.
	ResourceType *string `min:"1" type:"string"`
}

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

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

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

	// Indicates whether the specified AWS resource complies with all of the AWS
	// Config rules that evaluate it.
	ComplianceByResources []*ComplianceByResource `type:"list"`

	// The string that you use in a subsequent request to get the next page of results
	// in a paginated response.
	NextToken *string `type:"string"`
}

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

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

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

	// The name of the AWS managed Config rules for which you want status information.
	// If you do not specify any names, AWS Config returns status information for
	// all AWS managed Config rules that you use.
	ConfigRuleNames []*string `type:"list"`
}

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

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

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

	// Status information about your AWS managed Config rules.
	ConfigRulesEvaluationStatus []*ConfigRuleEvaluationStatus `type:"list"`
}

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

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

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

	// The names of the AWS Config rules for which you want details. If you do not
	// specify any names, AWS Config returns details for all your rules.
	ConfigRuleNames []*string `type:"list"`

	// The nextToken string returned on a previous page that you use to get the
	// next page of results in a paginated response.
	NextToken *string `type:"string"`
}

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

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

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

	// The details about your AWS Config rules.
	ConfigRules []*ConfigRule `type:"list"`

	// The string that you use in a subsequent request to get the next page of results
	// in a paginated response.
	NextToken *string `type:"string"`
}

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

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

// The input for the DescribeConfigurationRecorderStatus action.
type DescribeConfigurationRecorderStatusInput struct {
	_ struct{} `type:"structure"`

	// The name(s) of the configuration recorder. If the name is not specified,
	// the action returns the current status of all the configuration recorders
	// associated with the account.
	ConfigurationRecorderNames []*string `type:"list"`
}

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

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

// The output for the DescribeConfigurationRecorderStatus action in JSON format.
type DescribeConfigurationRecorderStatusOutput struct {
	_ struct{} `type:"structure"`

	// A list that contains status of the specified recorders.
	ConfigurationRecordersStatus []*ConfigurationRecorderStatus `type:"list"`
}

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

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

// The input for the DescribeConfigurationRecorders action.
type DescribeConfigurationRecordersInput struct {
	_ struct{} `type:"structure"`

	// A list of configuration recorder names.
	ConfigurationRecorderNames []*string `type:"list"`
}

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

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

// The output for the DescribeConfigurationRecorders action.
type DescribeConfigurationRecordersOutput struct {
	_ struct{} `type:"structure"`

	// A list that contains the descriptions of the specified configuration recorders.
	ConfigurationRecorders []*ConfigurationRecorder `type:"list"`
}

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

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

// The input for the DeliveryChannelStatus action.
type DescribeDeliveryChannelStatusInput struct {
	_ struct{} `type:"structure"`

	// A list of delivery channel names.
	DeliveryChannelNames []*string `type:"list"`
}

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

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

// The output for the DescribeDeliveryChannelStatus action.
type DescribeDeliveryChannelStatusOutput struct {
	_ struct{} `type:"structure"`

	// A list that contains the status of a specified delivery channel.
	DeliveryChannelsStatus []*DeliveryChannelStatus `type:"list"`
}

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

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

// The input for the DescribeDeliveryChannels action.
type DescribeDeliveryChannelsInput struct {
	_ struct{} `type:"structure"`

	// A list of delivery channel names.
	DeliveryChannelNames []*string `type:"list"`
}

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

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

// The output for the DescribeDeliveryChannels action.
type DescribeDeliveryChannelsOutput struct {
	_ struct{} `type:"structure"`

	// A list that contains the descriptions of the specified delivery channel.
	DeliveryChannels []*DeliveryChannel `type:"list"`
}

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

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

// Identifies an AWS resource and indicates whether it complies with the AWS
// Config rule that it was evaluated against.
type Evaluation struct {
	_ struct{} `type:"structure"`

	// Supplementary information about how the evaluation determined the compliance.
	Annotation *string `min:"1" type:"string"`

	// The ID of the AWS resource that was evaluated.
	ComplianceResourceId *string `min:"1" type:"string" required:"true"`

	// The type of AWS resource that was evaluated.
	ComplianceResourceType *string `min:"1" type:"string" required:"true"`

	// Indicates whether the AWS resource complies with the AWS Config rule that
	// it was evaluated against.
	ComplianceType *string `type:"string" required:"true" enum:"ComplianceType"`

	// The time of the event in AWS Config that triggered the evaluation. For event-based
	// evaluations, the time indicates when AWS Config created the configuration
	// item that triggered the evaluation. For periodic evaluations, the time indicates
	// when AWS Config delivered the configuration snapshot that triggered the evaluation.
	OrderingTimestamp *time.Time `type:"timestamp" timestampFormat:"unix" required:"true"`
}

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

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

// The details of an AWS Config evaluation. Provides the AWS resource that was
// evaluated, the compliance of the resource, related timestamps, and supplementary
// information.
type EvaluationResult struct {
	_ struct{} `type:"structure"`

	// Supplementary information about how the evaluation determined the compliance.
	Annotation *string `min:"1" type:"string"`

	// Indicates whether the AWS resource complies with the AWS Config rule that
	// evaluated it.
	ComplianceType *string `type:"string" enum:"ComplianceType"`

	// The time when the AWS Config rule evaluated the AWS resource.
	ConfigRuleInvokedTime *time.Time `type:"timestamp" timestampFormat:"unix"`

	// Uniquely identifies the evaluation result.
	EvaluationResultIdentifier *EvaluationResultIdentifier `type:"structure"`

	// The time when AWS Config recorded the evaluation result.
	ResultRecordedTime *time.Time `type:"timestamp" timestampFormat:"unix"`

	// An encrypted token that associates an evaluation with an AWS Config rule.
	// The token identifies the rule, the AWS resource being evaluated, and the
	// event that triggered the evaluation.
	ResultToken *string `type:"string"`
}

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

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

// Uniquely identifies an evaluation result.
type EvaluationResultIdentifier struct {
	_ struct{} `type:"structure"`

	// Identifies an AWS Config rule used to evaluate an AWS resource, and provides
	// the type and ID of the evaluated resource.
	EvaluationResultQualifier *EvaluationResultQualifier `type:"structure"`

	// The time of the event that triggered the evaluation of your AWS resources.
	// The time can indicate when AWS Config delivered a configuration item change
	// notification, or it can indicate when AWS Config delivered the configuration
	// snapshot, depending on which event triggered the evaluation.
	OrderingTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`
}

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

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

// Identifies an AWS Config rule that evaluated an AWS resource, and provides
// the type and ID of the resource that the rule evaluated.
type EvaluationResultQualifier struct {
	_ struct{} `type:"structure"`

	// The name of the AWS Config rule that was used in the evaluation.
	ConfigRuleName *string `min:"1" type:"string"`

	// The ID of the evaluated AWS resource.
	ResourceId *string `min:"1" type:"string"`

	// The type of AWS resource that was evaluated.
	ResourceType *string `min:"1" type:"string"`
}

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

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

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

	// Specify to filter the results by compliance. The valid values are Compliant,
	// NonCompliant, and NotApplicable.
	ComplianceTypes []*string `type:"list"`

	// The name of the AWS Config rule for which you want compliance information.
	ConfigRuleName *string `min:"1" type:"string" required:"true"`

	// The maximum number of evaluation results returned on each page. The default
	// is 10. You cannot specify a limit greater than 100. If you specify 0, AWS
	// Config uses the default.
	Limit *int64 `type:"integer"`

	// The nextToken string returned on a previous page that you use to get the
	// next page of results in a paginated response.
	NextToken *string `type:"string"`
}

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

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

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

	// Indicates whether the AWS resource complies with the specified AWS Config
	// rule.
	EvaluationResults []*EvaluationResult `type:"list"`

	// The string that you use in a subsequent request to get the next page of results
	// in a paginated response.
	NextToken *string `type:"string"`
}

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

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

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

	// Specify to filter the results by compliance. The valid values are Compliant,
	// NonCompliant, and NotApplicable.
	ComplianceTypes []*string `type:"list"`

	// The nextToken string returned on a previous page that you use to get the
	// next page of results in a paginated response.
	NextToken *string `type:"string"`

	// The ID of the AWS resource for which you want compliance information.
	ResourceId *string `min:"1" type:"string" required:"true"`

	// The type of the AWS resource for which you want compliance information.
	ResourceType *string `min:"1" type:"string" required:"true"`
}

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

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

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

	// Indicates whether the specified AWS resource complies each AWS Config rule.
	EvaluationResults []*EvaluationResult `type:"list"`

	// The string that you use in a subsequent request to get the next page of results
	// in a paginated response.
	NextToken *string `type:"string"`
}

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

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

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

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

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

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

	// The number of AWS Config rules that are compliant and the number that are
	// noncompliant, up to a maximum of 25 for each.
	ComplianceSummary *ComplianceSummary `type:"structure"`
}

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

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

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

	// Specify one or more resource types to get the number of resources that are
	// compliant and the number that are noncompliant for each resource type.
	//
	// For this request, you can specify an AWS resource type such as AWS::EC2::Instance,
	// and you can specify that the resource type is an AWS account by specifying
	// AWS::::Account.
	ResourceTypes []*string `type:"list"`
}

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

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

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

	// The number of resources that are compliant and the number that are noncompliant.
	// If one or more resource types were provided with the request, the numbers
	// are returned for each resource type. The maximum number returned is 100.
	ComplianceSummariesByResourceType []*ComplianceSummaryByResourceType `type:"list"`
}

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

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

// The input for the GetResourceConfigHistory action.
type GetResourceConfigHistoryInput struct {
	_ struct{} `type:"structure"`

	// The chronological order for configuration items listed. By default the results
	// are listed in reverse chronological order.
	ChronologicalOrder *string `locationName:"chronologicalOrder" type:"string" enum:"ChronologicalOrder"`

	// The time stamp that indicates an earlier time. If not specified, the action
	// returns paginated results that contain configuration items that start from
	// when the first configuration item was recorded.
	EarlierTime *time.Time `locationName:"earlierTime" type:"timestamp" timestampFormat:"unix"`

	// The time stamp that indicates a later time. If not specified, current time
	// is taken.
	LaterTime *time.Time `locationName:"laterTime" type:"timestamp" timestampFormat:"unix"`

	// The maximum number of configuration items returned on each page. The default
	// is 10. You cannot specify a limit greater than 100. If you specify 0, AWS
	// Config uses the default.
	Limit *int64 `locationName:"limit" type:"integer"`

	// The nextToken string returned on a previous page that you use to get the
	// next page of results in a paginated response.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The ID of the resource (for example., sg-xxxxxx).
	ResourceId *string `locationName:"resourceId" type:"string" required:"true"`

	// The resource type.
	ResourceType *string `locationName:"resourceType" type:"string" required:"true" enum:"ResourceType"`
}

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

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

// The output for the GetResourceConfigHistory action.
type GetResourceConfigHistoryOutput struct {
	_ struct{} `type:"structure"`

	// A list that contains the configuration history of one or more resources.
	ConfigurationItems []*ConfigurationItem `locationName:"configurationItems" type:"list"`

	// The string that you use in a subsequent request to get the next page of results
	// in a paginated response.
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

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

	// Specifies whether AWS Config includes deleted resources in the results. By
	// default, deleted resources are not included.
	IncludeDeletedResources *bool `locationName:"includeDeletedResources" type:"boolean"`

	// The maximum number of resource identifiers returned on each page. The default
	// is 100. You cannot specify a limit greater than 100. If you specify 0, AWS
	// Config uses the default.
	Limit *int64 `locationName:"limit" type:"integer"`

	// The nextToken string returned on a previous page that you use to get the
	// next page of results in a paginated response.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The IDs of only those resources that you want AWS Config to list in the response.
	// If you do not specify this parameter, AWS Config lists all resources of the
	// specified type that it has discovered.
	ResourceIds []*string `locationName:"resourceIds" type:"list"`

	// The custom name of only those resources that you want AWS Config to list
	// in the response. If you do not specify this parameter, AWS Config lists all
	// resources of the specified type that it has discovered.
	ResourceName *string `locationName:"resourceName" type:"string"`

	// The type of resources that you want AWS Config to list in the response.
	ResourceType *string `locationName:"resourceType" type:"string" required:"true" enum:"ResourceType"`
}

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

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

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

	// The string that you use in a subsequent request to get the next page of results
	// in a paginated response.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The details that identify a resource that is discovered by AWS Config, including
	// the resource type, ID, and (if available) the custom resource name.
	ResourceIdentifiers []*ResourceIdentifier `locationName:"resourceIdentifiers" type:"list"`
}

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

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

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

	// An AWS Lambda function that evaluates configuration items to assess whether
	// your AWS resources comply with your desired configurations. This function
	// can run when AWS Config detects a configuration change or delivers a configuration
	// snapshot. This function can evaluate any resource in the recording group.
	// To define which of these are evaluated, specify a value for the Scope key.
	//
	// For more information about developing and using AWS Config rules, see Evaluating
	// AWS Resource Configurations with AWS Config (http://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html)
	// in the AWS Config Developer Guide.
	ConfigRule *ConfigRule `type:"structure" required:"true"`
}

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

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

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

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

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

// The input for the PutConfigurationRecorder action.
type PutConfigurationRecorderInput struct {
	_ struct{} `type:"structure"`

	// The configuration recorder object that records each configuration change
	// made to the resources.
	ConfigurationRecorder *ConfigurationRecorder `type:"structure" required:"true"`
}

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

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

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

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

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

// The input for the PutDeliveryChannel action.
type PutDeliveryChannelInput struct {
	_ struct{} `type:"structure"`

	// The configuration delivery channel object that delivers the configuration
	// information to an Amazon S3 bucket, and to an Amazon SNS topic.
	DeliveryChannel *DeliveryChannel `type:"structure" required:"true"`
}

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

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

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

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

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

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

	// The assessments that the AWS Lambda function performs. Each evaluation identifies
	// an AWS resource and indicates whether it complies with the AWS Config rule
	// that invokes the AWS Lambda function.
	Evaluations []*Evaluation `type:"list"`

	// An encrypted token that associates an evaluation with an AWS Config rule.
	// Identifies the rule and the event that triggered the evaluation
	ResultToken *string `type:"string" required:"true"`
}

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

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

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

	// Requests that failed because of a client or server error.
	FailedEvaluations []*Evaluation `type:"list"`
}

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

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

// Specifies the types of AWS resource for which AWS Config records configuration
// changes.
//
// In the recording group, you specify whether all supported types or specific
// types of resources are recorded.
//
// By default, AWS Config records configuration changes for all supported types
// of regional resources that AWS Config discovers in the region in which it
// is running. Regional resources are tied to a region and can be used only
// in that region. Examples of regional resources are EC2 instances and EBS
// volumes.
//
// You can also have AWS Config record configuration changes for supported
// types of global resources. Global resources are not tied to an individual
// region and can be used in all regions.
//
// The configuration details for any global resource are the same in all regions.
// If you customize AWS Config in multiple regions to record global resources,
// it will create multiple configuration items each time a global resource changes:
// one configuration item for each region. These configuration items will contain
// identical data. To prevent duplicate configuration items, you should consider
// customizing AWS Config in only one region to record global resources, unless
// you want the configuration items to be available in multiple regions. If
// you don't want AWS Config to record all resources, you can specify which
// types of resources it will record with the resourceTypes parameter.
//
// For a list of supported resource types, see Supported resource types (http://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html#supported-resources).
//
// For more information, see Selecting Which Resources AWS Config Records (http://docs.aws.amazon.com/config/latest/developerguide/select-resources.html).
type RecordingGroup struct {
	_ struct{} `type:"structure"`

	// Specifies whether AWS Config records configuration changes for every supported
	// type of regional resource.
	//
	// If you set this option to true, when AWS Config adds support for a new type
	// of regional resource, it automatically starts recording resources of that
	// type.
	//
	// If you set this option to true, you cannot enumerate a list of resourceTypes.
	AllSupported *bool `locationName:"allSupported" type:"boolean"`

	// Specifies whether AWS Config includes all supported types of global resources
	// with the resources that it records.
	//
	// Before you can set this option to true, you must set the allSupported option
	// to true.
	//
	// If you set this option to true, when AWS Config adds support for a new type
	// of global resource, it automatically starts recording resources of that type.
	IncludeGlobalResourceTypes *bool `locationName:"includeGlobalResourceTypes" type:"boolean"`

	// A comma-separated list that specifies the types of AWS resources for which
	// AWS Config records configuration changes (for example, AWS::EC2::Instance
	// or AWS::CloudTrail::Trail).
	//
	// Before you can set this option to true, you must set the allSupported option
	// to false.
	//
	// If you set this option to true, when AWS Config adds support for a new type
	// of resource, it will not record resources of that type unless you manually
	// add that type to your recording group.
	//
	// For a list of valid resourceTypes values, see the resourceType Value column
	// in Supported AWS Resource Types (http://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html#supported-resources).
	ResourceTypes []*string `locationName:"resourceTypes" type:"list"`
}

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

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

// The relationship of the related resource to the main resource.
type Relationship struct {
	_ struct{} `type:"structure"`

	// The type of relationship with the related resource.
	RelationshipName *string `locationName:"relationshipName" type:"string"`

	// The ID of the related resource (for example, sg-xxxxxx).
	ResourceId *string `locationName:"resourceId" type:"string"`

	// The custom name of the related resource, if available.
	ResourceName *string `locationName:"resourceName" type:"string"`

	// The resource type of the related resource.
	ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"`
}

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

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

// The details that identify a resource that is discovered by AWS Config, including
// the resource type, ID, and (if available) the custom resource name.
type ResourceIdentifier struct {
	_ struct{} `type:"structure"`

	// The time that the resource was deleted.
	ResourceDeletionTime *time.Time `locationName:"resourceDeletionTime" type:"timestamp" timestampFormat:"unix"`

	// The ID of the resource (for example., sg-xxxxxx).
	ResourceId *string `locationName:"resourceId" type:"string"`

	// The custom name of the resource (if available).
	ResourceName *string `locationName:"resourceName" type:"string"`

	// The type of resource.
	ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"`
}

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

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

// Defines which resources AWS Config evaluates against a rule. The scope can
// include one or more resource types, a combination of a tag key and value,
// or a combination of one resource type and one or more resource IDs. Specify
// a scope to constrain the resources to be evaluated. If you do not specify
// a scope, all resources in your recording group are evaluated against the
// rule.
type Scope struct {
	_ struct{} `type:"structure"`

	// The IDs of only those AWS resources that you want AWS Config to evaluate
	// against the rule. If you specify a resource ID, you must specify one resource
	// type for ComplianceResourceTypes.
	ComplianceResourceId *string `min:"1" type:"string"`

	// The resource types of only those AWS resources that you want AWS Config to
	// evaluate against the rule. You can specify only one type if you also specify
	// resource IDs for ComplianceResourceId.
	ComplianceResourceTypes []*string `type:"list"`

	// The tag key that is applied to only those AWS resources that you want AWS
	// Config to evaluate against the rule.
	TagKey *string `min:"1" type:"string"`

	// The tag value applied to only those AWS resources that you want AWS Config
	// to evaluate against the rule. If you specify a value for TagValue, you must
	// also specify a value for TagKey.
	TagValue *string `min:"1" type:"string"`
}

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

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

// Provides the AWS Config rule owner (AWS or customer), the rule identifier,
// and the events that trigger the evaluation of your AWS resources.
type Source struct {
	_ struct{} `type:"structure"`

	// Indicates whether AWS or the customer owns and manages the AWS Config rule.
	Owner *string `type:"string" enum:"Owner"`

	// Provides the source and type of the event that causes AWS Config to evaluate
	// your AWS resources.
	SourceDetails []*SourceDetail `type:"list"`

	// For AWS managed Config rules, a pre-defined identifier from a list. To reference
	// the list, see Using AWS Managed Config Rules (http://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html).
	//
	// For customer managed Config rules, the identifier is the Amazon Resource
	// Name (ARN) of the rule's AWS Lambda function.
	SourceIdentifier *string `min:"1" type:"string"`
}

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

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

// Provides the source and type of the event that triggers AWS Config to evaluate
// your AWS resources against a rule.
type SourceDetail struct {
	_ struct{} `type:"structure"`

	// The source of the event, such as an AWS service, that triggers AWS Config
	// to evaluate your AWS resources.
	EventSource *string `type:"string" enum:"EventSource"`

	// The type of SNS message that triggers AWS Config to run an evaluation. For
	// evaluations that are initiated when AWS Config delivers a configuration item
	// change notification, you must use ConfigurationItemChangeNotification. For
	// evaluations that are initiated when AWS Config delivers a configuration snapshot,
	// you must use ConfigurationSnapshotDeliveryCompleted.
	MessageType *string `type:"string" enum:"MessageType"`
}

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

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

// The input for the StartConfigurationRecorder action.
type StartConfigurationRecorderInput struct {
	_ struct{} `type:"structure"`

	// The name of the recorder object that records each configuration change made
	// to the resources.
	ConfigurationRecorderName *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

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

// The input for the StopConfigurationRecorder action.
type StopConfigurationRecorderInput struct {
	_ struct{} `type:"structure"`

	// The name of the recorder object that records each configuration change made
	// to the resources.
	ConfigurationRecorderName *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

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

const (
	// @enum ChronologicalOrder
	ChronologicalOrderReverse = "Reverse"
	// @enum ChronologicalOrder
	ChronologicalOrderForward = "Forward"
)

const (
	// @enum ComplianceType
	ComplianceTypeCompliant = "COMPLIANT"
	// @enum ComplianceType
	ComplianceTypeNonCompliant = "NON_COMPLIANT"
	// @enum ComplianceType
	ComplianceTypeNotApplicable = "NOT_APPLICABLE"
	// @enum ComplianceType
	ComplianceTypeInsufficientData = "INSUFFICIENT_DATA"
)

const (
	// @enum ConfigRuleState
	ConfigRuleStateActive = "ACTIVE"
	// @enum ConfigRuleState
	ConfigRuleStateDeleting = "DELETING"
)

const (
	// @enum ConfigurationItemStatus
	ConfigurationItemStatusOk = "Ok"
	// @enum ConfigurationItemStatus
	ConfigurationItemStatusFailed = "Failed"
	// @enum ConfigurationItemStatus
	ConfigurationItemStatusDiscovered = "Discovered"
	// @enum ConfigurationItemStatus
	ConfigurationItemStatusDeleted = "Deleted"
)

const (
	// @enum DeliveryStatus
	DeliveryStatusSuccess = "Success"
	// @enum DeliveryStatus
	DeliveryStatusFailure = "Failure"
	// @enum DeliveryStatus
	DeliveryStatusNotApplicable = "Not_Applicable"
)

const (
	// @enum EventSource
	EventSourceAwsConfig = "aws.config"
)

const (
	// @enum MaximumExecutionFrequency
	MaximumExecutionFrequencyOneHour = "One_Hour"
	// @enum MaximumExecutionFrequency
	MaximumExecutionFrequencyThreeHours = "Three_Hours"
	// @enum MaximumExecutionFrequency
	MaximumExecutionFrequencySixHours = "Six_Hours"
	// @enum MaximumExecutionFrequency
	MaximumExecutionFrequencyTwelveHours = "Twelve_Hours"
	// @enum MaximumExecutionFrequency
	MaximumExecutionFrequencyTwentyFourHours = "TwentyFour_Hours"
)

const (
	// @enum MessageType
	MessageTypeConfigurationItemChangeNotification = "ConfigurationItemChangeNotification"
	// @enum MessageType
	MessageTypeConfigurationSnapshotDeliveryCompleted = "ConfigurationSnapshotDeliveryCompleted"
)

const (
	// @enum Owner
	OwnerCustomLambda = "CUSTOM_LAMBDA"
	// @enum Owner
	OwnerAws = "AWS"
)

const (
	// @enum RecorderStatus
	RecorderStatusPending = "Pending"
	// @enum RecorderStatus
	RecorderStatusSuccess = "Success"
	// @enum RecorderStatus
	RecorderStatusFailure = "Failure"
)

const (
	// @enum ResourceType
	ResourceTypeAwsEc2CustomerGateway = "AWS::EC2::CustomerGateway"
	// @enum ResourceType
	ResourceTypeAwsEc2Eip = "AWS::EC2::EIP"
	// @enum ResourceType
	ResourceTypeAwsEc2Host = "AWS::EC2::Host"
	// @enum ResourceType
	ResourceTypeAwsEc2Instance = "AWS::EC2::Instance"
	// @enum ResourceType
	ResourceTypeAwsEc2InternetGateway = "AWS::EC2::InternetGateway"
	// @enum ResourceType
	ResourceTypeAwsEc2NetworkAcl = "AWS::EC2::NetworkAcl"
	// @enum ResourceType
	ResourceTypeAwsEc2NetworkInterface = "AWS::EC2::NetworkInterface"
	// @enum ResourceType
	ResourceTypeAwsEc2RouteTable = "AWS::EC2::RouteTable"
	// @enum ResourceType
	ResourceTypeAwsEc2SecurityGroup = "AWS::EC2::SecurityGroup"
	// @enum ResourceType
	ResourceTypeAwsEc2Subnet = "AWS::EC2::Subnet"
	// @enum ResourceType
	ResourceTypeAwsCloudTrailTrail = "AWS::CloudTrail::Trail"
	// @enum ResourceType
	ResourceTypeAwsEc2Volume = "AWS::EC2::Volume"
	// @enum ResourceType
	ResourceTypeAwsEc2Vpc = "AWS::EC2::VPC"
	// @enum ResourceType
	ResourceTypeAwsEc2Vpnconnection = "AWS::EC2::VPNConnection"
	// @enum ResourceType
	ResourceTypeAwsEc2Vpngateway = "AWS::EC2::VPNGateway"
	// @enum ResourceType
	ResourceTypeAwsIamGroup = "AWS::IAM::Group"
	// @enum ResourceType
	ResourceTypeAwsIamPolicy = "AWS::IAM::Policy"
	// @enum ResourceType
	ResourceTypeAwsIamRole = "AWS::IAM::Role"
	// @enum ResourceType
	ResourceTypeAwsIamUser = "AWS::IAM::User"
)
