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

// Package inspector provides a client for Amazon Inspector.
package inspector

import (
	"fmt"
	"time"

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

const opAddAttributesToFindings = "AddAttributesToFindings"

// AddAttributesToFindingsRequest generates a "aws/request.Request" representing the
// client's request for the AddAttributesToFindings operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the AddAttributesToFindings method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the AddAttributesToFindingsRequest method.
//    req, resp := client.AddAttributesToFindingsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) AddAttributesToFindingsRequest(input *AddAttributesToFindingsInput) (req *request.Request, output *AddAttributesToFindingsOutput) {
	op := &request.Operation{
		Name:       opAddAttributesToFindings,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AddAttributesToFindingsInput{}
	}

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

// Assigns attributes (key and value pairs) to the findings that are specified
// by the ARNs of the findings.
func (c *Inspector) AddAttributesToFindings(input *AddAttributesToFindingsInput) (*AddAttributesToFindingsOutput, error) {
	req, out := c.AddAttributesToFindingsRequest(input)
	err := req.Send()
	return out, err
}

const opCreateAssessmentTarget = "CreateAssessmentTarget"

// CreateAssessmentTargetRequest generates a "aws/request.Request" representing the
// client's request for the CreateAssessmentTarget operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the CreateAssessmentTarget method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the CreateAssessmentTargetRequest method.
//    req, resp := client.CreateAssessmentTargetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) CreateAssessmentTargetRequest(input *CreateAssessmentTargetInput) (req *request.Request, output *CreateAssessmentTargetOutput) {
	op := &request.Operation{
		Name:       opCreateAssessmentTarget,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateAssessmentTargetInput{}
	}

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

// Creates a new assessment target using the ARN of the resource group that
// is generated by CreateResourceGroup. You can create up to 50 assessment targets
// per AWS account. You can run up to 500 concurrent agents per AWS account.
// For more information, see  Amazon Inspector Assessment Targets (http://docs.aws.amazon.com/inspector/latest/userguide/inspector_applications.html).
func (c *Inspector) CreateAssessmentTarget(input *CreateAssessmentTargetInput) (*CreateAssessmentTargetOutput, error) {
	req, out := c.CreateAssessmentTargetRequest(input)
	err := req.Send()
	return out, err
}

const opCreateAssessmentTemplate = "CreateAssessmentTemplate"

// CreateAssessmentTemplateRequest generates a "aws/request.Request" representing the
// client's request for the CreateAssessmentTemplate operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the CreateAssessmentTemplate method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the CreateAssessmentTemplateRequest method.
//    req, resp := client.CreateAssessmentTemplateRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) CreateAssessmentTemplateRequest(input *CreateAssessmentTemplateInput) (req *request.Request, output *CreateAssessmentTemplateOutput) {
	op := &request.Operation{
		Name:       opCreateAssessmentTemplate,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateAssessmentTemplateInput{}
	}

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

// Creates an assessment template for the assessment target that is specified
// by the ARN of the assessment target.
func (c *Inspector) CreateAssessmentTemplate(input *CreateAssessmentTemplateInput) (*CreateAssessmentTemplateOutput, error) {
	req, out := c.CreateAssessmentTemplateRequest(input)
	err := req.Send()
	return out, err
}

const opCreateResourceGroup = "CreateResourceGroup"

// CreateResourceGroupRequest generates a "aws/request.Request" representing the
// client's request for the CreateResourceGroup operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the CreateResourceGroup method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the CreateResourceGroupRequest method.
//    req, resp := client.CreateResourceGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) CreateResourceGroupRequest(input *CreateResourceGroupInput) (req *request.Request, output *CreateResourceGroupOutput) {
	op := &request.Operation{
		Name:       opCreateResourceGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateResourceGroupInput{}
	}

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

// Creates a resource group using the specified set of tags (key and value pairs)
// that are used to select the EC2 instances to be included in an Amazon Inspector
// assessment target. The created resource group is then used to create an Amazon
// Inspector assessment target. For more information, see CreateAssessmentTarget.
func (c *Inspector) CreateResourceGroup(input *CreateResourceGroupInput) (*CreateResourceGroupOutput, error) {
	req, out := c.CreateResourceGroupRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteAssessmentRun = "DeleteAssessmentRun"

// DeleteAssessmentRunRequest generates a "aws/request.Request" representing the
// client's request for the DeleteAssessmentRun operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeleteAssessmentRun method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeleteAssessmentRunRequest method.
//    req, resp := client.DeleteAssessmentRunRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) DeleteAssessmentRunRequest(input *DeleteAssessmentRunInput) (req *request.Request, output *DeleteAssessmentRunOutput) {
	op := &request.Operation{
		Name:       opDeleteAssessmentRun,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteAssessmentRunInput{}
	}

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

// Deletes the assessment run that is specified by the ARN of the assessment
// run.
func (c *Inspector) DeleteAssessmentRun(input *DeleteAssessmentRunInput) (*DeleteAssessmentRunOutput, error) {
	req, out := c.DeleteAssessmentRunRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteAssessmentTarget = "DeleteAssessmentTarget"

// DeleteAssessmentTargetRequest generates a "aws/request.Request" representing the
// client's request for the DeleteAssessmentTarget operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeleteAssessmentTarget method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeleteAssessmentTargetRequest method.
//    req, resp := client.DeleteAssessmentTargetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) DeleteAssessmentTargetRequest(input *DeleteAssessmentTargetInput) (req *request.Request, output *DeleteAssessmentTargetOutput) {
	op := &request.Operation{
		Name:       opDeleteAssessmentTarget,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteAssessmentTargetInput{}
	}

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

// Deletes the assessment target that is specified by the ARN of the assessment
// target.
func (c *Inspector) DeleteAssessmentTarget(input *DeleteAssessmentTargetInput) (*DeleteAssessmentTargetOutput, error) {
	req, out := c.DeleteAssessmentTargetRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteAssessmentTemplate = "DeleteAssessmentTemplate"

// DeleteAssessmentTemplateRequest generates a "aws/request.Request" representing the
// client's request for the DeleteAssessmentTemplate operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeleteAssessmentTemplate method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeleteAssessmentTemplateRequest method.
//    req, resp := client.DeleteAssessmentTemplateRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) DeleteAssessmentTemplateRequest(input *DeleteAssessmentTemplateInput) (req *request.Request, output *DeleteAssessmentTemplateOutput) {
	op := &request.Operation{
		Name:       opDeleteAssessmentTemplate,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteAssessmentTemplateInput{}
	}

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

// Deletes the assessment template that is specified by the ARN of the assessment
// template.
func (c *Inspector) DeleteAssessmentTemplate(input *DeleteAssessmentTemplateInput) (*DeleteAssessmentTemplateOutput, error) {
	req, out := c.DeleteAssessmentTemplateRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeAssessmentRuns = "DescribeAssessmentRuns"

// DescribeAssessmentRunsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAssessmentRuns operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeAssessmentRuns method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeAssessmentRunsRequest method.
//    req, resp := client.DescribeAssessmentRunsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) DescribeAssessmentRunsRequest(input *DescribeAssessmentRunsInput) (req *request.Request, output *DescribeAssessmentRunsOutput) {
	op := &request.Operation{
		Name:       opDescribeAssessmentRuns,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeAssessmentRunsInput{}
	}

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

// Describes the assessment runs that are specified by the ARNs of the assessment
// runs.
func (c *Inspector) DescribeAssessmentRuns(input *DescribeAssessmentRunsInput) (*DescribeAssessmentRunsOutput, error) {
	req, out := c.DescribeAssessmentRunsRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeAssessmentTargets = "DescribeAssessmentTargets"

// DescribeAssessmentTargetsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAssessmentTargets operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeAssessmentTargets method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeAssessmentTargetsRequest method.
//    req, resp := client.DescribeAssessmentTargetsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) DescribeAssessmentTargetsRequest(input *DescribeAssessmentTargetsInput) (req *request.Request, output *DescribeAssessmentTargetsOutput) {
	op := &request.Operation{
		Name:       opDescribeAssessmentTargets,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeAssessmentTargetsInput{}
	}

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

// Describes the assessment targets that are specified by the ARNs of the assessment
// targets.
func (c *Inspector) DescribeAssessmentTargets(input *DescribeAssessmentTargetsInput) (*DescribeAssessmentTargetsOutput, error) {
	req, out := c.DescribeAssessmentTargetsRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeAssessmentTemplates = "DescribeAssessmentTemplates"

// DescribeAssessmentTemplatesRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAssessmentTemplates operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeAssessmentTemplates method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeAssessmentTemplatesRequest method.
//    req, resp := client.DescribeAssessmentTemplatesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) DescribeAssessmentTemplatesRequest(input *DescribeAssessmentTemplatesInput) (req *request.Request, output *DescribeAssessmentTemplatesOutput) {
	op := &request.Operation{
		Name:       opDescribeAssessmentTemplates,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeAssessmentTemplatesInput{}
	}

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

// Describes the assessment templates that are specified by the ARNs of the
// assessment templates.
func (c *Inspector) DescribeAssessmentTemplates(input *DescribeAssessmentTemplatesInput) (*DescribeAssessmentTemplatesOutput, error) {
	req, out := c.DescribeAssessmentTemplatesRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeCrossAccountAccessRole = "DescribeCrossAccountAccessRole"

// DescribeCrossAccountAccessRoleRequest generates a "aws/request.Request" representing the
// client's request for the DescribeCrossAccountAccessRole operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeCrossAccountAccessRole method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeCrossAccountAccessRoleRequest method.
//    req, resp := client.DescribeCrossAccountAccessRoleRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) DescribeCrossAccountAccessRoleRequest(input *DescribeCrossAccountAccessRoleInput) (req *request.Request, output *DescribeCrossAccountAccessRoleOutput) {
	op := &request.Operation{
		Name:       opDescribeCrossAccountAccessRole,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeCrossAccountAccessRoleInput{}
	}

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

// Describes the IAM role that enables Amazon Inspector to access your AWS account.
func (c *Inspector) DescribeCrossAccountAccessRole(input *DescribeCrossAccountAccessRoleInput) (*DescribeCrossAccountAccessRoleOutput, error) {
	req, out := c.DescribeCrossAccountAccessRoleRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeFindings = "DescribeFindings"

// DescribeFindingsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeFindings operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeFindings method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeFindingsRequest method.
//    req, resp := client.DescribeFindingsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) DescribeFindingsRequest(input *DescribeFindingsInput) (req *request.Request, output *DescribeFindingsOutput) {
	op := &request.Operation{
		Name:       opDescribeFindings,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeFindingsInput{}
	}

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

// Describes the findings that are specified by the ARNs of the findings.
func (c *Inspector) DescribeFindings(input *DescribeFindingsInput) (*DescribeFindingsOutput, error) {
	req, out := c.DescribeFindingsRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeResourceGroups = "DescribeResourceGroups"

// DescribeResourceGroupsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeResourceGroups operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeResourceGroups method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeResourceGroupsRequest method.
//    req, resp := client.DescribeResourceGroupsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) DescribeResourceGroupsRequest(input *DescribeResourceGroupsInput) (req *request.Request, output *DescribeResourceGroupsOutput) {
	op := &request.Operation{
		Name:       opDescribeResourceGroups,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeResourceGroupsInput{}
	}

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

// Describes the resource groups that are specified by the ARNs of the resource
// groups.
func (c *Inspector) DescribeResourceGroups(input *DescribeResourceGroupsInput) (*DescribeResourceGroupsOutput, error) {
	req, out := c.DescribeResourceGroupsRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeRulesPackages = "DescribeRulesPackages"

// DescribeRulesPackagesRequest generates a "aws/request.Request" representing the
// client's request for the DescribeRulesPackages operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeRulesPackages method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeRulesPackagesRequest method.
//    req, resp := client.DescribeRulesPackagesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) DescribeRulesPackagesRequest(input *DescribeRulesPackagesInput) (req *request.Request, output *DescribeRulesPackagesOutput) {
	op := &request.Operation{
		Name:       opDescribeRulesPackages,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeRulesPackagesInput{}
	}

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

// Describes the rules packages that are specified by the ARNs of the rules
// packages.
func (c *Inspector) DescribeRulesPackages(input *DescribeRulesPackagesInput) (*DescribeRulesPackagesOutput, error) {
	req, out := c.DescribeRulesPackagesRequest(input)
	err := req.Send()
	return out, err
}

const opGetTelemetryMetadata = "GetTelemetryMetadata"

// GetTelemetryMetadataRequest generates a "aws/request.Request" representing the
// client's request for the GetTelemetryMetadata operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the GetTelemetryMetadata method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the GetTelemetryMetadataRequest method.
//    req, resp := client.GetTelemetryMetadataRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) GetTelemetryMetadataRequest(input *GetTelemetryMetadataInput) (req *request.Request, output *GetTelemetryMetadataOutput) {
	op := &request.Operation{
		Name:       opGetTelemetryMetadata,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetTelemetryMetadataInput{}
	}

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

// Information about the data that is collected for the specified assessment
// run.
func (c *Inspector) GetTelemetryMetadata(input *GetTelemetryMetadataInput) (*GetTelemetryMetadataOutput, error) {
	req, out := c.GetTelemetryMetadataRequest(input)
	err := req.Send()
	return out, err
}

const opListAssessmentRunAgents = "ListAssessmentRunAgents"

// ListAssessmentRunAgentsRequest generates a "aws/request.Request" representing the
// client's request for the ListAssessmentRunAgents operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the ListAssessmentRunAgents method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the ListAssessmentRunAgentsRequest method.
//    req, resp := client.ListAssessmentRunAgentsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) ListAssessmentRunAgentsRequest(input *ListAssessmentRunAgentsInput) (req *request.Request, output *ListAssessmentRunAgentsOutput) {
	op := &request.Operation{
		Name:       opListAssessmentRunAgents,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListAssessmentRunAgentsInput{}
	}

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

// Lists the agents of the assessment runs that are specified by the ARNs of
// the assessment runs.
func (c *Inspector) ListAssessmentRunAgents(input *ListAssessmentRunAgentsInput) (*ListAssessmentRunAgentsOutput, error) {
	req, out := c.ListAssessmentRunAgentsRequest(input)
	err := req.Send()
	return out, err
}

const opListAssessmentRuns = "ListAssessmentRuns"

// ListAssessmentRunsRequest generates a "aws/request.Request" representing the
// client's request for the ListAssessmentRuns operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the ListAssessmentRuns method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the ListAssessmentRunsRequest method.
//    req, resp := client.ListAssessmentRunsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) ListAssessmentRunsRequest(input *ListAssessmentRunsInput) (req *request.Request, output *ListAssessmentRunsOutput) {
	op := &request.Operation{
		Name:       opListAssessmentRuns,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListAssessmentRunsInput{}
	}

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

// Lists the assessment runs that correspond to the assessment templates that
// are specified by the ARNs of the assessment templates.
func (c *Inspector) ListAssessmentRuns(input *ListAssessmentRunsInput) (*ListAssessmentRunsOutput, error) {
	req, out := c.ListAssessmentRunsRequest(input)
	err := req.Send()
	return out, err
}

const opListAssessmentTargets = "ListAssessmentTargets"

// ListAssessmentTargetsRequest generates a "aws/request.Request" representing the
// client's request for the ListAssessmentTargets operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the ListAssessmentTargets method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the ListAssessmentTargetsRequest method.
//    req, resp := client.ListAssessmentTargetsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) ListAssessmentTargetsRequest(input *ListAssessmentTargetsInput) (req *request.Request, output *ListAssessmentTargetsOutput) {
	op := &request.Operation{
		Name:       opListAssessmentTargets,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListAssessmentTargetsInput{}
	}

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

// Lists the ARNs of the assessment targets within this AWS account. For more
// information about assessment targets, see Amazon Inspector Assessment Targets
// (http://docs.aws.amazon.com/inspector/latest/userguide/inspector_applications.html).
func (c *Inspector) ListAssessmentTargets(input *ListAssessmentTargetsInput) (*ListAssessmentTargetsOutput, error) {
	req, out := c.ListAssessmentTargetsRequest(input)
	err := req.Send()
	return out, err
}

const opListAssessmentTemplates = "ListAssessmentTemplates"

// ListAssessmentTemplatesRequest generates a "aws/request.Request" representing the
// client's request for the ListAssessmentTemplates operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the ListAssessmentTemplates method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the ListAssessmentTemplatesRequest method.
//    req, resp := client.ListAssessmentTemplatesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) ListAssessmentTemplatesRequest(input *ListAssessmentTemplatesInput) (req *request.Request, output *ListAssessmentTemplatesOutput) {
	op := &request.Operation{
		Name:       opListAssessmentTemplates,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListAssessmentTemplatesInput{}
	}

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

// Lists the assessment templates that correspond to the assessment targets
// that are specified by the ARNs of the assessment targets.
func (c *Inspector) ListAssessmentTemplates(input *ListAssessmentTemplatesInput) (*ListAssessmentTemplatesOutput, error) {
	req, out := c.ListAssessmentTemplatesRequest(input)
	err := req.Send()
	return out, err
}

const opListEventSubscriptions = "ListEventSubscriptions"

// ListEventSubscriptionsRequest generates a "aws/request.Request" representing the
// client's request for the ListEventSubscriptions operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the ListEventSubscriptions method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the ListEventSubscriptionsRequest method.
//    req, resp := client.ListEventSubscriptionsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) ListEventSubscriptionsRequest(input *ListEventSubscriptionsInput) (req *request.Request, output *ListEventSubscriptionsOutput) {
	op := &request.Operation{
		Name:       opListEventSubscriptions,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListEventSubscriptionsInput{}
	}

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

// Lists all the event subscriptions for the assessment template that is specified
// by the ARN of the assessment template. For more information, see SubscribeToEvent
// and UnsubscribeFromEvent.
func (c *Inspector) ListEventSubscriptions(input *ListEventSubscriptionsInput) (*ListEventSubscriptionsOutput, error) {
	req, out := c.ListEventSubscriptionsRequest(input)
	err := req.Send()
	return out, err
}

const opListFindings = "ListFindings"

// ListFindingsRequest generates a "aws/request.Request" representing the
// client's request for the ListFindings operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the ListFindings method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the ListFindingsRequest method.
//    req, resp := client.ListFindingsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) ListFindingsRequest(input *ListFindingsInput) (req *request.Request, output *ListFindingsOutput) {
	op := &request.Operation{
		Name:       opListFindings,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListFindingsInput{}
	}

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

// Lists findings that are generated by the assessment runs that are specified
// by the ARNs of the assessment runs.
func (c *Inspector) ListFindings(input *ListFindingsInput) (*ListFindingsOutput, error) {
	req, out := c.ListFindingsRequest(input)
	err := req.Send()
	return out, err
}

const opListRulesPackages = "ListRulesPackages"

// ListRulesPackagesRequest generates a "aws/request.Request" representing the
// client's request for the ListRulesPackages operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the ListRulesPackages method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the ListRulesPackagesRequest method.
//    req, resp := client.ListRulesPackagesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) ListRulesPackagesRequest(input *ListRulesPackagesInput) (req *request.Request, output *ListRulesPackagesOutput) {
	op := &request.Operation{
		Name:       opListRulesPackages,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListRulesPackagesInput{}
	}

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

// Lists all available Amazon Inspector rules packages.
func (c *Inspector) ListRulesPackages(input *ListRulesPackagesInput) (*ListRulesPackagesOutput, error) {
	req, out := c.ListRulesPackagesRequest(input)
	err := req.Send()
	return out, err
}

const opListTagsForResource = "ListTagsForResource"

// ListTagsForResourceRequest generates a "aws/request.Request" representing the
// client's request for the ListTagsForResource operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the ListTagsForResource method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // 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)
//    }
//
func (c *Inspector) ListTagsForResourceRequest(input *ListTagsForResourceInput) (req *request.Request, output *ListTagsForResourceOutput) {
	op := &request.Operation{
		Name:       opListTagsForResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

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

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

// Lists all tags associated with an assessment template.
func (c *Inspector) ListTagsForResource(input *ListTagsForResourceInput) (*ListTagsForResourceOutput, error) {
	req, out := c.ListTagsForResourceRequest(input)
	err := req.Send()
	return out, err
}

const opPreviewAgents = "PreviewAgents"

// PreviewAgentsRequest generates a "aws/request.Request" representing the
// client's request for the PreviewAgents operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the PreviewAgents method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the PreviewAgentsRequest method.
//    req, resp := client.PreviewAgentsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) PreviewAgentsRequest(input *PreviewAgentsInput) (req *request.Request, output *PreviewAgentsOutput) {
	op := &request.Operation{
		Name:       opPreviewAgents,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PreviewAgentsInput{}
	}

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

// Previews the agents installed on the EC2 instances that are part of the specified
// assessment target.
func (c *Inspector) PreviewAgents(input *PreviewAgentsInput) (*PreviewAgentsOutput, error) {
	req, out := c.PreviewAgentsRequest(input)
	err := req.Send()
	return out, err
}

const opRegisterCrossAccountAccessRole = "RegisterCrossAccountAccessRole"

// RegisterCrossAccountAccessRoleRequest generates a "aws/request.Request" representing the
// client's request for the RegisterCrossAccountAccessRole operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the RegisterCrossAccountAccessRole method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the RegisterCrossAccountAccessRoleRequest method.
//    req, resp := client.RegisterCrossAccountAccessRoleRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) RegisterCrossAccountAccessRoleRequest(input *RegisterCrossAccountAccessRoleInput) (req *request.Request, output *RegisterCrossAccountAccessRoleOutput) {
	op := &request.Operation{
		Name:       opRegisterCrossAccountAccessRole,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RegisterCrossAccountAccessRoleInput{}
	}

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

// Registers the IAM role that Amazon Inspector uses to list your EC2 instances
// at the start of the assessment run or when you call the PreviewAgents action.
func (c *Inspector) RegisterCrossAccountAccessRole(input *RegisterCrossAccountAccessRoleInput) (*RegisterCrossAccountAccessRoleOutput, error) {
	req, out := c.RegisterCrossAccountAccessRoleRequest(input)
	err := req.Send()
	return out, err
}

const opRemoveAttributesFromFindings = "RemoveAttributesFromFindings"

// RemoveAttributesFromFindingsRequest generates a "aws/request.Request" representing the
// client's request for the RemoveAttributesFromFindings operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the RemoveAttributesFromFindings method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the RemoveAttributesFromFindingsRequest method.
//    req, resp := client.RemoveAttributesFromFindingsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) RemoveAttributesFromFindingsRequest(input *RemoveAttributesFromFindingsInput) (req *request.Request, output *RemoveAttributesFromFindingsOutput) {
	op := &request.Operation{
		Name:       opRemoveAttributesFromFindings,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RemoveAttributesFromFindingsInput{}
	}

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

// Removes entire attributes (key and value pairs) from the findings that are
// specified by the ARNs of the findings where an attribute with the specified
// key exists.
func (c *Inspector) RemoveAttributesFromFindings(input *RemoveAttributesFromFindingsInput) (*RemoveAttributesFromFindingsOutput, error) {
	req, out := c.RemoveAttributesFromFindingsRequest(input)
	err := req.Send()
	return out, err
}

const opSetTagsForResource = "SetTagsForResource"

// SetTagsForResourceRequest generates a "aws/request.Request" representing the
// client's request for the SetTagsForResource operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the SetTagsForResource method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the SetTagsForResourceRequest method.
//    req, resp := client.SetTagsForResourceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) SetTagsForResourceRequest(input *SetTagsForResourceInput) (req *request.Request, output *SetTagsForResourceOutput) {
	op := &request.Operation{
		Name:       opSetTagsForResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &SetTagsForResourceInput{}
	}

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

// Sets tags (key and value pairs) to the assessment template that is specified
// by the ARN of the assessment template.
func (c *Inspector) SetTagsForResource(input *SetTagsForResourceInput) (*SetTagsForResourceOutput, error) {
	req, out := c.SetTagsForResourceRequest(input)
	err := req.Send()
	return out, err
}

const opStartAssessmentRun = "StartAssessmentRun"

// StartAssessmentRunRequest generates a "aws/request.Request" representing the
// client's request for the StartAssessmentRun operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the StartAssessmentRun method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the StartAssessmentRunRequest method.
//    req, resp := client.StartAssessmentRunRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) StartAssessmentRunRequest(input *StartAssessmentRunInput) (req *request.Request, output *StartAssessmentRunOutput) {
	op := &request.Operation{
		Name:       opStartAssessmentRun,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StartAssessmentRunInput{}
	}

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

// Starts the assessment run specified by the ARN of the assessment template.
// For this API to function properly, you must not exceed the limit of running
// up to 500 concurrent agents per AWS account.
func (c *Inspector) StartAssessmentRun(input *StartAssessmentRunInput) (*StartAssessmentRunOutput, error) {
	req, out := c.StartAssessmentRunRequest(input)
	err := req.Send()
	return out, err
}

const opStopAssessmentRun = "StopAssessmentRun"

// StopAssessmentRunRequest generates a "aws/request.Request" representing the
// client's request for the StopAssessmentRun operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the StopAssessmentRun method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the StopAssessmentRunRequest method.
//    req, resp := client.StopAssessmentRunRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) StopAssessmentRunRequest(input *StopAssessmentRunInput) (req *request.Request, output *StopAssessmentRunOutput) {
	op := &request.Operation{
		Name:       opStopAssessmentRun,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StopAssessmentRunInput{}
	}

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

// Stops the assessment run that is specified by the ARN of the assessment run.
func (c *Inspector) StopAssessmentRun(input *StopAssessmentRunInput) (*StopAssessmentRunOutput, error) {
	req, out := c.StopAssessmentRunRequest(input)
	err := req.Send()
	return out, err
}

const opSubscribeToEvent = "SubscribeToEvent"

// SubscribeToEventRequest generates a "aws/request.Request" representing the
// client's request for the SubscribeToEvent operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the SubscribeToEvent method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the SubscribeToEventRequest method.
//    req, resp := client.SubscribeToEventRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) SubscribeToEventRequest(input *SubscribeToEventInput) (req *request.Request, output *SubscribeToEventOutput) {
	op := &request.Operation{
		Name:       opSubscribeToEvent,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &SubscribeToEventInput{}
	}

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

// Enables the process of sending Amazon Simple Notification Service (SNS) notifications
// about a specified event to a specified SNS topic.
func (c *Inspector) SubscribeToEvent(input *SubscribeToEventInput) (*SubscribeToEventOutput, error) {
	req, out := c.SubscribeToEventRequest(input)
	err := req.Send()
	return out, err
}

const opUnsubscribeFromEvent = "UnsubscribeFromEvent"

// UnsubscribeFromEventRequest generates a "aws/request.Request" representing the
// client's request for the UnsubscribeFromEvent operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UnsubscribeFromEvent method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UnsubscribeFromEventRequest method.
//    req, resp := client.UnsubscribeFromEventRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) UnsubscribeFromEventRequest(input *UnsubscribeFromEventInput) (req *request.Request, output *UnsubscribeFromEventOutput) {
	op := &request.Operation{
		Name:       opUnsubscribeFromEvent,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UnsubscribeFromEventInput{}
	}

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

// Disables the process of sending Amazon Simple Notification Service (SNS)
// notifications about a specified event to a specified SNS topic.
func (c *Inspector) UnsubscribeFromEvent(input *UnsubscribeFromEventInput) (*UnsubscribeFromEventOutput, error) {
	req, out := c.UnsubscribeFromEventRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateAssessmentTarget = "UpdateAssessmentTarget"

// UpdateAssessmentTargetRequest generates a "aws/request.Request" representing the
// client's request for the UpdateAssessmentTarget operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateAssessmentTarget method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateAssessmentTargetRequest method.
//    req, resp := client.UpdateAssessmentTargetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *Inspector) UpdateAssessmentTargetRequest(input *UpdateAssessmentTargetInput) (req *request.Request, output *UpdateAssessmentTargetOutput) {
	op := &request.Operation{
		Name:       opUpdateAssessmentTarget,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateAssessmentTargetInput{}
	}

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

// Updates the assessment target that is specified by the ARN of the assessment
// target.
func (c *Inspector) UpdateAssessmentTarget(input *UpdateAssessmentTargetInput) (*UpdateAssessmentTargetOutput, error) {
	req, out := c.UpdateAssessmentTargetRequest(input)
	err := req.Send()
	return out, err
}

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

	// The array of attributes that you want to assign to specified findings.
	Attributes []*Attribute `locationName:"attributes" type:"list" required:"true"`

	// The ARNs that specify the findings that you want to assign attributes to.
	FindingArns []*string `locationName:"findingArns" min:"1" type:"list" required:"true"`
}

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

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

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

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

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

	// Attribute details that cannot be described. An error code is provided for
	// each failed item.
	FailedItems map[string]*FailedItemDetails `locationName:"failedItems" type:"map" required:"true"`
}

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

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

// Used in the exception error that is thrown if you start an assessment run
// for an assessment target that includes an EC2 instance that is already participating
// in another started assessment run.
type AgentAlreadyRunningAssessment struct {
	_ struct{} `type:"structure"`

	// ID of the agent that is running on an EC2 instance that is already participating
	// in another started assessment run.
	AgentId *string `locationName:"agentId" min:"1" type:"string" required:"true"`

	// The ARN of the assessment run that has already been started.
	AssessmentRunArn *string `locationName:"assessmentRunArn" min:"1" type:"string" required:"true"`
}

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

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

// Contains information about an Amazon Inspector agent. This data type is used
// as a request parameter in the ListAssessmentRunAgents action.
type AgentFilter struct {
	_ struct{} `type:"structure"`

	// The detailed health state of the agent. Values can be set to IDLE, RUNNING,
	// SHUTDOWN, UNHEALTHY, THROTTLED, and UNKNOWN.
	AgentHealthCodes []*string `locationName:"agentHealthCodes" type:"list" required:"true"`

	// The current health state of the agent. Values can be set to HEALTHY or UNHEALTHY.
	AgentHealths []*string `locationName:"agentHealths" type:"list" required:"true"`
}

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

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

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

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

// Used as a response element in the PreviewAgents action.
type AgentPreview struct {
	_ struct{} `type:"structure"`

	// The ID of the EC2 instance where the agent is installed.
	AgentId *string `locationName:"agentId" min:"1" type:"string" required:"true"`

	// The Auto Scaling group for the EC2 instance where the agent is installed.
	AutoScalingGroup *string `locationName:"autoScalingGroup" min:"1" type:"string"`
}

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

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

// A snapshot of an Amazon Inspector assessment run that contains the findings
// of the assessment run .
//
// Used as the response element in the DescribeAssessmentRuns action.
type AssessmentRun struct {
	_ struct{} `type:"structure"`

	// The ARN of the assessment run.
	Arn *string `locationName:"arn" min:"1" type:"string" required:"true"`

	// The ARN of the assessment template that is associated with the assessment
	// run.
	AssessmentTemplateArn *string `locationName:"assessmentTemplateArn" min:"1" type:"string" required:"true"`

	// The assessment run completion time that corresponds to the rules packages
	// evaluation completion time or failure.
	CompletedAt *time.Time `locationName:"completedAt" type:"timestamp" timestampFormat:"unix"`

	// The time when StartAssessmentRun was called.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp" timestampFormat:"unix" required:"true"`

	// A Boolean value (true or false) that specifies whether the process of collecting
	// data from the agents is completed.
	DataCollected *bool `locationName:"dataCollected" type:"boolean" required:"true"`

	// The duration of the assessment run.
	DurationInSeconds *int64 `locationName:"durationInSeconds" min:"180" type:"integer" required:"true"`

	// The auto-generated name for the assessment run.
	Name *string `locationName:"name" min:"1" type:"string" required:"true"`

	// A list of notifications for the event subscriptions. A notification about
	// a particular generated finding is added to this list only once.
	Notifications []*AssessmentRunNotification `locationName:"notifications" type:"list" required:"true"`

	// The rules packages selected for the assessment run.
	RulesPackageArns []*string `locationName:"rulesPackageArns" min:"1" type:"list" required:"true"`

	// The time when StartAssessmentRun was called.
	StartedAt *time.Time `locationName:"startedAt" type:"timestamp" timestampFormat:"unix"`

	// The state of the assessment run.
	State *string `locationName:"state" type:"string" required:"true" enum:"AssessmentRunState"`

	// The last time when the assessment run's state changed.
	StateChangedAt *time.Time `locationName:"stateChangedAt" type:"timestamp" timestampFormat:"unix" required:"true"`

	// A list of the assessment run state changes.
	StateChanges []*AssessmentRunStateChange `locationName:"stateChanges" type:"list" required:"true"`

	// The user-defined attributes that are assigned to every generated finding.
	UserAttributesForFindings []*Attribute `locationName:"userAttributesForFindings" type:"list" required:"true"`
}

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

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

// Contains information about an Amazon Inspector agent. This data type is used
// as a response element in the ListAssessmentRunAgents action.
type AssessmentRunAgent struct {
	_ struct{} `type:"structure"`

	// The current health state of the agent.
	AgentHealth *string `locationName:"agentHealth" type:"string" required:"true" enum:"AgentHealth"`

	// The detailed health state of the agent.
	AgentHealthCode *string `locationName:"agentHealthCode" type:"string" required:"true" enum:"AgentHealthCode"`

	// The description for the agent health code.
	AgentHealthDetails *string `locationName:"agentHealthDetails" type:"string"`

	// The AWS account of the EC2 instance where the agent is installed.
	AgentId *string `locationName:"agentId" min:"1" type:"string" required:"true"`

	// The ARN of the assessment run that is associated with the agent.
	AssessmentRunArn *string `locationName:"assessmentRunArn" min:"1" type:"string" required:"true"`

	// The Auto Scaling group of the EC2 instance that is specified by the agent
	// ID.
	AutoScalingGroup *string `locationName:"autoScalingGroup" min:"1" type:"string"`

	// The Amazon Inspector application data metrics that are collected by the agent.
	TelemetryMetadata []*TelemetryMetadata `locationName:"telemetryMetadata" type:"list" required:"true"`
}

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

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

// Used as the request parameter in the ListAssessmentRuns action.
type AssessmentRunFilter struct {
	_ struct{} `type:"structure"`

	// For a record to match a filter, the value that is specified for this data
	// type property must inclusively match any value between the specified minimum
	// and maximum values of the completedAt property of the AssessmentRun data
	// type.
	CompletionTimeRange *TimestampRange `locationName:"completionTimeRange" type:"structure"`

	// For a record to match a filter, the value that is specified for this data
	// type property must inclusively match any value between the specified minimum
	// and maximum values of the durationInSeconds property of the AssessmentRun
	// data type.
	DurationRange *DurationRange `locationName:"durationRange" type:"structure"`

	// For a record to match a filter, an explicit value or a string containing
	// a wildcard that is specified for this data type property must match the value
	// of the assessmentRunName property of the AssessmentRun data type.
	NamePattern *string `locationName:"namePattern" min:"1" type:"string"`

	// For a record to match a filter, the value that is specified for this data
	// type property must be contained in the list of values of the rulesPackages
	// property of the AssessmentRun data type.
	RulesPackageArns []*string `locationName:"rulesPackageArns" type:"list"`

	// For a record to match a filter, the value that is specified for this data
	// type property must inclusively match any value between the specified minimum
	// and maximum values of the startTime property of the AssessmentRun data type.
	StartTimeRange *TimestampRange `locationName:"startTimeRange" type:"structure"`

	// For a record to match a filter, the value that is specified for this data
	// type property must match the stateChangedAt property of the AssessmentRun
	// data type.
	StateChangeTimeRange *TimestampRange `locationName:"stateChangeTimeRange" type:"structure"`

	// For a record to match a filter, one of the values specified for this data
	// type property must be the exact match of the value of the assessmentRunState
	// property of the AssessmentRun data type.
	States []*string `locationName:"states" type:"list"`
}

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

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

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

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

// Used as one of the elements of the AssessmentRun data type.
type AssessmentRunNotification struct {
	_ struct{} `type:"structure"`

	// The date of the notification.
	Date *time.Time `locationName:"date" type:"timestamp" timestampFormat:"unix" required:"true"`

	// The Boolean value that specifies whether the notification represents an error.
	Error *bool `locationName:"error" type:"boolean" required:"true"`

	// The event for which a notification is sent.
	Event *string `locationName:"event" type:"string" required:"true" enum:"Event"`

	Message *string `locationName:"message" type:"string"`

	// The status code of the SNS notification.
	SnsPublishStatusCode *string `locationName:"snsPublishStatusCode" type:"string" enum:"AssessmentRunNotificationSnsStatusCode"`

	// The SNS topic to which the SNS notification is sent.
	SnsTopicArn *string `locationName:"snsTopicArn" min:"1" type:"string"`
}

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

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

// Used as one of the elements of the AssessmentRun data type.
type AssessmentRunStateChange struct {
	_ struct{} `type:"structure"`

	// The assessment run state.
	State *string `locationName:"state" type:"string" required:"true" enum:"AssessmentRunState"`

	// The last time the assessment run state changed.
	StateChangedAt *time.Time `locationName:"stateChangedAt" type:"timestamp" timestampFormat:"unix" required:"true"`
}

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

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

// Contains information about an Amazon Inspector application. This data type
// is used as the response element in the DescribeAssessmentTargets action.
type AssessmentTarget struct {
	_ struct{} `type:"structure"`

	// The ARN that specifies the Amazon Inspector assessment target.
	Arn *string `locationName:"arn" min:"1" type:"string" required:"true"`

	// The time at which the assessment target is created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp" timestampFormat:"unix" required:"true"`

	// The name of the Amazon Inspector assessment target.
	Name *string `locationName:"name" min:"1" type:"string" required:"true"`

	// The ARN that specifies the resource group that is associated with the assessment
	// target.
	ResourceGroupArn *string `locationName:"resourceGroupArn" min:"1" type:"string" required:"true"`

	// The time at which UpdateAssessmentTarget is called.
	UpdatedAt *time.Time `locationName:"updatedAt" type:"timestamp" timestampFormat:"unix" required:"true"`
}

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

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

// Used as the request parameter in the ListAssessmentTargets action.
type AssessmentTargetFilter struct {
	_ struct{} `type:"structure"`

	// For a record to match a filter, an explicit value or a string that contains
	// a wildcard that is specified for this data type property must match the value
	// of the assessmentTargetName property of the AssessmentTarget data type.
	AssessmentTargetNamePattern *string `locationName:"assessmentTargetNamePattern" min:"1" type:"string"`
}

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

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

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

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

// Contains information about an Amazon Inspector assessment template. This
// data type is used as the response element in the DescribeAssessmentTemplates
// action.
type AssessmentTemplate struct {
	_ struct{} `type:"structure"`

	// The ARN of the assessment template.
	Arn *string `locationName:"arn" min:"1" type:"string" required:"true"`

	// The ARN of the assessment target that corresponds to this assessment template.
	AssessmentTargetArn *string `locationName:"assessmentTargetArn" min:"1" type:"string" required:"true"`

	// The time at which the assessment template is created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp" timestampFormat:"unix" required:"true"`

	// The duration in seconds specified for this assessment tempate. The default
	// value is 3600 seconds (one hour). The maximum value is 86400 seconds (one
	// day).
	DurationInSeconds *int64 `locationName:"durationInSeconds" min:"180" type:"integer" required:"true"`

	// The name of the assessment template.
	Name *string `locationName:"name" min:"1" type:"string" required:"true"`

	// The rules packages that are specified for this assessment template.
	RulesPackageArns []*string `locationName:"rulesPackageArns" type:"list" required:"true"`

	// The user-defined attributes that are assigned to every generated finding
	// from the assessment run that uses this assessment template.
	UserAttributesForFindings []*Attribute `locationName:"userAttributesForFindings" type:"list" required:"true"`
}

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

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

// Used as the request parameter in the ListAssessmentTemplates action.
type AssessmentTemplateFilter struct {
	_ struct{} `type:"structure"`

	// For a record to match a filter, the value specified for this data type property
	// must inclusively match any value between the specified minimum and maximum
	// values of the durationInSeconds property of the AssessmentTemplate data type.
	DurationRange *DurationRange `locationName:"durationRange" type:"structure"`

	// For a record to match a filter, an explicit value or a string that contains
	// a wildcard that is specified for this data type property must match the value
	// of the assessmentTemplateName property of the AssessmentTemplate data type.
	NamePattern *string `locationName:"namePattern" min:"1" type:"string"`

	// For a record to match a filter, the values that are specified for this data
	// type property must be contained in the list of values of the rulesPackageArns
	// property of the AssessmentTemplate data type.
	RulesPackageArns []*string `locationName:"rulesPackageArns" type:"list"`
}

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

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

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

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

// A collection of attributes of the host from which the finding is generated.
type AssetAttributes struct {
	_ struct{} `type:"structure"`

	// The ID of the agent that is installed on the EC2 instance where the finding
	// is generated.
	AgentId *string `locationName:"agentId" min:"1" type:"string"`

	// The ID of the Amazon Machine Image (AMI) that is installed on the EC2 instance
	// where the finding is generated.
	AmiId *string `locationName:"amiId" type:"string"`

	// The Auto Scaling group of the EC2 instance where the finding is generated.
	AutoScalingGroup *string `locationName:"autoScalingGroup" min:"1" type:"string"`

	// The hostname of the EC2 instance where the finding is generated.
	Hostname *string `locationName:"hostname" type:"string"`

	// The list of IP v4 addresses of the EC2 instance where the finding is generated.
	Ipv4Addresses []*string `locationName:"ipv4Addresses" type:"list"`

	// The schema version of this data type.
	SchemaVersion *int64 `locationName:"schemaVersion" type:"integer" required:"true"`
}

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

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

// This data type is used as a request parameter in the AddAttributesToFindings
// and CreateAssessmentTemplate actions.
type Attribute struct {
	_ struct{} `type:"structure"`

	// The attribute key.
	Key *string `locationName:"key" min:"1" type:"string" required:"true"`

	// The value assigned to the attribute key.
	Value *string `locationName:"value" min:"1" type:"string"`
}

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

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

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

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

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

	// The user-defined name that identifies the assessment target that you want
	// to create. The name must be unique within the AWS account.
	AssessmentTargetName *string `locationName:"assessmentTargetName" min:"1" type:"string" required:"true"`

	// The ARN that specifies the resource group that is used to create the assessment
	// target.
	ResourceGroupArn *string `locationName:"resourceGroupArn" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

	// The ARN that specifies the assessment target that is created.
	AssessmentTargetArn *string `locationName:"assessmentTargetArn" min:"1" type:"string" required:"true"`
}

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

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

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

	// The ARN that specifies the assessment target for which you want to create
	// the assessment template.
	AssessmentTargetArn *string `locationName:"assessmentTargetArn" min:"1" type:"string" required:"true"`

	// The user-defined name that identifies the assessment template that you want
	// to create. You can create several assessment templates for an assessment
	// target. The names of the assessment templates that correspond to a particular
	// assessment target must be unique.
	AssessmentTemplateName *string `locationName:"assessmentTemplateName" min:"1" type:"string" required:"true"`

	// The duration of the assessment run in seconds. The default value is 3600
	// seconds (one hour).
	DurationInSeconds *int64 `locationName:"durationInSeconds" min:"180" type:"integer" required:"true"`

	// The ARNs that specify the rules packages that you want to attach to the assessment
	// template.
	RulesPackageArns []*string `locationName:"rulesPackageArns" type:"list" required:"true"`

	// The user-defined attributes that are assigned to every finding that is generated
	// by the assessment run that uses this assessment template.
	UserAttributesForFindings []*Attribute `locationName:"userAttributesForFindings" type:"list"`
}

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

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

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

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

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

	// The ARN that specifies the assessment template that is created.
	AssessmentTemplateArn *string `locationName:"assessmentTemplateArn" min:"1" type:"string" required:"true"`
}

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

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

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

	// A collection of keys and an array of possible values, '[{"key":"key1","values":["Value1","Value2"]},{"key":"Key2","values":["Value3"]}]'.
	//
	// For example,'[{"key":"Name","values":["TestEC2Instance"]}]'.
	ResourceGroupTags []*ResourceGroupTag `locationName:"resourceGroupTags" min:"1" type:"list" required:"true"`
}

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

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

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

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

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

	// The ARN that specifies the resource group that is created.
	ResourceGroupArn *string `locationName:"resourceGroupArn" min:"1" type:"string" required:"true"`
}

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

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

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

	// The ARN that specifies the assessment run that you want to delete.
	AssessmentRunArn *string `locationName:"assessmentRunArn" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

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

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

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

	// The ARN that specifies the assessment target that you want to delete.
	AssessmentTargetArn *string `locationName:"assessmentTargetArn" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

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

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

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

	// The ARN that specifies the assessment template that you want to delete.
	AssessmentTemplateArn *string `locationName:"assessmentTemplateArn" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

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

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

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

	// The ARN that specifies the assessment run that you want to describe.
	AssessmentRunArns []*string `locationName:"assessmentRunArns" min:"1" type:"list" required:"true"`
}

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

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

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

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

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

	// Information about the assessment run.
	AssessmentRuns []*AssessmentRun `locationName:"assessmentRuns" type:"list" required:"true"`

	// Assessment run details that cannot be described. An error code is provided
	// for each failed item.
	FailedItems map[string]*FailedItemDetails `locationName:"failedItems" type:"map" required:"true"`
}

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

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

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

	// The ARNs that specifies the assessment targets that you want to describe.
	AssessmentTargetArns []*string `locationName:"assessmentTargetArns" min:"1" type:"list" required:"true"`
}

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

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

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

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

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

	// Information about the assessment targets.
	AssessmentTargets []*AssessmentTarget `locationName:"assessmentTargets" type:"list" required:"true"`

	// Assessment target details that cannot be described. An error code is provided
	// for each failed item.
	FailedItems map[string]*FailedItemDetails `locationName:"failedItems" type:"map" required:"true"`
}

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

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

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

	// The ARN that specifiesthe assessment templates that you want to describe.
	AssessmentTemplateArns []*string `locationName:"assessmentTemplateArns" min:"1" type:"list" required:"true"`
}

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

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

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

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

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

	// Information about the assessment templates.
	AssessmentTemplates []*AssessmentTemplate `locationName:"assessmentTemplates" type:"list" required:"true"`

	// Assessment template details that cannot be described. An error code is provided
	// for each failed item.
	FailedItems map[string]*FailedItemDetails `locationName:"failedItems" type:"map" required:"true"`
}

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

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

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

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

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

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

	// The date when the cross-account access role was registered.
	RegisteredAt *time.Time `locationName:"registeredAt" type:"timestamp" timestampFormat:"unix" required:"true"`

	// The ARN that specifies the IAM role that Amazon Inspector uses to access
	// your AWS account.
	RoleArn *string `locationName:"roleArn" min:"1" type:"string" required:"true"`

	// A Boolean value that specifies whether the IAM role has the necessary policies
	// attached to enable Amazon Inspector to access your AWS account.
	Valid *bool `locationName:"valid" type:"boolean" required:"true"`
}

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

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

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

	// The ARN that specifies the finding that you want to describe.
	FindingArns []*string `locationName:"findingArns" min:"1" type:"list" required:"true"`

	// The locale into which you want to translate a finding description, recommendation,
	// and the short description that identifies the finding.
	Locale *string `locationName:"locale" type:"string" enum:"Locale"`
}

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

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

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

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

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

	// Finding details that cannot be described. An error code is provided for each
	// failed item.
	FailedItems map[string]*FailedItemDetails `locationName:"failedItems" type:"map" required:"true"`

	// Information about the finding.
	Findings []*Finding `locationName:"findings" type:"list" required:"true"`
}

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

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

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

	// The ARN that specifies the resource group that you want to describe.
	ResourceGroupArns []*string `locationName:"resourceGroupArns" min:"1" type:"list" required:"true"`
}

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

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

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

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

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

	// Resource group details that cannot be described. An error code is provided
	// for each failed item.
	FailedItems map[string]*FailedItemDetails `locationName:"failedItems" type:"map" required:"true"`

	// Information about a resource group.
	ResourceGroups []*ResourceGroup `locationName:"resourceGroups" type:"list" required:"true"`
}

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

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

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

	// The locale that you want to translate a rules package description into.
	Locale *string `locationName:"locale" type:"string" enum:"Locale"`

	// The ARN that specifies the rules package that you want to describe.
	RulesPackageArns []*string `locationName:"rulesPackageArns" min:"1" type:"list" required:"true"`
}

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

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

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

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

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

	// Rules package details that cannot be described. An error code is provided
	// for each failed item.
	FailedItems map[string]*FailedItemDetails `locationName:"failedItems" type:"map" required:"true"`

	// Information about the rules package.
	RulesPackages []*RulesPackage `locationName:"rulesPackages" type:"list" required:"true"`
}

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

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

// This data type is used in the AssessmentTemplateFilter data type.
type DurationRange struct {
	_ struct{} `type:"structure"`

	// The maximum value of the duration range. Must be less than or equal to 604800
	// seconds (1 week).
	MaxSeconds *int64 `locationName:"maxSeconds" min:"180" type:"integer"`

	// The minimum value of the duration range. Must be greater than zero.
	MinSeconds *int64 `locationName:"minSeconds" min:"180" type:"integer"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *DurationRange) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DurationRange"}
	if s.MaxSeconds != nil && *s.MaxSeconds < 180 {
		invalidParams.Add(request.NewErrParamMinValue("MaxSeconds", 180))
	}
	if s.MinSeconds != nil && *s.MinSeconds < 180 {
		invalidParams.Add(request.NewErrParamMinValue("MinSeconds", 180))
	}

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

// This data type is used in the Subscription data type.
type EventSubscription struct {
	_ struct{} `type:"structure"`

	// The event for which Amazon Simple Notification Service (SNS) notifications
	// are sent.
	Event *string `locationName:"event" type:"string" required:"true" enum:"Event"`

	// The time at which SubscribeToEvent is called.
	SubscribedAt *time.Time `locationName:"subscribedAt" type:"timestamp" timestampFormat:"unix" required:"true"`
}

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

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

// Includes details about the failed items.
type FailedItemDetails struct {
	_ struct{} `type:"structure"`

	// The status code of a failed item.
	FailureCode *string `locationName:"failureCode" type:"string" required:"true" enum:"FailedItemErrorCode"`

	// Indicates whether you can immediately retry a request for this item for a
	// specified resource.
	Retryable *bool `locationName:"retryable" type:"boolean" required:"true"`
}

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

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

// Contains information about an Amazon Inspector finding. This data type is
// used as the response element in the DescribeFindings action.
type Finding struct {
	_ struct{} `type:"structure"`

	// The ARN that specifies the finding.
	Arn *string `locationName:"arn" min:"1" type:"string" required:"true"`

	// A collection of attributes of the host from which the finding is generated.
	AssetAttributes *AssetAttributes `locationName:"assetAttributes" type:"structure"`

	// The type of the host from which the finding is generated.
	AssetType *string `locationName:"assetType" type:"string" enum:"AssetType"`

	// The system-defined attributes for the finding.
	Attributes []*Attribute `locationName:"attributes" type:"list" required:"true"`

	// This data element is currently not used.
	Confidence *int64 `locationName:"confidence" type:"integer"`

	// The time when the finding was generated.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp" timestampFormat:"unix" required:"true"`

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

	// The ID of the finding.
	Id *string `locationName:"id" type:"string"`

	// This data element is currently not used.
	IndicatorOfCompromise *bool `locationName:"indicatorOfCompromise" type:"boolean"`

	// The numeric value of the finding severity.
	NumericSeverity *float64 `locationName:"numericSeverity" type:"double"`

	// The recommendation for the finding.
	Recommendation *string `locationName:"recommendation" type:"string"`

	// The schema version of this data type.
	SchemaVersion *int64 `locationName:"schemaVersion" type:"integer"`

	// The data element is set to "Inspector".
	Service *string `locationName:"service" type:"string"`

	// This data type is used in the Finding data type.
	ServiceAttributes *ServiceAttributes `locationName:"serviceAttributes" type:"structure"`

	// The finding severity. Values can be set to High, Medium, Low, and Informational.
	Severity *string `locationName:"severity" type:"string" enum:"Severity"`

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

	// The time when AddAttributesToFindings is called.
	UpdatedAt *time.Time `locationName:"updatedAt" type:"timestamp" timestampFormat:"unix" required:"true"`

	// The user-defined attributes that are assigned to the finding.
	UserAttributes []*Attribute `locationName:"userAttributes" type:"list" required:"true"`
}

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

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

// This data type is used as a request parameter in the ListFindings action.
type FindingFilter struct {
	_ struct{} `type:"structure"`

	// For a record to match a filter, one of the values that is specified for this
	// data type property must be the exact match of the value of the agentId property
	// of the Finding data type.
	AgentIds []*string `locationName:"agentIds" type:"list"`

	// For a record to match a filter, the list of values that are specified for
	// this data type property must be contained in the list of values of the attributes
	// property of the Finding data type.
	Attributes []*Attribute `locationName:"attributes" type:"list"`

	// For a record to match a filter, one of the values that is specified for this
	// data type property must be the exact match of the value of the autoScalingGroup
	// property of the Finding data type.
	AutoScalingGroups []*string `locationName:"autoScalingGroups" type:"list"`

	// The time range during which the finding is generated.
	CreationTimeRange *TimestampRange `locationName:"creationTimeRange" type:"structure"`

	// For a record to match a filter, one of the values that is specified for this
	// data type property must be the exact match of the value of the ruleName property
	// of the Finding data type.
	RuleNames []*string `locationName:"ruleNames" type:"list"`

	// For a record to match a filter, one of the values that is specified for this
	// data type property must be the exact match of the value of the rulesPackageArn
	// property of the Finding data type.
	RulesPackageArns []*string `locationName:"rulesPackageArns" type:"list"`

	// For a record to match a filter, one of the values that is specified for this
	// data type property must be the exact match of the value of the severity property
	// of the Finding data type.
	Severities []*string `locationName:"severities" type:"list"`

	// For a record to match a filter, the value that is specified for this data
	// type property must be contained in the list of values of the userAttributes
	// property of the Finding data type.
	UserAttributes []*Attribute `locationName:"userAttributes" type:"list"`
}

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

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

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

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

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

	// The ARN that specifies the assessment run that has the telemetry data that
	// you want to obtain.
	AssessmentRunArn *string `locationName:"assessmentRunArn" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

	// Telemetry details.
	TelemetryMetadata []*TelemetryMetadata `locationName:"telemetryMetadata" type:"list" required:"true"`
}

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

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

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

	// The ARN that specifies the assessment run whose agents you want to list.
	AssessmentRunArn *string `locationName:"assessmentRunArn" min:"1" type:"string" required:"true"`

	// You can use this parameter to specify a subset of data to be included in
	// the action's response.
	//
	// For a record to match a filter, all specified filter attributes must match.
	// When multiple values are specified for a filter attribute, any of the values
	// can match.
	Filter *AgentFilter `locationName:"filter" type:"structure"`

	// You can use this parameter to indicate the maximum number of items that you
	// want in the response. The default value is 10. The maximum value is 500.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// You can use this parameter when paginating results. Set the value of this
	// parameter to null on your first call to the ListAssessmentRunAgents action.
	// Subsequent calls to the action fill nextToken in the request with the value
	// of NextToken from the previous response to continue listing data.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

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

	// A list of ARNs that specifies the agents returned by the action.
	AssessmentRunAgents []*AssessmentRunAgent `locationName:"assessmentRunAgents" type:"list" required:"true"`

	// When a response is generated, if there is more data to be listed, this parameter
	// is present in the response and contains the value to use for the nextToken
	// parameter in a subsequent pagination request. If there is no more data to
	// be listed, this parameter is set to null.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

	// The ARNs that specify the assessment templates whose assessment runs you
	// want to list.
	AssessmentTemplateArns []*string `locationName:"assessmentTemplateArns" type:"list"`

	// You can use this parameter to specify a subset of data to be included in
	// the action's response.
	//
	// For a record to match a filter, all specified filter attributes must match.
	// When multiple values are specified for a filter attribute, any of the values
	// can match.
	Filter *AssessmentRunFilter `locationName:"filter" type:"structure"`

	// You can use this parameter to indicate the maximum number of items that you
	// want in the response. The default value is 10. The maximum value is 500.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// You can use this parameter when paginating results. Set the value of this
	// parameter to null on your first call to the ListAssessmentRuns action. Subsequent
	// calls to the action fill nextToken in the request with the value of NextToken
	// from the previous response to continue listing data.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

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

	// A list of ARNs that specifies the assessment runs that are returned by the
	// action.
	AssessmentRunArns []*string `locationName:"assessmentRunArns" type:"list" required:"true"`

	// When a response is generated, if there is more data to be listed, this parameter
	// is present in the response and contains the value to use for the nextToken
	// parameter in a subsequent pagination request. If there is no more data to
	// be listed, this parameter is set to null.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

	// You can use this parameter to specify a subset of data to be included in
	// the action's response.
	//
	// For a record to match a filter, all specified filter attributes must match.
	// When multiple values are specified for a filter attribute, any of the values
	// can match.
	Filter *AssessmentTargetFilter `locationName:"filter" type:"structure"`

	// You can use this parameter to indicate the maximum number of items you want
	// in the response. The default value is 10. The maximum value is 500.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// You can use this parameter when paginating results. Set the value of this
	// parameter to null on your first call to the ListAssessmentTargets action.
	// Subsequent calls to the action fill nextToken in the request with the value
	// of NextToken from the previous response to continue listing data.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

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

	// A list of ARNs that specifies the assessment targets that are returned by
	// the action.
	AssessmentTargetArns []*string `locationName:"assessmentTargetArns" type:"list" required:"true"`

	// When a response is generated, if there is more data to be listed, this parameter
	// is present in the response and contains the value to use for the nextToken
	// parameter in a subsequent pagination request. If there is no more data to
	// be listed, this parameter is set to null.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

	// A list of ARNs that specifies the assessment targets whose assessment templates
	// you want to list.
	AssessmentTargetArns []*string `locationName:"assessmentTargetArns" type:"list"`

	// You can use this parameter to specify a subset of data to be included in
	// the action's response.
	//
	// For a record to match a filter, all specified filter attributes must match.
	// When multiple values are specified for a filter attribute, any of the values
	// can match.
	Filter *AssessmentTemplateFilter `locationName:"filter" type:"structure"`

	// You can use this parameter to indicate the maximum number of items you want
	// in the response. The default value is 10. The maximum value is 500.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// You can use this parameter when paginating results. Set the value of this
	// parameter to null on your first call to the ListAssessmentTemplates action.
	// Subsequent calls to the action fill nextToken in the request with the value
	// of NextToken from the previous response to continue listing data.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

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

	// A list of ARNs that specifies the assessment templates returned by the action.
	AssessmentTemplateArns []*string `locationName:"assessmentTemplateArns" type:"list" required:"true"`

	// When a response is generated, if there is more data to be listed, this parameter
	// is present in the response and contains the value to use for the nextToken
	// parameter in a subsequent pagination request. If there is no more data to
	// be listed, this parameter is set to null.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

	// You can use this parameter to indicate the maximum number of items you want
	// in the response. The default value is 10. The maximum value is 500.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// You can use this parameter when paginating results. Set the value of this
	// parameter to null on your first call to the ListEventSubscriptions action.
	// Subsequent calls to the action fill nextToken in the request with the value
	// of NextToken from the previous response to continue listing data.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The ARN of the assessment template for which you want to list the existing
	// event subscriptions.
	ResourceArn *string `locationName:"resourceArn" min:"1" type:"string"`
}

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

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

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

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

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

	// When a response is generated, if there is more data to be listed, this parameter
	// is present in the response and contains the value to use for the nextToken
	// parameter in a subsequent pagination request. If there is no more data to
	// be listed, this parameter is set to null.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// Details of the returned event subscriptions.
	Subscriptions []*Subscription `locationName:"subscriptions" type:"list" required:"true"`
}

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

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

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

	// The ARNs of the assessment runs that generate the findings that you want
	// to list.
	AssessmentRunArns []*string `locationName:"assessmentRunArns" type:"list"`

	// You can use this parameter to specify a subset of data to be included in
	// the action's response.
	//
	// For a record to match a filter, all specified filter attributes must match.
	// When multiple values are specified for a filter attribute, any of the values
	// can match.
	Filter *FindingFilter `locationName:"filter" type:"structure"`

	// You can use this parameter to indicate the maximum number of items you want
	// in the response. The default value is 10. The maximum value is 500.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// You can use this parameter when paginating results. Set the value of this
	// parameter to null on your first call to the ListFindings action. Subsequent
	// calls to the action fill nextToken in the request with the value of NextToken
	// from the previous response to continue listing data.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

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

	// A list of ARNs that specifies the findings returned by the action.
	FindingArns []*string `locationName:"findingArns" type:"list" required:"true"`

	// When a response is generated, if there is more data to be listed, this parameter
	// is present in the response and contains the value to use for the nextToken
	// parameter in a subsequent pagination request. If there is no more data to
	// be listed, this parameter is set to null.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

	// You can use this parameter to indicate the maximum number of items you want
	// in the response. The default value is 10. The maximum value is 500.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// You can use this parameter when paginating results. Set the value of this
	// parameter to null on your first call to the ListRulesPackages action. Subsequent
	// calls to the action fill nextToken in the request with the value of NextToken
	// from the previous response to continue listing data.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

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

	// When a response is generated, if there is more data to be listed, this parameter
	// is present in the response and contains the value to use for the nextToken
	// parameter in a subsequent pagination request. If there is no more data to
	// be listed, this parameter is set to null.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The list of ARNs that specifies the rules packages returned by the action.
	RulesPackageArns []*string `locationName:"rulesPackageArns" type:"list" required:"true"`
}

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

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

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

	// The ARN that specifies the assessment template whose tags you want to list.
	ResourceArn *string `locationName:"resourceArn" min:"1" type:"string" required:"true"`
}

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

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

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

	// A collection of key and value pairs.
	Tags []*Tag `locationName:"tags" type:"list" required:"true"`
}

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

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

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

	// You can use this parameter to indicate the maximum number of items you want
	// in the response. The default value is 10. The maximum value is 500.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// You can use this parameter when paginating results. Set the value of this
	// parameter to null on your first call to the PreviewAgents action. Subsequent
	// calls to the action fill nextToken in the request with the value of NextToken
	// from the previous response to continue listing data.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// The ARN of the assessment target whose agents you want to preview.
	PreviewAgentsArn *string `locationName:"previewAgentsArn" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

	// The resulting list of agents.
	AgentPreviews []*AgentPreview `locationName:"agentPreviews" type:"list" required:"true"`

	// When a response is generated, if there is more data to be listed, this parameter
	// is present in the response and contains the value to use for the nextToken
	// parameter in a subsequent pagination request. If there is no more data to
	// be listed, this parameter is set to null.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

	// The ARN of the IAM role that Amazon Inspector uses to list your EC2 instances
	// during the assessment run or when you call the PreviewAgents action.
	RoleArn *string `locationName:"roleArn" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

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

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

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

	// The array of attribute keys that you want to remove from specified findings.
	AttributeKeys []*string `locationName:"attributeKeys" type:"list" required:"true"`

	// The ARNs that specify the findings that you want to remove attributes from.
	FindingArns []*string `locationName:"findingArns" min:"1" type:"list" required:"true"`
}

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

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

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

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

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

	// Attributes details that cannot be described. An error code is provided for
	// each failed item.
	FailedItems map[string]*FailedItemDetails `locationName:"failedItems" type:"map" required:"true"`
}

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

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

// Contains information about a resource group. The resource group defines a
// set of tags that, when queried, identify the AWS resources that make up the
// assessment target. This data type is used as the response element in the
// DescribeResourceGroups action.
type ResourceGroup struct {
	_ struct{} `type:"structure"`

	// The ARN of the resource group.
	Arn *string `locationName:"arn" min:"1" type:"string" required:"true"`

	// The time at which resource group is created.
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp" timestampFormat:"unix" required:"true"`

	// The tags (key and value pairs) of the resource group. This data type property
	// is used in the CreateResourceGroup action.
	Tags []*ResourceGroupTag `locationName:"tags" min:"1" type:"list" required:"true"`
}

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

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

// This data type is used as one of the elements of the ResourceGroup data type.
type ResourceGroupTag struct {
	_ struct{} `type:"structure"`

	// A tag key.
	Key *string `locationName:"key" min:"1" type:"string" required:"true"`

	// The value assigned to a tag key.
	Value *string `locationName:"value" min:"1" type:"string"`
}

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

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

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

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

// Contains information about an Amazon Inspector rules package. This data type
// is used as the response element in the DescribeRulesPackages action.
type RulesPackage struct {
	_ struct{} `type:"structure"`

	// The ARN of the rules package.
	Arn *string `locationName:"arn" min:"1" type:"string" required:"true"`

	// The description of the rules package.
	Description *string `locationName:"description" type:"string"`

	// The name of the rules package.
	Name *string `locationName:"name" type:"string" required:"true"`

	// The provider of the rules package.
	Provider *string `locationName:"provider" type:"string" required:"true"`

	// The version ID of the rules package.
	Version *string `locationName:"version" type:"string" required:"true"`
}

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

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

// This data type is used in the Finding data type.
type ServiceAttributes struct {
	_ struct{} `type:"structure"`

	// The ARN of the assessment run during which the finding is generated.
	AssessmentRunArn *string `locationName:"assessmentRunArn" min:"1" type:"string"`

	// The ARN of the rules package that is used to generate the finding.
	RulesPackageArn *string `locationName:"rulesPackageArn" min:"1" type:"string"`

	// The schema version of this data type.
	SchemaVersion *int64 `locationName:"schemaVersion" type:"integer" required:"true"`
}

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

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

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

	// The ARN of the assessment template that you want to set tags to.
	ResourceArn *string `locationName:"resourceArn" min:"1" type:"string" required:"true"`

	// A collection of key and value pairs that you want to set to the assessment
	// template.
	Tags []*Tag `locationName:"tags" type:"list"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *SetTagsForResourceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SetTagsForResourceInput"}
	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 {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

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

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

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

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

	// You can specify the name for the assessment run, or you can use the auto-generated
	// name that is based on the assessment template name. The name must be unique
	// for the assessment template.
	AssessmentRunName *string `locationName:"assessmentRunName" min:"1" type:"string"`

	// The ARN of the assessment template of the assessment run that you want to
	// start.
	AssessmentTemplateArn *string `locationName:"assessmentTemplateArn" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

	// The ARN of the assessment run that has been started.
	AssessmentRunArn *string `locationName:"assessmentRunArn" min:"1" type:"string" required:"true"`
}

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

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

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

	// The ARN of the assessment run that you want to stop.
	AssessmentRunArn *string `locationName:"assessmentRunArn" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

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

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

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

	// The event for which you want to receive SNS notifications.
	Event *string `locationName:"event" type:"string" required:"true" enum:"Event"`

	// The ARN of the assessment template that is used during the event for which
	// you want to receive SNS notifications.
	ResourceArn *string `locationName:"resourceArn" min:"1" type:"string" required:"true"`

	// The ARN of the SNS topic to which the SNS notifications are sent.
	TopicArn *string `locationName:"topicArn" min:"1" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *SubscribeToEventInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SubscribeToEventInput"}
	if s.Event == nil {
		invalidParams.Add(request.NewErrParamRequired("Event"))
	}
	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.TopicArn == nil {
		invalidParams.Add(request.NewErrParamRequired("TopicArn"))
	}
	if s.TopicArn != nil && len(*s.TopicArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TopicArn", 1))
	}

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

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

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

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

// This data type is used as a response element in the ListEventSubscriptions
// action.
type Subscription struct {
	_ struct{} `type:"structure"`

	// The list of existing event subscriptions.
	EventSubscriptions []*EventSubscription `locationName:"eventSubscriptions" min:"1" type:"list" required:"true"`

	// The ARN of the assessment template that is used during the event for which
	// the SNS notification is sent.
	ResourceArn *string `locationName:"resourceArn" min:"1" type:"string" required:"true"`

	// The ARN of the Amazon Simple Notification Service (SNS) topic to which the
	// SNS notifications are sent.
	TopicArn *string `locationName:"topicArn" min:"1" type:"string" required:"true"`
}

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

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

// A key and value pair. This data type is used as a request parameter in the
// SetTagsForResource action and a response element in the ListTagsForResource
// action.
type Tag struct {
	_ struct{} `type:"structure"`

	// A tag key.
	Key *string `locationName:"key" min:"1" type:"string" required:"true"`

	// A value assigned to a tag key.
	Value *string `locationName:"value" min:"1" type:"string"`
}

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

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

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

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

// The metadata about the Amazon Inspector application data metrics collected
// by the agent. This data type is used as the response element in the GetTelemetryMetadata
// action.
type TelemetryMetadata struct {
	_ struct{} `type:"structure"`

	// The count of messages that the agent sends to the Amazon Inspector service.
	Count *int64 `locationName:"count" type:"long" required:"true"`

	// The data size of messages that the agent sends to the Amazon Inspector service.
	DataSize *int64 `locationName:"dataSize" type:"long"`

	// A specific type of behavioral data that is collected by the agent.
	MessageType *string `locationName:"messageType" min:"1" type:"string" required:"true"`
}

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

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

// This data type is used in the AssessmentRunFilter data type.
type TimestampRange struct {
	_ struct{} `type:"structure"`

	// The minimum value of the timestamp range.
	BeginDate *time.Time `locationName:"beginDate" type:"timestamp" timestampFormat:"unix"`

	// The maximum value of the timestamp range.
	EndDate *time.Time `locationName:"endDate" type:"timestamp" timestampFormat:"unix"`
}

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

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

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

	// The event for which you want to stop receiving SNS notifications.
	Event *string `locationName:"event" type:"string" required:"true" enum:"Event"`

	// The ARN of the assessment template that is used during the event for which
	// you want to stop receiving SNS notifications.
	ResourceArn *string `locationName:"resourceArn" min:"1" type:"string" required:"true"`

	// The ARN of the SNS topic to which SNS notifications are sent.
	TopicArn *string `locationName:"topicArn" min:"1" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *UnsubscribeFromEventInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UnsubscribeFromEventInput"}
	if s.Event == nil {
		invalidParams.Add(request.NewErrParamRequired("Event"))
	}
	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.TopicArn == nil {
		invalidParams.Add(request.NewErrParamRequired("TopicArn"))
	}
	if s.TopicArn != nil && len(*s.TopicArn) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TopicArn", 1))
	}

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

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

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

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

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

	// The ARN of the assessment target that you want to update.
	AssessmentTargetArn *string `locationName:"assessmentTargetArn" min:"1" type:"string" required:"true"`

	// The name of the assessment target that you want to update.
	AssessmentTargetName *string `locationName:"assessmentTargetName" min:"1" type:"string" required:"true"`

	// The ARN of the resource group that is used to specify the new resource group
	// to associate with the assessment target.
	ResourceGroupArn *string `locationName:"resourceGroupArn" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

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

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

const (
	// @enum AccessDeniedErrorCode
	AccessDeniedErrorCodeAccessDeniedToAssessmentTarget = "ACCESS_DENIED_TO_ASSESSMENT_TARGET"
	// @enum AccessDeniedErrorCode
	AccessDeniedErrorCodeAccessDeniedToAssessmentTemplate = "ACCESS_DENIED_TO_ASSESSMENT_TEMPLATE"
	// @enum AccessDeniedErrorCode
	AccessDeniedErrorCodeAccessDeniedToAssessmentRun = "ACCESS_DENIED_TO_ASSESSMENT_RUN"
	// @enum AccessDeniedErrorCode
	AccessDeniedErrorCodeAccessDeniedToFinding = "ACCESS_DENIED_TO_FINDING"
	// @enum AccessDeniedErrorCode
	AccessDeniedErrorCodeAccessDeniedToResourceGroup = "ACCESS_DENIED_TO_RESOURCE_GROUP"
	// @enum AccessDeniedErrorCode
	AccessDeniedErrorCodeAccessDeniedToRulesPackage = "ACCESS_DENIED_TO_RULES_PACKAGE"
	// @enum AccessDeniedErrorCode
	AccessDeniedErrorCodeAccessDeniedToSnsTopic = "ACCESS_DENIED_TO_SNS_TOPIC"
	// @enum AccessDeniedErrorCode
	AccessDeniedErrorCodeAccessDeniedToIamRole = "ACCESS_DENIED_TO_IAM_ROLE"
)

const (
	// @enum AgentHealth
	AgentHealthHealthy = "HEALTHY"
	// @enum AgentHealth
	AgentHealthUnhealthy = "UNHEALTHY"
)

const (
	// @enum AgentHealthCode
	AgentHealthCodeIdle = "IDLE"
	// @enum AgentHealthCode
	AgentHealthCodeRunning = "RUNNING"
	// @enum AgentHealthCode
	AgentHealthCodeShutdown = "SHUTDOWN"
	// @enum AgentHealthCode
	AgentHealthCodeUnhealthy = "UNHEALTHY"
	// @enum AgentHealthCode
	AgentHealthCodeThrottled = "THROTTLED"
	// @enum AgentHealthCode
	AgentHealthCodeUnknown = "UNKNOWN"
)

const (
	// @enum AssessmentRunNotificationSnsStatusCode
	AssessmentRunNotificationSnsStatusCodeSuccess = "SUCCESS"
	// @enum AssessmentRunNotificationSnsStatusCode
	AssessmentRunNotificationSnsStatusCodeTopicDoesNotExist = "TOPIC_DOES_NOT_EXIST"
	// @enum AssessmentRunNotificationSnsStatusCode
	AssessmentRunNotificationSnsStatusCodeAccessDenied = "ACCESS_DENIED"
	// @enum AssessmentRunNotificationSnsStatusCode
	AssessmentRunNotificationSnsStatusCodeInternalError = "INTERNAL_ERROR"
)

const (
	// @enum AssessmentRunState
	AssessmentRunStateCreated = "CREATED"
	// @enum AssessmentRunState
	AssessmentRunStateStartDataCollectionPending = "START_DATA_COLLECTION_PENDING"
	// @enum AssessmentRunState
	AssessmentRunStateStartDataCollectionInProgress = "START_DATA_COLLECTION_IN_PROGRESS"
	// @enum AssessmentRunState
	AssessmentRunStateCollectingData = "COLLECTING_DATA"
	// @enum AssessmentRunState
	AssessmentRunStateStopDataCollectionPending = "STOP_DATA_COLLECTION_PENDING"
	// @enum AssessmentRunState
	AssessmentRunStateDataCollected = "DATA_COLLECTED"
	// @enum AssessmentRunState
	AssessmentRunStateEvaluatingRules = "EVALUATING_RULES"
	// @enum AssessmentRunState
	AssessmentRunStateFailed = "FAILED"
	// @enum AssessmentRunState
	AssessmentRunStateCompleted = "COMPLETED"
	// @enum AssessmentRunState
	AssessmentRunStateCompletedWithErrors = "COMPLETED_WITH_ERRORS"
)

const (
	// @enum AssetType
	AssetTypeEc2Instance = "ec2-instance"
)

const (
	// @enum Event
	EventAssessmentRunStarted = "ASSESSMENT_RUN_STARTED"
	// @enum Event
	EventAssessmentRunCompleted = "ASSESSMENT_RUN_COMPLETED"
	// @enum Event
	EventAssessmentRunStateChanged = "ASSESSMENT_RUN_STATE_CHANGED"
	// @enum Event
	EventFindingReported = "FINDING_REPORTED"
	// @enum Event
	EventOther = "OTHER"
)

const (
	// @enum FailedItemErrorCode
	FailedItemErrorCodeInvalidArn = "INVALID_ARN"
	// @enum FailedItemErrorCode
	FailedItemErrorCodeDuplicateArn = "DUPLICATE_ARN"
	// @enum FailedItemErrorCode
	FailedItemErrorCodeItemDoesNotExist = "ITEM_DOES_NOT_EXIST"
	// @enum FailedItemErrorCode
	FailedItemErrorCodeAccessDenied = "ACCESS_DENIED"
	// @enum FailedItemErrorCode
	FailedItemErrorCodeLimitExceeded = "LIMIT_EXCEEDED"
	// @enum FailedItemErrorCode
	FailedItemErrorCodeInternalError = "INTERNAL_ERROR"
)

const (
	// @enum InvalidCrossAccountRoleErrorCode
	InvalidCrossAccountRoleErrorCodeRoleDoesNotExistOrInvalidTrustRelationship = "ROLE_DOES_NOT_EXIST_OR_INVALID_TRUST_RELATIONSHIP"
	// @enum InvalidCrossAccountRoleErrorCode
	InvalidCrossAccountRoleErrorCodeRoleDoesNotHaveCorrectPolicy = "ROLE_DOES_NOT_HAVE_CORRECT_POLICY"
)

const (
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentTargetArn = "INVALID_ASSESSMENT_TARGET_ARN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentTemplateArn = "INVALID_ASSESSMENT_TEMPLATE_ARN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentRunArn = "INVALID_ASSESSMENT_RUN_ARN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidFindingArn = "INVALID_FINDING_ARN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidResourceGroupArn = "INVALID_RESOURCE_GROUP_ARN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidRulesPackageArn = "INVALID_RULES_PACKAGE_ARN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidResourceArn = "INVALID_RESOURCE_ARN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidSnsTopicArn = "INVALID_SNS_TOPIC_ARN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidIamRoleArn = "INVALID_IAM_ROLE_ARN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentTargetName = "INVALID_ASSESSMENT_TARGET_NAME"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentTargetNamePattern = "INVALID_ASSESSMENT_TARGET_NAME_PATTERN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentTemplateName = "INVALID_ASSESSMENT_TEMPLATE_NAME"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentTemplateNamePattern = "INVALID_ASSESSMENT_TEMPLATE_NAME_PATTERN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentTemplateDuration = "INVALID_ASSESSMENT_TEMPLATE_DURATION"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentTemplateDurationRange = "INVALID_ASSESSMENT_TEMPLATE_DURATION_RANGE"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentRunDurationRange = "INVALID_ASSESSMENT_RUN_DURATION_RANGE"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentRunStartTimeRange = "INVALID_ASSESSMENT_RUN_START_TIME_RANGE"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentRunCompletionTimeRange = "INVALID_ASSESSMENT_RUN_COMPLETION_TIME_RANGE"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentRunStateChangeTimeRange = "INVALID_ASSESSMENT_RUN_STATE_CHANGE_TIME_RANGE"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAssessmentRunState = "INVALID_ASSESSMENT_RUN_STATE"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidTag = "INVALID_TAG"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidTagKey = "INVALID_TAG_KEY"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidTagValue = "INVALID_TAG_VALUE"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidResourceGroupTagKey = "INVALID_RESOURCE_GROUP_TAG_KEY"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidResourceGroupTagValue = "INVALID_RESOURCE_GROUP_TAG_VALUE"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAttribute = "INVALID_ATTRIBUTE"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidUserAttribute = "INVALID_USER_ATTRIBUTE"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidUserAttributeKey = "INVALID_USER_ATTRIBUTE_KEY"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidUserAttributeValue = "INVALID_USER_ATTRIBUTE_VALUE"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidPaginationToken = "INVALID_PAGINATION_TOKEN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidMaxResults = "INVALID_MAX_RESULTS"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAgentId = "INVALID_AGENT_ID"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidAutoScalingGroup = "INVALID_AUTO_SCALING_GROUP"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidRuleName = "INVALID_RULE_NAME"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidSeverity = "INVALID_SEVERITY"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidLocale = "INVALID_LOCALE"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidEvent = "INVALID_EVENT"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeAssessmentTargetNameAlreadyTaken = "ASSESSMENT_TARGET_NAME_ALREADY_TAKEN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeAssessmentTemplateNameAlreadyTaken = "ASSESSMENT_TEMPLATE_NAME_ALREADY_TAKEN"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfAssessmentTargetArns = "INVALID_NUMBER_OF_ASSESSMENT_TARGET_ARNS"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfAssessmentTemplateArns = "INVALID_NUMBER_OF_ASSESSMENT_TEMPLATE_ARNS"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfAssessmentRunArns = "INVALID_NUMBER_OF_ASSESSMENT_RUN_ARNS"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfFindingArns = "INVALID_NUMBER_OF_FINDING_ARNS"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfResourceGroupArns = "INVALID_NUMBER_OF_RESOURCE_GROUP_ARNS"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfRulesPackageArns = "INVALID_NUMBER_OF_RULES_PACKAGE_ARNS"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfAssessmentRunStates = "INVALID_NUMBER_OF_ASSESSMENT_RUN_STATES"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfTags = "INVALID_NUMBER_OF_TAGS"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfResourceGroupTags = "INVALID_NUMBER_OF_RESOURCE_GROUP_TAGS"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfAttributes = "INVALID_NUMBER_OF_ATTRIBUTES"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfUserAttributes = "INVALID_NUMBER_OF_USER_ATTRIBUTES"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfAgentIds = "INVALID_NUMBER_OF_AGENT_IDS"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfAutoScalingGroups = "INVALID_NUMBER_OF_AUTO_SCALING_GROUPS"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfRuleNames = "INVALID_NUMBER_OF_RULE_NAMES"
	// @enum InvalidInputErrorCode
	InvalidInputErrorCodeInvalidNumberOfSeverities = "INVALID_NUMBER_OF_SEVERITIES"
)

const (
	// @enum LimitExceededErrorCode
	LimitExceededErrorCodeAssessmentTargetLimitExceeded = "ASSESSMENT_TARGET_LIMIT_EXCEEDED"
	// @enum LimitExceededErrorCode
	LimitExceededErrorCodeAssessmentTemplateLimitExceeded = "ASSESSMENT_TEMPLATE_LIMIT_EXCEEDED"
	// @enum LimitExceededErrorCode
	LimitExceededErrorCodeAssessmentRunLimitExceeded = "ASSESSMENT_RUN_LIMIT_EXCEEDED"
	// @enum LimitExceededErrorCode
	LimitExceededErrorCodeResourceGroupLimitExceeded = "RESOURCE_GROUP_LIMIT_EXCEEDED"
	// @enum LimitExceededErrorCode
	LimitExceededErrorCodeEventSubscriptionLimitExceeded = "EVENT_SUBSCRIPTION_LIMIT_EXCEEDED"
)

const (
	// @enum Locale
	LocaleEnUs = "EN_US"
)

const (
	// @enum NoSuchEntityErrorCode
	NoSuchEntityErrorCodeAssessmentTargetDoesNotExist = "ASSESSMENT_TARGET_DOES_NOT_EXIST"
	// @enum NoSuchEntityErrorCode
	NoSuchEntityErrorCodeAssessmentTemplateDoesNotExist = "ASSESSMENT_TEMPLATE_DOES_NOT_EXIST"
	// @enum NoSuchEntityErrorCode
	NoSuchEntityErrorCodeAssessmentRunDoesNotExist = "ASSESSMENT_RUN_DOES_NOT_EXIST"
	// @enum NoSuchEntityErrorCode
	NoSuchEntityErrorCodeFindingDoesNotExist = "FINDING_DOES_NOT_EXIST"
	// @enum NoSuchEntityErrorCode
	NoSuchEntityErrorCodeResourceGroupDoesNotExist = "RESOURCE_GROUP_DOES_NOT_EXIST"
	// @enum NoSuchEntityErrorCode
	NoSuchEntityErrorCodeRulesPackageDoesNotExist = "RULES_PACKAGE_DOES_NOT_EXIST"
	// @enum NoSuchEntityErrorCode
	NoSuchEntityErrorCodeSnsTopicDoesNotExist = "SNS_TOPIC_DOES_NOT_EXIST"
	// @enum NoSuchEntityErrorCode
	NoSuchEntityErrorCodeIamRoleDoesNotExist = "IAM_ROLE_DOES_NOT_EXIST"
)

const (
	// @enum Severity
	SeverityLow = "Low"
	// @enum Severity
	SeverityMedium = "Medium"
	// @enum Severity
	SeverityHigh = "High"
	// @enum Severity
	SeverityInformational = "Informational"
	// @enum Severity
	SeverityUndefined = "Undefined"
)
