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

package codegurusecurity

import (
	"fmt"
	"time"

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

const opBatchGetFindings = "BatchGetFindings"

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

	if input == nil {
		input = &BatchGetFindingsInput{}
	}

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

// BatchGetFindings API operation for Amazon CodeGuru Security.
//
// Returns a list of requested findings from standard scans.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CodeGuru Security's
// API operation BatchGetFindings for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     The server encountered an internal error and is unable to complete the request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - ValidationException
//     The input fails to satisfy the specified constraints.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/codeguru-security-2018-05-10/BatchGetFindings
func (c *CodeGuruSecurity) BatchGetFindings(input *BatchGetFindingsInput) (*BatchGetFindingsOutput, error) {
	req, out := c.BatchGetFindingsRequest(input)
	return out, req.Send()
}

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

const opCreateScan = "CreateScan"

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

	if input == nil {
		input = &CreateScanInput{}
	}

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

// CreateScan API operation for Amazon CodeGuru Security.
//
// Use to create a scan using code uploaded to an Amazon S3 bucket.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CodeGuru Security's
// API operation CreateScan for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     The server encountered an internal error and is unable to complete the request.
//
//   - ConflictException
//     The requested operation would cause a conflict with the current state of
//     a service resource associated with the request. Resolve the conflict before
//     retrying this request.
//
//   - ResourceNotFoundException
//     The resource specified in the request was not found.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - ValidationException
//     The input fails to satisfy the specified constraints.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/codeguru-security-2018-05-10/CreateScan
func (c *CodeGuruSecurity) CreateScan(input *CreateScanInput) (*CreateScanOutput, error) {
	req, out := c.CreateScanRequest(input)
	return out, req.Send()
}

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

const opCreateUploadUrl = "CreateUploadUrl"

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

	if input == nil {
		input = &CreateUploadUrlInput{}
	}

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

// CreateUploadUrl API operation for Amazon CodeGuru Security.
//
// Generates a pre-signed URL, request headers used to upload a code resource,
// and code artifact identifier for the uploaded resource.
//
// You can upload your code resource to the URL with the request headers using
// any HTTP client.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CodeGuru Security's
// API operation CreateUploadUrl for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     The server encountered an internal error and is unable to complete the request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - ValidationException
//     The input fails to satisfy the specified constraints.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/codeguru-security-2018-05-10/CreateUploadUrl
func (c *CodeGuruSecurity) CreateUploadUrl(input *CreateUploadUrlInput) (*CreateUploadUrlOutput, error) {
	req, out := c.CreateUploadUrlRequest(input)
	return out, req.Send()
}

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

const opGetAccountConfiguration = "GetAccountConfiguration"

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

	if input == nil {
		input = &GetAccountConfigurationInput{}
	}

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

// GetAccountConfiguration API operation for Amazon CodeGuru Security.
//
// Use to get the encryption configuration for an account.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CodeGuru Security's
// API operation GetAccountConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     The server encountered an internal error and is unable to complete the request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - ValidationException
//     The input fails to satisfy the specified constraints.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/codeguru-security-2018-05-10/GetAccountConfiguration
func (c *CodeGuruSecurity) GetAccountConfiguration(input *GetAccountConfigurationInput) (*GetAccountConfigurationOutput, error) {
	req, out := c.GetAccountConfigurationRequest(input)
	return out, req.Send()
}

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

const opGetFindings = "GetFindings"

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

	if input == nil {
		input = &GetFindingsInput{}
	}

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

// GetFindings API operation for Amazon CodeGuru Security.
//
// Returns a list of all findings generated by a particular scan.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CodeGuru Security's
// API operation GetFindings for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     The server encountered an internal error and is unable to complete the request.
//
//   - ConflictException
//     The requested operation would cause a conflict with the current state of
//     a service resource associated with the request. Resolve the conflict before
//     retrying this request.
//
//   - ResourceNotFoundException
//     The resource specified in the request was not found.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - ValidationException
//     The input fails to satisfy the specified constraints.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/codeguru-security-2018-05-10/GetFindings
func (c *CodeGuruSecurity) GetFindings(input *GetFindingsInput) (*GetFindingsOutput, error) {
	req, out := c.GetFindingsRequest(input)
	return out, req.Send()
}

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

// GetFindingsPages iterates over the pages of a GetFindings operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See GetFindings method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//	// Example iterating over at most 3 pages of a GetFindings operation.
//	pageNum := 0
//	err := client.GetFindingsPages(params,
//	    func(page *codegurusecurity.GetFindingsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *CodeGuruSecurity) GetFindingsPages(input *GetFindingsInput, fn func(*GetFindingsOutput, bool) bool) error {
	return c.GetFindingsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// GetFindingsPagesWithContext same as GetFindingsPages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *CodeGuruSecurity) GetFindingsPagesWithContext(ctx aws.Context, input *GetFindingsInput, fn func(*GetFindingsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *GetFindingsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.GetFindingsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opGetMetricsSummary = "GetMetricsSummary"

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

	if input == nil {
		input = &GetMetricsSummaryInput{}
	}

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

// GetMetricsSummary API operation for Amazon CodeGuru Security.
//
// Returns a summary of metrics for an account from a specified date, including
// number of open findings, the categories with most findings, the scans with
// most open findings, and scans with most open critical findings.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CodeGuru Security's
// API operation GetMetricsSummary for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     The server encountered an internal error and is unable to complete the request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - ValidationException
//     The input fails to satisfy the specified constraints.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/codeguru-security-2018-05-10/GetMetricsSummary
func (c *CodeGuruSecurity) GetMetricsSummary(input *GetMetricsSummaryInput) (*GetMetricsSummaryOutput, error) {
	req, out := c.GetMetricsSummaryRequest(input)
	return out, req.Send()
}

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

const opGetScan = "GetScan"

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

	if input == nil {
		input = &GetScanInput{}
	}

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

// GetScan API operation for Amazon CodeGuru Security.
//
// Returns details about a scan, including whether or not a scan has completed.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CodeGuru Security's
// API operation GetScan for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     The server encountered an internal error and is unable to complete the request.
//
//   - ResourceNotFoundException
//     The resource specified in the request was not found.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - ValidationException
//     The input fails to satisfy the specified constraints.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/codeguru-security-2018-05-10/GetScan
func (c *CodeGuruSecurity) GetScan(input *GetScanInput) (*GetScanOutput, error) {
	req, out := c.GetScanRequest(input)
	return out, req.Send()
}

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

const opListFindingsMetrics = "ListFindingsMetrics"

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

	if input == nil {
		input = &ListFindingsMetricsInput{}
	}

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

// ListFindingsMetrics API operation for Amazon CodeGuru Security.
//
// Returns metrics about all findings in an account within a specified time
// range.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CodeGuru Security's
// API operation ListFindingsMetrics for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     The server encountered an internal error and is unable to complete the request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - ValidationException
//     The input fails to satisfy the specified constraints.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/codeguru-security-2018-05-10/ListFindingsMetrics
func (c *CodeGuruSecurity) ListFindingsMetrics(input *ListFindingsMetricsInput) (*ListFindingsMetricsOutput, error) {
	req, out := c.ListFindingsMetricsRequest(input)
	return out, req.Send()
}

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

// ListFindingsMetricsPages iterates over the pages of a ListFindingsMetrics operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListFindingsMetrics method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//	// Example iterating over at most 3 pages of a ListFindingsMetrics operation.
//	pageNum := 0
//	err := client.ListFindingsMetricsPages(params,
//	    func(page *codegurusecurity.ListFindingsMetricsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *CodeGuruSecurity) ListFindingsMetricsPages(input *ListFindingsMetricsInput, fn func(*ListFindingsMetricsOutput, bool) bool) error {
	return c.ListFindingsMetricsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListFindingsMetricsPagesWithContext same as ListFindingsMetricsPages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *CodeGuruSecurity) ListFindingsMetricsPagesWithContext(ctx aws.Context, input *ListFindingsMetricsInput, fn func(*ListFindingsMetricsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListFindingsMetricsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListFindingsMetricsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListScans = "ListScans"

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

	if input == nil {
		input = &ListScansInput{}
	}

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

// ListScans API operation for Amazon CodeGuru Security.
//
// Returns a list of all scans in an account. Does not return EXPRESS scans.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CodeGuru Security's
// API operation ListScans for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     The server encountered an internal error and is unable to complete the request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - ValidationException
//     The input fails to satisfy the specified constraints.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/codeguru-security-2018-05-10/ListScans
func (c *CodeGuruSecurity) ListScans(input *ListScansInput) (*ListScansOutput, error) {
	req, out := c.ListScansRequest(input)
	return out, req.Send()
}

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

// ListScansPages iterates over the pages of a ListScans operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListScans method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//	// Example iterating over at most 3 pages of a ListScans operation.
//	pageNum := 0
//	err := client.ListScansPages(params,
//	    func(page *codegurusecurity.ListScansOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *CodeGuruSecurity) ListScansPages(input *ListScansInput, fn func(*ListScansOutput, bool) bool) error {
	return c.ListScansPagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListScansPagesWithContext same as ListScansPages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *CodeGuruSecurity) ListScansPagesWithContext(ctx aws.Context, input *ListScansInput, fn func(*ListScansOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListScansInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListScansRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListTagsForResource = "ListTagsForResource"

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

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

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

// ListTagsForResource API operation for Amazon CodeGuru Security.
//
// Returns a list of all tags associated with a scan.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CodeGuru Security's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     The server encountered an internal error and is unable to complete the request.
//
//   - ConflictException
//     The requested operation would cause a conflict with the current state of
//     a service resource associated with the request. Resolve the conflict before
//     retrying this request.
//
//   - ResourceNotFoundException
//     The resource specified in the request was not found.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - ValidationException
//     The input fails to satisfy the specified constraints.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/codeguru-security-2018-05-10/ListTagsForResource
func (c *CodeGuruSecurity) ListTagsForResource(input *ListTagsForResourceInput) (*ListTagsForResourceOutput, error) {
	req, out := c.ListTagsForResourceRequest(input)
	return out, req.Send()
}

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

const opTagResource = "TagResource"

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

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

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

// TagResource API operation for Amazon CodeGuru Security.
//
// Use to add one or more tags to an existing scan.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CodeGuru Security's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     The server encountered an internal error and is unable to complete the request.
//
//   - ConflictException
//     The requested operation would cause a conflict with the current state of
//     a service resource associated with the request. Resolve the conflict before
//     retrying this request.
//
//   - ResourceNotFoundException
//     The resource specified in the request was not found.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - ValidationException
//     The input fails to satisfy the specified constraints.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/codeguru-security-2018-05-10/TagResource
func (c *CodeGuruSecurity) TagResource(input *TagResourceInput) (*TagResourceOutput, error) {
	req, out := c.TagResourceRequest(input)
	return out, req.Send()
}

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

const opUntagResource = "UntagResource"

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

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

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

// UntagResource API operation for Amazon CodeGuru Security.
//
// Use to remove one or more tags from an existing scan.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CodeGuru Security's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     The server encountered an internal error and is unable to complete the request.
//
//   - ConflictException
//     The requested operation would cause a conflict with the current state of
//     a service resource associated with the request. Resolve the conflict before
//     retrying this request.
//
//   - ResourceNotFoundException
//     The resource specified in the request was not found.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - ValidationException
//     The input fails to satisfy the specified constraints.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/codeguru-security-2018-05-10/UntagResource
func (c *CodeGuruSecurity) UntagResource(input *UntagResourceInput) (*UntagResourceOutput, error) {
	req, out := c.UntagResourceRequest(input)
	return out, req.Send()
}

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

const opUpdateAccountConfiguration = "UpdateAccountConfiguration"

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

	if input == nil {
		input = &UpdateAccountConfigurationInput{}
	}

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

// UpdateAccountConfiguration API operation for Amazon CodeGuru Security.
//
// Use to update the encryption configuration for an account.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CodeGuru Security's
// API operation UpdateAccountConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     The server encountered an internal error and is unable to complete the request.
//
//   - ResourceNotFoundException
//     The resource specified in the request was not found.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - ValidationException
//     The input fails to satisfy the specified constraints.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/codeguru-security-2018-05-10/UpdateAccountConfiguration
func (c *CodeGuruSecurity) UpdateAccountConfiguration(input *UpdateAccountConfigurationInput) (*UpdateAccountConfigurationOutput, error) {
	req, out := c.UpdateAccountConfigurationRequest(input)
	return out, req.Send()
}

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

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

	// The identifier for the error.
	//
	// ErrorCode is a required field
	ErrorCode *string `locationName:"errorCode" type:"string" required:"true"`

	// Description of the error.
	Message_ *string `locationName:"message" type:"string"`

	// The identifier for the resource you don't have access to.
	ResourceId *string `locationName:"resourceId" type:"string"`

	// The type of resource you don't have access to.
	ResourceType *string `locationName:"resourceType" type:"string"`
}

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

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

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

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

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

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

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

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

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

// A summary of findings metrics for an account on a specified date.
type AccountFindingsMetric struct {
	_ struct{} `type:"structure"`

	// The number of closed findings of each severity on the specified date.
	ClosedFindings *FindingMetricsValuePerSeverity `locationName:"closedFindings" type:"structure"`

	// The date from which the findings metrics were retrieved.
	Date *time.Time `locationName:"date" type:"timestamp"`

	// The average time in days it takes to close findings of each severity as of
	// a specified date.
	MeanTimeToClose *FindingMetricsValuePerSeverity `locationName:"meanTimeToClose" type:"structure"`

	// The number of new findings of each severity on the specified date.
	NewFindings *FindingMetricsValuePerSeverity `locationName:"newFindings" type:"structure"`

	// The number of open findings of each severity as of the specified date.
	OpenFindings *FindingMetricsValuePerSeverity `locationName:"openFindings" type:"structure"`
}

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

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

// SetClosedFindings sets the ClosedFindings field's value.
func (s *AccountFindingsMetric) SetClosedFindings(v *FindingMetricsValuePerSeverity) *AccountFindingsMetric {
	s.ClosedFindings = v
	return s
}

// SetDate sets the Date field's value.
func (s *AccountFindingsMetric) SetDate(v time.Time) *AccountFindingsMetric {
	s.Date = &v
	return s
}

// SetMeanTimeToClose sets the MeanTimeToClose field's value.
func (s *AccountFindingsMetric) SetMeanTimeToClose(v *FindingMetricsValuePerSeverity) *AccountFindingsMetric {
	s.MeanTimeToClose = v
	return s
}

// SetNewFindings sets the NewFindings field's value.
func (s *AccountFindingsMetric) SetNewFindings(v *FindingMetricsValuePerSeverity) *AccountFindingsMetric {
	s.NewFindings = v
	return s
}

// SetOpenFindings sets the OpenFindings field's value.
func (s *AccountFindingsMetric) SetOpenFindings(v *FindingMetricsValuePerSeverity) *AccountFindingsMetric {
	s.OpenFindings = v
	return s
}

// Contains information about the error that caused a finding to fail to be
// retrieved.
type BatchGetFindingsError struct {
	_ struct{} `type:"structure"`

	// A code associated with the type of error.
	//
	// ErrorCode is a required field
	ErrorCode *string `locationName:"errorCode" type:"string" required:"true" enum:"ErrorCode"`

	// The finding ID of the finding that was not fetched.
	//
	// FindingId is a required field
	FindingId *string `locationName:"findingId" type:"string" required:"true"`

	// Describes the error.
	//
	// Message is a required field
	Message *string `locationName:"message" type:"string" required:"true"`

	// The name of the scan that generated the finding.
	//
	// ScanName is a required field
	ScanName *string `locationName:"scanName" min:"1" type:"string" required:"true"`
}

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

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

// SetErrorCode sets the ErrorCode field's value.
func (s *BatchGetFindingsError) SetErrorCode(v string) *BatchGetFindingsError {
	s.ErrorCode = &v
	return s
}

// SetFindingId sets the FindingId field's value.
func (s *BatchGetFindingsError) SetFindingId(v string) *BatchGetFindingsError {
	s.FindingId = &v
	return s
}

// SetMessage sets the Message field's value.
func (s *BatchGetFindingsError) SetMessage(v string) *BatchGetFindingsError {
	s.Message = &v
	return s
}

// SetScanName sets the ScanName field's value.
func (s *BatchGetFindingsError) SetScanName(v string) *BatchGetFindingsError {
	s.ScanName = &v
	return s
}

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

	// A list of finding identifiers. Each identifier consists of a scanName and
	// a findingId. You retrieve the findingId when you call GetFindings.
	//
	// FindingIdentifiers is a required field
	FindingIdentifiers []*FindingIdentifier `locationName:"findingIdentifiers" min:"1" type:"list" required:"true"`
}

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

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

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

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

// SetFindingIdentifiers sets the FindingIdentifiers field's value.
func (s *BatchGetFindingsInput) SetFindingIdentifiers(v []*FindingIdentifier) *BatchGetFindingsInput {
	s.FindingIdentifiers = v
	return s
}

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

	// A list of errors for individual findings which were not fetched. Each BatchGetFindingsError
	// contains the scanName, findingId, errorCode and error message.
	//
	// FailedFindings is a required field
	FailedFindings []*BatchGetFindingsError `locationName:"failedFindings" type:"list" required:"true"`

	// A list of all findings which were successfully fetched.
	//
	// Findings is a required field
	Findings []*Finding `locationName:"findings" type:"list" required:"true"`
}

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

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

// SetFailedFindings sets the FailedFindings field's value.
func (s *BatchGetFindingsOutput) SetFailedFindings(v []*BatchGetFindingsError) *BatchGetFindingsOutput {
	s.FailedFindings = v
	return s
}

// SetFindings sets the Findings field's value.
func (s *BatchGetFindingsOutput) SetFindings(v []*Finding) *BatchGetFindingsOutput {
	s.Findings = v
	return s
}

// Information about a finding category with open findings.
type CategoryWithFindingNum struct {
	_ struct{} `type:"structure"`

	// The name of the finding category. A finding category is determined by the
	// detector that detected the finding.
	CategoryName *string `locationName:"categoryName" type:"string"`

	// The number of open findings in the category.
	FindingNumber *int64 `locationName:"findingNumber" type:"integer"`
}

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

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

// SetCategoryName sets the CategoryName field's value.
func (s *CategoryWithFindingNum) SetCategoryName(v string) *CategoryWithFindingNum {
	s.CategoryName = &v
	return s
}

// SetFindingNumber sets the FindingNumber field's value.
func (s *CategoryWithFindingNum) SetFindingNumber(v int64) *CategoryWithFindingNum {
	s.FindingNumber = &v
	return s
}

// The line of code where a finding was detected.
type CodeLine struct {
	_ struct{} `type:"structure"`

	// The code that contains a vulnerability.
	Content *string `locationName:"content" type:"string"`

	// The code line number.
	Number *int64 `locationName:"number" type:"integer"`
}

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

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

// SetContent sets the Content field's value.
func (s *CodeLine) SetContent(v string) *CodeLine {
	s.Content = &v
	return s
}

// SetNumber sets the Number field's value.
func (s *CodeLine) SetNumber(v int64) *CodeLine {
	s.Number = &v
	return s
}

// The requested operation would cause a conflict with the current state of
// a service resource associated with the request. Resolve the conflict before
// retrying this request.
type ConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The identifier for the error.
	//
	// ErrorCode is a required field
	ErrorCode *string `locationName:"errorCode" type:"string" required:"true"`

	// Description of the error.
	Message_ *string `locationName:"message" type:"string"`

	// The identifier for the service resource associated with the request.
	//
	// ResourceId is a required field
	ResourceId *string `locationName:"resourceId" type:"string" required:"true"`

	// The type of resource associated with the request.
	//
	// ResourceType is a required field
	ResourceType *string `locationName:"resourceType" type:"string" required:"true"`
}

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

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

func newErrorConflictException(v protocol.ResponseMetadata) error {
	return &ConflictException{
		RespMetadata: v,
	}
}

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

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

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

func (s *ConflictException) Error() string {
	return fmt.Sprintf("%s: %s\n%s", s.Code(), s.Message(), s.String())
}

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

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

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

	// The type of analysis you want CodeGuru Security to perform in the scan, either
	// Security or All. The Security type only generates findings related to security.
	// The All type generates both security findings and quality findings. Defaults
	// to Security type if missing.
	AnalysisType *string `locationName:"analysisType" type:"string" enum:"AnalysisType"`

	// The idempotency token for the request. Amazon CodeGuru Security uses this
	// value to prevent the accidental creation of duplicate scans if there are
	// failures and retries.
	ClientToken *string `locationName:"clientToken" min:"1" type:"string" idempotencyToken:"true"`

	// The identifier for the resource object to be scanned.
	//
	// ResourceId is a required field
	ResourceId *ResourceId `locationName:"resourceId" type:"structure" required:"true"`

	// The unique name that CodeGuru Security uses to track revisions across multiple
	// scans of the same resource. Only allowed for a STANDARD scan type.
	//
	// ScanName is a required field
	ScanName *string `locationName:"scanName" min:"1" type:"string" required:"true"`

	// The type of scan, either Standard or Express. Defaults to Standard type if
	// missing.
	//
	// Express scans run on limited resources and use a limited set of detectors
	// to analyze your code in near-real time. Standard scans have standard resource
	// limits and use the full set of detectors to analyze your code.
	ScanType *string `locationName:"scanType" type:"string" enum:"ScanType"`

	// An array of key-value pairs used to tag a scan. A tag is a custom attribute
	// label with two parts:
	//
	//    * A tag key. For example, CostCenter, Environment, or Secret. Tag keys
	//    are case sensitive.
	//
	//    * An optional tag value field. For example, 111122223333, Production,
	//    or a team name. Omitting the tag value is the same as using an empty string.
	//    Tag values are case sensitive.
	Tags map[string]*string `locationName:"tags" type:"map"`
}

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

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

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

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

// SetAnalysisType sets the AnalysisType field's value.
func (s *CreateScanInput) SetAnalysisType(v string) *CreateScanInput {
	s.AnalysisType = &v
	return s
}

// SetClientToken sets the ClientToken field's value.
func (s *CreateScanInput) SetClientToken(v string) *CreateScanInput {
	s.ClientToken = &v
	return s
}

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

// SetScanName sets the ScanName field's value.
func (s *CreateScanInput) SetScanName(v string) *CreateScanInput {
	s.ScanName = &v
	return s
}

// SetScanType sets the ScanType field's value.
func (s *CreateScanInput) SetScanType(v string) *CreateScanInput {
	s.ScanType = &v
	return s
}

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

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

	// The identifier for the resource object that contains resources that were
	// scanned.
	//
	// ResourceId is a required field
	ResourceId *ResourceId `locationName:"resourceId" type:"structure" required:"true"`

	// UUID that identifies the individual scan run.
	//
	// RunId is a required field
	RunId *string `locationName:"runId" type:"string" required:"true"`

	// The name of the scan.
	//
	// ScanName is a required field
	ScanName *string `locationName:"scanName" min:"1" type:"string" required:"true"`

	// The ARN for the scan name.
	ScanNameArn *string `locationName:"scanNameArn" min:"1" type:"string"`

	// The current state of the scan. Returns either InProgress, Successful, or
	// Failed.
	//
	// ScanState is a required field
	ScanState *string `locationName:"scanState" type:"string" required:"true" enum:"ScanState"`
}

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

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

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

// SetRunId sets the RunId field's value.
func (s *CreateScanOutput) SetRunId(v string) *CreateScanOutput {
	s.RunId = &v
	return s
}

// SetScanName sets the ScanName field's value.
func (s *CreateScanOutput) SetScanName(v string) *CreateScanOutput {
	s.ScanName = &v
	return s
}

// SetScanNameArn sets the ScanNameArn field's value.
func (s *CreateScanOutput) SetScanNameArn(v string) *CreateScanOutput {
	s.ScanNameArn = &v
	return s
}

// SetScanState sets the ScanState field's value.
func (s *CreateScanOutput) SetScanState(v string) *CreateScanOutput {
	s.ScanState = &v
	return s
}

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

	// The name of the scan that will use the uploaded resource. CodeGuru Security
	// uses the unique scan name to track revisions across multiple scans of the
	// same resource. Use this scanName when you call CreateScan on the code resource
	// you upload to this URL.
	//
	// ScanName is a required field
	ScanName *string `locationName:"scanName" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetScanName sets the ScanName field's value.
func (s *CreateUploadUrlInput) SetScanName(v string) *CreateUploadUrlInput {
	s.ScanName = &v
	return s
}

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

	// The identifier for the uploaded code resource. Pass this to CreateScan to
	// use the uploaded resources.
	//
	// CodeArtifactId is a required field
	CodeArtifactId *string `locationName:"codeArtifactId" type:"string" required:"true"`

	// A set of key-value pairs that contain the required headers when uploading
	// your resource.
	//
	// RequestHeaders is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateUploadUrlOutput's
	// String and GoString methods.
	//
	// RequestHeaders is a required field
	RequestHeaders map[string]*string `locationName:"requestHeaders" type:"map" required:"true" sensitive:"true"`

	// A pre-signed S3 URL. You can upload the code file you want to scan with the
	// required requestHeaders using any HTTP client.
	//
	// S3Url is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateUploadUrlOutput's
	// String and GoString methods.
	//
	// S3Url is a required field
	S3Url *string `locationName:"s3Url" min:"1" type:"string" required:"true" sensitive:"true"`
}

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

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

// SetCodeArtifactId sets the CodeArtifactId field's value.
func (s *CreateUploadUrlOutput) SetCodeArtifactId(v string) *CreateUploadUrlOutput {
	s.CodeArtifactId = &v
	return s
}

// SetRequestHeaders sets the RequestHeaders field's value.
func (s *CreateUploadUrlOutput) SetRequestHeaders(v map[string]*string) *CreateUploadUrlOutput {
	s.RequestHeaders = v
	return s
}

// SetS3Url sets the S3Url field's value.
func (s *CreateUploadUrlOutput) SetS3Url(v string) *CreateUploadUrlOutput {
	s.S3Url = &v
	return s
}

// Information about the encryption configuration for an account. Required to
// call UpdateAccountConfiguration.
type EncryptionConfig struct {
	_ struct{} `type:"structure"`

	// The KMS key ARN that is used for encryption. If an AWS-managed key is used
	// for encryption, returns empty.
	KmsKeyArn *string `locationName:"kmsKeyArn" min:"1" type:"string"`
}

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

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

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

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

// SetKmsKeyArn sets the KmsKeyArn field's value.
func (s *EncryptionConfig) SetKmsKeyArn(v string) *EncryptionConfig {
	s.KmsKeyArn = &v
	return s
}

// Information about the location of security vulnerabilities that Amazon CodeGuru
// Security detected in your code.
type FilePath struct {
	_ struct{} `type:"structure"`

	// A list of CodeLine objects that describe where the security vulnerability
	// appears in your code.
	CodeSnippet []*CodeLine `locationName:"codeSnippet" type:"list"`

	// The last line number of the code snippet where the security vulnerability
	// appears in your code.
	EndLine *int64 `locationName:"endLine" type:"integer"`

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

	// The path to the resource with the security vulnerability.
	Path *string `locationName:"path" type:"string"`

	// The first line number of the code snippet where the security vulnerability
	// appears in your code.
	StartLine *int64 `locationName:"startLine" type:"integer"`
}

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

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

// SetCodeSnippet sets the CodeSnippet field's value.
func (s *FilePath) SetCodeSnippet(v []*CodeLine) *FilePath {
	s.CodeSnippet = v
	return s
}

// SetEndLine sets the EndLine field's value.
func (s *FilePath) SetEndLine(v int64) *FilePath {
	s.EndLine = &v
	return s
}

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

// SetPath sets the Path field's value.
func (s *FilePath) SetPath(v string) *FilePath {
	s.Path = &v
	return s
}

// SetStartLine sets the StartLine field's value.
func (s *FilePath) SetStartLine(v int64) *FilePath {
	s.StartLine = &v
	return s
}

// Information about a finding that was detected in your code.
type Finding struct {
	_ struct{} `type:"structure"`

	// The time when the finding was created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp"`

	// A description of the finding.
	Description *string `locationName:"description" type:"string"`

	// The identifier for the detector that detected the finding in your code. A
	// detector is a defined rule based on industry standards and AWS best practices.
	DetectorId *string `locationName:"detectorId" type:"string"`

	// The name of the detector that identified the security vulnerability in your
	// code.
	DetectorName *string `locationName:"detectorName" type:"string"`

	// One or more tags or categorizations that are associated with a detector.
	// These tags are defined by type, programming language, or other classification
	// such as maintainability or consistency.
	DetectorTags []*string `locationName:"detectorTags" type:"list"`

	// The identifier for the component that generated a finding such as AmazonCodeGuruSecurity.
	GeneratorId *string `locationName:"generatorId" type:"string"`

	// The identifier for a finding.
	Id *string `locationName:"id" type:"string"`

	// An object that contains the details about how to remediate a finding.
	Remediation *Remediation `locationName:"remediation" type:"structure"`

	// The resource where Amazon CodeGuru Security detected a finding.
	Resource *Resource `locationName:"resource" type:"structure"`

	// The identifier for the rule that generated the finding.
	RuleId *string `locationName:"ruleId" type:"string"`

	// The severity of the finding. Severity can be critical, high, medium, low,
	// or informational. For information on severity levels, see Finding severity
	// (https://docs.aws.amazon.com/codeguru/latest/security-ug/findings-overview.html#severity-distribution)
	// in the Amazon CodeGuru Security User Guide.
	Severity *string `locationName:"severity" type:"string" enum:"Severity"`

	// The status of the finding. A finding status can be open or closed.
	Status *string `locationName:"status" type:"string" enum:"Status"`

	// The title of the finding.
	Title *string `locationName:"title" type:"string"`

	// The type of finding.
	Type *string `locationName:"type" type:"string"`

	// The time when the finding was last updated. Findings are updated when you
	// remediate them or when the finding code location changes.
	UpdatedAt *time.Time `locationName:"updatedAt" type:"timestamp"`

	// An object that describes the detected security vulnerability.
	Vulnerability *Vulnerability `locationName:"vulnerability" type:"structure"`
}

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

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

// SetCreatedAt sets the CreatedAt field's value.
func (s *Finding) SetCreatedAt(v time.Time) *Finding {
	s.CreatedAt = &v
	return s
}

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

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

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

// SetDetectorTags sets the DetectorTags field's value.
func (s *Finding) SetDetectorTags(v []*string) *Finding {
	s.DetectorTags = v
	return s
}

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

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

// SetRemediation sets the Remediation field's value.
func (s *Finding) SetRemediation(v *Remediation) *Finding {
	s.Remediation = v
	return s
}

// SetResource sets the Resource field's value.
func (s *Finding) SetResource(v *Resource) *Finding {
	s.Resource = v
	return s
}

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

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

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

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

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

// SetUpdatedAt sets the UpdatedAt field's value.
func (s *Finding) SetUpdatedAt(v time.Time) *Finding {
	s.UpdatedAt = &v
	return s
}

// SetVulnerability sets the Vulnerability field's value.
func (s *Finding) SetVulnerability(v *Vulnerability) *Finding {
	s.Vulnerability = v
	return s
}

// An object that contains information about a finding and the scan that generated
// it.
type FindingIdentifier struct {
	_ struct{} `type:"structure"`

	// The identifier for a finding.
	//
	// FindingId is a required field
	FindingId *string `locationName:"findingId" type:"string" required:"true"`

	// The name of the scan that generated the finding.
	//
	// ScanName is a required field
	ScanName *string `locationName:"scanName" type:"string" required:"true"`
}

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

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

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

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

// SetFindingId sets the FindingId field's value.
func (s *FindingIdentifier) SetFindingId(v string) *FindingIdentifier {
	s.FindingId = &v
	return s
}

// SetScanName sets the ScanName field's value.
func (s *FindingIdentifier) SetScanName(v string) *FindingIdentifier {
	s.ScanName = &v
	return s
}

// A numeric value corresponding to the severity of a finding, such as the number
// of open findings or the average time it takes to close findings of a given
// severity.
type FindingMetricsValuePerSeverity struct {
	_ struct{} `type:"structure"`

	// A numeric value corresponding to a critical finding.
	Critical *float64 `locationName:"critical" type:"double"`

	// A numeric value corresponding to a high severity finding.
	High *float64 `locationName:"high" type:"double"`

	// A numeric value corresponding to an informational finding.
	Info *float64 `locationName:"info" type:"double"`

	// A numeric value corresponding to a low severity finding.
	Low *float64 `locationName:"low" type:"double"`

	// A numeric value corresponding to a medium severity finding.
	Medium *float64 `locationName:"medium" type:"double"`
}

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

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

// SetCritical sets the Critical field's value.
func (s *FindingMetricsValuePerSeverity) SetCritical(v float64) *FindingMetricsValuePerSeverity {
	s.Critical = &v
	return s
}

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

// SetInfo sets the Info field's value.
func (s *FindingMetricsValuePerSeverity) SetInfo(v float64) *FindingMetricsValuePerSeverity {
	s.Info = &v
	return s
}

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

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

type GetAccountConfigurationInput struct {
	_ struct{} `type:"structure" nopayload:"true"`
}

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

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

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

	// An EncryptionConfig object that contains the KMS key ARN that is used for
	// encryption. By default, CodeGuru Security uses an AWS-managed key for encryption.
	// To specify your own key, call UpdateAccountConfiguration. If you do not specify
	// a customer-managed key, returns empty.
	//
	// EncryptionConfig is a required field
	EncryptionConfig *EncryptionConfig `locationName:"encryptionConfig" type:"structure" required:"true"`
}

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

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

// SetEncryptionConfig sets the EncryptionConfig field's value.
func (s *GetAccountConfigurationOutput) SetEncryptionConfig(v *EncryptionConfig) *GetAccountConfigurationOutput {
	s.EncryptionConfig = v
	return s
}

type GetFindingsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return in the response. Use this parameter
	// when paginating results. If additional results exist beyond the number you
	// specify, the nextToken element is returned in the response. Use nextToken
	// in a subsequent request to retrieve additional results. If not specified,
	// returns 1000 results.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// A token to use for paginating results that are returned in the response.
	// Set the value of this parameter to null for the first request. For subsequent
	// calls, use the nextToken value returned from the previous request to continue
	// listing results after the first page.
	NextToken *string `location:"querystring" locationName:"nextToken" min:"1" type:"string"`

	// The name of the scan you want to retrieve findings from.
	//
	// ScanName is a required field
	ScanName *string `location:"uri" locationName:"scanName" min:"1" type:"string" required:"true"`

	// The status of the findings you want to get. Pass either Open, Closed, or
	// All.
	Status *string `location:"querystring" locationName:"status" type:"string" enum:"Status"`
}

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

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

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

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

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

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

// SetScanName sets the ScanName field's value.
func (s *GetFindingsInput) SetScanName(v string) *GetFindingsInput {
	s.ScanName = &v
	return s
}

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

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

	// A list of findings generated by the specified scan.
	Findings []*Finding `locationName:"findings" type:"list"`

	// A pagination token. You can use this in future calls to GetFindings to continue
	// listing results after the current page.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

// SetFindings sets the Findings field's value.
func (s *GetFindingsOutput) SetFindings(v []*Finding) *GetFindingsOutput {
	s.Findings = v
	return s
}

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

type GetMetricsSummaryInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The date you want to retrieve summary metrics from, rounded to the nearest
	// day. The date must be within the past two years.
	//
	// Date is a required field
	Date *time.Time `location:"querystring" locationName:"date" type:"timestamp" required:"true"`
}

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

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

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

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

// SetDate sets the Date field's value.
func (s *GetMetricsSummaryInput) SetDate(v time.Time) *GetMetricsSummaryInput {
	s.Date = &v
	return s
}

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

	// The summary metrics from the specified date.
	MetricsSummary *MetricsSummary `locationName:"metricsSummary" type:"structure"`
}

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

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

// SetMetricsSummary sets the MetricsSummary field's value.
func (s *GetMetricsSummaryOutput) SetMetricsSummary(v *MetricsSummary) *GetMetricsSummaryOutput {
	s.MetricsSummary = v
	return s
}

type GetScanInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// UUID that identifies the individual scan run you want to view details about.
	// You retrieve this when you call the CreateScan operation. Defaults to the
	// latest scan run if missing.
	RunId *string `location:"querystring" locationName:"runId" type:"string"`

	// The name of the scan you want to view details about.
	//
	// ScanName is a required field
	ScanName *string `location:"uri" locationName:"scanName" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetRunId sets the RunId field's value.
func (s *GetScanInput) SetRunId(v string) *GetScanInput {
	s.RunId = &v
	return s
}

// SetScanName sets the ScanName field's value.
func (s *GetScanInput) SetScanName(v string) *GetScanInput {
	s.ScanName = &v
	return s
}

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

	// The type of analysis CodeGuru Security performed in the scan, either Security
	// or All. The Security type only generates findings related to security. The
	// All type generates both security findings and quality findings.
	//
	// AnalysisType is a required field
	AnalysisType *string `locationName:"analysisType" type:"string" required:"true" enum:"AnalysisType"`

	// The time the scan was created.
	//
	// CreatedAt is a required field
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp" required:"true"`

	// Details about the error that causes a scan to fail to be retrieved.
	ErrorMessage *string `locationName:"errorMessage" min:"1" type:"string"`

	// The number of times a scan has been re-run on a revised resource.
	NumberOfRevisions *int64 `locationName:"numberOfRevisions" type:"long"`

	// UUID that identifies the individual scan run.
	//
	// RunId is a required field
	RunId *string `locationName:"runId" type:"string" required:"true"`

	// The name of the scan.
	//
	// ScanName is a required field
	ScanName *string `locationName:"scanName" min:"1" type:"string" required:"true"`

	// The ARN for the scan name.
	ScanNameArn *string `locationName:"scanNameArn" min:"1" type:"string"`

	// The current state of the scan. Returns either InProgress, Successful, or
	// Failed.
	//
	// ScanState is a required field
	ScanState *string `locationName:"scanState" type:"string" required:"true" enum:"ScanState"`

	// The time when the scan was last updated. Only available for STANDARD scan
	// types.
	UpdatedAt *time.Time `locationName:"updatedAt" type:"timestamp"`
}

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

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

// SetAnalysisType sets the AnalysisType field's value.
func (s *GetScanOutput) SetAnalysisType(v string) *GetScanOutput {
	s.AnalysisType = &v
	return s
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *GetScanOutput) SetCreatedAt(v time.Time) *GetScanOutput {
	s.CreatedAt = &v
	return s
}

// SetErrorMessage sets the ErrorMessage field's value.
func (s *GetScanOutput) SetErrorMessage(v string) *GetScanOutput {
	s.ErrorMessage = &v
	return s
}

// SetNumberOfRevisions sets the NumberOfRevisions field's value.
func (s *GetScanOutput) SetNumberOfRevisions(v int64) *GetScanOutput {
	s.NumberOfRevisions = &v
	return s
}

// SetRunId sets the RunId field's value.
func (s *GetScanOutput) SetRunId(v string) *GetScanOutput {
	s.RunId = &v
	return s
}

// SetScanName sets the ScanName field's value.
func (s *GetScanOutput) SetScanName(v string) *GetScanOutput {
	s.ScanName = &v
	return s
}

// SetScanNameArn sets the ScanNameArn field's value.
func (s *GetScanOutput) SetScanNameArn(v string) *GetScanOutput {
	s.ScanNameArn = &v
	return s
}

// SetScanState sets the ScanState field's value.
func (s *GetScanOutput) SetScanState(v string) *GetScanOutput {
	s.ScanState = &v
	return s
}

// SetUpdatedAt sets the UpdatedAt field's value.
func (s *GetScanOutput) SetUpdatedAt(v time.Time) *GetScanOutput {
	s.UpdatedAt = &v
	return s
}

// The server encountered an internal error and is unable to complete the request.
type InternalServerException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The internal error encountered by the server.
	Error_ *string `locationName:"error" type:"string"`

	// Description of the error.
	Message_ *string `locationName:"message" type:"string"`
}

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

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

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

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

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

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

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

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

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

type ListFindingsMetricsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The end date of the interval which you want to retrieve metrics from. Round
	// to the nearest day.
	//
	// EndDate is a required field
	EndDate *time.Time `location:"querystring" locationName:"endDate" type:"timestamp" required:"true"`

	// The maximum number of results to return in the response. Use this parameter
	// when paginating results. If additional results exist beyond the number you
	// specify, the nextToken element is returned in the response. Use nextToken
	// in a subsequent request to retrieve additional results. If not specified,
	// returns 1000 results.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// A token to use for paginating results that are returned in the response.
	// Set the value of this parameter to null for the first request. For subsequent
	// calls, use the nextToken value returned from the previous request to continue
	// listing results after the first page.
	NextToken *string `location:"querystring" locationName:"nextToken" min:"1" type:"string"`

	// The start date of the interval which you want to retrieve metrics from. Rounds
	// to the nearest day.
	//
	// StartDate is a required field
	StartDate *time.Time `location:"querystring" locationName:"startDate" type:"timestamp" required:"true"`
}

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

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

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

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

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

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

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

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

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

	// A list of AccountFindingsMetric objects retrieved from the specified time
	// interval.
	FindingsMetrics []*AccountFindingsMetric `locationName:"findingsMetrics" type:"list"`

	// A pagination token. You can use this in future calls to ListFindingMetrics
	// to continue listing results after the current page.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

// SetFindingsMetrics sets the FindingsMetrics field's value.
func (s *ListFindingsMetricsOutput) SetFindingsMetrics(v []*AccountFindingsMetric) *ListFindingsMetricsOutput {
	s.FindingsMetrics = v
	return s
}

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

type ListScansInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The maximum number of results to return in the response. Use this parameter
	// when paginating results. If additional results exist beyond the number you
	// specify, the nextToken element is returned in the response. Use nextToken
	// in a subsequent request to retrieve additional results. If not specified,
	// returns 100 results.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// A token to use for paginating results that are returned in the response.
	// Set the value of this parameter to null for the first request. For subsequent
	// calls, use the nextToken value returned from the previous request to continue
	// listing results after the first page.
	NextToken *string `location:"querystring" locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

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

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

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

	// A pagination token. You can use this in future calls to ListScans to continue
	// listing results after the current page.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// A list of ScanSummary objects with information about all scans in an account.
	Summaries []*ScanSummary `locationName:"summaries" type:"list"`
}

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

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

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

// SetSummaries sets the Summaries field's value.
func (s *ListScansOutput) SetSummaries(v []*ScanSummary) *ListScansOutput {
	s.Summaries = v
	return s
}

type ListTagsForResourceInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The ARN of the ScanName object. You can retrieve this ARN by calling CreateScan,
	// ListScans, or GetScan.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetResourceArn sets the ResourceArn field's value.
func (s *ListTagsForResourceInput) SetResourceArn(v string) *ListTagsForResourceInput {
	s.ResourceArn = &v
	return s
}

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

	// An array of key-value pairs used to tag an existing scan. A tag is a custom
	// attribute label with two parts:
	//
	//    * A tag key. For example, CostCenter, Environment, or Secret. Tag keys
	//    are case sensitive.
	//
	//    * An optional tag value field. For example, 111122223333, Production,
	//    or a team name. Omitting the tag value is the same as using an empty string.
	//    Tag values are case sensitive.
	Tags map[string]*string `locationName:"tags" type:"map"`
}

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

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

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

// A summary of metrics for an account as of a specified date.
type MetricsSummary struct {
	_ struct{} `type:"structure"`

	// A list of CategoryWithFindingNum objects for the top 5 finding categories
	// with the most findings.
	CategoriesWithMostFindings []*CategoryWithFindingNum `locationName:"categoriesWithMostFindings" type:"list"`

	// The date from which the metrics summary information was retrieved.
	Date *time.Time `locationName:"date" type:"timestamp"`

	// The number of open findings of each severity.
	OpenFindings *FindingMetricsValuePerSeverity `locationName:"openFindings" type:"structure"`

	// A list of ScanNameWithFindingNum objects for the top 3 scans with the most
	// number of open critical findings.
	ScansWithMostOpenCriticalFindings []*ScanNameWithFindingNum `locationName:"scansWithMostOpenCriticalFindings" type:"list"`

	// A list of ScanNameWithFindingNum objects for the top 3 scans with the most
	// number of open findings.
	ScansWithMostOpenFindings []*ScanNameWithFindingNum `locationName:"scansWithMostOpenFindings" type:"list"`
}

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

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

// SetCategoriesWithMostFindings sets the CategoriesWithMostFindings field's value.
func (s *MetricsSummary) SetCategoriesWithMostFindings(v []*CategoryWithFindingNum) *MetricsSummary {
	s.CategoriesWithMostFindings = v
	return s
}

// SetDate sets the Date field's value.
func (s *MetricsSummary) SetDate(v time.Time) *MetricsSummary {
	s.Date = &v
	return s
}

// SetOpenFindings sets the OpenFindings field's value.
func (s *MetricsSummary) SetOpenFindings(v *FindingMetricsValuePerSeverity) *MetricsSummary {
	s.OpenFindings = v
	return s
}

// SetScansWithMostOpenCriticalFindings sets the ScansWithMostOpenCriticalFindings field's value.
func (s *MetricsSummary) SetScansWithMostOpenCriticalFindings(v []*ScanNameWithFindingNum) *MetricsSummary {
	s.ScansWithMostOpenCriticalFindings = v
	return s
}

// SetScansWithMostOpenFindings sets the ScansWithMostOpenFindings field's value.
func (s *MetricsSummary) SetScansWithMostOpenFindings(v []*ScanNameWithFindingNum) *MetricsSummary {
	s.ScansWithMostOpenFindings = v
	return s
}

// Information about the recommended course of action to remediate a finding.
type Recommendation struct {
	_ struct{} `type:"structure"`

	// The recommended course of action to remediate the finding.
	Text *string `locationName:"text" type:"string"`

	// The URL address to the recommendation for remediating the finding.
	Url *string `locationName:"url" type:"string"`
}

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

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

// SetText sets the Text field's value.
func (s *Recommendation) SetText(v string) *Recommendation {
	s.Text = &v
	return s
}

// SetUrl sets the Url field's value.
func (s *Recommendation) SetUrl(v string) *Recommendation {
	s.Url = &v
	return s
}

// Information about how to remediate a finding.
type Remediation struct {
	_ struct{} `type:"structure"`

	// An object that contains information about the recommended course of action
	// to remediate a finding.
	Recommendation *Recommendation `locationName:"recommendation" type:"structure"`

	// A list of SuggestedFix objects. Each object contains information about a
	// suggested code fix to remediate the finding.
	SuggestedFixes []*SuggestedFix `locationName:"suggestedFixes" type:"list"`
}

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

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

// SetRecommendation sets the Recommendation field's value.
func (s *Remediation) SetRecommendation(v *Recommendation) *Remediation {
	s.Recommendation = v
	return s
}

// SetSuggestedFixes sets the SuggestedFixes field's value.
func (s *Remediation) SetSuggestedFixes(v []*SuggestedFix) *Remediation {
	s.SuggestedFixes = v
	return s
}

// Information about a resource that contains a finding.
type Resource struct {
	_ struct{} `type:"structure"`

	// The scanName of the scan that was run on the resource.
	Id *string `locationName:"id" type:"string"`

	// The identifier for a section of the resource.
	SubResourceId *string `locationName:"subResourceId" type:"string"`
}

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

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

// SetId sets the Id field's value.
func (s *Resource) SetId(v string) *Resource {
	s.Id = &v
	return s
}

// SetSubResourceId sets the SubResourceId field's value.
func (s *Resource) SetSubResourceId(v string) *Resource {
	s.SubResourceId = &v
	return s
}

// The identifier for a resource object that contains resources to scan. Specifying
// a codeArtifactId is required to create a scan.
type ResourceId struct {
	_ struct{} `type:"structure"`

	// The identifier for the code file uploaded to the resource object. Returned
	// by CreateUploadUrl when you upload resources to be scanned.
	CodeArtifactId *string `locationName:"codeArtifactId" type:"string"`
}

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

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

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

// The resource specified in the request was not found.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The identifier for the error.
	//
	// ErrorCode is a required field
	ErrorCode *string `locationName:"errorCode" type:"string" required:"true"`

	// Description of the error.
	Message_ *string `locationName:"message" type:"string"`

	// The identifier for the resource that was not found.
	//
	// ResourceId is a required field
	ResourceId *string `locationName:"resourceId" type:"string" required:"true"`

	// The type of resource that was not found.
	//
	// ResourceType is a required field
	ResourceType *string `locationName:"resourceType" type:"string" required:"true"`
}

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

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

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

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

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

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

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

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

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

// Information about the number of findings generated by a scan.
type ScanNameWithFindingNum struct {
	_ struct{} `type:"structure"`

	// The number of findings generated by a scan.
	FindingNumber *int64 `locationName:"findingNumber" type:"integer"`

	// The name of the scan.
	ScanName *string `locationName:"scanName" type:"string"`
}

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

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

// SetFindingNumber sets the FindingNumber field's value.
func (s *ScanNameWithFindingNum) SetFindingNumber(v int64) *ScanNameWithFindingNum {
	s.FindingNumber = &v
	return s
}

// SetScanName sets the ScanName field's value.
func (s *ScanNameWithFindingNum) SetScanName(v string) *ScanNameWithFindingNum {
	s.ScanName = &v
	return s
}

// Information about a scan.
type ScanSummary struct {
	_ struct{} `type:"structure"`

	// The time when the scan was created.
	//
	// CreatedAt is a required field
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp" required:"true"`

	// The identifier for the scan run.
	//
	// RunId is a required field
	RunId *string `locationName:"runId" type:"string" required:"true"`

	// The name of the scan.
	//
	// ScanName is a required field
	ScanName *string `locationName:"scanName" min:"1" type:"string" required:"true"`

	// The ARN for the scan name.
	ScanNameArn *string `locationName:"scanNameArn" min:"1" type:"string"`

	// The state of the scan. A scan can be In Progress, Complete, or Failed.
	//
	// ScanState is a required field
	ScanState *string `locationName:"scanState" type:"string" required:"true" enum:"ScanState"`

	// The time the scan was last updated. A scan is updated when it is re-run.
	UpdatedAt *time.Time `locationName:"updatedAt" type:"timestamp"`
}

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

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

// SetCreatedAt sets the CreatedAt field's value.
func (s *ScanSummary) SetCreatedAt(v time.Time) *ScanSummary {
	s.CreatedAt = &v
	return s
}

// SetRunId sets the RunId field's value.
func (s *ScanSummary) SetRunId(v string) *ScanSummary {
	s.RunId = &v
	return s
}

// SetScanName sets the ScanName field's value.
func (s *ScanSummary) SetScanName(v string) *ScanSummary {
	s.ScanName = &v
	return s
}

// SetScanNameArn sets the ScanNameArn field's value.
func (s *ScanSummary) SetScanNameArn(v string) *ScanSummary {
	s.ScanNameArn = &v
	return s
}

// SetScanState sets the ScanState field's value.
func (s *ScanSummary) SetScanState(v string) *ScanSummary {
	s.ScanState = &v
	return s
}

// SetUpdatedAt sets the UpdatedAt field's value.
func (s *ScanSummary) SetUpdatedAt(v time.Time) *ScanSummary {
	s.UpdatedAt = &v
	return s
}

// Information about the suggested code fix to remediate a finding.
type SuggestedFix struct {
	_ struct{} `type:"structure"`

	// The suggested code fix. If applicable, includes code patch to replace your
	// source code.
	Code *string `locationName:"code" type:"string"`

	// A description of the suggested code fix and why it is being suggested.
	Description *string `locationName:"description" type:"string"`
}

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

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

// SetCode sets the Code field's value.
func (s *SuggestedFix) SetCode(v string) *SuggestedFix {
	s.Code = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *SuggestedFix) SetDescription(v string) *SuggestedFix {
	s.Description = &v
	return s
}

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

	// The ARN of the ScanName object. You can retrieve this ARN by calling CreateScan,
	// ListScans, or GetScan.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" min:"1" type:"string" required:"true"`

	// An array of key-value pairs used to tag an existing scan. A tag is a custom
	// attribute label with two parts:
	//
	//    * A tag key. For example, CostCenter, Environment, or Secret. Tag keys
	//    are case sensitive.
	//
	//    * An optional tag value field. For example, 111122223333, Production,
	//    or a team name. Omitting the tag value is the same as using an empty string.
	//    Tag values are case sensitive.
	//
	// Tags is a required field
	Tags map[string]*string `locationName:"tags" type:"map" required:"true"`
}

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

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

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

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

// SetResourceArn sets the ResourceArn field's value.
func (s *TagResourceInput) SetResourceArn(v string) *TagResourceInput {
	s.ResourceArn = &v
	return s
}

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

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

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

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

// The request was denied due to request throttling.
type ThrottlingException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The identifier for the error.
	//
	// ErrorCode is a required field
	ErrorCode *string `locationName:"errorCode" type:"string" required:"true"`

	// Description of the error.
	Message_ *string `locationName:"message" type:"string"`

	// The identifier for the originating quota.
	QuotaCode *string `locationName:"quotaCode" type:"string"`

	// The identifier for the originating service.
	ServiceCode *string `locationName:"serviceCode" type:"string"`
}

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

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

func newErrorThrottlingException(v protocol.ResponseMetadata) error {
	return &ThrottlingException{
		RespMetadata: v,
	}
}

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

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

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

func (s *ThrottlingException) Error() string {
	return fmt.Sprintf("%s: %s\n%s", s.Code(), s.Message(), s.String())
}

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

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

type UntagResourceInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The ARN of the ScanName object. You can retrieve this ARN by calling CreateScan,
	// ListScans, or GetScan.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" min:"1" type:"string" required:"true"`

	// A list of keys for each tag you want to remove from a scan.
	//
	// TagKeys is a required field
	TagKeys []*string `location:"querystring" locationName:"tagKeys" type:"list" required:"true"`
}

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

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

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

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

// SetResourceArn sets the ResourceArn field's value.
func (s *UntagResourceInput) SetResourceArn(v string) *UntagResourceInput {
	s.ResourceArn = &v
	return s
}

// SetTagKeys sets the TagKeys field's value.
func (s *UntagResourceInput) SetTagKeys(v []*string) *UntagResourceInput {
	s.TagKeys = v
	return s
}

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

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

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

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

	// The customer-managed KMS key ARN you want to use for encryption. If not specified,
	// CodeGuru Security will use an AWS-managed key for encryption. If you previously
	// specified a customer-managed KMS key and want CodeGuru Security to use an
	// AWS-managed key for encryption instead, pass nothing.
	//
	// EncryptionConfig is a required field
	EncryptionConfig *EncryptionConfig `locationName:"encryptionConfig" type:"structure" required:"true"`
}

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

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

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

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

// SetEncryptionConfig sets the EncryptionConfig field's value.
func (s *UpdateAccountConfigurationInput) SetEncryptionConfig(v *EncryptionConfig) *UpdateAccountConfigurationInput {
	s.EncryptionConfig = v
	return s
}

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

	// An EncryptionConfig object that contains the KMS key ARN that is used for
	// encryption. If you did not specify a customer-managed KMS key in the request,
	// returns empty.
	//
	// EncryptionConfig is a required field
	EncryptionConfig *EncryptionConfig `locationName:"encryptionConfig" type:"structure" required:"true"`
}

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

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

// SetEncryptionConfig sets the EncryptionConfig field's value.
func (s *UpdateAccountConfigurationOutput) SetEncryptionConfig(v *EncryptionConfig) *UpdateAccountConfigurationOutput {
	s.EncryptionConfig = v
	return s
}

// The input fails to satisfy the specified constraints.
type ValidationException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The identifier for the error.
	//
	// ErrorCode is a required field
	ErrorCode *string `locationName:"errorCode" type:"string" required:"true"`

	// The field that caused the error, if applicable.
	FieldList []*ValidationExceptionField `locationName:"fieldList" type:"list"`

	// Description of the error.
	Message_ *string `locationName:"message" type:"string"`

	// The reason the request failed validation.
	//
	// Reason is a required field
	Reason *string `locationName:"reason" type:"string" required:"true" enum:"ValidationExceptionReason"`
}

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

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

func newErrorValidationException(v protocol.ResponseMetadata) error {
	return &ValidationException{
		RespMetadata: v,
	}
}

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

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

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

func (s *ValidationException) Error() string {
	return fmt.Sprintf("%s: %s\n%s", s.Code(), s.Message(), s.String())
}

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

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

// Information about a validation exception.
type ValidationExceptionField struct {
	_ struct{} `type:"structure"`

	// Describes the exception.
	//
	// Message is a required field
	Message *string `locationName:"message" type:"string" required:"true"`

	// The name of the exception.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`
}

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

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

// SetMessage sets the Message field's value.
func (s *ValidationExceptionField) SetMessage(v string) *ValidationExceptionField {
	s.Message = &v
	return s
}

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

// Information about a security vulnerability that Amazon CodeGuru Security
// detected.
type Vulnerability struct {
	_ struct{} `type:"structure"`

	// An object that describes the location of the detected security vulnerability
	// in your code.
	FilePath *FilePath `locationName:"filePath" type:"structure"`

	// The identifier for the vulnerability.
	Id *string `locationName:"id" type:"string"`

	// The number of times the vulnerability appears in your code.
	//
	// Deprecated: This shape is not used.
	ItemCount *int64 `locationName:"itemCount" deprecated:"true" type:"integer"`

	// One or more URL addresses that contain details about a vulnerability.
	ReferenceUrls []*string `locationName:"referenceUrls" type:"list"`

	// One or more vulnerabilities that are related to the vulnerability being described.
	RelatedVulnerabilities []*string `locationName:"relatedVulnerabilities" type:"list"`
}

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

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

// SetFilePath sets the FilePath field's value.
func (s *Vulnerability) SetFilePath(v *FilePath) *Vulnerability {
	s.FilePath = v
	return s
}

// SetId sets the Id field's value.
func (s *Vulnerability) SetId(v string) *Vulnerability {
	s.Id = &v
	return s
}

// SetItemCount sets the ItemCount field's value.
func (s *Vulnerability) SetItemCount(v int64) *Vulnerability {
	s.ItemCount = &v
	return s
}

// SetReferenceUrls sets the ReferenceUrls field's value.
func (s *Vulnerability) SetReferenceUrls(v []*string) *Vulnerability {
	s.ReferenceUrls = v
	return s
}

// SetRelatedVulnerabilities sets the RelatedVulnerabilities field's value.
func (s *Vulnerability) SetRelatedVulnerabilities(v []*string) *Vulnerability {
	s.RelatedVulnerabilities = v
	return s
}

const (
	// AnalysisTypeSecurity is a AnalysisType enum value
	AnalysisTypeSecurity = "Security"

	// AnalysisTypeAll is a AnalysisType enum value
	AnalysisTypeAll = "All"
)

// AnalysisType_Values returns all elements of the AnalysisType enum
func AnalysisType_Values() []string {
	return []string{
		AnalysisTypeSecurity,
		AnalysisTypeAll,
	}
}

const (
	// ErrorCodeDuplicateIdentifier is a ErrorCode enum value
	ErrorCodeDuplicateIdentifier = "DUPLICATE_IDENTIFIER"

	// ErrorCodeItemDoesNotExist is a ErrorCode enum value
	ErrorCodeItemDoesNotExist = "ITEM_DOES_NOT_EXIST"

	// ErrorCodeInternalError is a ErrorCode enum value
	ErrorCodeInternalError = "INTERNAL_ERROR"

	// ErrorCodeInvalidFindingId is a ErrorCode enum value
	ErrorCodeInvalidFindingId = "INVALID_FINDING_ID"

	// ErrorCodeInvalidScanName is a ErrorCode enum value
	ErrorCodeInvalidScanName = "INVALID_SCAN_NAME"
)

// ErrorCode_Values returns all elements of the ErrorCode enum
func ErrorCode_Values() []string {
	return []string{
		ErrorCodeDuplicateIdentifier,
		ErrorCodeItemDoesNotExist,
		ErrorCodeInternalError,
		ErrorCodeInvalidFindingId,
		ErrorCodeInvalidScanName,
	}
}

const (
	// ScanStateInProgress is a ScanState enum value
	ScanStateInProgress = "InProgress"

	// ScanStateSuccessful is a ScanState enum value
	ScanStateSuccessful = "Successful"

	// ScanStateFailed is a ScanState enum value
	ScanStateFailed = "Failed"
)

// ScanState_Values returns all elements of the ScanState enum
func ScanState_Values() []string {
	return []string{
		ScanStateInProgress,
		ScanStateSuccessful,
		ScanStateFailed,
	}
}

const (
	// ScanTypeStandard is a ScanType enum value
	ScanTypeStandard = "Standard"

	// ScanTypeExpress is a ScanType enum value
	ScanTypeExpress = "Express"
)

// ScanType_Values returns all elements of the ScanType enum
func ScanType_Values() []string {
	return []string{
		ScanTypeStandard,
		ScanTypeExpress,
	}
}

const (
	// SeverityCritical is a Severity enum value
	SeverityCritical = "Critical"

	// SeverityHigh is a Severity enum value
	SeverityHigh = "High"

	// SeverityMedium is a Severity enum value
	SeverityMedium = "Medium"

	// SeverityLow is a Severity enum value
	SeverityLow = "Low"

	// SeverityInfo is a Severity enum value
	SeverityInfo = "Info"
)

// Severity_Values returns all elements of the Severity enum
func Severity_Values() []string {
	return []string{
		SeverityCritical,
		SeverityHigh,
		SeverityMedium,
		SeverityLow,
		SeverityInfo,
	}
}

const (
	// StatusClosed is a Status enum value
	StatusClosed = "Closed"

	// StatusOpen is a Status enum value
	StatusOpen = "Open"

	// StatusAll is a Status enum value
	StatusAll = "All"
)

// Status_Values returns all elements of the Status enum
func Status_Values() []string {
	return []string{
		StatusClosed,
		StatusOpen,
		StatusAll,
	}
}

const (
	// ValidationExceptionReasonUnknownOperation is a ValidationExceptionReason enum value
	ValidationExceptionReasonUnknownOperation = "unknownOperation"

	// ValidationExceptionReasonCannotParse is a ValidationExceptionReason enum value
	ValidationExceptionReasonCannotParse = "cannotParse"

	// ValidationExceptionReasonFieldValidationFailed is a ValidationExceptionReason enum value
	ValidationExceptionReasonFieldValidationFailed = "fieldValidationFailed"

	// ValidationExceptionReasonOther is a ValidationExceptionReason enum value
	ValidationExceptionReasonOther = "other"

	// ValidationExceptionReasonLambdaCodeShaMisMatch is a ValidationExceptionReason enum value
	ValidationExceptionReasonLambdaCodeShaMisMatch = "lambdaCodeShaMisMatch"
)

// ValidationExceptionReason_Values returns all elements of the ValidationExceptionReason enum
func ValidationExceptionReason_Values() []string {
	return []string{
		ValidationExceptionReasonUnknownOperation,
		ValidationExceptionReasonCannotParse,
		ValidationExceptionReasonFieldValidationFailed,
		ValidationExceptionReasonOther,
		ValidationExceptionReasonLambdaCodeShaMisMatch,
	}
}
