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

package configservice

import (
	"context"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/internal/awsutil"
)

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

	// The maximum number of ResourceCount objects returned on each page. The default
	// is 100. You cannot specify a number 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 comma-separated list that specifies the resource types that you want
	// AWS Config to return (for example, "AWS::EC2::Instance", "AWS::IAM::User").
	//
	// If a value for resourceTypes is not specified, AWS Config returns all resource
	// types that AWS Config is recording in the region for your account.
	//
	// If the configuration recorder is turned off, AWS Config returns an empty
	// list of ResourceCount objects. If the configuration recorder is not recording
	// a specific resource type (for example, S3 buckets), that resource type is
	// not returned in the list of ResourceCount objects.
	ResourceTypes []string `locationName:"resourceTypes" type:"list"`
}

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

type GetDiscoveredResourceCountsOutput 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 list of ResourceCount objects. Each object is listed in descending order
	// by the number of resources.
	ResourceCounts []ResourceCount `locationName:"resourceCounts" type:"list"`

	// The total number of resources that AWS Config is recording in the region
	// for your account. If you specify resource types in the request, AWS Config
	// returns only the total number of resources for those resource types.
	//
	// Example
	//
	// AWS Config is recording three resource types in the US East (Ohio) Region
	// for your account: 25 EC2 instances, 20 IAM users, and 15 S3 buckets, for
	// a total of 60 resources.
	//
	// You make a call to the GetDiscoveredResourceCounts action and specify the
	// resource type, "AWS::EC2::Instances", in the request.
	//
	// AWS Config returns 25 for totalDiscoveredResources.
	TotalDiscoveredResources *int64 `locationName:"totalDiscoveredResources" type:"long"`
}

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

const opGetDiscoveredResourceCounts = "GetDiscoveredResourceCounts"

// GetDiscoveredResourceCountsRequest returns a request value for making API operation for
// AWS Config.
//
// Returns the resource types, the number of each resource type, and the total
// number of resources that AWS Config is recording in this region for your
// AWS account.
//
// Example
//
// AWS Config is recording three resource types in the US East (Ohio) Region
// for your account: 25 EC2 instances, 20 IAM users, and 15 S3 buckets.
//
// You make a call to the GetDiscoveredResourceCounts action and specify that
// you want all resource types.
//
// AWS Config returns the following:
//
//    * The resource types (EC2 instances, IAM users, and S3 buckets).
//
//    * The number of each resource type (25, 20, and 15).
//
//    * The total number of all resources (60).
//
// The response is paginated. By default, AWS Config lists 100 ResourceCount
// objects on each page. You can customize this number with the limit parameter.
// The response includes a nextToken string. To get the next page of results,
// run the request again and specify the string for the nextToken parameter.
//
// If you make a call to the GetDiscoveredResourceCounts action, you might not
// immediately receive resource counts in the following situations:
//
//    * You are a new AWS Config customer.
//
//    * You just enabled resource recording.
//
// It might take a few minutes for AWS Config to record and count your resources.
// Wait a few minutes and then retry the GetDiscoveredResourceCounts action.
//
//    // Example sending a request using GetDiscoveredResourceCountsRequest.
//    req := client.GetDiscoveredResourceCountsRequest(params)
//    resp, err := req.Send(context.TODO())
//    if err == nil {
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/config-2014-11-12/GetDiscoveredResourceCounts
func (c *Client) GetDiscoveredResourceCountsRequest(input *GetDiscoveredResourceCountsInput) GetDiscoveredResourceCountsRequest {
	op := &aws.Operation{
		Name:       opGetDiscoveredResourceCounts,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetDiscoveredResourceCountsInput{}
	}

	req := c.newRequest(op, input, &GetDiscoveredResourceCountsOutput{})
	return GetDiscoveredResourceCountsRequest{Request: req, Input: input, Copy: c.GetDiscoveredResourceCountsRequest}
}

// GetDiscoveredResourceCountsRequest is the request type for the
// GetDiscoveredResourceCounts API operation.
type GetDiscoveredResourceCountsRequest struct {
	*aws.Request
	Input *GetDiscoveredResourceCountsInput
	Copy  func(*GetDiscoveredResourceCountsInput) GetDiscoveredResourceCountsRequest
}

// Send marshals and sends the GetDiscoveredResourceCounts API request.
func (r GetDiscoveredResourceCountsRequest) Send(ctx context.Context) (*GetDiscoveredResourceCountsResponse, error) {
	r.Request.SetContext(ctx)
	err := r.Request.Send()
	if err != nil {
		return nil, err
	}

	resp := &GetDiscoveredResourceCountsResponse{
		GetDiscoveredResourceCountsOutput: r.Request.Data.(*GetDiscoveredResourceCountsOutput),
		response:                          &aws.Response{Request: r.Request},
	}

	return resp, nil
}

// GetDiscoveredResourceCountsResponse is the response type for the
// GetDiscoveredResourceCounts API operation.
type GetDiscoveredResourceCountsResponse struct {
	*GetDiscoveredResourceCountsOutput

	response *aws.Response
}

// SDKResponseMetdata returns the response metadata for the
// GetDiscoveredResourceCounts request.
func (r *GetDiscoveredResourceCountsResponse) SDKResponseMetdata() *aws.Response {
	return r.response
}
