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

package backup

import (
	"fmt"
	"time"

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

const opCreateBackupPlan = "CreateBackupPlan"

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

	if input == nil {
		input = &CreateBackupPlanInput{}
	}

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

// CreateBackupPlan API operation for AWS Backup.
//
// Creates a backup plan using a backup plan name and backup rules. A backup
// plan is a document that contains information that AWS Backup uses to schedule
// tasks that create recovery points for resources.
//
// If you call CreateBackupPlan with a plan that already exists, an AlreadyExistsException
// is returned.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation CreateBackupPlan for usage and error information.
//
// Returned Error Types:
//   * LimitExceededException
//   A limit in the request has been exceeded; for example, a maximum number of
//   items allowed in a request.
//
//   * AlreadyExistsException
//   The required resource already exists.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/CreateBackupPlan
func (c *Backup) CreateBackupPlan(input *CreateBackupPlanInput) (*CreateBackupPlanOutput, error) {
	req, out := c.CreateBackupPlanRequest(input)
	return out, req.Send()
}

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

const opCreateBackupSelection = "CreateBackupSelection"

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

	if input == nil {
		input = &CreateBackupSelectionInput{}
	}

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

// CreateBackupSelection API operation for AWS Backup.
//
// Creates a JSON document that specifies a set of resources to assign to a
// backup plan. Resources can be included by specifying patterns for a ListOfTags
// and selected Resources.
//
// For example, consider the following patterns:
//
//    * Resources: "arn:aws:ec2:region:account-id:volume/volume-id"
//
//    * ConditionKey:"department" ConditionValue:"finance" ConditionType:"StringEquals"
//
//    * ConditionKey:"importance" ConditionValue:"critical" ConditionType:"StringEquals"
//
// Using these patterns would back up all Amazon Elastic Block Store (Amazon
// EBS) volumes that are tagged as "department=finance", "importance=critical",
// in addition to an EBS volume with the specified volume ID.
//
// Resources and conditions are additive in that all resources that match the
// pattern are selected. This shouldn't be confused with a logical AND, where
// all conditions must match. The matching patterns are logically put together
// using the OR operator. In other words, all patterns that match are selected
// for backup.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation CreateBackupSelection for usage and error information.
//
// Returned Error Types:
//   * LimitExceededException
//   A limit in the request has been exceeded; for example, a maximum number of
//   items allowed in a request.
//
//   * AlreadyExistsException
//   The required resource already exists.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/CreateBackupSelection
func (c *Backup) CreateBackupSelection(input *CreateBackupSelectionInput) (*CreateBackupSelectionOutput, error) {
	req, out := c.CreateBackupSelectionRequest(input)
	return out, req.Send()
}

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

const opCreateBackupVault = "CreateBackupVault"

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

	if input == nil {
		input = &CreateBackupVaultInput{}
	}

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

// CreateBackupVault API operation for AWS Backup.
//
// Creates a logical container where backups are stored. A CreateBackupVault
// request includes a name, optionally one or more resource tags, an encryption
// key, and a request ID.
//
// Sensitive data, such as passport numbers, should not be included the name
// of a backup vault.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation CreateBackupVault for usage and error information.
//
// Returned Error Types:
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * LimitExceededException
//   A limit in the request has been exceeded; for example, a maximum number of
//   items allowed in a request.
//
//   * AlreadyExistsException
//   The required resource already exists.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/CreateBackupVault
func (c *Backup) CreateBackupVault(input *CreateBackupVaultInput) (*CreateBackupVaultOutput, error) {
	req, out := c.CreateBackupVaultRequest(input)
	return out, req.Send()
}

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

const opDeleteBackupPlan = "DeleteBackupPlan"

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

	if input == nil {
		input = &DeleteBackupPlanInput{}
	}

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

// DeleteBackupPlan API operation for AWS Backup.
//
// Deletes a backup plan. A backup plan can only be deleted after all associated
// selections of resources have been deleted. Deleting a backup plan deletes
// the current version of a backup plan. Previous versions, if any, will still
// exist.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DeleteBackupPlan for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * InvalidRequestException
//   Indicates that something is wrong with the input to the request. For example,
//   a parameter is of the wrong type.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DeleteBackupPlan
func (c *Backup) DeleteBackupPlan(input *DeleteBackupPlanInput) (*DeleteBackupPlanOutput, error) {
	req, out := c.DeleteBackupPlanRequest(input)
	return out, req.Send()
}

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

const opDeleteBackupSelection = "DeleteBackupSelection"

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

	if input == nil {
		input = &DeleteBackupSelectionInput{}
	}

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

// DeleteBackupSelection API operation for AWS Backup.
//
// Deletes the resource selection associated with a backup plan that is specified
// by the SelectionId.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DeleteBackupSelection for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DeleteBackupSelection
func (c *Backup) DeleteBackupSelection(input *DeleteBackupSelectionInput) (*DeleteBackupSelectionOutput, error) {
	req, out := c.DeleteBackupSelectionRequest(input)
	return out, req.Send()
}

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

const opDeleteBackupVault = "DeleteBackupVault"

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

	if input == nil {
		input = &DeleteBackupVaultInput{}
	}

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

// DeleteBackupVault API operation for AWS Backup.
//
// Deletes the backup vault identified by its name. A vault can be deleted only
// if it is empty.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DeleteBackupVault for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * InvalidRequestException
//   Indicates that something is wrong with the input to the request. For example,
//   a parameter is of the wrong type.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DeleteBackupVault
func (c *Backup) DeleteBackupVault(input *DeleteBackupVaultInput) (*DeleteBackupVaultOutput, error) {
	req, out := c.DeleteBackupVaultRequest(input)
	return out, req.Send()
}

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

const opDeleteBackupVaultAccessPolicy = "DeleteBackupVaultAccessPolicy"

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

	if input == nil {
		input = &DeleteBackupVaultAccessPolicyInput{}
	}

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

// DeleteBackupVaultAccessPolicy API operation for AWS Backup.
//
// Deletes the policy document that manages permissions on a backup vault.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DeleteBackupVaultAccessPolicy for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DeleteBackupVaultAccessPolicy
func (c *Backup) DeleteBackupVaultAccessPolicy(input *DeleteBackupVaultAccessPolicyInput) (*DeleteBackupVaultAccessPolicyOutput, error) {
	req, out := c.DeleteBackupVaultAccessPolicyRequest(input)
	return out, req.Send()
}

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

const opDeleteBackupVaultNotifications = "DeleteBackupVaultNotifications"

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

	if input == nil {
		input = &DeleteBackupVaultNotificationsInput{}
	}

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

// DeleteBackupVaultNotifications API operation for AWS Backup.
//
// Deletes event notifications for the specified backup vault.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DeleteBackupVaultNotifications for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DeleteBackupVaultNotifications
func (c *Backup) DeleteBackupVaultNotifications(input *DeleteBackupVaultNotificationsInput) (*DeleteBackupVaultNotificationsOutput, error) {
	req, out := c.DeleteBackupVaultNotificationsRequest(input)
	return out, req.Send()
}

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

const opDeleteRecoveryPoint = "DeleteRecoveryPoint"

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

	if input == nil {
		input = &DeleteRecoveryPointInput{}
	}

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

// DeleteRecoveryPoint API operation for AWS Backup.
//
// Deletes the recovery point specified by a recovery point ID.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DeleteRecoveryPoint for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * InvalidRequestException
//   Indicates that something is wrong with the input to the request. For example,
//   a parameter is of the wrong type.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DeleteRecoveryPoint
func (c *Backup) DeleteRecoveryPoint(input *DeleteRecoveryPointInput) (*DeleteRecoveryPointOutput, error) {
	req, out := c.DeleteRecoveryPointRequest(input)
	return out, req.Send()
}

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

const opDescribeBackupJob = "DescribeBackupJob"

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

	if input == nil {
		input = &DescribeBackupJobInput{}
	}

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

// DescribeBackupJob API operation for AWS Backup.
//
// Returns backup job details for the specified BackupJobId.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DescribeBackupJob for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * DependencyFailureException
//   A dependent AWS service or resource returned an error to the AWS Backup service,
//   and the action cannot be completed.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DescribeBackupJob
func (c *Backup) DescribeBackupJob(input *DescribeBackupJobInput) (*DescribeBackupJobOutput, error) {
	req, out := c.DescribeBackupJobRequest(input)
	return out, req.Send()
}

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

const opDescribeBackupVault = "DescribeBackupVault"

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

	if input == nil {
		input = &DescribeBackupVaultInput{}
	}

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

// DescribeBackupVault API operation for AWS Backup.
//
// Returns metadata about a backup vault specified by its name.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DescribeBackupVault for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DescribeBackupVault
func (c *Backup) DescribeBackupVault(input *DescribeBackupVaultInput) (*DescribeBackupVaultOutput, error) {
	req, out := c.DescribeBackupVaultRequest(input)
	return out, req.Send()
}

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

const opDescribeCopyJob = "DescribeCopyJob"

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

	if input == nil {
		input = &DescribeCopyJobInput{}
	}

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

// DescribeCopyJob API operation for AWS Backup.
//
// Returns metadata associated with creating a copy of a resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DescribeCopyJob for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DescribeCopyJob
func (c *Backup) DescribeCopyJob(input *DescribeCopyJobInput) (*DescribeCopyJobOutput, error) {
	req, out := c.DescribeCopyJobRequest(input)
	return out, req.Send()
}

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

const opDescribeGlobalSettings = "DescribeGlobalSettings"

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

	if input == nil {
		input = &DescribeGlobalSettingsInput{}
	}

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

// DescribeGlobalSettings API operation for AWS Backup.
//
// Describes the global settings of the AWS account, including whether it is
// opted in to cross-account backup.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DescribeGlobalSettings for usage and error information.
//
// Returned Error Types:
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DescribeGlobalSettings
func (c *Backup) DescribeGlobalSettings(input *DescribeGlobalSettingsInput) (*DescribeGlobalSettingsOutput, error) {
	req, out := c.DescribeGlobalSettingsRequest(input)
	return out, req.Send()
}

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

const opDescribeProtectedResource = "DescribeProtectedResource"

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

	if input == nil {
		input = &DescribeProtectedResourceInput{}
	}

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

// DescribeProtectedResource API operation for AWS Backup.
//
// Returns information about a saved resource, including the last time it was
// backed up, its Amazon Resource Name (ARN), and the AWS service type of the
// saved resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DescribeProtectedResource for usage and error information.
//
// Returned Error Types:
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DescribeProtectedResource
func (c *Backup) DescribeProtectedResource(input *DescribeProtectedResourceInput) (*DescribeProtectedResourceOutput, error) {
	req, out := c.DescribeProtectedResourceRequest(input)
	return out, req.Send()
}

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

const opDescribeRecoveryPoint = "DescribeRecoveryPoint"

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

	if input == nil {
		input = &DescribeRecoveryPointInput{}
	}

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

// DescribeRecoveryPoint API operation for AWS Backup.
//
// Returns metadata associated with a recovery point, including ID, status,
// encryption, and lifecycle.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DescribeRecoveryPoint for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DescribeRecoveryPoint
func (c *Backup) DescribeRecoveryPoint(input *DescribeRecoveryPointInput) (*DescribeRecoveryPointOutput, error) {
	req, out := c.DescribeRecoveryPointRequest(input)
	return out, req.Send()
}

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

const opDescribeRegionSettings = "DescribeRegionSettings"

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

	if input == nil {
		input = &DescribeRegionSettingsInput{}
	}

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

// DescribeRegionSettings API operation for AWS Backup.
//
// Returns the current service opt-in settings for the Region. If service-opt-in
// is enabled for a service, AWS Backup tries to protect that service's resources
// in this Region, when the resource is included in an on-demand backup or scheduled
// backup plan. Otherwise, AWS Backup does not try to protect that service's
// resources in this Region, AWS Backup does not try to protect that service's
// resources in this Region.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DescribeRegionSettings for usage and error information.
//
// Returned Error Types:
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DescribeRegionSettings
func (c *Backup) DescribeRegionSettings(input *DescribeRegionSettingsInput) (*DescribeRegionSettingsOutput, error) {
	req, out := c.DescribeRegionSettingsRequest(input)
	return out, req.Send()
}

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

const opDescribeRestoreJob = "DescribeRestoreJob"

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

	if input == nil {
		input = &DescribeRestoreJobInput{}
	}

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

// DescribeRestoreJob API operation for AWS Backup.
//
// Returns metadata associated with a restore job that is specified by a job
// ID.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation DescribeRestoreJob for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * DependencyFailureException
//   A dependent AWS service or resource returned an error to the AWS Backup service,
//   and the action cannot be completed.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/DescribeRestoreJob
func (c *Backup) DescribeRestoreJob(input *DescribeRestoreJobInput) (*DescribeRestoreJobOutput, error) {
	req, out := c.DescribeRestoreJobRequest(input)
	return out, req.Send()
}

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

const opExportBackupPlanTemplate = "ExportBackupPlanTemplate"

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

	if input == nil {
		input = &ExportBackupPlanTemplateInput{}
	}

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

// ExportBackupPlanTemplate API operation for AWS Backup.
//
// Returns the backup plan that is specified by the plan ID as a backup template.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation ExportBackupPlanTemplate for usage and error information.
//
// Returned Error Types:
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/ExportBackupPlanTemplate
func (c *Backup) ExportBackupPlanTemplate(input *ExportBackupPlanTemplateInput) (*ExportBackupPlanTemplateOutput, error) {
	req, out := c.ExportBackupPlanTemplateRequest(input)
	return out, req.Send()
}

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

const opGetBackupPlan = "GetBackupPlan"

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

	if input == nil {
		input = &GetBackupPlanInput{}
	}

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

// GetBackupPlan API operation for AWS Backup.
//
// Returns BackupPlan details for the specified BackupPlanId. Returns the body
// of a backup plan in JSON format, in addition to plan metadata.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation GetBackupPlan for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/GetBackupPlan
func (c *Backup) GetBackupPlan(input *GetBackupPlanInput) (*GetBackupPlanOutput, error) {
	req, out := c.GetBackupPlanRequest(input)
	return out, req.Send()
}

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

const opGetBackupPlanFromJSON = "GetBackupPlanFromJSON"

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

	if input == nil {
		input = &GetBackupPlanFromJSONInput{}
	}

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

// GetBackupPlanFromJSON API operation for AWS Backup.
//
// Returns a valid JSON document specifying a backup plan or an error.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation GetBackupPlanFromJSON for usage and error information.
//
// Returned Error Types:
//   * LimitExceededException
//   A limit in the request has been exceeded; for example, a maximum number of
//   items allowed in a request.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * InvalidRequestException
//   Indicates that something is wrong with the input to the request. For example,
//   a parameter is of the wrong type.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/GetBackupPlanFromJSON
func (c *Backup) GetBackupPlanFromJSON(input *GetBackupPlanFromJSONInput) (*GetBackupPlanFromJSONOutput, error) {
	req, out := c.GetBackupPlanFromJSONRequest(input)
	return out, req.Send()
}

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

const opGetBackupPlanFromTemplate = "GetBackupPlanFromTemplate"

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

	if input == nil {
		input = &GetBackupPlanFromTemplateInput{}
	}

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

// GetBackupPlanFromTemplate API operation for AWS Backup.
//
// Returns the template specified by its templateId as a backup plan.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation GetBackupPlanFromTemplate for usage and error information.
//
// Returned Error Types:
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/GetBackupPlanFromTemplate
func (c *Backup) GetBackupPlanFromTemplate(input *GetBackupPlanFromTemplateInput) (*GetBackupPlanFromTemplateOutput, error) {
	req, out := c.GetBackupPlanFromTemplateRequest(input)
	return out, req.Send()
}

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

const opGetBackupSelection = "GetBackupSelection"

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

	if input == nil {
		input = &GetBackupSelectionInput{}
	}

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

// GetBackupSelection API operation for AWS Backup.
//
// Returns selection metadata and a document in JSON format that specifies a
// list of resources that are associated with a backup plan.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation GetBackupSelection for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/GetBackupSelection
func (c *Backup) GetBackupSelection(input *GetBackupSelectionInput) (*GetBackupSelectionOutput, error) {
	req, out := c.GetBackupSelectionRequest(input)
	return out, req.Send()
}

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

const opGetBackupVaultAccessPolicy = "GetBackupVaultAccessPolicy"

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

	if input == nil {
		input = &GetBackupVaultAccessPolicyInput{}
	}

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

// GetBackupVaultAccessPolicy API operation for AWS Backup.
//
// Returns the access policy document that is associated with the named backup
// vault.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation GetBackupVaultAccessPolicy for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/GetBackupVaultAccessPolicy
func (c *Backup) GetBackupVaultAccessPolicy(input *GetBackupVaultAccessPolicyInput) (*GetBackupVaultAccessPolicyOutput, error) {
	req, out := c.GetBackupVaultAccessPolicyRequest(input)
	return out, req.Send()
}

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

const opGetBackupVaultNotifications = "GetBackupVaultNotifications"

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

	if input == nil {
		input = &GetBackupVaultNotificationsInput{}
	}

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

// GetBackupVaultNotifications API operation for AWS Backup.
//
// Returns event notifications for the specified backup vault.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation GetBackupVaultNotifications for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/GetBackupVaultNotifications
func (c *Backup) GetBackupVaultNotifications(input *GetBackupVaultNotificationsInput) (*GetBackupVaultNotificationsOutput, error) {
	req, out := c.GetBackupVaultNotificationsRequest(input)
	return out, req.Send()
}

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

const opGetRecoveryPointRestoreMetadata = "GetRecoveryPointRestoreMetadata"

// GetRecoveryPointRestoreMetadataRequest generates a "aws/request.Request" representing the
// client's request for the GetRecoveryPointRestoreMetadata operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GetRecoveryPointRestoreMetadata for more information on using the GetRecoveryPointRestoreMetadata
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//
//    // Example sending a request using the GetRecoveryPointRestoreMetadataRequest method.
//    req, resp := client.GetRecoveryPointRestoreMetadataRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/GetRecoveryPointRestoreMetadata
func (c *Backup) GetRecoveryPointRestoreMetadataRequest(input *GetRecoveryPointRestoreMetadataInput) (req *request.Request, output *GetRecoveryPointRestoreMetadataOutput) {
	op := &request.Operation{
		Name:       opGetRecoveryPointRestoreMetadata,
		HTTPMethod: "GET",
		HTTPPath:   "/backup-vaults/{backupVaultName}/recovery-points/{recoveryPointArn}/restore-metadata",
	}

	if input == nil {
		input = &GetRecoveryPointRestoreMetadataInput{}
	}

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

// GetRecoveryPointRestoreMetadata API operation for AWS Backup.
//
// Returns a set of metadata key-value pairs that were used to create the backup.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation GetRecoveryPointRestoreMetadata for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/GetRecoveryPointRestoreMetadata
func (c *Backup) GetRecoveryPointRestoreMetadata(input *GetRecoveryPointRestoreMetadataInput) (*GetRecoveryPointRestoreMetadataOutput, error) {
	req, out := c.GetRecoveryPointRestoreMetadataRequest(input)
	return out, req.Send()
}

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

const opGetSupportedResourceTypes = "GetSupportedResourceTypes"

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

	if input == nil {
		input = &GetSupportedResourceTypesInput{}
	}

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

// GetSupportedResourceTypes API operation for AWS Backup.
//
// Returns the AWS resource types supported by AWS Backup.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation GetSupportedResourceTypes for usage and error information.
//
// Returned Error Types:
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/GetSupportedResourceTypes
func (c *Backup) GetSupportedResourceTypes(input *GetSupportedResourceTypesInput) (*GetSupportedResourceTypesOutput, error) {
	req, out := c.GetSupportedResourceTypesRequest(input)
	return out, req.Send()
}

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

const opListBackupJobs = "ListBackupJobs"

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

	if input == nil {
		input = &ListBackupJobsInput{}
	}

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

// ListBackupJobs API operation for AWS Backup.
//
// Returns a list of existing backup jobs for an authenticated account.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation ListBackupJobs for usage and error information.
//
// Returned Error Types:
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/ListBackupJobs
func (c *Backup) ListBackupJobs(input *ListBackupJobsInput) (*ListBackupJobsOutput, error) {
	req, out := c.ListBackupJobsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListBackupPlanTemplates = "ListBackupPlanTemplates"

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

	if input == nil {
		input = &ListBackupPlanTemplatesInput{}
	}

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

// ListBackupPlanTemplates API operation for AWS Backup.
//
// Returns metadata of your saved backup plan templates, including the template
// ID, name, and the creation and deletion dates.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation ListBackupPlanTemplates for usage and error information.
//
// Returned Error Types:
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/ListBackupPlanTemplates
func (c *Backup) ListBackupPlanTemplates(input *ListBackupPlanTemplatesInput) (*ListBackupPlanTemplatesOutput, error) {
	req, out := c.ListBackupPlanTemplatesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListBackupPlanVersions = "ListBackupPlanVersions"

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

	if input == nil {
		input = &ListBackupPlanVersionsInput{}
	}

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

// ListBackupPlanVersions API operation for AWS Backup.
//
// Returns version metadata of your backup plans, including Amazon Resource
// Names (ARNs), backup plan IDs, creation and deletion dates, plan names, and
// version IDs.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation ListBackupPlanVersions for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/ListBackupPlanVersions
func (c *Backup) ListBackupPlanVersions(input *ListBackupPlanVersionsInput) (*ListBackupPlanVersionsOutput, error) {
	req, out := c.ListBackupPlanVersionsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListBackupPlans = "ListBackupPlans"

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

	if input == nil {
		input = &ListBackupPlansInput{}
	}

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

// ListBackupPlans API operation for AWS Backup.
//
// Returns a list of existing backup plans for an authenticated account. The
// list is populated only if the advanced option is set for the backup plan.
// The list contains information such as Amazon Resource Names (ARNs), plan
// IDs, creation and deletion dates, version IDs, plan names, and creator request
// IDs.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation ListBackupPlans for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/ListBackupPlans
func (c *Backup) ListBackupPlans(input *ListBackupPlansInput) (*ListBackupPlansOutput, error) {
	req, out := c.ListBackupPlansRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListBackupSelections = "ListBackupSelections"

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

	if input == nil {
		input = &ListBackupSelectionsInput{}
	}

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

// ListBackupSelections API operation for AWS Backup.
//
// Returns an array containing metadata of the resources associated with the
// target backup plan.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation ListBackupSelections for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/ListBackupSelections
func (c *Backup) ListBackupSelections(input *ListBackupSelectionsInput) (*ListBackupSelectionsOutput, error) {
	req, out := c.ListBackupSelectionsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListBackupVaults = "ListBackupVaults"

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

	if input == nil {
		input = &ListBackupVaultsInput{}
	}

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

// ListBackupVaults API operation for AWS Backup.
//
// Returns a list of recovery point storage containers along with information
// about them.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation ListBackupVaults for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/ListBackupVaults
func (c *Backup) ListBackupVaults(input *ListBackupVaultsInput) (*ListBackupVaultsOutput, error) {
	req, out := c.ListBackupVaultsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListCopyJobs = "ListCopyJobs"

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

	if input == nil {
		input = &ListCopyJobsInput{}
	}

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

// ListCopyJobs API operation for AWS Backup.
//
// Returns metadata about your copy jobs.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation ListCopyJobs for usage and error information.
//
// Returned Error Types:
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/ListCopyJobs
func (c *Backup) ListCopyJobs(input *ListCopyJobsInput) (*ListCopyJobsOutput, error) {
	req, out := c.ListCopyJobsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListProtectedResources = "ListProtectedResources"

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

	if input == nil {
		input = &ListProtectedResourcesInput{}
	}

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

// ListProtectedResources API operation for AWS Backup.
//
// Returns an array of resources successfully backed up by AWS Backup, including
// the time the resource was saved, an Amazon Resource Name (ARN) of the resource,
// and a resource type.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation ListProtectedResources for usage and error information.
//
// Returned Error Types:
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/ListProtectedResources
func (c *Backup) ListProtectedResources(input *ListProtectedResourcesInput) (*ListProtectedResourcesOutput, error) {
	req, out := c.ListProtectedResourcesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListRecoveryPointsByBackupVault = "ListRecoveryPointsByBackupVault"

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

	if input == nil {
		input = &ListRecoveryPointsByBackupVaultInput{}
	}

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

// ListRecoveryPointsByBackupVault API operation for AWS Backup.
//
// Returns detailed information about the recovery points stored in a backup
// vault.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation ListRecoveryPointsByBackupVault for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/ListRecoveryPointsByBackupVault
func (c *Backup) ListRecoveryPointsByBackupVault(input *ListRecoveryPointsByBackupVaultInput) (*ListRecoveryPointsByBackupVaultOutput, error) {
	req, out := c.ListRecoveryPointsByBackupVaultRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListRecoveryPointsByResource = "ListRecoveryPointsByResource"

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

	if input == nil {
		input = &ListRecoveryPointsByResourceInput{}
	}

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

// ListRecoveryPointsByResource API operation for AWS Backup.
//
// Returns detailed information about recovery points of the type specified
// by a resource Amazon Resource Name (ARN).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation ListRecoveryPointsByResource for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/ListRecoveryPointsByResource
func (c *Backup) ListRecoveryPointsByResource(input *ListRecoveryPointsByResourceInput) (*ListRecoveryPointsByResourceOutput, error) {
	req, out := c.ListRecoveryPointsByResourceRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListRestoreJobs = "ListRestoreJobs"

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

	if input == nil {
		input = &ListRestoreJobsInput{}
	}

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

// ListRestoreJobs API operation for AWS Backup.
//
// Returns a list of jobs that AWS Backup initiated to restore a saved resource,
// including metadata about the recovery process.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation ListRestoreJobs for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/ListRestoreJobs
func (c *Backup) ListRestoreJobs(input *ListRestoreJobsInput) (*ListRestoreJobsOutput, error) {
	req, out := c.ListRestoreJobsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListTags = "ListTags"

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

	if input == nil {
		input = &ListTagsInput{}
	}

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

// ListTags API operation for AWS Backup.
//
// Returns a list of key-value pairs assigned to a target recovery point, backup
// plan, or backup vault.
//
// ListTags are currently only supported with Amazon EFS backups.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation ListTags for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/ListTags
func (c *Backup) ListTags(input *ListTagsInput) (*ListTagsOutput, error) {
	req, out := c.ListTagsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opPutBackupVaultAccessPolicy = "PutBackupVaultAccessPolicy"

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

	if input == nil {
		input = &PutBackupVaultAccessPolicyInput{}
	}

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

// PutBackupVaultAccessPolicy API operation for AWS Backup.
//
// Sets a resource-based policy that is used to manage access permissions on
// the target backup vault. Requires a backup vault name and an access policy
// document in JSON format.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation PutBackupVaultAccessPolicy for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/PutBackupVaultAccessPolicy
func (c *Backup) PutBackupVaultAccessPolicy(input *PutBackupVaultAccessPolicyInput) (*PutBackupVaultAccessPolicyOutput, error) {
	req, out := c.PutBackupVaultAccessPolicyRequest(input)
	return out, req.Send()
}

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

const opPutBackupVaultNotifications = "PutBackupVaultNotifications"

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

	if input == nil {
		input = &PutBackupVaultNotificationsInput{}
	}

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

// PutBackupVaultNotifications API operation for AWS Backup.
//
// Turns on notifications on a backup vault for the specified topic and events.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation PutBackupVaultNotifications for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/PutBackupVaultNotifications
func (c *Backup) PutBackupVaultNotifications(input *PutBackupVaultNotificationsInput) (*PutBackupVaultNotificationsOutput, error) {
	req, out := c.PutBackupVaultNotificationsRequest(input)
	return out, req.Send()
}

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

const opStartBackupJob = "StartBackupJob"

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

	if input == nil {
		input = &StartBackupJobInput{}
	}

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

// StartBackupJob API operation for AWS Backup.
//
// Starts an on-demand backup job for the specified resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation StartBackupJob for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * InvalidRequestException
//   Indicates that something is wrong with the input to the request. For example,
//   a parameter is of the wrong type.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * LimitExceededException
//   A limit in the request has been exceeded; for example, a maximum number of
//   items allowed in a request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/StartBackupJob
func (c *Backup) StartBackupJob(input *StartBackupJobInput) (*StartBackupJobOutput, error) {
	req, out := c.StartBackupJobRequest(input)
	return out, req.Send()
}

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

const opStartCopyJob = "StartCopyJob"

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

	if input == nil {
		input = &StartCopyJobInput{}
	}

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

// StartCopyJob API operation for AWS Backup.
//
// Starts a job to create a one-time copy of the specified resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation StartCopyJob for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * LimitExceededException
//   A limit in the request has been exceeded; for example, a maximum number of
//   items allowed in a request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/StartCopyJob
func (c *Backup) StartCopyJob(input *StartCopyJobInput) (*StartCopyJobOutput, error) {
	req, out := c.StartCopyJobRequest(input)
	return out, req.Send()
}

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

const opStartRestoreJob = "StartRestoreJob"

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

	if input == nil {
		input = &StartRestoreJobInput{}
	}

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

// StartRestoreJob API operation for AWS Backup.
//
// Recovers the saved resource identified by an Amazon Resource Name (ARN).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation StartRestoreJob for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/StartRestoreJob
func (c *Backup) StartRestoreJob(input *StartRestoreJobInput) (*StartRestoreJobOutput, error) {
	req, out := c.StartRestoreJobRequest(input)
	return out, req.Send()
}

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

const opStopBackupJob = "StopBackupJob"

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

	if input == nil {
		input = &StopBackupJobInput{}
	}

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

// StopBackupJob API operation for AWS Backup.
//
// Attempts to cancel a job to create a one-time backup of a resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation StopBackupJob for usage and error information.
//
// Returned Error Types:
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * InvalidRequestException
//   Indicates that something is wrong with the input to the request. For example,
//   a parameter is of the wrong type.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/StopBackupJob
func (c *Backup) StopBackupJob(input *StopBackupJobInput) (*StopBackupJobOutput, error) {
	req, out := c.StopBackupJobRequest(input)
	return out, req.Send()
}

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

const opTagResource = "TagResource"

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

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

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

// TagResource API operation for AWS Backup.
//
// Assigns a set of key-value pairs to a recovery point, backup plan, or backup
// vault identified by an Amazon Resource Name (ARN).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * LimitExceededException
//   A limit in the request has been exceeded; for example, a maximum number of
//   items allowed in a request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/TagResource
func (c *Backup) TagResource(input *TagResourceInput) (*TagResourceOutput, error) {
	req, out := c.TagResourceRequest(input)
	return out, req.Send()
}

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

const opUntagResource = "UntagResource"

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

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

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

// UntagResource API operation for AWS Backup.
//
// Removes a set of key-value pairs from a recovery point, backup plan, or backup
// vault identified by an Amazon Resource Name (ARN)
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/UntagResource
func (c *Backup) UntagResource(input *UntagResourceInput) (*UntagResourceOutput, error) {
	req, out := c.UntagResourceRequest(input)
	return out, req.Send()
}

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

const opUpdateBackupPlan = "UpdateBackupPlan"

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

	if input == nil {
		input = &UpdateBackupPlanInput{}
	}

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

// UpdateBackupPlan API operation for AWS Backup.
//
// Updates an existing backup plan identified by its backupPlanId with the input
// document in JSON format. The new version is uniquely identified by a VersionId.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation UpdateBackupPlan for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/UpdateBackupPlan
func (c *Backup) UpdateBackupPlan(input *UpdateBackupPlanInput) (*UpdateBackupPlanOutput, error) {
	req, out := c.UpdateBackupPlanRequest(input)
	return out, req.Send()
}

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

const opUpdateGlobalSettings = "UpdateGlobalSettings"

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

	if input == nil {
		input = &UpdateGlobalSettingsInput{}
	}

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

// UpdateGlobalSettings API operation for AWS Backup.
//
// Updates the current global settings for the AWS account. Use the DescribeGlobalSettings
// API to determine the current settings.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation UpdateGlobalSettings for usage and error information.
//
// Returned Error Types:
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * InvalidRequestException
//   Indicates that something is wrong with the input to the request. For example,
//   a parameter is of the wrong type.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/UpdateGlobalSettings
func (c *Backup) UpdateGlobalSettings(input *UpdateGlobalSettingsInput) (*UpdateGlobalSettingsOutput, error) {
	req, out := c.UpdateGlobalSettingsRequest(input)
	return out, req.Send()
}

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

const opUpdateRecoveryPointLifecycle = "UpdateRecoveryPointLifecycle"

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

	if input == nil {
		input = &UpdateRecoveryPointLifecycleInput{}
	}

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

// UpdateRecoveryPointLifecycle API operation for AWS Backup.
//
// Sets the transition lifecycle of a recovery point.
//
// The lifecycle defines when a protected resource is transitioned to cold storage
// and when it expires. AWS Backup transitions and expires backups automatically
// according to the lifecycle that you define.
//
// Backups transitioned to cold storage must be stored in cold storage for a
// minimum of 90 days. Therefore, the “expire after days” setting must be
// 90 days greater than the “transition to cold after days” setting. The
// “transition to cold after days” setting cannot be changed after a backup
// has been transitioned to cold.
//
// Only Amazon EFS file system backups can be transitioned to cold storage.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation UpdateRecoveryPointLifecycle for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   A resource that is required for the action doesn't exist.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/UpdateRecoveryPointLifecycle
func (c *Backup) UpdateRecoveryPointLifecycle(input *UpdateRecoveryPointLifecycleInput) (*UpdateRecoveryPointLifecycleOutput, error) {
	req, out := c.UpdateRecoveryPointLifecycleRequest(input)
	return out, req.Send()
}

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

const opUpdateRegionSettings = "UpdateRegionSettings"

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

	if input == nil {
		input = &UpdateRegionSettingsInput{}
	}

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

// UpdateRegionSettings API operation for AWS Backup.
//
// Updates the current service opt-in settings for the Region. If service-opt-in
// is enabled for a service, AWS Backup tries to protect that service's resources
// in this Region, when the resource is included in an on-demand backup or scheduled
// backup plan. Otherwise, AWS Backup does not try to protect that service's
// resources in this Region. Use the DescribeRegionSettings API to determine
// the resource types that are supported.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup's
// API operation UpdateRegionSettings for usage and error information.
//
// Returned Error Types:
//   * ServiceUnavailableException
//   The request failed due to a temporary failure of the server.
//
//   * MissingParameterValueException
//   Indicates that a required parameter is missing.
//
//   * InvalidParameterValueException
//   Indicates that something is wrong with a parameter's value. For example,
//   the value is out of range.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-2018-11-15/UpdateRegionSettings
func (c *Backup) UpdateRegionSettings(input *UpdateRegionSettingsInput) (*UpdateRegionSettingsOutput, error) {
	req, out := c.UpdateRegionSettingsRequest(input)
	return out, req.Send()
}

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

// A list of backup options for each resource type.
type AdvancedBackupSetting struct {
	_ struct{} `type:"structure"`

	// Specifies the backup option for a selected resource. This option is only
	// available for Windows VSS backup jobs.
	//
	// Valid values:
	//
	// Set to "WindowsVSS":"enabled" to enable the WindowsVSS backup option and
	// create a VSS Windows backup.
	//
	// Set to "WindowsVSS":"disabled" to create a regular backup. The WindowsVSS
	// option is not enabled by default.
	//
	// If you specify an invalid option, you get an InvalidParameterValueException
	// exception.
	//
	// For more information about Windows VSS backups, see Creating a VSS-Enabled
	// Windows Backup (https://docs.aws.amazon.com/aws-backup/latest/devguide/windows-backups.html).
	BackupOptions map[string]*string `type:"map"`

	// Specifies an object containing resource type and backup options. The only
	// supported resource type is Amazon EC2 instances with Windows VSS. For an
	// CloudFormation example, see the sample CloudFormation template to enable
	// Windows VSS (https://docs.aws.amazon.com/aws-backup/latest/devguide/integrate-cloudformation-with-aws-backup.html)
	// in the AWS Backup User Guide.
	//
	// Valid values: EC2.
	ResourceType *string `type:"string"`
}

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

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

// SetBackupOptions sets the BackupOptions field's value.
func (s *AdvancedBackupSetting) SetBackupOptions(v map[string]*string) *AdvancedBackupSetting {
	s.BackupOptions = v
	return s
}

// SetResourceType sets the ResourceType field's value.
func (s *AdvancedBackupSetting) SetResourceType(v string) *AdvancedBackupSetting {
	s.ResourceType = &v
	return s
}

// The required resource already exists.
type AlreadyExistsException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Arn *string `type:"string"`

	Code_ *string `locationName:"Code" type:"string"`

	Context *string `type:"string"`

	CreatorRequestId *string `type:"string"`

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

	Type *string `type:"string"`
}

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

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

func newErrorAlreadyExistsException(v protocol.ResponseMetadata) error {
	return &AlreadyExistsException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

// Contains DeleteAt and MoveToColdStorageAt timestamps, which are used to specify
// a lifecycle for a recovery point.
//
// The lifecycle defines when a protected resource is transitioned to cold storage
// and when it expires. AWS Backup transitions and expires backups automatically
// according to the lifecycle that you define.
//
// Backups transitioned to cold storage must be stored in cold storage for a
// minimum of 90 days. Therefore, the “expire after days” setting must be
// 90 days greater than the “transition to cold after days” setting. The
// “transition to cold after days” setting cannot be changed after a backup
// has been transitioned to cold.
//
// Only Amazon EFS file system backups can be transitioned to cold storage.
type CalculatedLifecycle struct {
	_ struct{} `type:"structure"`

	// A timestamp that specifies when to delete a recovery point.
	DeleteAt *time.Time `type:"timestamp"`

	// A timestamp that specifies when to transition a recovery point to cold storage.
	MoveToColdStorageAt *time.Time `type:"timestamp"`
}

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

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

// SetDeleteAt sets the DeleteAt field's value.
func (s *CalculatedLifecycle) SetDeleteAt(v time.Time) *CalculatedLifecycle {
	s.DeleteAt = &v
	return s
}

// SetMoveToColdStorageAt sets the MoveToColdStorageAt field's value.
func (s *CalculatedLifecycle) SetMoveToColdStorageAt(v time.Time) *CalculatedLifecycle {
	s.MoveToColdStorageAt = &v
	return s
}

// Contains an array of triplets made up of a condition type (such as StringEquals),
// a key, and a value. Conditions are used to filter resources in a selection
// that is assigned to a backup plan.
type Condition struct {
	_ struct{} `type:"structure"`

	// The key in a key-value pair. For example, in "ec2:ResourceTag/Department":
	// "accounting", "ec2:ResourceTag/Department" is the key.
	//
	// ConditionKey is a required field
	ConditionKey *string `type:"string" required:"true"`

	// An operation, such as StringEquals, that is applied to a key-value pair used
	// to filter resources in a selection.
	//
	// ConditionType is a required field
	ConditionType *string `type:"string" required:"true" enum:"ConditionType"`

	// The value in a key-value pair. For example, in "ec2:ResourceTag/Department":
	// "accounting", "accounting" is the value.
	//
	// ConditionValue is a required field
	ConditionValue *string `type:"string" required:"true"`
}

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

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

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

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

// SetConditionKey sets the ConditionKey field's value.
func (s *Condition) SetConditionKey(v string) *Condition {
	s.ConditionKey = &v
	return s
}

// SetConditionType sets the ConditionType field's value.
func (s *Condition) SetConditionType(v string) *Condition {
	s.ConditionType = &v
	return s
}

// SetConditionValue sets the ConditionValue field's value.
func (s *Condition) SetConditionValue(v string) *Condition {
	s.ConditionValue = &v
	return s
}

// The details of the copy operation.
type CopyAction struct {
	_ struct{} `type:"structure"`

	// An Amazon Resource Name (ARN) that uniquely identifies the destination backup
	// vault for the copied backup. For example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	//
	// DestinationBackupVaultArn is a required field
	DestinationBackupVaultArn *string `type:"string" required:"true"`

	// Contains an array of Transition objects specifying how long in days before
	// a recovery point transitions to cold storage or is deleted.
	//
	// Backups transitioned to cold storage must be stored in cold storage for a
	// minimum of 90 days. Therefore, on the console, the “expire after days”
	// setting must be 90 days greater than the “transition to cold after days”
	// setting. The “transition to cold after days” setting cannot be changed
	// after a backup has been transitioned to cold.
	//
	// Only Amazon EFS file system backups can be transitioned to cold storage.
	Lifecycle *Lifecycle `type:"structure"`
}

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

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

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

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

// SetDestinationBackupVaultArn sets the DestinationBackupVaultArn field's value.
func (s *CopyAction) SetDestinationBackupVaultArn(v string) *CopyAction {
	s.DestinationBackupVaultArn = &v
	return s
}

// SetLifecycle sets the Lifecycle field's value.
func (s *CopyAction) SetLifecycle(v *Lifecycle) *CopyAction {
	s.Lifecycle = v
	return s
}

// Contains detailed information about a copy job.
type CopyJob struct {
	_ struct{} `type:"structure"`

	// The account ID that owns the copy job.
	AccountId *string `type:"string"`

	// The size, in bytes, of a copy job.
	BackupSizeInBytes *int64 `type:"long"`

	// The date and time a copy job is completed, in Unix format and Coordinated
	// Universal Time (UTC). The value of CompletionDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CompletionDate *time.Time `type:"timestamp"`

	// Uniquely identifies a copy job.
	CopyJobId *string `type:"string"`

	// Contains information about the backup plan and rule that AWS Backup used
	// to initiate the recovery point backup.
	CreatedBy *RecoveryPointCreator `type:"structure"`

	// The date and time a copy job is created, in Unix format and Coordinated Universal
	// Time (UTC). The value of CreationDate is accurate to milliseconds. For example,
	// the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087
	// AM.
	CreationDate *time.Time `type:"timestamp"`

	// An Amazon Resource Name (ARN) that uniquely identifies a destination copy
	// vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	DestinationBackupVaultArn *string `type:"string"`

	// An ARN that uniquely identifies a destination recovery point; for example,
	// arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	DestinationRecoveryPointArn *string `type:"string"`

	// Specifies the IAM role ARN used to copy the target recovery point; for example,
	// arn:aws:iam::123456789012:role/S3Access.
	IamRoleArn *string `type:"string"`

	// The AWS resource to be copied; for example, an Amazon Elastic Block Store
	// (Amazon EBS) volume or an Amazon Relational Database Service (Amazon RDS)
	// database.
	ResourceArn *string `type:"string"`

	// The type of AWS resource to be copied; for example, an Amazon Elastic Block
	// Store (Amazon EBS) volume or an Amazon Relational Database Service (Amazon
	// RDS) database.
	ResourceType *string `type:"string"`

	// An Amazon Resource Name (ARN) that uniquely identifies a source copy vault;
	// for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	SourceBackupVaultArn *string `type:"string"`

	// An ARN that uniquely identifies a source recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	SourceRecoveryPointArn *string `type:"string"`

	// The current state of a copy job.
	State *string `type:"string" enum:"CopyJobState"`

	// A detailed message explaining the status of the job to copy a resource.
	StatusMessage *string `type:"string"`
}

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

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

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

// SetBackupSizeInBytes sets the BackupSizeInBytes field's value.
func (s *CopyJob) SetBackupSizeInBytes(v int64) *CopyJob {
	s.BackupSizeInBytes = &v
	return s
}

// SetCompletionDate sets the CompletionDate field's value.
func (s *CopyJob) SetCompletionDate(v time.Time) *CopyJob {
	s.CompletionDate = &v
	return s
}

// SetCopyJobId sets the CopyJobId field's value.
func (s *CopyJob) SetCopyJobId(v string) *CopyJob {
	s.CopyJobId = &v
	return s
}

// SetCreatedBy sets the CreatedBy field's value.
func (s *CopyJob) SetCreatedBy(v *RecoveryPointCreator) *CopyJob {
	s.CreatedBy = v
	return s
}

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

// SetDestinationBackupVaultArn sets the DestinationBackupVaultArn field's value.
func (s *CopyJob) SetDestinationBackupVaultArn(v string) *CopyJob {
	s.DestinationBackupVaultArn = &v
	return s
}

// SetDestinationRecoveryPointArn sets the DestinationRecoveryPointArn field's value.
func (s *CopyJob) SetDestinationRecoveryPointArn(v string) *CopyJob {
	s.DestinationRecoveryPointArn = &v
	return s
}

// SetIamRoleArn sets the IamRoleArn field's value.
func (s *CopyJob) SetIamRoleArn(v string) *CopyJob {
	s.IamRoleArn = &v
	return s
}

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

// SetResourceType sets the ResourceType field's value.
func (s *CopyJob) SetResourceType(v string) *CopyJob {
	s.ResourceType = &v
	return s
}

// SetSourceBackupVaultArn sets the SourceBackupVaultArn field's value.
func (s *CopyJob) SetSourceBackupVaultArn(v string) *CopyJob {
	s.SourceBackupVaultArn = &v
	return s
}

// SetSourceRecoveryPointArn sets the SourceRecoveryPointArn field's value.
func (s *CopyJob) SetSourceRecoveryPointArn(v string) *CopyJob {
	s.SourceRecoveryPointArn = &v
	return s
}

// SetState sets the State field's value.
func (s *CopyJob) SetState(v string) *CopyJob {
	s.State = &v
	return s
}

// SetStatusMessage sets the StatusMessage field's value.
func (s *CopyJob) SetStatusMessage(v string) *CopyJob {
	s.StatusMessage = &v
	return s
}

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

	// Specifies the body of a backup plan. Includes a BackupPlanName and one or
	// more sets of Rules.
	//
	// BackupPlan is a required field
	BackupPlan *PlanInput `type:"structure" required:"true"`

	// To help organize your resources, you can assign your own metadata to the
	// resources that you create. Each tag is a key-value pair. The specified tags
	// are assigned to all backups created with this plan.
	BackupPlanTags map[string]*string `type:"map" sensitive:"true"`

	// Identifies the request and allows failed requests to be retried without the
	// risk of running the operation twice. If the request includes a CreatorRequestId
	// that matches an existing backup plan, that plan is returned. This parameter
	// is optional.
	CreatorRequestId *string `type:"string"`
}

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

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

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

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

// SetBackupPlan sets the BackupPlan field's value.
func (s *CreateBackupPlanInput) SetBackupPlan(v *PlanInput) *CreateBackupPlanInput {
	s.BackupPlan = v
	return s
}

// SetBackupPlanTags sets the BackupPlanTags field's value.
func (s *CreateBackupPlanInput) SetBackupPlanTags(v map[string]*string) *CreateBackupPlanInput {
	s.BackupPlanTags = v
	return s
}

// SetCreatorRequestId sets the CreatorRequestId field's value.
func (s *CreateBackupPlanInput) SetCreatorRequestId(v string) *CreateBackupPlanInput {
	s.CreatorRequestId = &v
	return s
}

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

	// A list of BackupOptions settings for a resource type. This option is only
	// available for Windows VSS backup jobs.
	AdvancedBackupSettings []*AdvancedBackupSetting `type:"list"`

	// An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for
	// example, arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50.
	BackupPlanArn *string `type:"string"`

	// Uniquely identifies a backup plan.
	BackupPlanId *string `type:"string"`

	// The date and time that a backup plan is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most
	// 1,024 bytes long. They cannot be edited.
	VersionId *string `type:"string"`
}

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

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

// SetAdvancedBackupSettings sets the AdvancedBackupSettings field's value.
func (s *CreateBackupPlanOutput) SetAdvancedBackupSettings(v []*AdvancedBackupSetting) *CreateBackupPlanOutput {
	s.AdvancedBackupSettings = v
	return s
}

// SetBackupPlanArn sets the BackupPlanArn field's value.
func (s *CreateBackupPlanOutput) SetBackupPlanArn(v string) *CreateBackupPlanOutput {
	s.BackupPlanArn = &v
	return s
}

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *CreateBackupPlanOutput) SetBackupPlanId(v string) *CreateBackupPlanOutput {
	s.BackupPlanId = &v
	return s
}

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

// SetVersionId sets the VersionId field's value.
func (s *CreateBackupPlanOutput) SetVersionId(v string) *CreateBackupPlanOutput {
	s.VersionId = &v
	return s
}

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

	// Uniquely identifies the backup plan to be associated with the selection of
	// resources.
	//
	// BackupPlanId is a required field
	BackupPlanId *string `location:"uri" locationName:"backupPlanId" type:"string" required:"true"`

	// Specifies the body of a request to assign a set of resources to a backup
	// plan.
	//
	// BackupSelection is a required field
	BackupSelection *Selection `type:"structure" required:"true"`

	// A unique string that identifies the request and allows failed requests to
	// be retried without the risk of running the operation twice.
	CreatorRequestId *string `type:"string"`
}

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

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

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

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

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *CreateBackupSelectionInput) SetBackupPlanId(v string) *CreateBackupSelectionInput {
	s.BackupPlanId = &v
	return s
}

// SetBackupSelection sets the BackupSelection field's value.
func (s *CreateBackupSelectionInput) SetBackupSelection(v *Selection) *CreateBackupSelectionInput {
	s.BackupSelection = v
	return s
}

// SetCreatorRequestId sets the CreatorRequestId field's value.
func (s *CreateBackupSelectionInput) SetCreatorRequestId(v string) *CreateBackupSelectionInput {
	s.CreatorRequestId = &v
	return s
}

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

	// Uniquely identifies a backup plan.
	BackupPlanId *string `type:"string"`

	// The date and time a backup selection is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// Uniquely identifies the body of a request to assign a set of resources to
	// a backup plan.
	SelectionId *string `type:"string"`
}

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

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

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *CreateBackupSelectionOutput) SetBackupPlanId(v string) *CreateBackupSelectionOutput {
	s.BackupPlanId = &v
	return s
}

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

// SetSelectionId sets the SelectionId field's value.
func (s *CreateBackupSelectionOutput) SetSelectionId(v string) *CreateBackupSelectionOutput {
	s.SelectionId = &v
	return s
}

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

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of letters, numbers,
	// and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`

	// Metadata that you can assign to help organize the resources that you create.
	// Each tag is a key-value pair.
	BackupVaultTags map[string]*string `type:"map" sensitive:"true"`

	// A unique string that identifies the request and allows failed requests to
	// be retried without the risk of running the operation twice.
	CreatorRequestId *string `type:"string"`

	// The server-side encryption key that is used to protect your backups; for
	// example, arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab.
	EncryptionKeyArn *string `type:"string"`
}

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

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

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

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

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *CreateBackupVaultInput) SetBackupVaultName(v string) *CreateBackupVaultInput {
	s.BackupVaultName = &v
	return s
}

// SetBackupVaultTags sets the BackupVaultTags field's value.
func (s *CreateBackupVaultInput) SetBackupVaultTags(v map[string]*string) *CreateBackupVaultInput {
	s.BackupVaultTags = v
	return s
}

// SetCreatorRequestId sets the CreatorRequestId field's value.
func (s *CreateBackupVaultInput) SetCreatorRequestId(v string) *CreateBackupVaultInput {
	s.CreatorRequestId = &v
	return s
}

// SetEncryptionKeyArn sets the EncryptionKeyArn field's value.
func (s *CreateBackupVaultInput) SetEncryptionKeyArn(v string) *CreateBackupVaultInput {
	s.EncryptionKeyArn = &v
	return s
}

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

	// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for
	// example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	BackupVaultArn *string `type:"string"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the Region where they are created. They consist of lowercase letters, numbers,
	// and hyphens.
	BackupVaultName *string `type:"string"`

	// The date and time a backup vault is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`
}

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

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

// SetBackupVaultArn sets the BackupVaultArn field's value.
func (s *CreateBackupVaultOutput) SetBackupVaultArn(v string) *CreateBackupVaultOutput {
	s.BackupVaultArn = &v
	return s
}

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *CreateBackupVaultOutput) SetBackupVaultName(v string) *CreateBackupVaultOutput {
	s.BackupVaultName = &v
	return s
}

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

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

	// Uniquely identifies a backup plan.
	//
	// BackupPlanId is a required field
	BackupPlanId *string `location:"uri" locationName:"backupPlanId" type:"string" required:"true"`
}

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

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

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

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

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *DeleteBackupPlanInput) SetBackupPlanId(v string) *DeleteBackupPlanInput {
	s.BackupPlanId = &v
	return s
}

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

	// An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for
	// example, arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50.
	BackupPlanArn *string `type:"string"`

	// Uniquely identifies a backup plan.
	BackupPlanId *string `type:"string"`

	// The date and time a backup plan is deleted, in Unix format and Coordinated
	// Universal Time (UTC). The value of DeletionDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	DeletionDate *time.Time `type:"timestamp"`

	// Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most
	// 1,024 bytes long. Version IDs cannot be edited.
	VersionId *string `type:"string"`
}

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

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

// SetBackupPlanArn sets the BackupPlanArn field's value.
func (s *DeleteBackupPlanOutput) SetBackupPlanArn(v string) *DeleteBackupPlanOutput {
	s.BackupPlanArn = &v
	return s
}

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *DeleteBackupPlanOutput) SetBackupPlanId(v string) *DeleteBackupPlanOutput {
	s.BackupPlanId = &v
	return s
}

// SetDeletionDate sets the DeletionDate field's value.
func (s *DeleteBackupPlanOutput) SetDeletionDate(v time.Time) *DeleteBackupPlanOutput {
	s.DeletionDate = &v
	return s
}

// SetVersionId sets the VersionId field's value.
func (s *DeleteBackupPlanOutput) SetVersionId(v string) *DeleteBackupPlanOutput {
	s.VersionId = &v
	return s
}

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

	// Uniquely identifies a backup plan.
	//
	// BackupPlanId is a required field
	BackupPlanId *string `location:"uri" locationName:"backupPlanId" type:"string" required:"true"`

	// Uniquely identifies the body of a request to assign a set of resources to
	// a backup plan.
	//
	// SelectionId is a required field
	SelectionId *string `location:"uri" locationName:"selectionId" type:"string" required:"true"`
}

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

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

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

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

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *DeleteBackupSelectionInput) SetBackupPlanId(v string) *DeleteBackupSelectionInput {
	s.BackupPlanId = &v
	return s
}

// SetSelectionId sets the SelectionId field's value.
func (s *DeleteBackupSelectionInput) SetSelectionId(v string) *DeleteBackupSelectionInput {
	s.SelectionId = &v
	return s
}

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

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

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

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

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`
}

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

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

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

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

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *DeleteBackupVaultAccessPolicyInput) SetBackupVaultName(v string) *DeleteBackupVaultAccessPolicyInput {
	s.BackupVaultName = &v
	return s
}

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

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

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

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

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`
}

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

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

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

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

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *DeleteBackupVaultInput) SetBackupVaultName(v string) *DeleteBackupVaultInput {
	s.BackupVaultName = &v
	return s
}

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

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the Region where they are created. They consist of lowercase letters, numbers,
	// and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`
}

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

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

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

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

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *DeleteBackupVaultNotificationsInput) SetBackupVaultName(v string) *DeleteBackupVaultNotificationsInput {
	s.BackupVaultName = &v
	return s
}

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

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

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

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

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

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

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

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`

	// An Amazon Resource Name (ARN) that uniquely identifies a recovery point;
	// for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	//
	// RecoveryPointArn is a required field
	RecoveryPointArn *string `location:"uri" locationName:"recoveryPointArn" type:"string" required:"true"`
}

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

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

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

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

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *DeleteRecoveryPointInput) SetBackupVaultName(v string) *DeleteRecoveryPointInput {
	s.BackupVaultName = &v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *DeleteRecoveryPointInput) SetRecoveryPointArn(v string) *DeleteRecoveryPointInput {
	s.RecoveryPointArn = &v
	return s
}

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

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

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

// A dependent AWS service or resource returned an error to the AWS Backup service,
// and the action cannot be completed.
type DependencyFailureException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Code_ *string `locationName:"Code" type:"string"`

	Context *string `type:"string"`

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

	Type *string `type:"string"`
}

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

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

func newErrorDependencyFailureException(v protocol.ResponseMetadata) error {
	return &DependencyFailureException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

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

	// Uniquely identifies a request to AWS Backup to back up a resource.
	//
	// BackupJobId is a required field
	BackupJobId *string `location:"uri" locationName:"backupJobId" type:"string" required:"true"`
}

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

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

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

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

// SetBackupJobId sets the BackupJobId field's value.
func (s *DescribeBackupJobInput) SetBackupJobId(v string) *DescribeBackupJobInput {
	s.BackupJobId = &v
	return s
}

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

	// Returns the account ID that owns the backup job.
	AccountId *string `type:"string"`

	// Uniquely identifies a request to AWS Backup to back up a resource.
	BackupJobId *string `type:"string"`

	// Represents the options specified as part of backup plan or on-demand backup
	// job.
	BackupOptions map[string]*string `type:"map"`

	// The size, in bytes, of a backup.
	BackupSizeInBytes *int64 `type:"long"`

	// Represents the actual backup type selected for a backup job. For example,
	// if a successful WindowsVSS backup was taken, BackupType returns "WindowsVSS".
	// If BackupType is empty, then the backup type that was is a regular backup.
	BackupType *string `type:"string"`

	// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for
	// example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	BackupVaultArn *string `type:"string"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	BackupVaultName *string `type:"string"`

	// The size in bytes transferred to a backup vault at the time that the job
	// status was queried.
	BytesTransferred *int64 `type:"long"`

	// The date and time that a job to create a backup job is completed, in Unix
	// format and Coordinated Universal Time (UTC). The value of CompletionDate
	// is accurate to milliseconds. For example, the value 1516925490.087 represents
	// Friday, January 26, 2018 12:11:30.087 AM.
	CompletionDate *time.Time `type:"timestamp"`

	// Contains identifying information about the creation of a backup job, including
	// the BackupPlanArn, BackupPlanId, BackupPlanVersion, and BackupRuleId of the
	// backup plan that is used to create it.
	CreatedBy *RecoveryPointCreator `type:"structure"`

	// The date and time that a backup job is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// The date and time that a job to back up resources is expected to be completed,
	// in Unix format and Coordinated Universal Time (UTC). The value of ExpectedCompletionDate
	// is accurate to milliseconds. For example, the value 1516925490.087 represents
	// Friday, January 26, 2018 12:11:30.087 AM.
	ExpectedCompletionDate *time.Time `type:"timestamp"`

	// Specifies the IAM role ARN used to create the target recovery point; for
	// example, arn:aws:iam::123456789012:role/S3Access.
	IamRoleArn *string `type:"string"`

	// Contains an estimated percentage that is complete of a job at the time the
	// job status was queried.
	PercentDone *string `type:"string"`

	// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	RecoveryPointArn *string `type:"string"`

	// An ARN that uniquely identifies a saved resource. The format of the ARN depends
	// on the resource type.
	ResourceArn *string `type:"string"`

	// The type of AWS resource to be backed up; for example, an Amazon Elastic
	// Block Store (Amazon EBS) volume or an Amazon Relational Database Service
	// (Amazon RDS) database.
	ResourceType *string `type:"string"`

	// Specifies the time in Unix format and Coordinated Universal Time (UTC) when
	// a backup job must be started before it is canceled. The value is calculated
	// by adding the start window to the scheduled time. So if the scheduled time
	// were 6:00 PM and the start window is 2 hours, the StartBy time would be 8:00
	// PM on the date specified. The value of StartBy is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	StartBy *time.Time `type:"timestamp"`

	// The current state of a resource recovery point.
	State *string `type:"string" enum:"JobState"`

	// A detailed message explaining the status of the job to back up a resource.
	StatusMessage *string `type:"string"`
}

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

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

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

// SetBackupJobId sets the BackupJobId field's value.
func (s *DescribeBackupJobOutput) SetBackupJobId(v string) *DescribeBackupJobOutput {
	s.BackupJobId = &v
	return s
}

// SetBackupOptions sets the BackupOptions field's value.
func (s *DescribeBackupJobOutput) SetBackupOptions(v map[string]*string) *DescribeBackupJobOutput {
	s.BackupOptions = v
	return s
}

// SetBackupSizeInBytes sets the BackupSizeInBytes field's value.
func (s *DescribeBackupJobOutput) SetBackupSizeInBytes(v int64) *DescribeBackupJobOutput {
	s.BackupSizeInBytes = &v
	return s
}

// SetBackupType sets the BackupType field's value.
func (s *DescribeBackupJobOutput) SetBackupType(v string) *DescribeBackupJobOutput {
	s.BackupType = &v
	return s
}

// SetBackupVaultArn sets the BackupVaultArn field's value.
func (s *DescribeBackupJobOutput) SetBackupVaultArn(v string) *DescribeBackupJobOutput {
	s.BackupVaultArn = &v
	return s
}

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *DescribeBackupJobOutput) SetBackupVaultName(v string) *DescribeBackupJobOutput {
	s.BackupVaultName = &v
	return s
}

// SetBytesTransferred sets the BytesTransferred field's value.
func (s *DescribeBackupJobOutput) SetBytesTransferred(v int64) *DescribeBackupJobOutput {
	s.BytesTransferred = &v
	return s
}

// SetCompletionDate sets the CompletionDate field's value.
func (s *DescribeBackupJobOutput) SetCompletionDate(v time.Time) *DescribeBackupJobOutput {
	s.CompletionDate = &v
	return s
}

// SetCreatedBy sets the CreatedBy field's value.
func (s *DescribeBackupJobOutput) SetCreatedBy(v *RecoveryPointCreator) *DescribeBackupJobOutput {
	s.CreatedBy = v
	return s
}

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

// SetExpectedCompletionDate sets the ExpectedCompletionDate field's value.
func (s *DescribeBackupJobOutput) SetExpectedCompletionDate(v time.Time) *DescribeBackupJobOutput {
	s.ExpectedCompletionDate = &v
	return s
}

// SetIamRoleArn sets the IamRoleArn field's value.
func (s *DescribeBackupJobOutput) SetIamRoleArn(v string) *DescribeBackupJobOutput {
	s.IamRoleArn = &v
	return s
}

// SetPercentDone sets the PercentDone field's value.
func (s *DescribeBackupJobOutput) SetPercentDone(v string) *DescribeBackupJobOutput {
	s.PercentDone = &v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *DescribeBackupJobOutput) SetRecoveryPointArn(v string) *DescribeBackupJobOutput {
	s.RecoveryPointArn = &v
	return s
}

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

// SetResourceType sets the ResourceType field's value.
func (s *DescribeBackupJobOutput) SetResourceType(v string) *DescribeBackupJobOutput {
	s.ResourceType = &v
	return s
}

// SetStartBy sets the StartBy field's value.
func (s *DescribeBackupJobOutput) SetStartBy(v time.Time) *DescribeBackupJobOutput {
	s.StartBy = &v
	return s
}

// SetState sets the State field's value.
func (s *DescribeBackupJobOutput) SetState(v string) *DescribeBackupJobOutput {
	s.State = &v
	return s
}

// SetStatusMessage sets the StatusMessage field's value.
func (s *DescribeBackupJobOutput) SetStatusMessage(v string) *DescribeBackupJobOutput {
	s.StatusMessage = &v
	return s
}

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

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`
}

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

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

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

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

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *DescribeBackupVaultInput) SetBackupVaultName(v string) *DescribeBackupVaultInput {
	s.BackupVaultName = &v
	return s
}

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

	// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for
	// example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	BackupVaultArn *string `type:"string"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the Region where they are created. They consist of lowercase letters, numbers,
	// and hyphens.
	BackupVaultName *string `type:"string"`

	// The date and time that a backup vault is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// A unique string that identifies the request and allows failed requests to
	// be retried without the risk of running the operation twice.
	CreatorRequestId *string `type:"string"`

	// The server-side encryption key that is used to protect your backups; for
	// example, arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab.
	EncryptionKeyArn *string `type:"string"`

	// The number of recovery points that are stored in a backup vault.
	NumberOfRecoveryPoints *int64 `type:"long"`
}

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

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

// SetBackupVaultArn sets the BackupVaultArn field's value.
func (s *DescribeBackupVaultOutput) SetBackupVaultArn(v string) *DescribeBackupVaultOutput {
	s.BackupVaultArn = &v
	return s
}

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *DescribeBackupVaultOutput) SetBackupVaultName(v string) *DescribeBackupVaultOutput {
	s.BackupVaultName = &v
	return s
}

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

// SetCreatorRequestId sets the CreatorRequestId field's value.
func (s *DescribeBackupVaultOutput) SetCreatorRequestId(v string) *DescribeBackupVaultOutput {
	s.CreatorRequestId = &v
	return s
}

// SetEncryptionKeyArn sets the EncryptionKeyArn field's value.
func (s *DescribeBackupVaultOutput) SetEncryptionKeyArn(v string) *DescribeBackupVaultOutput {
	s.EncryptionKeyArn = &v
	return s
}

// SetNumberOfRecoveryPoints sets the NumberOfRecoveryPoints field's value.
func (s *DescribeBackupVaultOutput) SetNumberOfRecoveryPoints(v int64) *DescribeBackupVaultOutput {
	s.NumberOfRecoveryPoints = &v
	return s
}

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

	// Uniquely identifies a copy job.
	//
	// CopyJobId is a required field
	CopyJobId *string `location:"uri" locationName:"copyJobId" type:"string" required:"true"`
}

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

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

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

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

// SetCopyJobId sets the CopyJobId field's value.
func (s *DescribeCopyJobInput) SetCopyJobId(v string) *DescribeCopyJobInput {
	s.CopyJobId = &v
	return s
}

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

	// Contains detailed information about a copy job.
	CopyJob *CopyJob `type:"structure"`
}

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

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

// SetCopyJob sets the CopyJob field's value.
func (s *DescribeCopyJobOutput) SetCopyJob(v *CopyJob) *DescribeCopyJobOutput {
	s.CopyJob = v
	return s
}

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

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

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

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

	// A list of resources along with the opt-in preferences for the account.
	GlobalSettings map[string]*string `type:"map"`

	// The date and time that the global settings were last updated. This update
	// is in Unix format and Coordinated Universal Time (UTC). The value of LastUpdateTime
	// is accurate to milliseconds. For example, the value 1516925490.087 represents
	// Friday, January 26, 2018 12:11:30.087 AM.
	LastUpdateTime *time.Time `type:"timestamp"`
}

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

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

// SetGlobalSettings sets the GlobalSettings field's value.
func (s *DescribeGlobalSettingsOutput) SetGlobalSettings(v map[string]*string) *DescribeGlobalSettingsOutput {
	s.GlobalSettings = v
	return s
}

// SetLastUpdateTime sets the LastUpdateTime field's value.
func (s *DescribeGlobalSettingsOutput) SetLastUpdateTime(v time.Time) *DescribeGlobalSettingsOutput {
	s.LastUpdateTime = &v
	return s
}

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

	// An Amazon Resource Name (ARN) that uniquely identifies a resource. The format
	// of the ARN depends on the resource type.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`
}

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

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

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

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

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

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

	// The date and time that a resource was last backed up, in Unix format and
	// Coordinated Universal Time (UTC). The value of LastBackupTime is accurate
	// to milliseconds. For example, the value 1516925490.087 represents Friday,
	// January 26, 2018 12:11:30.087 AM.
	LastBackupTime *time.Time `type:"timestamp"`

	// An ARN that uniquely identifies a resource. The format of the ARN depends
	// on the resource type.
	ResourceArn *string `type:"string"`

	// The type of AWS resource saved as a recovery point; for example, an EBS volume
	// or an Amazon RDS database.
	ResourceType *string `type:"string"`
}

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

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

// SetLastBackupTime sets the LastBackupTime field's value.
func (s *DescribeProtectedResourceOutput) SetLastBackupTime(v time.Time) *DescribeProtectedResourceOutput {
	s.LastBackupTime = &v
	return s
}

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

// SetResourceType sets the ResourceType field's value.
func (s *DescribeProtectedResourceOutput) SetResourceType(v string) *DescribeProtectedResourceOutput {
	s.ResourceType = &v
	return s
}

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

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`

	// An Amazon Resource Name (ARN) that uniquely identifies a recovery point;
	// for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	//
	// RecoveryPointArn is a required field
	RecoveryPointArn *string `location:"uri" locationName:"recoveryPointArn" type:"string" required:"true"`
}

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

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

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

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

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *DescribeRecoveryPointInput) SetBackupVaultName(v string) *DescribeRecoveryPointInput {
	s.BackupVaultName = &v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *DescribeRecoveryPointInput) SetRecoveryPointArn(v string) *DescribeRecoveryPointInput {
	s.RecoveryPointArn = &v
	return s
}

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

	// The size, in bytes, of a backup.
	BackupSizeInBytes *int64 `type:"long"`

	// An ARN that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	BackupVaultArn *string `type:"string"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the Region where they are created. They consist of lowercase letters, numbers,
	// and hyphens.
	BackupVaultName *string `type:"string"`

	// A CalculatedLifecycle object containing DeleteAt and MoveToColdStorageAt
	// timestamps.
	CalculatedLifecycle *CalculatedLifecycle `type:"structure"`

	// The date and time that a job to create a recovery point is completed, in
	// Unix format and Coordinated Universal Time (UTC). The value of CompletionDate
	// is accurate to milliseconds. For example, the value 1516925490.087 represents
	// Friday, January 26, 2018 12:11:30.087 AM.
	CompletionDate *time.Time `type:"timestamp"`

	// Contains identifying information about the creation of a recovery point,
	// including the BackupPlanArn, BackupPlanId, BackupPlanVersion, and BackupRuleId
	// of the backup plan used to create it.
	CreatedBy *RecoveryPointCreator `type:"structure"`

	// The date and time that a recovery point is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// The server-side encryption key used to protect your backups; for example,
	// arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab.
	EncryptionKeyArn *string `type:"string"`

	// Specifies the IAM role ARN used to create the target recovery point; for
	// example, arn:aws:iam::123456789012:role/S3Access.
	IamRoleArn *string `type:"string"`

	// A Boolean value that is returned as TRUE if the specified recovery point
	// is encrypted, or FALSE if the recovery point is not encrypted.
	IsEncrypted *bool `type:"boolean"`

	// The date and time that a recovery point was last restored, in Unix format
	// and Coordinated Universal Time (UTC). The value of LastRestoreTime is accurate
	// to milliseconds. For example, the value 1516925490.087 represents Friday,
	// January 26, 2018 12:11:30.087 AM.
	LastRestoreTime *time.Time `type:"timestamp"`

	// The lifecycle defines when a protected resource is transitioned to cold storage
	// and when it expires. AWS Backup transitions and expires backups automatically
	// according to the lifecycle that you define.
	//
	// Backups that are transitioned to cold storage must be stored in cold storage
	// for a minimum of 90 days. Therefore, the “expire after days” setting
	// must be 90 days greater than the “transition to cold after days” setting.
	// The “transition to cold after days” setting cannot be changed after a
	// backup has been transitioned to cold.
	//
	// Only Amazon EFS file system backups can be transitioned to cold storage.
	Lifecycle *Lifecycle `type:"structure"`

	// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	RecoveryPointArn *string `type:"string"`

	// An ARN that uniquely identifies a saved resource. The format of the ARN depends
	// on the resource type.
	ResourceArn *string `type:"string"`

	// The type of AWS resource to save as a recovery point; for example, an Amazon
	// Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database
	// Service (Amazon RDS) database.
	ResourceType *string `type:"string"`

	// An Amazon Resource Name (ARN) that uniquely identifies the source vault where
	// the resource was originally backed up in; for example, arn:aws:backup:us-east-1:123456789012:vault:BackupVault.
	// If the recovery is restored to the same AWS account or Region, this value
	// will be null.
	SourceBackupVaultArn *string `type:"string"`

	// A status code specifying the state of the recovery point.
	//
	// A partial status indicates that the recovery point was not successfully re-created
	// and must be retried.
	Status *string `type:"string" enum:"RecoveryPointStatus"`

	// Specifies the storage class of the recovery point. Valid values are WARM
	// or COLD.
	StorageClass *string `type:"string" enum:"StorageClass"`
}

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

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

// SetBackupSizeInBytes sets the BackupSizeInBytes field's value.
func (s *DescribeRecoveryPointOutput) SetBackupSizeInBytes(v int64) *DescribeRecoveryPointOutput {
	s.BackupSizeInBytes = &v
	return s
}

// SetBackupVaultArn sets the BackupVaultArn field's value.
func (s *DescribeRecoveryPointOutput) SetBackupVaultArn(v string) *DescribeRecoveryPointOutput {
	s.BackupVaultArn = &v
	return s
}

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *DescribeRecoveryPointOutput) SetBackupVaultName(v string) *DescribeRecoveryPointOutput {
	s.BackupVaultName = &v
	return s
}

// SetCalculatedLifecycle sets the CalculatedLifecycle field's value.
func (s *DescribeRecoveryPointOutput) SetCalculatedLifecycle(v *CalculatedLifecycle) *DescribeRecoveryPointOutput {
	s.CalculatedLifecycle = v
	return s
}

// SetCompletionDate sets the CompletionDate field's value.
func (s *DescribeRecoveryPointOutput) SetCompletionDate(v time.Time) *DescribeRecoveryPointOutput {
	s.CompletionDate = &v
	return s
}

// SetCreatedBy sets the CreatedBy field's value.
func (s *DescribeRecoveryPointOutput) SetCreatedBy(v *RecoveryPointCreator) *DescribeRecoveryPointOutput {
	s.CreatedBy = v
	return s
}

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

// SetEncryptionKeyArn sets the EncryptionKeyArn field's value.
func (s *DescribeRecoveryPointOutput) SetEncryptionKeyArn(v string) *DescribeRecoveryPointOutput {
	s.EncryptionKeyArn = &v
	return s
}

// SetIamRoleArn sets the IamRoleArn field's value.
func (s *DescribeRecoveryPointOutput) SetIamRoleArn(v string) *DescribeRecoveryPointOutput {
	s.IamRoleArn = &v
	return s
}

// SetIsEncrypted sets the IsEncrypted field's value.
func (s *DescribeRecoveryPointOutput) SetIsEncrypted(v bool) *DescribeRecoveryPointOutput {
	s.IsEncrypted = &v
	return s
}

// SetLastRestoreTime sets the LastRestoreTime field's value.
func (s *DescribeRecoveryPointOutput) SetLastRestoreTime(v time.Time) *DescribeRecoveryPointOutput {
	s.LastRestoreTime = &v
	return s
}

// SetLifecycle sets the Lifecycle field's value.
func (s *DescribeRecoveryPointOutput) SetLifecycle(v *Lifecycle) *DescribeRecoveryPointOutput {
	s.Lifecycle = v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *DescribeRecoveryPointOutput) SetRecoveryPointArn(v string) *DescribeRecoveryPointOutput {
	s.RecoveryPointArn = &v
	return s
}

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

// SetResourceType sets the ResourceType field's value.
func (s *DescribeRecoveryPointOutput) SetResourceType(v string) *DescribeRecoveryPointOutput {
	s.ResourceType = &v
	return s
}

// SetSourceBackupVaultArn sets the SourceBackupVaultArn field's value.
func (s *DescribeRecoveryPointOutput) SetSourceBackupVaultArn(v string) *DescribeRecoveryPointOutput {
	s.SourceBackupVaultArn = &v
	return s
}

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

// SetStorageClass sets the StorageClass field's value.
func (s *DescribeRecoveryPointOutput) SetStorageClass(v string) *DescribeRecoveryPointOutput {
	s.StorageClass = &v
	return s
}

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

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

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

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

	// Returns a list of all services along with the opt-in preferences in the Region.
	ResourceTypeOptInPreference map[string]*bool `type:"map"`
}

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

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

// SetResourceTypeOptInPreference sets the ResourceTypeOptInPreference field's value.
func (s *DescribeRegionSettingsOutput) SetResourceTypeOptInPreference(v map[string]*bool) *DescribeRegionSettingsOutput {
	s.ResourceTypeOptInPreference = v
	return s
}

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

	// Uniquely identifies the job that restores a recovery point.
	//
	// RestoreJobId is a required field
	RestoreJobId *string `location:"uri" locationName:"restoreJobId" type:"string" required:"true"`
}

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

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

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

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

// SetRestoreJobId sets the RestoreJobId field's value.
func (s *DescribeRestoreJobInput) SetRestoreJobId(v string) *DescribeRestoreJobInput {
	s.RestoreJobId = &v
	return s
}

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

	// Returns the account ID that owns the restore job.
	AccountId *string `type:"string"`

	// The size, in bytes, of the restored resource.
	BackupSizeInBytes *int64 `type:"long"`

	// The date and time that a job to restore a recovery point is completed, in
	// Unix format and Coordinated Universal Time (UTC). The value of CompletionDate
	// is accurate to milliseconds. For example, the value 1516925490.087 represents
	// Friday, January 26, 2018 12:11:30.087 AM.
	CompletionDate *time.Time `type:"timestamp"`

	// An Amazon Resource Name (ARN) that uniquely identifies a resource whose recovery
	// point is being restored. The format of the ARN depends on the resource type
	// of the backed-up resource.
	CreatedResourceArn *string `type:"string"`

	// The date and time that a restore job is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// The amount of time in minutes that a job restoring a recovery point is expected
	// to take.
	ExpectedCompletionTimeMinutes *int64 `type:"long"`

	// Specifies the IAM role ARN used to create the target recovery point; for
	// example, arn:aws:iam::123456789012:role/S3Access.
	IamRoleArn *string `type:"string"`

	// Contains an estimated percentage that is complete of a job at the time the
	// job status was queried.
	PercentDone *string `type:"string"`

	// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	RecoveryPointArn *string `type:"string"`

	// Returns metadata associated with a restore job listed by resource type.
	ResourceType *string `type:"string"`

	// Uniquely identifies the job that restores a recovery point.
	RestoreJobId *string `type:"string"`

	// Status code specifying the state of the job that is initiated by AWS Backup
	// to restore a recovery point.
	Status *string `type:"string" enum:"RestoreJobStatus"`

	// A message showing the status of a job to restore a recovery point.
	StatusMessage *string `type:"string"`
}

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

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

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

// SetBackupSizeInBytes sets the BackupSizeInBytes field's value.
func (s *DescribeRestoreJobOutput) SetBackupSizeInBytes(v int64) *DescribeRestoreJobOutput {
	s.BackupSizeInBytes = &v
	return s
}

// SetCompletionDate sets the CompletionDate field's value.
func (s *DescribeRestoreJobOutput) SetCompletionDate(v time.Time) *DescribeRestoreJobOutput {
	s.CompletionDate = &v
	return s
}

// SetCreatedResourceArn sets the CreatedResourceArn field's value.
func (s *DescribeRestoreJobOutput) SetCreatedResourceArn(v string) *DescribeRestoreJobOutput {
	s.CreatedResourceArn = &v
	return s
}

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

// SetExpectedCompletionTimeMinutes sets the ExpectedCompletionTimeMinutes field's value.
func (s *DescribeRestoreJobOutput) SetExpectedCompletionTimeMinutes(v int64) *DescribeRestoreJobOutput {
	s.ExpectedCompletionTimeMinutes = &v
	return s
}

// SetIamRoleArn sets the IamRoleArn field's value.
func (s *DescribeRestoreJobOutput) SetIamRoleArn(v string) *DescribeRestoreJobOutput {
	s.IamRoleArn = &v
	return s
}

// SetPercentDone sets the PercentDone field's value.
func (s *DescribeRestoreJobOutput) SetPercentDone(v string) *DescribeRestoreJobOutput {
	s.PercentDone = &v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *DescribeRestoreJobOutput) SetRecoveryPointArn(v string) *DescribeRestoreJobOutput {
	s.RecoveryPointArn = &v
	return s
}

// SetResourceType sets the ResourceType field's value.
func (s *DescribeRestoreJobOutput) SetResourceType(v string) *DescribeRestoreJobOutput {
	s.ResourceType = &v
	return s
}

// SetRestoreJobId sets the RestoreJobId field's value.
func (s *DescribeRestoreJobOutput) SetRestoreJobId(v string) *DescribeRestoreJobOutput {
	s.RestoreJobId = &v
	return s
}

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

// SetStatusMessage sets the StatusMessage field's value.
func (s *DescribeRestoreJobOutput) SetStatusMessage(v string) *DescribeRestoreJobOutput {
	s.StatusMessage = &v
	return s
}

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

	// Uniquely identifies a backup plan.
	//
	// BackupPlanId is a required field
	BackupPlanId *string `location:"uri" locationName:"backupPlanId" type:"string" required:"true"`
}

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

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

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

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

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *ExportBackupPlanTemplateInput) SetBackupPlanId(v string) *ExportBackupPlanTemplateInput {
	s.BackupPlanId = &v
	return s
}

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

	// The body of a backup plan template in JSON format.
	//
	// This is a signed JSON document that cannot be modified before being passed
	// to GetBackupPlanFromJSON.
	BackupPlanTemplateJson *string `type:"string"`
}

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

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

// SetBackupPlanTemplateJson sets the BackupPlanTemplateJson field's value.
func (s *ExportBackupPlanTemplateOutput) SetBackupPlanTemplateJson(v string) *ExportBackupPlanTemplateOutput {
	s.BackupPlanTemplateJson = &v
	return s
}

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

	// A customer-supplied backup plan document in JSON format.
	//
	// BackupPlanTemplateJson is a required field
	BackupPlanTemplateJson *string `type:"string" required:"true"`
}

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

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

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

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

// SetBackupPlanTemplateJson sets the BackupPlanTemplateJson field's value.
func (s *GetBackupPlanFromJSONInput) SetBackupPlanTemplateJson(v string) *GetBackupPlanFromJSONInput {
	s.BackupPlanTemplateJson = &v
	return s
}

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

	// Specifies the body of a backup plan. Includes a BackupPlanName and one or
	// more sets of Rules.
	BackupPlan *Plan `type:"structure"`
}

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

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

// SetBackupPlan sets the BackupPlan field's value.
func (s *GetBackupPlanFromJSONOutput) SetBackupPlan(v *Plan) *GetBackupPlanFromJSONOutput {
	s.BackupPlan = v
	return s
}

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

	// Uniquely identifies a stored backup plan template.
	//
	// BackupPlanTemplateId is a required field
	BackupPlanTemplateId *string `location:"uri" locationName:"templateId" type:"string" required:"true"`
}

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

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

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

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

// SetBackupPlanTemplateId sets the BackupPlanTemplateId field's value.
func (s *GetBackupPlanFromTemplateInput) SetBackupPlanTemplateId(v string) *GetBackupPlanFromTemplateInput {
	s.BackupPlanTemplateId = &v
	return s
}

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

	// Returns the body of a backup plan based on the target template, including
	// the name, rules, and backup vault of the plan.
	BackupPlanDocument *Plan `type:"structure"`
}

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

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

// SetBackupPlanDocument sets the BackupPlanDocument field's value.
func (s *GetBackupPlanFromTemplateOutput) SetBackupPlanDocument(v *Plan) *GetBackupPlanFromTemplateOutput {
	s.BackupPlanDocument = v
	return s
}

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

	// Uniquely identifies a backup plan.
	//
	// BackupPlanId is a required field
	BackupPlanId *string `location:"uri" locationName:"backupPlanId" type:"string" required:"true"`

	// Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most
	// 1,024 bytes long. Version IDs cannot be edited.
	VersionId *string `location:"querystring" locationName:"versionId" type:"string"`
}

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

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

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

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

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *GetBackupPlanInput) SetBackupPlanId(v string) *GetBackupPlanInput {
	s.BackupPlanId = &v
	return s
}

// SetVersionId sets the VersionId field's value.
func (s *GetBackupPlanInput) SetVersionId(v string) *GetBackupPlanInput {
	s.VersionId = &v
	return s
}

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

	// Contains a list of BackupOptions for each resource type. The list is populated
	// only if the advanced option is set for the backup plan.
	AdvancedBackupSettings []*AdvancedBackupSetting `type:"list"`

	// Specifies the body of a backup plan. Includes a BackupPlanName and one or
	// more sets of Rules.
	BackupPlan *Plan `type:"structure"`

	// An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for
	// example, arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50.
	BackupPlanArn *string `type:"string"`

	// Uniquely identifies a backup plan.
	BackupPlanId *string `type:"string"`

	// The date and time that a backup plan is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// A unique string that identifies the request and allows failed requests to
	// be retried without the risk of running the operation twice.
	CreatorRequestId *string `type:"string"`

	// The date and time that a backup plan is deleted, in Unix format and Coordinated
	// Universal Time (UTC). The value of DeletionDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	DeletionDate *time.Time `type:"timestamp"`

	// The last time a job to back up resources was run with this backup plan. A
	// date and time, in Unix format and Coordinated Universal Time (UTC). The value
	// of LastExecutionDate is accurate to milliseconds. For example, the value
	// 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
	LastExecutionDate *time.Time `type:"timestamp"`

	// Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most
	// 1,024 bytes long. Version IDs cannot be edited.
	VersionId *string `type:"string"`
}

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

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

// SetAdvancedBackupSettings sets the AdvancedBackupSettings field's value.
func (s *GetBackupPlanOutput) SetAdvancedBackupSettings(v []*AdvancedBackupSetting) *GetBackupPlanOutput {
	s.AdvancedBackupSettings = v
	return s
}

// SetBackupPlan sets the BackupPlan field's value.
func (s *GetBackupPlanOutput) SetBackupPlan(v *Plan) *GetBackupPlanOutput {
	s.BackupPlan = v
	return s
}

// SetBackupPlanArn sets the BackupPlanArn field's value.
func (s *GetBackupPlanOutput) SetBackupPlanArn(v string) *GetBackupPlanOutput {
	s.BackupPlanArn = &v
	return s
}

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *GetBackupPlanOutput) SetBackupPlanId(v string) *GetBackupPlanOutput {
	s.BackupPlanId = &v
	return s
}

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

// SetCreatorRequestId sets the CreatorRequestId field's value.
func (s *GetBackupPlanOutput) SetCreatorRequestId(v string) *GetBackupPlanOutput {
	s.CreatorRequestId = &v
	return s
}

// SetDeletionDate sets the DeletionDate field's value.
func (s *GetBackupPlanOutput) SetDeletionDate(v time.Time) *GetBackupPlanOutput {
	s.DeletionDate = &v
	return s
}

// SetLastExecutionDate sets the LastExecutionDate field's value.
func (s *GetBackupPlanOutput) SetLastExecutionDate(v time.Time) *GetBackupPlanOutput {
	s.LastExecutionDate = &v
	return s
}

// SetVersionId sets the VersionId field's value.
func (s *GetBackupPlanOutput) SetVersionId(v string) *GetBackupPlanOutput {
	s.VersionId = &v
	return s
}

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

	// Uniquely identifies a backup plan.
	//
	// BackupPlanId is a required field
	BackupPlanId *string `location:"uri" locationName:"backupPlanId" type:"string" required:"true"`

	// Uniquely identifies the body of a request to assign a set of resources to
	// a backup plan.
	//
	// SelectionId is a required field
	SelectionId *string `location:"uri" locationName:"selectionId" type:"string" required:"true"`
}

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

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

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

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

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *GetBackupSelectionInput) SetBackupPlanId(v string) *GetBackupSelectionInput {
	s.BackupPlanId = &v
	return s
}

// SetSelectionId sets the SelectionId field's value.
func (s *GetBackupSelectionInput) SetSelectionId(v string) *GetBackupSelectionInput {
	s.SelectionId = &v
	return s
}

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

	// Uniquely identifies a backup plan.
	BackupPlanId *string `type:"string"`

	// Specifies the body of a request to assign a set of resources to a backup
	// plan.
	BackupSelection *Selection `type:"structure"`

	// The date and time a backup selection is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// A unique string that identifies the request and allows failed requests to
	// be retried without the risk of running the operation twice.
	CreatorRequestId *string `type:"string"`

	// Uniquely identifies the body of a request to assign a set of resources to
	// a backup plan.
	SelectionId *string `type:"string"`
}

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

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

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *GetBackupSelectionOutput) SetBackupPlanId(v string) *GetBackupSelectionOutput {
	s.BackupPlanId = &v
	return s
}

// SetBackupSelection sets the BackupSelection field's value.
func (s *GetBackupSelectionOutput) SetBackupSelection(v *Selection) *GetBackupSelectionOutput {
	s.BackupSelection = v
	return s
}

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

// SetCreatorRequestId sets the CreatorRequestId field's value.
func (s *GetBackupSelectionOutput) SetCreatorRequestId(v string) *GetBackupSelectionOutput {
	s.CreatorRequestId = &v
	return s
}

// SetSelectionId sets the SelectionId field's value.
func (s *GetBackupSelectionOutput) SetSelectionId(v string) *GetBackupSelectionOutput {
	s.SelectionId = &v
	return s
}

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

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`
}

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

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

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

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

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *GetBackupVaultAccessPolicyInput) SetBackupVaultName(v string) *GetBackupVaultAccessPolicyInput {
	s.BackupVaultName = &v
	return s
}

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

	// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for
	// example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	BackupVaultArn *string `type:"string"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the Region where they are created. They consist of lowercase letters, numbers,
	// and hyphens.
	BackupVaultName *string `type:"string"`

	// The backup vault access policy document in JSON format.
	Policy *string `type:"string"`
}

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

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

// SetBackupVaultArn sets the BackupVaultArn field's value.
func (s *GetBackupVaultAccessPolicyOutput) SetBackupVaultArn(v string) *GetBackupVaultAccessPolicyOutput {
	s.BackupVaultArn = &v
	return s
}

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *GetBackupVaultAccessPolicyOutput) SetBackupVaultName(v string) *GetBackupVaultAccessPolicyOutput {
	s.BackupVaultName = &v
	return s
}

// SetPolicy sets the Policy field's value.
func (s *GetBackupVaultAccessPolicyOutput) SetPolicy(v string) *GetBackupVaultAccessPolicyOutput {
	s.Policy = &v
	return s
}

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

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`
}

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

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

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

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

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *GetBackupVaultNotificationsInput) SetBackupVaultName(v string) *GetBackupVaultNotificationsInput {
	s.BackupVaultName = &v
	return s
}

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

	// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for
	// example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	BackupVaultArn *string `type:"string"`

	// An array of events that indicate the status of jobs to back up resources
	// to the backup vault.
	BackupVaultEvents []*string `type:"list"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the Region where they are created. They consist of lowercase letters, numbers,
	// and hyphens.
	BackupVaultName *string `type:"string"`

	// An ARN that uniquely identifies an Amazon Simple Notification Service (Amazon
	// SNS) topic; for example, arn:aws:sns:us-west-2:111122223333:MyTopic.
	SNSTopicArn *string `type:"string"`
}

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

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

// SetBackupVaultArn sets the BackupVaultArn field's value.
func (s *GetBackupVaultNotificationsOutput) SetBackupVaultArn(v string) *GetBackupVaultNotificationsOutput {
	s.BackupVaultArn = &v
	return s
}

// SetBackupVaultEvents sets the BackupVaultEvents field's value.
func (s *GetBackupVaultNotificationsOutput) SetBackupVaultEvents(v []*string) *GetBackupVaultNotificationsOutput {
	s.BackupVaultEvents = v
	return s
}

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *GetBackupVaultNotificationsOutput) SetBackupVaultName(v string) *GetBackupVaultNotificationsOutput {
	s.BackupVaultName = &v
	return s
}

// SetSNSTopicArn sets the SNSTopicArn field's value.
func (s *GetBackupVaultNotificationsOutput) SetSNSTopicArn(v string) *GetBackupVaultNotificationsOutput {
	s.SNSTopicArn = &v
	return s
}

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

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`

	// An Amazon Resource Name (ARN) that uniquely identifies a recovery point;
	// for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	//
	// RecoveryPointArn is a required field
	RecoveryPointArn *string `location:"uri" locationName:"recoveryPointArn" type:"string" required:"true"`
}

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

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

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

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

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *GetRecoveryPointRestoreMetadataInput) SetBackupVaultName(v string) *GetRecoveryPointRestoreMetadataInput {
	s.BackupVaultName = &v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *GetRecoveryPointRestoreMetadataInput) SetRecoveryPointArn(v string) *GetRecoveryPointRestoreMetadataInput {
	s.RecoveryPointArn = &v
	return s
}

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

	// An ARN that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	BackupVaultArn *string `type:"string"`

	// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	RecoveryPointArn *string `type:"string"`

	// The set of metadata key-value pairs that describe the original configuration
	// of the backed-up resource. These values vary depending on the service that
	// is being restored.
	RestoreMetadata map[string]*string `type:"map" sensitive:"true"`
}

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

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

// SetBackupVaultArn sets the BackupVaultArn field's value.
func (s *GetRecoveryPointRestoreMetadataOutput) SetBackupVaultArn(v string) *GetRecoveryPointRestoreMetadataOutput {
	s.BackupVaultArn = &v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *GetRecoveryPointRestoreMetadataOutput) SetRecoveryPointArn(v string) *GetRecoveryPointRestoreMetadataOutput {
	s.RecoveryPointArn = &v
	return s
}

// SetRestoreMetadata sets the RestoreMetadata field's value.
func (s *GetRecoveryPointRestoreMetadataOutput) SetRestoreMetadata(v map[string]*string) *GetRecoveryPointRestoreMetadataOutput {
	s.RestoreMetadata = v
	return s
}

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

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

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

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

	// Contains a string with the supported AWS resource types:
	//
	//    * DynamoDB for Amazon DynamoDB
	//
	//    * EBS for Amazon Elastic Block Store
	//
	//    * EC2 for Amazon Elastic Compute Cloud
	//
	//    * EFS for Amazon Elastic File System
	//
	//    * RDS for Amazon Relational Database Service
	//
	//    * Aurora for Amazon Aurora
	//
	//    * Storage Gateway for AWS Storage Gateway
	ResourceTypes []*string `type:"list"`
}

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

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

// SetResourceTypes sets the ResourceTypes field's value.
func (s *GetSupportedResourceTypesOutput) SetResourceTypes(v []*string) *GetSupportedResourceTypesOutput {
	s.ResourceTypes = v
	return s
}

// Indicates that something is wrong with a parameter's value. For example,
// the value is out of range.
type InvalidParameterValueException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Code_ *string `locationName:"Code" type:"string"`

	Context *string `type:"string"`

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

	Type *string `type:"string"`
}

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

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

func newErrorInvalidParameterValueException(v protocol.ResponseMetadata) error {
	return &InvalidParameterValueException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

// Indicates that something is wrong with the input to the request. For example,
// a parameter is of the wrong type.
type InvalidRequestException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Code_ *string `locationName:"Code" type:"string"`

	Context *string `type:"string"`

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

	Type *string `type:"string"`
}

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

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

func newErrorInvalidRequestException(v protocol.ResponseMetadata) error {
	return &InvalidRequestException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

// Contains detailed information about a backup job.
type Job struct {
	_ struct{} `type:"structure"`

	// The account ID that owns the backup job.
	AccountId *string `type:"string"`

	// Uniquely identifies a request to AWS Backup to back up a resource.
	BackupJobId *string `type:"string"`

	// Specifies the backup option for a selected resource. This option is only
	// available for Windows VSS backup jobs.
	//
	// Valid values: Set to "WindowsVSS”:“enabled" to enable WindowsVSS backup
	// option and create a VSS Windows backup. Set to “WindowsVSS”:”disabled”
	// to create a regular backup. If you specify an invalid option, you get an
	// InvalidParameterValueException exception.
	BackupOptions map[string]*string `type:"map"`

	// The size, in bytes, of a backup.
	BackupSizeInBytes *int64 `type:"long"`

	// Represents the type of backup for a backup job.
	BackupType *string `type:"string"`

	// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for
	// example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	BackupVaultArn *string `type:"string"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	BackupVaultName *string `type:"string"`

	// The size in bytes transferred to a backup vault at the time that the job
	// status was queried.
	BytesTransferred *int64 `type:"long"`

	// The date and time a job to create a backup job is completed, in Unix format
	// and Coordinated Universal Time (UTC). The value of CompletionDate is accurate
	// to milliseconds. For example, the value 1516925490.087 represents Friday,
	// January 26, 2018 12:11:30.087 AM.
	CompletionDate *time.Time `type:"timestamp"`

	// Contains identifying information about the creation of a backup job, including
	// the BackupPlanArn, BackupPlanId, BackupPlanVersion, and BackupRuleId of the
	// backup plan used to create it.
	CreatedBy *RecoveryPointCreator `type:"structure"`

	// The date and time a backup job is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// The date and time a job to back up resources is expected to be completed,
	// in Unix format and Coordinated Universal Time (UTC). The value of ExpectedCompletionDate
	// is accurate to milliseconds. For example, the value 1516925490.087 represents
	// Friday, January 26, 2018 12:11:30.087 AM.
	ExpectedCompletionDate *time.Time `type:"timestamp"`

	// Specifies the IAM role ARN used to create the target recovery point. IAM
	// roles other than the default role must include either AWSBackup or AwsBackup
	// in the role name. For example, arn:aws:iam::123456789012:role/AWSBackupRDSAccess.
	// Role names without those strings lack permissions to perform backup jobs.
	IamRoleArn *string `type:"string"`

	// Contains an estimated percentage complete of a job at the time the job status
	// was queried.
	PercentDone *string `type:"string"`

	// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	RecoveryPointArn *string `type:"string"`

	// An ARN that uniquely identifies a resource. The format of the ARN depends
	// on the resource type.
	ResourceArn *string `type:"string"`

	// The type of AWS resource to be backed up; for example, an Amazon Elastic
	// Block Store (Amazon EBS) volume or an Amazon Relational Database Service
	// (Amazon RDS) database. For VSS Windows backups, the only supported resource
	// type is Amazon EC2.
	ResourceType *string `type:"string"`

	// Specifies the time in Unix format and Coordinated Universal Time (UTC) when
	// a backup job must be started before it is canceled. The value is calculated
	// by adding the start window to the scheduled time. So if the scheduled time
	// were 6:00 PM and the start window is 2 hours, the StartBy time would be 8:00
	// PM on the date specified. The value of StartBy is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	StartBy *time.Time `type:"timestamp"`

	// The current state of a resource recovery point.
	State *string `type:"string" enum:"JobState"`

	// A detailed message explaining the status of the job to back up a resource.
	StatusMessage *string `type:"string"`
}

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

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

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

// SetBackupJobId sets the BackupJobId field's value.
func (s *Job) SetBackupJobId(v string) *Job {
	s.BackupJobId = &v
	return s
}

// SetBackupOptions sets the BackupOptions field's value.
func (s *Job) SetBackupOptions(v map[string]*string) *Job {
	s.BackupOptions = v
	return s
}

// SetBackupSizeInBytes sets the BackupSizeInBytes field's value.
func (s *Job) SetBackupSizeInBytes(v int64) *Job {
	s.BackupSizeInBytes = &v
	return s
}

// SetBackupType sets the BackupType field's value.
func (s *Job) SetBackupType(v string) *Job {
	s.BackupType = &v
	return s
}

// SetBackupVaultArn sets the BackupVaultArn field's value.
func (s *Job) SetBackupVaultArn(v string) *Job {
	s.BackupVaultArn = &v
	return s
}

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *Job) SetBackupVaultName(v string) *Job {
	s.BackupVaultName = &v
	return s
}

// SetBytesTransferred sets the BytesTransferred field's value.
func (s *Job) SetBytesTransferred(v int64) *Job {
	s.BytesTransferred = &v
	return s
}

// SetCompletionDate sets the CompletionDate field's value.
func (s *Job) SetCompletionDate(v time.Time) *Job {
	s.CompletionDate = &v
	return s
}

// SetCreatedBy sets the CreatedBy field's value.
func (s *Job) SetCreatedBy(v *RecoveryPointCreator) *Job {
	s.CreatedBy = v
	return s
}

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

// SetExpectedCompletionDate sets the ExpectedCompletionDate field's value.
func (s *Job) SetExpectedCompletionDate(v time.Time) *Job {
	s.ExpectedCompletionDate = &v
	return s
}

// SetIamRoleArn sets the IamRoleArn field's value.
func (s *Job) SetIamRoleArn(v string) *Job {
	s.IamRoleArn = &v
	return s
}

// SetPercentDone sets the PercentDone field's value.
func (s *Job) SetPercentDone(v string) *Job {
	s.PercentDone = &v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *Job) SetRecoveryPointArn(v string) *Job {
	s.RecoveryPointArn = &v
	return s
}

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

// SetResourceType sets the ResourceType field's value.
func (s *Job) SetResourceType(v string) *Job {
	s.ResourceType = &v
	return s
}

// SetStartBy sets the StartBy field's value.
func (s *Job) SetStartBy(v time.Time) *Job {
	s.StartBy = &v
	return s
}

// SetState sets the State field's value.
func (s *Job) SetState(v string) *Job {
	s.State = &v
	return s
}

// SetStatusMessage sets the StatusMessage field's value.
func (s *Job) SetStatusMessage(v string) *Job {
	s.StatusMessage = &v
	return s
}

// Contains an array of Transition objects specifying how long in days before
// a recovery point transitions to cold storage or is deleted.
//
// Backups transitioned to cold storage must be stored in cold storage for a
// minimum of 90 days. Therefore, on the console, the “expire after days”
// setting must be 90 days greater than the “transition to cold after days”
// setting. The “transition to cold after days” setting cannot be changed
// after a backup has been transitioned to cold.
//
// Only Amazon EFS file system backups can be transitioned to cold storage.
type Lifecycle struct {
	_ struct{} `type:"structure"`

	// Specifies the number of days after creation that a recovery point is deleted.
	// Must be greater than 90 days plus MoveToColdStorageAfterDays.
	DeleteAfterDays *int64 `type:"long"`

	// Specifies the number of days after creation that a recovery point is moved
	// to cold storage.
	MoveToColdStorageAfterDays *int64 `type:"long"`
}

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

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

// SetDeleteAfterDays sets the DeleteAfterDays field's value.
func (s *Lifecycle) SetDeleteAfterDays(v int64) *Lifecycle {
	s.DeleteAfterDays = &v
	return s
}

// SetMoveToColdStorageAfterDays sets the MoveToColdStorageAfterDays field's value.
func (s *Lifecycle) SetMoveToColdStorageAfterDays(v int64) *Lifecycle {
	s.MoveToColdStorageAfterDays = &v
	return s
}

// A limit in the request has been exceeded; for example, a maximum number of
// items allowed in a request.
type LimitExceededException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Code_ *string `locationName:"Code" type:"string"`

	Context *string `type:"string"`

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

	Type *string `type:"string"`
}

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

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

func newErrorLimitExceededException(v protocol.ResponseMetadata) error {
	return &LimitExceededException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

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

	// The account ID to list the jobs from. Returns only backup jobs associated
	// with the specified account ID.
	//
	// If used from an AWS Organizations management account, passing * returns all
	// jobs across the organization.
	ByAccountId *string `location:"querystring" locationName:"accountId" type:"string"`

	// Returns only backup jobs that will be stored in the specified backup vault.
	// Backup vaults are identified by names that are unique to the account used
	// to create them and the AWS Region where they are created. They consist of
	// lowercase letters, numbers, and hyphens.
	ByBackupVaultName *string `location:"querystring" locationName:"backupVaultName" type:"string"`

	// Returns only backup jobs that were created after the specified date.
	ByCreatedAfter *time.Time `location:"querystring" locationName:"createdAfter" type:"timestamp"`

	// Returns only backup jobs that were created before the specified date.
	ByCreatedBefore *time.Time `location:"querystring" locationName:"createdBefore" type:"timestamp"`

	// Returns only backup jobs that match the specified resource Amazon Resource
	// Name (ARN).
	ByResourceArn *string `location:"querystring" locationName:"resourceArn" type:"string"`

	// Returns only backup jobs for the specified resources:
	//
	//    * DynamoDB for Amazon DynamoDB
	//
	//    * EBS for Amazon Elastic Block Store
	//
	//    * EC2 for Amazon Elastic Compute Cloud
	//
	//    * EFS for Amazon Elastic File System
	//
	//    * RDS for Amazon Relational Database Service
	//
	//    * Aurora for Amazon Aurora
	//
	//    * Storage Gateway for AWS Storage Gateway
	ByResourceType *string `location:"querystring" locationName:"resourceType" type:"string"`

	// Returns only backup jobs that are in the specified state.
	ByState *string `location:"querystring" locationName:"state" type:"string" enum:"JobState"`

	// The maximum number of items to be returned.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetByAccountId sets the ByAccountId field's value.
func (s *ListBackupJobsInput) SetByAccountId(v string) *ListBackupJobsInput {
	s.ByAccountId = &v
	return s
}

// SetByBackupVaultName sets the ByBackupVaultName field's value.
func (s *ListBackupJobsInput) SetByBackupVaultName(v string) *ListBackupJobsInput {
	s.ByBackupVaultName = &v
	return s
}

// SetByCreatedAfter sets the ByCreatedAfter field's value.
func (s *ListBackupJobsInput) SetByCreatedAfter(v time.Time) *ListBackupJobsInput {
	s.ByCreatedAfter = &v
	return s
}

// SetByCreatedBefore sets the ByCreatedBefore field's value.
func (s *ListBackupJobsInput) SetByCreatedBefore(v time.Time) *ListBackupJobsInput {
	s.ByCreatedBefore = &v
	return s
}

// SetByResourceArn sets the ByResourceArn field's value.
func (s *ListBackupJobsInput) SetByResourceArn(v string) *ListBackupJobsInput {
	s.ByResourceArn = &v
	return s
}

// SetByResourceType sets the ByResourceType field's value.
func (s *ListBackupJobsInput) SetByResourceType(v string) *ListBackupJobsInput {
	s.ByResourceType = &v
	return s
}

// SetByState sets the ByState field's value.
func (s *ListBackupJobsInput) SetByState(v string) *ListBackupJobsInput {
	s.ByState = &v
	return s
}

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

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

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

	// An array of structures containing metadata about your backup jobs returned
	// in JSON format.
	BackupJobs []*Job `type:"list"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `type:"string"`
}

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

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

// SetBackupJobs sets the BackupJobs field's value.
func (s *ListBackupJobsOutput) SetBackupJobs(v []*Job) *ListBackupJobsOutput {
	s.BackupJobs = v
	return s
}

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

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

	// The maximum number of items to be returned.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

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

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

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

	// An array of template list items containing metadata about your saved templates.
	BackupPlanTemplatesList []*PlanTemplatesListMember `type:"list"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `type:"string"`
}

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

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

// SetBackupPlanTemplatesList sets the BackupPlanTemplatesList field's value.
func (s *ListBackupPlanTemplatesOutput) SetBackupPlanTemplatesList(v []*PlanTemplatesListMember) *ListBackupPlanTemplatesOutput {
	s.BackupPlanTemplatesList = v
	return s
}

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

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

	// Uniquely identifies a backup plan.
	//
	// BackupPlanId is a required field
	BackupPlanId *string `location:"uri" locationName:"backupPlanId" type:"string" required:"true"`

	// The maximum number of items to be returned.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *ListBackupPlanVersionsInput) SetBackupPlanId(v string) *ListBackupPlanVersionsInput {
	s.BackupPlanId = &v
	return s
}

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

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

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

	// An array of version list items containing metadata about your backup plans.
	BackupPlanVersionsList []*PlansListMember `type:"list"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `type:"string"`
}

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

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

// SetBackupPlanVersionsList sets the BackupPlanVersionsList field's value.
func (s *ListBackupPlanVersionsOutput) SetBackupPlanVersionsList(v []*PlansListMember) *ListBackupPlanVersionsOutput {
	s.BackupPlanVersionsList = v
	return s
}

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

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

	// A Boolean value with a default value of FALSE that returns deleted backup
	// plans when set to TRUE.
	IncludeDeleted *bool `location:"querystring" locationName:"includeDeleted" type:"boolean"`

	// The maximum number of items to be returned.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetIncludeDeleted sets the IncludeDeleted field's value.
func (s *ListBackupPlansInput) SetIncludeDeleted(v bool) *ListBackupPlansInput {
	s.IncludeDeleted = &v
	return s
}

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

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

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

	// An array of backup plan list items containing metadata about your saved backup
	// plans.
	BackupPlansList []*PlansListMember `type:"list"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `type:"string"`
}

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

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

// SetBackupPlansList sets the BackupPlansList field's value.
func (s *ListBackupPlansOutput) SetBackupPlansList(v []*PlansListMember) *ListBackupPlansOutput {
	s.BackupPlansList = v
	return s
}

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

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

	// Uniquely identifies a backup plan.
	//
	// BackupPlanId is a required field
	BackupPlanId *string `location:"uri" locationName:"backupPlanId" type:"string" required:"true"`

	// The maximum number of items to be returned.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *ListBackupSelectionsInput) SetBackupPlanId(v string) *ListBackupSelectionsInput {
	s.BackupPlanId = &v
	return s
}

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

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

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

	// An array of backup selection list items containing metadata about each resource
	// in the list.
	BackupSelectionsList []*SelectionsListMember `type:"list"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `type:"string"`
}

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

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

// SetBackupSelectionsList sets the BackupSelectionsList field's value.
func (s *ListBackupSelectionsOutput) SetBackupSelectionsList(v []*SelectionsListMember) *ListBackupSelectionsOutput {
	s.BackupSelectionsList = v
	return s
}

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

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

	// The maximum number of items to be returned.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

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

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

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

	// An array of backup vault list members containing vault metadata, including
	// Amazon Resource Name (ARN), display name, creation date, number of saved
	// recovery points, and encryption information if the resources saved in the
	// backup vault are encrypted.
	BackupVaultList []*VaultListMember `type:"list"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `type:"string"`
}

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

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

// SetBackupVaultList sets the BackupVaultList field's value.
func (s *ListBackupVaultsOutput) SetBackupVaultList(v []*VaultListMember) *ListBackupVaultsOutput {
	s.BackupVaultList = v
	return s
}

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

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

	// The account ID to list the jobs from. Returns only copy jobs associated with
	// the specified account ID.
	ByAccountId *string `location:"querystring" locationName:"accountId" type:"string"`

	// Returns only copy jobs that were created after the specified date.
	ByCreatedAfter *time.Time `location:"querystring" locationName:"createdAfter" type:"timestamp"`

	// Returns only copy jobs that were created before the specified date.
	ByCreatedBefore *time.Time `location:"querystring" locationName:"createdBefore" type:"timestamp"`

	// An Amazon Resource Name (ARN) that uniquely identifies a source backup vault
	// to copy from; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	ByDestinationVaultArn *string `location:"querystring" locationName:"destinationVaultArn" type:"string"`

	// Returns only copy jobs that match the specified resource Amazon Resource
	// Name (ARN).
	ByResourceArn *string `location:"querystring" locationName:"resourceArn" type:"string"`

	// Returns only backup jobs for the specified resources:
	//
	//    * DynamoDB for Amazon DynamoDB
	//
	//    * EBS for Amazon Elastic Block Store
	//
	//    * EC2 for Amazon Elastic Compute Cloud
	//
	//    * EFS for Amazon Elastic File System
	//
	//    * RDS for Amazon Relational Database Service
	//
	//    * Aurora for Amazon Aurora
	//
	//    * Storage Gateway for AWS Storage Gateway
	ByResourceType *string `location:"querystring" locationName:"resourceType" type:"string"`

	// Returns only copy jobs that are in the specified state.
	ByState *string `location:"querystring" locationName:"state" type:"string" enum:"CopyJobState"`

	// The maximum number of items to be returned.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetByAccountId sets the ByAccountId field's value.
func (s *ListCopyJobsInput) SetByAccountId(v string) *ListCopyJobsInput {
	s.ByAccountId = &v
	return s
}

// SetByCreatedAfter sets the ByCreatedAfter field's value.
func (s *ListCopyJobsInput) SetByCreatedAfter(v time.Time) *ListCopyJobsInput {
	s.ByCreatedAfter = &v
	return s
}

// SetByCreatedBefore sets the ByCreatedBefore field's value.
func (s *ListCopyJobsInput) SetByCreatedBefore(v time.Time) *ListCopyJobsInput {
	s.ByCreatedBefore = &v
	return s
}

// SetByDestinationVaultArn sets the ByDestinationVaultArn field's value.
func (s *ListCopyJobsInput) SetByDestinationVaultArn(v string) *ListCopyJobsInput {
	s.ByDestinationVaultArn = &v
	return s
}

// SetByResourceArn sets the ByResourceArn field's value.
func (s *ListCopyJobsInput) SetByResourceArn(v string) *ListCopyJobsInput {
	s.ByResourceArn = &v
	return s
}

// SetByResourceType sets the ByResourceType field's value.
func (s *ListCopyJobsInput) SetByResourceType(v string) *ListCopyJobsInput {
	s.ByResourceType = &v
	return s
}

// SetByState sets the ByState field's value.
func (s *ListCopyJobsInput) SetByState(v string) *ListCopyJobsInput {
	s.ByState = &v
	return s
}

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

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

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

	// An array of structures containing metadata about your copy jobs returned
	// in JSON format.
	CopyJobs []*CopyJob `type:"list"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `type:"string"`
}

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

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

// SetCopyJobs sets the CopyJobs field's value.
func (s *ListCopyJobsOutput) SetCopyJobs(v []*CopyJob) *ListCopyJobsOutput {
	s.CopyJobs = v
	return s
}

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

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

	// The maximum number of items to be returned.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

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

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

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

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `type:"string"`

	// An array of resources successfully backed up by AWS Backup including the
	// time the resource was saved, an Amazon Resource Name (ARN) of the resource,
	// and a resource type.
	Results []*ProtectedResource `type:"list"`
}

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

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

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

// SetResults sets the Results field's value.
func (s *ListProtectedResourcesOutput) SetResults(v []*ProtectedResource) *ListProtectedResourcesOutput {
	s.Results = v
	return s
}

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

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`

	// Returns only recovery points that match the specified backup plan ID.
	ByBackupPlanId *string `location:"querystring" locationName:"backupPlanId" type:"string"`

	// Returns only recovery points that were created after the specified timestamp.
	ByCreatedAfter *time.Time `location:"querystring" locationName:"createdAfter" type:"timestamp"`

	// Returns only recovery points that were created before the specified timestamp.
	ByCreatedBefore *time.Time `location:"querystring" locationName:"createdBefore" type:"timestamp"`

	// Returns only recovery points that match the specified resource Amazon Resource
	// Name (ARN).
	ByResourceArn *string `location:"querystring" locationName:"resourceArn" type:"string"`

	// Returns only recovery points that match the specified resource type.
	ByResourceType *string `location:"querystring" locationName:"resourceType" type:"string"`

	// The maximum number of items to be returned.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *ListRecoveryPointsByBackupVaultInput) SetBackupVaultName(v string) *ListRecoveryPointsByBackupVaultInput {
	s.BackupVaultName = &v
	return s
}

// SetByBackupPlanId sets the ByBackupPlanId field's value.
func (s *ListRecoveryPointsByBackupVaultInput) SetByBackupPlanId(v string) *ListRecoveryPointsByBackupVaultInput {
	s.ByBackupPlanId = &v
	return s
}

// SetByCreatedAfter sets the ByCreatedAfter field's value.
func (s *ListRecoveryPointsByBackupVaultInput) SetByCreatedAfter(v time.Time) *ListRecoveryPointsByBackupVaultInput {
	s.ByCreatedAfter = &v
	return s
}

// SetByCreatedBefore sets the ByCreatedBefore field's value.
func (s *ListRecoveryPointsByBackupVaultInput) SetByCreatedBefore(v time.Time) *ListRecoveryPointsByBackupVaultInput {
	s.ByCreatedBefore = &v
	return s
}

// SetByResourceArn sets the ByResourceArn field's value.
func (s *ListRecoveryPointsByBackupVaultInput) SetByResourceArn(v string) *ListRecoveryPointsByBackupVaultInput {
	s.ByResourceArn = &v
	return s
}

// SetByResourceType sets the ByResourceType field's value.
func (s *ListRecoveryPointsByBackupVaultInput) SetByResourceType(v string) *ListRecoveryPointsByBackupVaultInput {
	s.ByResourceType = &v
	return s
}

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

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

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

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `type:"string"`

	// An array of objects that contain detailed information about recovery points
	// saved in a backup vault.
	RecoveryPoints []*RecoveryPointByBackupVault `type:"list"`
}

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

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

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

// SetRecoveryPoints sets the RecoveryPoints field's value.
func (s *ListRecoveryPointsByBackupVaultOutput) SetRecoveryPoints(v []*RecoveryPointByBackupVault) *ListRecoveryPointsByBackupVaultOutput {
	s.RecoveryPoints = v
	return s
}

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

	// The maximum number of items to be returned.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// An ARN that uniquely identifies a resource. The format of the ARN depends
	// on the resource type.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`
}

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

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

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

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

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

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

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

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `type:"string"`

	// An array of objects that contain detailed information about recovery points
	// of the specified resource type.
	RecoveryPoints []*RecoveryPointByResource `type:"list"`
}

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

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

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

// SetRecoveryPoints sets the RecoveryPoints field's value.
func (s *ListRecoveryPointsByResourceOutput) SetRecoveryPoints(v []*RecoveryPointByResource) *ListRecoveryPointsByResourceOutput {
	s.RecoveryPoints = v
	return s
}

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

	// The account ID to list the jobs from. Returns only restore jobs associated
	// with the specified account ID.
	ByAccountId *string `location:"querystring" locationName:"accountId" type:"string"`

	// Returns only restore jobs that were created after the specified date.
	ByCreatedAfter *time.Time `location:"querystring" locationName:"createdAfter" type:"timestamp"`

	// Returns only restore jobs that were created before the specified date.
	ByCreatedBefore *time.Time `location:"querystring" locationName:"createdBefore" type:"timestamp"`

	// Returns only restore jobs associated with the specified job status.
	ByStatus *string `location:"querystring" locationName:"status" type:"string" enum:"RestoreJobStatus"`

	// The maximum number of items to be returned.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetByAccountId sets the ByAccountId field's value.
func (s *ListRestoreJobsInput) SetByAccountId(v string) *ListRestoreJobsInput {
	s.ByAccountId = &v
	return s
}

// SetByCreatedAfter sets the ByCreatedAfter field's value.
func (s *ListRestoreJobsInput) SetByCreatedAfter(v time.Time) *ListRestoreJobsInput {
	s.ByCreatedAfter = &v
	return s
}

// SetByCreatedBefore sets the ByCreatedBefore field's value.
func (s *ListRestoreJobsInput) SetByCreatedBefore(v time.Time) *ListRestoreJobsInput {
	s.ByCreatedBefore = &v
	return s
}

// SetByStatus sets the ByStatus field's value.
func (s *ListRestoreJobsInput) SetByStatus(v string) *ListRestoreJobsInput {
	s.ByStatus = &v
	return s
}

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

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

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

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `type:"string"`

	// An array of objects that contain detailed information about jobs to restore
	// saved resources.
	RestoreJobs []*RestoreJobsListMember `type:"list"`
}

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

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

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

// SetRestoreJobs sets the RestoreJobs field's value.
func (s *ListRestoreJobsOutput) SetRestoreJobs(v []*RestoreJobsListMember) *ListRestoreJobsOutput {
	s.RestoreJobs = v
	return s
}

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

	// The maximum number of items to be returned.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// An Amazon Resource Name (ARN) that uniquely identifies a resource. The format
	// of the ARN depends on the type of resource. Valid targets for ListTags are
	// recovery points, backup plans, and backup vaults.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`
}

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

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

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

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

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

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

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

	// The next item following a partial list of returned items. For example, if
	// a request is made to return maxResults number of items, NextToken allows
	// you to return more items in your list starting at the location pointed to
	// by the next token.
	NextToken *string `type:"string"`

	// To help organize your resources, you can assign your own metadata to the
	// resources you create. Each tag is a key-value pair.
	Tags map[string]*string `type:"map" sensitive:"true"`
}

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

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

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

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

// Indicates that a required parameter is missing.
type MissingParameterValueException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Code_ *string `locationName:"Code" type:"string"`

	Context *string `type:"string"`

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

	Type *string `type:"string"`
}

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

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

func newErrorMissingParameterValueException(v protocol.ResponseMetadata) error {
	return &MissingParameterValueException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

// Contains an optional backup plan display name and an array of BackupRule
// objects, each of which specifies a backup rule. Each rule in a backup plan
// is a separate scheduled task and can back up a different selection of AWS
// resources.
type Plan struct {
	_ struct{} `type:"structure"`

	// Contains a list of BackupOptions for each resource type.
	AdvancedBackupSettings []*AdvancedBackupSetting `type:"list"`

	// The display name of a backup plan.
	//
	// BackupPlanName is a required field
	BackupPlanName *string `type:"string" required:"true"`

	// An array of BackupRule objects, each of which specifies a scheduled task
	// that is used to back up a selection of resources.
	//
	// Rules is a required field
	Rules []*Rule `type:"list" required:"true"`
}

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

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

// SetAdvancedBackupSettings sets the AdvancedBackupSettings field's value.
func (s *Plan) SetAdvancedBackupSettings(v []*AdvancedBackupSetting) *Plan {
	s.AdvancedBackupSettings = v
	return s
}

// SetBackupPlanName sets the BackupPlanName field's value.
func (s *Plan) SetBackupPlanName(v string) *Plan {
	s.BackupPlanName = &v
	return s
}

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

// Contains an optional backup plan display name and an array of BackupRule
// objects, each of which specifies a backup rule. Each rule in a backup plan
// is a separate scheduled task and can back up a different selection of AWS
// resources.
type PlanInput struct {
	_ struct{} `type:"structure"`

	// Specifies a list of BackupOptions for each resource type. These settings
	// are only available for Windows VSS backup jobs.
	AdvancedBackupSettings []*AdvancedBackupSetting `type:"list"`

	// The optional display name of a backup plan.
	//
	// BackupPlanName is a required field
	BackupPlanName *string `type:"string" required:"true"`

	// An array of BackupRule objects, each of which specifies a scheduled task
	// that is used to back up a selection of resources.
	//
	// Rules is a required field
	Rules []*RuleInput `type:"list" required:"true"`
}

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

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

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

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

// SetAdvancedBackupSettings sets the AdvancedBackupSettings field's value.
func (s *PlanInput) SetAdvancedBackupSettings(v []*AdvancedBackupSetting) *PlanInput {
	s.AdvancedBackupSettings = v
	return s
}

// SetBackupPlanName sets the BackupPlanName field's value.
func (s *PlanInput) SetBackupPlanName(v string) *PlanInput {
	s.BackupPlanName = &v
	return s
}

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

// An object specifying metadata associated with a backup plan template.
type PlanTemplatesListMember struct {
	_ struct{} `type:"structure"`

	// Uniquely identifies a stored backup plan template.
	BackupPlanTemplateId *string `type:"string"`

	// The optional display name of a backup plan template.
	BackupPlanTemplateName *string `type:"string"`
}

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

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

// SetBackupPlanTemplateId sets the BackupPlanTemplateId field's value.
func (s *PlanTemplatesListMember) SetBackupPlanTemplateId(v string) *PlanTemplatesListMember {
	s.BackupPlanTemplateId = &v
	return s
}

// SetBackupPlanTemplateName sets the BackupPlanTemplateName field's value.
func (s *PlanTemplatesListMember) SetBackupPlanTemplateName(v string) *PlanTemplatesListMember {
	s.BackupPlanTemplateName = &v
	return s
}

// Contains metadata about a backup plan.
type PlansListMember struct {
	_ struct{} `type:"structure"`

	// Contains a list of BackupOptions for a resource type.
	AdvancedBackupSettings []*AdvancedBackupSetting `type:"list"`

	// An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for
	// example, arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50.
	BackupPlanArn *string `type:"string"`

	// Uniquely identifies a backup plan.
	BackupPlanId *string `type:"string"`

	// The display name of a saved backup plan.
	BackupPlanName *string `type:"string"`

	// The date and time a resource backup plan is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// A unique string that identifies the request and allows failed requests to
	// be retried without the risk of running the operation twice.
	CreatorRequestId *string `type:"string"`

	// The date and time a backup plan is deleted, in Unix format and Coordinated
	// Universal Time (UTC). The value of DeletionDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	DeletionDate *time.Time `type:"timestamp"`

	// The last time a job to back up resources was run with this rule. A date and
	// time, in Unix format and Coordinated Universal Time (UTC). The value of LastExecutionDate
	// is accurate to milliseconds. For example, the value 1516925490.087 represents
	// Friday, January 26, 2018 12:11:30.087 AM.
	LastExecutionDate *time.Time `type:"timestamp"`

	// Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most
	// 1,024 bytes long. Version IDs cannot be edited.
	VersionId *string `type:"string"`
}

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

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

// SetAdvancedBackupSettings sets the AdvancedBackupSettings field's value.
func (s *PlansListMember) SetAdvancedBackupSettings(v []*AdvancedBackupSetting) *PlansListMember {
	s.AdvancedBackupSettings = v
	return s
}

// SetBackupPlanArn sets the BackupPlanArn field's value.
func (s *PlansListMember) SetBackupPlanArn(v string) *PlansListMember {
	s.BackupPlanArn = &v
	return s
}

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *PlansListMember) SetBackupPlanId(v string) *PlansListMember {
	s.BackupPlanId = &v
	return s
}

// SetBackupPlanName sets the BackupPlanName field's value.
func (s *PlansListMember) SetBackupPlanName(v string) *PlansListMember {
	s.BackupPlanName = &v
	return s
}

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

// SetCreatorRequestId sets the CreatorRequestId field's value.
func (s *PlansListMember) SetCreatorRequestId(v string) *PlansListMember {
	s.CreatorRequestId = &v
	return s
}

// SetDeletionDate sets the DeletionDate field's value.
func (s *PlansListMember) SetDeletionDate(v time.Time) *PlansListMember {
	s.DeletionDate = &v
	return s
}

// SetLastExecutionDate sets the LastExecutionDate field's value.
func (s *PlansListMember) SetLastExecutionDate(v time.Time) *PlansListMember {
	s.LastExecutionDate = &v
	return s
}

// SetVersionId sets the VersionId field's value.
func (s *PlansListMember) SetVersionId(v string) *PlansListMember {
	s.VersionId = &v
	return s
}

// A structure that contains information about a backed-up resource.
type ProtectedResource struct {
	_ struct{} `type:"structure"`

	// The date and time a resource was last backed up, in Unix format and Coordinated
	// Universal Time (UTC). The value of LastBackupTime is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	LastBackupTime *time.Time `type:"timestamp"`

	// An Amazon Resource Name (ARN) that uniquely identifies a resource. The format
	// of the ARN depends on the resource type.
	ResourceArn *string `type:"string"`

	// The type of AWS resource; for example, an Amazon Elastic Block Store (Amazon
	// EBS) volume or an Amazon Relational Database Service (Amazon RDS) database.
	// For VSS Windows backups, the only supported resource type is Amazon EC2.
	ResourceType *string `type:"string"`
}

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

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

// SetLastBackupTime sets the LastBackupTime field's value.
func (s *ProtectedResource) SetLastBackupTime(v time.Time) *ProtectedResource {
	s.LastBackupTime = &v
	return s
}

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

// SetResourceType sets the ResourceType field's value.
func (s *ProtectedResource) SetResourceType(v string) *ProtectedResource {
	s.ResourceType = &v
	return s
}

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

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`

	// The backup vault access policy document in JSON format.
	Policy *string `type:"string"`
}

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

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

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

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

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *PutBackupVaultAccessPolicyInput) SetBackupVaultName(v string) *PutBackupVaultAccessPolicyInput {
	s.BackupVaultName = &v
	return s
}

// SetPolicy sets the Policy field's value.
func (s *PutBackupVaultAccessPolicyInput) SetPolicy(v string) *PutBackupVaultAccessPolicyInput {
	s.Policy = &v
	return s
}

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

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

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

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

	// An array of events that indicate the status of jobs to back up resources
	// to the backup vault.
	//
	// BackupVaultEvents is a required field
	BackupVaultEvents []*string `type:"list" required:"true"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`

	// The Amazon Resource Name (ARN) that specifies the topic for a backup vault’s
	// events; for example, arn:aws:sns:us-west-2:111122223333:MyVaultTopic.
	//
	// SNSTopicArn is a required field
	SNSTopicArn *string `type:"string" required:"true"`
}

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

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

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

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

// SetBackupVaultEvents sets the BackupVaultEvents field's value.
func (s *PutBackupVaultNotificationsInput) SetBackupVaultEvents(v []*string) *PutBackupVaultNotificationsInput {
	s.BackupVaultEvents = v
	return s
}

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *PutBackupVaultNotificationsInput) SetBackupVaultName(v string) *PutBackupVaultNotificationsInput {
	s.BackupVaultName = &v
	return s
}

// SetSNSTopicArn sets the SNSTopicArn field's value.
func (s *PutBackupVaultNotificationsInput) SetSNSTopicArn(v string) *PutBackupVaultNotificationsInput {
	s.SNSTopicArn = &v
	return s
}

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

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

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

// Contains detailed information about the recovery points stored in a backup
// vault.
type RecoveryPointByBackupVault struct {
	_ struct{} `type:"structure"`

	// The size, in bytes, of a backup.
	BackupSizeInBytes *int64 `type:"long"`

	// An ARN that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	BackupVaultArn *string `type:"string"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	BackupVaultName *string `type:"string"`

	// A CalculatedLifecycle object containing DeleteAt and MoveToColdStorageAt
	// timestamps.
	CalculatedLifecycle *CalculatedLifecycle `type:"structure"`

	// The date and time a job to restore a recovery point is completed, in Unix
	// format and Coordinated Universal Time (UTC). The value of CompletionDate
	// is accurate to milliseconds. For example, the value 1516925490.087 represents
	// Friday, January 26, 2018 12:11:30.087 AM.
	CompletionDate *time.Time `type:"timestamp"`

	// Contains identifying information about the creation of a recovery point,
	// including the BackupPlanArn, BackupPlanId, BackupPlanVersion, and BackupRuleId
	// of the backup plan that is used to create it.
	CreatedBy *RecoveryPointCreator `type:"structure"`

	// The date and time a recovery point is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// The server-side encryption key that is used to protect your backups; for
	// example, arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab.
	EncryptionKeyArn *string `type:"string"`

	// Specifies the IAM role ARN used to create the target recovery point; for
	// example, arn:aws:iam::123456789012:role/S3Access.
	IamRoleArn *string `type:"string"`

	// A Boolean value that is returned as TRUE if the specified recovery point
	// is encrypted, or FALSE if the recovery point is not encrypted.
	IsEncrypted *bool `type:"boolean"`

	// The date and time a recovery point was last restored, in Unix format and
	// Coordinated Universal Time (UTC). The value of LastRestoreTime is accurate
	// to milliseconds. For example, the value 1516925490.087 represents Friday,
	// January 26, 2018 12:11:30.087 AM.
	LastRestoreTime *time.Time `type:"timestamp"`

	// The lifecycle defines when a protected resource is transitioned to cold storage
	// and when it expires. AWS Backup transitions and expires backups automatically
	// according to the lifecycle that you define.
	//
	// Backups transitioned to cold storage must be stored in cold storage for a
	// minimum of 90 days. Therefore, the “expire after days” setting must be
	// 90 days greater than the “transition to cold after days” setting. The
	// “transition to cold after days” setting cannot be changed after a backup
	// has been transitioned to cold.
	//
	// Only Amazon EFS file system backups can be transitioned to cold storage.
	Lifecycle *Lifecycle `type:"structure"`

	// An Amazon Resource Name (ARN) that uniquely identifies a recovery point;
	// for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	RecoveryPointArn *string `type:"string"`

	// An ARN that uniquely identifies a resource. The format of the ARN depends
	// on the resource type.
	ResourceArn *string `type:"string"`

	// The type of AWS resource saved as a recovery point; for example, an Amazon
	// Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database
	// Service (Amazon RDS) database. For VSS Windows backups, the only supported
	// resource type is Amazon EC2.
	ResourceType *string `type:"string"`

	// The backup vault where the recovery point was originally copied from. If
	// the recovery point is restored to the same account this value will be null.
	SourceBackupVaultArn *string `type:"string"`

	// A status code specifying the state of the recovery point.
	Status *string `type:"string" enum:"RecoveryPointStatus"`
}

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

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

// SetBackupSizeInBytes sets the BackupSizeInBytes field's value.
func (s *RecoveryPointByBackupVault) SetBackupSizeInBytes(v int64) *RecoveryPointByBackupVault {
	s.BackupSizeInBytes = &v
	return s
}

// SetBackupVaultArn sets the BackupVaultArn field's value.
func (s *RecoveryPointByBackupVault) SetBackupVaultArn(v string) *RecoveryPointByBackupVault {
	s.BackupVaultArn = &v
	return s
}

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *RecoveryPointByBackupVault) SetBackupVaultName(v string) *RecoveryPointByBackupVault {
	s.BackupVaultName = &v
	return s
}

// SetCalculatedLifecycle sets the CalculatedLifecycle field's value.
func (s *RecoveryPointByBackupVault) SetCalculatedLifecycle(v *CalculatedLifecycle) *RecoveryPointByBackupVault {
	s.CalculatedLifecycle = v
	return s
}

// SetCompletionDate sets the CompletionDate field's value.
func (s *RecoveryPointByBackupVault) SetCompletionDate(v time.Time) *RecoveryPointByBackupVault {
	s.CompletionDate = &v
	return s
}

// SetCreatedBy sets the CreatedBy field's value.
func (s *RecoveryPointByBackupVault) SetCreatedBy(v *RecoveryPointCreator) *RecoveryPointByBackupVault {
	s.CreatedBy = v
	return s
}

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

// SetEncryptionKeyArn sets the EncryptionKeyArn field's value.
func (s *RecoveryPointByBackupVault) SetEncryptionKeyArn(v string) *RecoveryPointByBackupVault {
	s.EncryptionKeyArn = &v
	return s
}

// SetIamRoleArn sets the IamRoleArn field's value.
func (s *RecoveryPointByBackupVault) SetIamRoleArn(v string) *RecoveryPointByBackupVault {
	s.IamRoleArn = &v
	return s
}

// SetIsEncrypted sets the IsEncrypted field's value.
func (s *RecoveryPointByBackupVault) SetIsEncrypted(v bool) *RecoveryPointByBackupVault {
	s.IsEncrypted = &v
	return s
}

// SetLastRestoreTime sets the LastRestoreTime field's value.
func (s *RecoveryPointByBackupVault) SetLastRestoreTime(v time.Time) *RecoveryPointByBackupVault {
	s.LastRestoreTime = &v
	return s
}

// SetLifecycle sets the Lifecycle field's value.
func (s *RecoveryPointByBackupVault) SetLifecycle(v *Lifecycle) *RecoveryPointByBackupVault {
	s.Lifecycle = v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *RecoveryPointByBackupVault) SetRecoveryPointArn(v string) *RecoveryPointByBackupVault {
	s.RecoveryPointArn = &v
	return s
}

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

// SetResourceType sets the ResourceType field's value.
func (s *RecoveryPointByBackupVault) SetResourceType(v string) *RecoveryPointByBackupVault {
	s.ResourceType = &v
	return s
}

// SetSourceBackupVaultArn sets the SourceBackupVaultArn field's value.
func (s *RecoveryPointByBackupVault) SetSourceBackupVaultArn(v string) *RecoveryPointByBackupVault {
	s.SourceBackupVaultArn = &v
	return s
}

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

// Contains detailed information about a saved recovery point.
type RecoveryPointByResource struct {
	_ struct{} `type:"structure"`

	// The size, in bytes, of a backup.
	BackupSizeBytes *int64 `type:"long"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	BackupVaultName *string `type:"string"`

	// The date and time a recovery point is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// The server-side encryption key that is used to protect your backups; for
	// example, arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab.
	EncryptionKeyArn *string `type:"string"`

	// An Amazon Resource Name (ARN) that uniquely identifies a recovery point;
	// for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	RecoveryPointArn *string `type:"string"`

	// A status code specifying the state of the recovery point.
	Status *string `type:"string" enum:"RecoveryPointStatus"`
}

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

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

// SetBackupSizeBytes sets the BackupSizeBytes field's value.
func (s *RecoveryPointByResource) SetBackupSizeBytes(v int64) *RecoveryPointByResource {
	s.BackupSizeBytes = &v
	return s
}

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *RecoveryPointByResource) SetBackupVaultName(v string) *RecoveryPointByResource {
	s.BackupVaultName = &v
	return s
}

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

// SetEncryptionKeyArn sets the EncryptionKeyArn field's value.
func (s *RecoveryPointByResource) SetEncryptionKeyArn(v string) *RecoveryPointByResource {
	s.EncryptionKeyArn = &v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *RecoveryPointByResource) SetRecoveryPointArn(v string) *RecoveryPointByResource {
	s.RecoveryPointArn = &v
	return s
}

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

// Contains information about the backup plan and rule that AWS Backup used
// to initiate the recovery point backup.
type RecoveryPointCreator struct {
	_ struct{} `type:"structure"`

	// An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for
	// example, arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50.
	BackupPlanArn *string `type:"string"`

	// Uniquely identifies a backup plan.
	BackupPlanId *string `type:"string"`

	// Version IDs are unique, randomly generated, Unicode, UTF-8 encoded strings
	// that are at most 1,024 bytes long. They cannot be edited.
	BackupPlanVersion *string `type:"string"`

	// Uniquely identifies a rule used to schedule the backup of a selection of
	// resources.
	BackupRuleId *string `type:"string"`
}

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

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

// SetBackupPlanArn sets the BackupPlanArn field's value.
func (s *RecoveryPointCreator) SetBackupPlanArn(v string) *RecoveryPointCreator {
	s.BackupPlanArn = &v
	return s
}

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *RecoveryPointCreator) SetBackupPlanId(v string) *RecoveryPointCreator {
	s.BackupPlanId = &v
	return s
}

// SetBackupPlanVersion sets the BackupPlanVersion field's value.
func (s *RecoveryPointCreator) SetBackupPlanVersion(v string) *RecoveryPointCreator {
	s.BackupPlanVersion = &v
	return s
}

// SetBackupRuleId sets the BackupRuleId field's value.
func (s *RecoveryPointCreator) SetBackupRuleId(v string) *RecoveryPointCreator {
	s.BackupRuleId = &v
	return s
}

// A resource that is required for the action doesn't exist.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Code_ *string `locationName:"Code" type:"string"`

	Context *string `type:"string"`

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

	Type *string `type:"string"`
}

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

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

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

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

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

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

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

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

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

// Contains metadata about a restore job.
type RestoreJobsListMember struct {
	_ struct{} `type:"structure"`

	// The account ID that owns the restore job.
	AccountId *string `type:"string"`

	// The size, in bytes, of the restored resource.
	BackupSizeInBytes *int64 `type:"long"`

	// The date and time a job to restore a recovery point is completed, in Unix
	// format and Coordinated Universal Time (UTC). The value of CompletionDate
	// is accurate to milliseconds. For example, the value 1516925490.087 represents
	// Friday, January 26, 2018 12:11:30.087 AM.
	CompletionDate *time.Time `type:"timestamp"`

	// An Amazon Resource Name (ARN) that uniquely identifies a resource. The format
	// of the ARN depends on the resource type.
	CreatedResourceArn *string `type:"string"`

	// The date and time a restore job is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// The amount of time in minutes that a job restoring a recovery point is expected
	// to take.
	ExpectedCompletionTimeMinutes *int64 `type:"long"`

	// Specifies the IAM role ARN used to create the target recovery point; for
	// example, arn:aws:iam::123456789012:role/S3Access.
	IamRoleArn *string `type:"string"`

	// Contains an estimated percentage complete of a job at the time the job status
	// was queried.
	PercentDone *string `type:"string"`

	// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	RecoveryPointArn *string `type:"string"`

	// The resource type of the listed restore jobs; for example, an Amazon Elastic
	// Block Store (Amazon EBS) volume or an Amazon Relational Database Service
	// (Amazon RDS) database. For VSS Windows backups, the only supported resource
	// type is Amazon EC2.
	ResourceType *string `type:"string"`

	// Uniquely identifies the job that restores a recovery point.
	RestoreJobId *string `type:"string"`

	// A status code specifying the state of the job initiated by AWS Backup to
	// restore a recovery point.
	Status *string `type:"string" enum:"RestoreJobStatus"`

	// A detailed message explaining the status of the job to restore a recovery
	// point.
	StatusMessage *string `type:"string"`
}

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

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

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

// SetBackupSizeInBytes sets the BackupSizeInBytes field's value.
func (s *RestoreJobsListMember) SetBackupSizeInBytes(v int64) *RestoreJobsListMember {
	s.BackupSizeInBytes = &v
	return s
}

// SetCompletionDate sets the CompletionDate field's value.
func (s *RestoreJobsListMember) SetCompletionDate(v time.Time) *RestoreJobsListMember {
	s.CompletionDate = &v
	return s
}

// SetCreatedResourceArn sets the CreatedResourceArn field's value.
func (s *RestoreJobsListMember) SetCreatedResourceArn(v string) *RestoreJobsListMember {
	s.CreatedResourceArn = &v
	return s
}

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

// SetExpectedCompletionTimeMinutes sets the ExpectedCompletionTimeMinutes field's value.
func (s *RestoreJobsListMember) SetExpectedCompletionTimeMinutes(v int64) *RestoreJobsListMember {
	s.ExpectedCompletionTimeMinutes = &v
	return s
}

// SetIamRoleArn sets the IamRoleArn field's value.
func (s *RestoreJobsListMember) SetIamRoleArn(v string) *RestoreJobsListMember {
	s.IamRoleArn = &v
	return s
}

// SetPercentDone sets the PercentDone field's value.
func (s *RestoreJobsListMember) SetPercentDone(v string) *RestoreJobsListMember {
	s.PercentDone = &v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *RestoreJobsListMember) SetRecoveryPointArn(v string) *RestoreJobsListMember {
	s.RecoveryPointArn = &v
	return s
}

// SetResourceType sets the ResourceType field's value.
func (s *RestoreJobsListMember) SetResourceType(v string) *RestoreJobsListMember {
	s.ResourceType = &v
	return s
}

// SetRestoreJobId sets the RestoreJobId field's value.
func (s *RestoreJobsListMember) SetRestoreJobId(v string) *RestoreJobsListMember {
	s.RestoreJobId = &v
	return s
}

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

// SetStatusMessage sets the StatusMessage field's value.
func (s *RestoreJobsListMember) SetStatusMessage(v string) *RestoreJobsListMember {
	s.StatusMessage = &v
	return s
}

// Specifies a scheduled task used to back up a selection of resources.
type Rule struct {
	_ struct{} `type:"structure"`

	// A value in minutes after a backup job is successfully started before it must
	// be completed or it will be canceled by AWS Backup. This value is optional.
	CompletionWindowMinutes *int64 `type:"long"`

	// An array of CopyAction objects, which contains the details of the copy operation.
	CopyActions []*CopyAction `type:"list"`

	// The lifecycle defines when a protected resource is transitioned to cold storage
	// and when it expires. AWS Backup transitions and expires backups automatically
	// according to the lifecycle that you define.
	//
	// Backups transitioned to cold storage must be stored in cold storage for a
	// minimum of 90 days. Therefore, the “expire after days” setting must be
	// 90 days greater than the “transition to cold after days” setting. The
	// “transition to cold after days” setting cannot be changed after a backup
	// has been transitioned to cold.
	//
	// Only Amazon EFS file system backups can be transitioned to cold storage.
	Lifecycle *Lifecycle `type:"structure"`

	// An array of key-value pair strings that are assigned to resources that are
	// associated with this rule when restored from backup.
	RecoveryPointTags map[string]*string `type:"map" sensitive:"true"`

	// Uniquely identifies a rule that is used to schedule the backup of a selection
	// of resources.
	RuleId *string `type:"string"`

	// An optional display name for a backup rule.
	//
	// RuleName is a required field
	RuleName *string `type:"string" required:"true"`

	// A CRON expression specifying when AWS Backup initiates a backup job. For
	// more information about cron expressions, see Schedule Expressions for Rules
	// (https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html)
	// in the Amazon CloudWatch Events User Guide.. Prior to specifying a value
	// for this parameter, we recommend testing your cron expression using one of
	// the many available cron generator and testing tools.
	ScheduleExpression *string `type:"string"`

	// A value in minutes after a backup is scheduled before a job will be canceled
	// if it doesn't start successfully. This value is optional.
	StartWindowMinutes *int64 `type:"long"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// TargetBackupVaultName is a required field
	TargetBackupVaultName *string `type:"string" required:"true"`
}

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

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

// SetCompletionWindowMinutes sets the CompletionWindowMinutes field's value.
func (s *Rule) SetCompletionWindowMinutes(v int64) *Rule {
	s.CompletionWindowMinutes = &v
	return s
}

// SetCopyActions sets the CopyActions field's value.
func (s *Rule) SetCopyActions(v []*CopyAction) *Rule {
	s.CopyActions = v
	return s
}

// SetLifecycle sets the Lifecycle field's value.
func (s *Rule) SetLifecycle(v *Lifecycle) *Rule {
	s.Lifecycle = v
	return s
}

// SetRecoveryPointTags sets the RecoveryPointTags field's value.
func (s *Rule) SetRecoveryPointTags(v map[string]*string) *Rule {
	s.RecoveryPointTags = v
	return s
}

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

// SetRuleName sets the RuleName field's value.
func (s *Rule) SetRuleName(v string) *Rule {
	s.RuleName = &v
	return s
}

// SetScheduleExpression sets the ScheduleExpression field's value.
func (s *Rule) SetScheduleExpression(v string) *Rule {
	s.ScheduleExpression = &v
	return s
}

// SetStartWindowMinutes sets the StartWindowMinutes field's value.
func (s *Rule) SetStartWindowMinutes(v int64) *Rule {
	s.StartWindowMinutes = &v
	return s
}

// SetTargetBackupVaultName sets the TargetBackupVaultName field's value.
func (s *Rule) SetTargetBackupVaultName(v string) *Rule {
	s.TargetBackupVaultName = &v
	return s
}

// Specifies a scheduled task used to back up a selection of resources.
type RuleInput struct {
	_ struct{} `type:"structure"`

	// A value in minutes after a backup job is successfully started before it must
	// be completed or it will be canceled by AWS Backup. This value is optional.
	CompletionWindowMinutes *int64 `type:"long"`

	// An array of CopyAction objects, which contains the details of the copy operation.
	CopyActions []*CopyAction `type:"list"`

	// The lifecycle defines when a protected resource is transitioned to cold storage
	// and when it expires. AWS Backup will transition and expire backups automatically
	// according to the lifecycle that you define.
	//
	// Backups transitioned to cold storage must be stored in cold storage for a
	// minimum of 90 days. Therefore, the “expire after days” setting must be
	// 90 days greater than the “transition to cold after days” setting. The
	// “transition to cold after days” setting cannot be changed after a backup
	// has been transitioned to cold.
	//
	// Only Amazon EFS file system backups can be transitioned to cold storage.
	Lifecycle *Lifecycle `type:"structure"`

	// To help organize your resources, you can assign your own metadata to the
	// resources that you create. Each tag is a key-value pair.
	RecoveryPointTags map[string]*string `type:"map" sensitive:"true"`

	// An optional display name for a backup rule.
	//
	// RuleName is a required field
	RuleName *string `type:"string" required:"true"`

	// A CRON expression specifying when AWS Backup initiates a backup job.
	ScheduleExpression *string `type:"string"`

	// A value in minutes after a backup is scheduled before a job will be canceled
	// if it doesn't start successfully. This value is optional.
	StartWindowMinutes *int64 `type:"long"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// TargetBackupVaultName is a required field
	TargetBackupVaultName *string `type:"string" required:"true"`
}

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

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

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

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

// SetCompletionWindowMinutes sets the CompletionWindowMinutes field's value.
func (s *RuleInput) SetCompletionWindowMinutes(v int64) *RuleInput {
	s.CompletionWindowMinutes = &v
	return s
}

// SetCopyActions sets the CopyActions field's value.
func (s *RuleInput) SetCopyActions(v []*CopyAction) *RuleInput {
	s.CopyActions = v
	return s
}

// SetLifecycle sets the Lifecycle field's value.
func (s *RuleInput) SetLifecycle(v *Lifecycle) *RuleInput {
	s.Lifecycle = v
	return s
}

// SetRecoveryPointTags sets the RecoveryPointTags field's value.
func (s *RuleInput) SetRecoveryPointTags(v map[string]*string) *RuleInput {
	s.RecoveryPointTags = v
	return s
}

// SetRuleName sets the RuleName field's value.
func (s *RuleInput) SetRuleName(v string) *RuleInput {
	s.RuleName = &v
	return s
}

// SetScheduleExpression sets the ScheduleExpression field's value.
func (s *RuleInput) SetScheduleExpression(v string) *RuleInput {
	s.ScheduleExpression = &v
	return s
}

// SetStartWindowMinutes sets the StartWindowMinutes field's value.
func (s *RuleInput) SetStartWindowMinutes(v int64) *RuleInput {
	s.StartWindowMinutes = &v
	return s
}

// SetTargetBackupVaultName sets the TargetBackupVaultName field's value.
func (s *RuleInput) SetTargetBackupVaultName(v string) *RuleInput {
	s.TargetBackupVaultName = &v
	return s
}

// Used to specify a set of resources to a backup plan.
type Selection struct {
	_ struct{} `type:"structure"`

	// The ARN of the IAM role that AWS Backup uses to authenticate when backing
	// up the target resource; for example, arn:aws:iam::123456789012:role/S3Access.
	//
	// IamRoleArn is a required field
	IamRoleArn *string `type:"string" required:"true"`

	// An array of conditions used to specify a set of resources to assign to a
	// backup plan; for example, "StringEquals": {"ec2:ResourceTag/Department":
	// "accounting". Assigns the backup plan to every resource with at least one
	// matching tag.
	ListOfTags []*Condition `type:"list"`

	// An array of strings that contain Amazon Resource Names (ARNs) of resources
	// to assign to a backup plan.
	Resources []*string `type:"list"`

	// The display name of a resource selection document.
	//
	// SelectionName is a required field
	SelectionName *string `type:"string" required:"true"`
}

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

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

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

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

// SetIamRoleArn sets the IamRoleArn field's value.
func (s *Selection) SetIamRoleArn(v string) *Selection {
	s.IamRoleArn = &v
	return s
}

// SetListOfTags sets the ListOfTags field's value.
func (s *Selection) SetListOfTags(v []*Condition) *Selection {
	s.ListOfTags = v
	return s
}

// SetResources sets the Resources field's value.
func (s *Selection) SetResources(v []*string) *Selection {
	s.Resources = v
	return s
}

// SetSelectionName sets the SelectionName field's value.
func (s *Selection) SetSelectionName(v string) *Selection {
	s.SelectionName = &v
	return s
}

// Contains metadata about a BackupSelection object.
type SelectionsListMember struct {
	_ struct{} `type:"structure"`

	// Uniquely identifies a backup plan.
	BackupPlanId *string `type:"string"`

	// The date and time a backup plan is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// A unique string that identifies the request and allows failed requests to
	// be retried without the risk of running the operation twice.
	CreatorRequestId *string `type:"string"`

	// Specifies the IAM role Amazon Resource Name (ARN) to create the target recovery
	// point; for example, arn:aws:iam::123456789012:role/S3Access.
	IamRoleArn *string `type:"string"`

	// Uniquely identifies a request to assign a set of resources to a backup plan.
	SelectionId *string `type:"string"`

	// The display name of a resource selection document.
	SelectionName *string `type:"string"`
}

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

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

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *SelectionsListMember) SetBackupPlanId(v string) *SelectionsListMember {
	s.BackupPlanId = &v
	return s
}

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

// SetCreatorRequestId sets the CreatorRequestId field's value.
func (s *SelectionsListMember) SetCreatorRequestId(v string) *SelectionsListMember {
	s.CreatorRequestId = &v
	return s
}

// SetIamRoleArn sets the IamRoleArn field's value.
func (s *SelectionsListMember) SetIamRoleArn(v string) *SelectionsListMember {
	s.IamRoleArn = &v
	return s
}

// SetSelectionId sets the SelectionId field's value.
func (s *SelectionsListMember) SetSelectionId(v string) *SelectionsListMember {
	s.SelectionId = &v
	return s
}

// SetSelectionName sets the SelectionName field's value.
func (s *SelectionsListMember) SetSelectionName(v string) *SelectionsListMember {
	s.SelectionName = &v
	return s
}

// The request failed due to a temporary failure of the server.
type ServiceUnavailableException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Code_ *string `locationName:"Code" type:"string"`

	Context *string `type:"string"`

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

	Type *string `type:"string"`
}

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

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

func newErrorServiceUnavailableException(v protocol.ResponseMetadata) error {
	return &ServiceUnavailableException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

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

	// Specifies the backup option for a selected resource. This option is only
	// available for Windows VSS backup jobs.
	//
	// Valid values: Set to "WindowsVSS”:“enabled" to enable WindowsVSS backup
	// option and create a VSS Windows backup. Set to “WindowsVSS”:”disabled”
	// to create a regular backup. The WindowsVSS option is not enabled by default.
	BackupOptions map[string]*string `type:"map"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `type:"string" required:"true"`

	// A value in minutes during which a successfully started backup must complete,
	// or else AWS Backup will cancel the job. This value is optional. This value
	// begins counting down from when the backup was scheduled. It does not add
	// additional time for StartWindowMinutes, or if the backup started later than
	// scheduled.
	CompleteWindowMinutes *int64 `type:"long"`

	// Specifies the IAM role ARN used to create the target recovery point; for
	// example, arn:aws:iam::123456789012:role/S3Access.
	//
	// IamRoleArn is a required field
	IamRoleArn *string `type:"string" required:"true"`

	// A customer chosen string that can be used to distinguish between calls to
	// StartBackupJob.
	IdempotencyToken *string `type:"string"`

	// The lifecycle defines when a protected resource is transitioned to cold storage
	// and when it expires. AWS Backup will transition and expire backups automatically
	// according to the lifecycle that you define.
	//
	// Backups transitioned to cold storage must be stored in cold storage for a
	// minimum of 90 days. Therefore, the “expire after days” setting must be
	// 90 days greater than the “transition to cold after days” setting. The
	// “transition to cold after days” setting cannot be changed after a backup
	// has been transitioned to cold.
	//
	// Only Amazon EFS file system backups can be transitioned to cold storage.
	Lifecycle *Lifecycle `type:"structure"`

	// To help organize your resources, you can assign your own metadata to the
	// resources that you create. Each tag is a key-value pair.
	RecoveryPointTags map[string]*string `type:"map" sensitive:"true"`

	// An Amazon Resource Name (ARN) that uniquely identifies a resource. The format
	// of the ARN depends on the resource type.
	//
	// ResourceArn is a required field
	ResourceArn *string `type:"string" required:"true"`

	// A value in minutes after a backup is scheduled before a job will be canceled
	// if it doesn't start successfully. This value is optional, and the default
	// is 8 hours.
	StartWindowMinutes *int64 `type:"long"`
}

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

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

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

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

// SetBackupOptions sets the BackupOptions field's value.
func (s *StartBackupJobInput) SetBackupOptions(v map[string]*string) *StartBackupJobInput {
	s.BackupOptions = v
	return s
}

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *StartBackupJobInput) SetBackupVaultName(v string) *StartBackupJobInput {
	s.BackupVaultName = &v
	return s
}

// SetCompleteWindowMinutes sets the CompleteWindowMinutes field's value.
func (s *StartBackupJobInput) SetCompleteWindowMinutes(v int64) *StartBackupJobInput {
	s.CompleteWindowMinutes = &v
	return s
}

// SetIamRoleArn sets the IamRoleArn field's value.
func (s *StartBackupJobInput) SetIamRoleArn(v string) *StartBackupJobInput {
	s.IamRoleArn = &v
	return s
}

// SetIdempotencyToken sets the IdempotencyToken field's value.
func (s *StartBackupJobInput) SetIdempotencyToken(v string) *StartBackupJobInput {
	s.IdempotencyToken = &v
	return s
}

// SetLifecycle sets the Lifecycle field's value.
func (s *StartBackupJobInput) SetLifecycle(v *Lifecycle) *StartBackupJobInput {
	s.Lifecycle = v
	return s
}

// SetRecoveryPointTags sets the RecoveryPointTags field's value.
func (s *StartBackupJobInput) SetRecoveryPointTags(v map[string]*string) *StartBackupJobInput {
	s.RecoveryPointTags = v
	return s
}

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

// SetStartWindowMinutes sets the StartWindowMinutes field's value.
func (s *StartBackupJobInput) SetStartWindowMinutes(v int64) *StartBackupJobInput {
	s.StartWindowMinutes = &v
	return s
}

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

	// Uniquely identifies a request to AWS Backup to back up a resource.
	BackupJobId *string `type:"string"`

	// The date and time that a backup job is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	RecoveryPointArn *string `type:"string"`
}

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

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

// SetBackupJobId sets the BackupJobId field's value.
func (s *StartBackupJobOutput) SetBackupJobId(v string) *StartBackupJobOutput {
	s.BackupJobId = &v
	return s
}

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

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *StartBackupJobOutput) SetRecoveryPointArn(v string) *StartBackupJobOutput {
	s.RecoveryPointArn = &v
	return s
}

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

	// An Amazon Resource Name (ARN) that uniquely identifies a destination backup
	// vault to copy to; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	//
	// DestinationBackupVaultArn is a required field
	DestinationBackupVaultArn *string `type:"string" required:"true"`

	// Specifies the IAM role ARN used to copy the target recovery point; for example,
	// arn:aws:iam::123456789012:role/S3Access.
	//
	// IamRoleArn is a required field
	IamRoleArn *string `type:"string" required:"true"`

	// A customer chosen string that can be used to distinguish between calls to
	// StartCopyJob.
	IdempotencyToken *string `type:"string"`

	// Contains an array of Transition objects specifying how long in days before
	// a recovery point transitions to cold storage or is deleted.
	//
	// Backups transitioned to cold storage must be stored in cold storage for a
	// minimum of 90 days. Therefore, on the console, the “expire after days”
	// setting must be 90 days greater than the “transition to cold after days”
	// setting. The “transition to cold after days” setting cannot be changed
	// after a backup has been transitioned to cold.
	//
	// Only Amazon EFS file system backups can be transitioned to cold storage.
	Lifecycle *Lifecycle `type:"structure"`

	// An ARN that uniquely identifies a recovery point to use for the copy job;
	// for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	//
	// RecoveryPointArn is a required field
	RecoveryPointArn *string `type:"string" required:"true"`

	// The name of a logical source container where backups are stored. Backup vaults
	// are identified by names that are unique to the account used to create them
	// and the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// SourceBackupVaultName is a required field
	SourceBackupVaultName *string `type:"string" required:"true"`
}

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

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

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

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

// SetDestinationBackupVaultArn sets the DestinationBackupVaultArn field's value.
func (s *StartCopyJobInput) SetDestinationBackupVaultArn(v string) *StartCopyJobInput {
	s.DestinationBackupVaultArn = &v
	return s
}

// SetIamRoleArn sets the IamRoleArn field's value.
func (s *StartCopyJobInput) SetIamRoleArn(v string) *StartCopyJobInput {
	s.IamRoleArn = &v
	return s
}

// SetIdempotencyToken sets the IdempotencyToken field's value.
func (s *StartCopyJobInput) SetIdempotencyToken(v string) *StartCopyJobInput {
	s.IdempotencyToken = &v
	return s
}

// SetLifecycle sets the Lifecycle field's value.
func (s *StartCopyJobInput) SetLifecycle(v *Lifecycle) *StartCopyJobInput {
	s.Lifecycle = v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *StartCopyJobInput) SetRecoveryPointArn(v string) *StartCopyJobInput {
	s.RecoveryPointArn = &v
	return s
}

// SetSourceBackupVaultName sets the SourceBackupVaultName field's value.
func (s *StartCopyJobInput) SetSourceBackupVaultName(v string) *StartCopyJobInput {
	s.SourceBackupVaultName = &v
	return s
}

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

	// Uniquely identifies a copy job.
	CopyJobId *string `type:"string"`

	// The date and time that a copy job is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`
}

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

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

// SetCopyJobId sets the CopyJobId field's value.
func (s *StartCopyJobOutput) SetCopyJobId(v string) *StartCopyJobOutput {
	s.CopyJobId = &v
	return s
}

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

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

	// The Amazon Resource Name (ARN) of the IAM role that AWS Backup uses to create
	// the target recovery point; for example, arn:aws:iam::123456789012:role/S3Access.
	//
	// IamRoleArn is a required field
	IamRoleArn *string `type:"string" required:"true"`

	// A customer chosen string that can be used to distinguish between calls to
	// StartRestoreJob.
	IdempotencyToken *string `type:"string"`

	// A set of metadata key-value pairs. Contains information, such as a resource
	// name, required to restore a recovery point.
	//
	// You can get configuration metadata about a resource at the time it was backed
	// up by calling GetRecoveryPointRestoreMetadata. However, values in addition
	// to those provided by GetRecoveryPointRestoreMetadata might be required to
	// restore a resource. For example, you might need to provide a new resource
	// name if the original already exists.
	//
	// You need to specify specific metadata to restore an Amazon Elastic File System
	// (Amazon EFS) instance:
	//
	//    * file-system-id: The ID of the Amazon EFS file system that is backed
	//    up by AWS Backup. Returned in GetRecoveryPointRestoreMetadata.
	//
	//    * Encrypted: A Boolean value that, if true, specifies that the file system
	//    is encrypted. If KmsKeyId is specified, Encrypted must be set to true.
	//
	//    * KmsKeyId: Specifies the AWS KMS key that is used to encrypt the restored
	//    file system. You can specify a key from another AWS account provided that
	//    key it is properly shared with your account via AWS KMS.
	//
	//    * PerformanceMode: Specifies the throughput mode of the file system.
	//
	//    * CreationToken: A user-supplied value that ensures the uniqueness (idempotency)
	//    of the request.
	//
	//    * newFileSystem: A Boolean value that, if true, specifies that the recovery
	//    point is restored to a new Amazon EFS file system.
	//
	//    * ItemsToRestore : An array of one to five strings where each string is
	//    a file path. Use ItemsToRestore to restore specific files or directories
	//    rather than the entire file system. This parameter is optional. For example,
	//    "itemsToRestore":"[\"/my.test\"]".
	//
	// Metadata is a required field
	Metadata map[string]*string `type:"map" required:"true" sensitive:"true"`

	// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	//
	// RecoveryPointArn is a required field
	RecoveryPointArn *string `type:"string" required:"true"`

	// Starts a job to restore a recovery point for one of the following resources:
	//
	//    * DynamoDB for Amazon DynamoDB
	//
	//    * EBS for Amazon Elastic Block Store
	//
	//    * EC2 for Amazon Elastic Compute Cloud
	//
	//    * EFS for Amazon Elastic File System
	//
	//    * RDS for Amazon Relational Database Service
	//
	//    * Aurora for Amazon Aurora
	//
	//    * Storage Gateway for AWS Storage Gateway
	ResourceType *string `type:"string"`
}

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

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

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

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

// SetIamRoleArn sets the IamRoleArn field's value.
func (s *StartRestoreJobInput) SetIamRoleArn(v string) *StartRestoreJobInput {
	s.IamRoleArn = &v
	return s
}

// SetIdempotencyToken sets the IdempotencyToken field's value.
func (s *StartRestoreJobInput) SetIdempotencyToken(v string) *StartRestoreJobInput {
	s.IdempotencyToken = &v
	return s
}

// SetMetadata sets the Metadata field's value.
func (s *StartRestoreJobInput) SetMetadata(v map[string]*string) *StartRestoreJobInput {
	s.Metadata = v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *StartRestoreJobInput) SetRecoveryPointArn(v string) *StartRestoreJobInput {
	s.RecoveryPointArn = &v
	return s
}

// SetResourceType sets the ResourceType field's value.
func (s *StartRestoreJobInput) SetResourceType(v string) *StartRestoreJobInput {
	s.ResourceType = &v
	return s
}

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

	// Uniquely identifies the job that restores a recovery point.
	RestoreJobId *string `type:"string"`
}

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

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

// SetRestoreJobId sets the RestoreJobId field's value.
func (s *StartRestoreJobOutput) SetRestoreJobId(v string) *StartRestoreJobOutput {
	s.RestoreJobId = &v
	return s
}

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

	// Uniquely identifies a request to AWS Backup to back up a resource.
	//
	// BackupJobId is a required field
	BackupJobId *string `location:"uri" locationName:"backupJobId" type:"string" required:"true"`
}

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

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

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

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

// SetBackupJobId sets the BackupJobId field's value.
func (s *StopBackupJobInput) SetBackupJobId(v string) *StopBackupJobInput {
	s.BackupJobId = &v
	return s
}

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

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

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

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

	// An ARN that uniquely identifies a resource. The format of the ARN depends
	// on the type of the tagged resource.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`

	// Key-value pairs that are used to help organize your resources. You can assign
	// your own metadata to the resources you create.
	//
	// Tags is a required field
	Tags map[string]*string `type:"map" required:"true" sensitive:"true"`
}

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

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

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

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

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

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

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

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

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

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

	// An ARN that uniquely identifies a resource. The format of the ARN depends
	// on the type of the tagged resource.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`

	// A list of keys to identify which key-value tags to remove from a resource.
	//
	// TagKeyList is a required field
	TagKeyList []*string `type:"list" required:"true" sensitive:"true"`
}

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

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

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

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

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

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

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

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

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

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

	// Specifies the body of a backup plan. Includes a BackupPlanName and one or
	// more sets of Rules.
	//
	// BackupPlan is a required field
	BackupPlan *PlanInput `type:"structure" required:"true"`

	// Uniquely identifies a backup plan.
	//
	// BackupPlanId is a required field
	BackupPlanId *string `location:"uri" locationName:"backupPlanId" type:"string" required:"true"`
}

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

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

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

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

// SetBackupPlan sets the BackupPlan field's value.
func (s *UpdateBackupPlanInput) SetBackupPlan(v *PlanInput) *UpdateBackupPlanInput {
	s.BackupPlan = v
	return s
}

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *UpdateBackupPlanInput) SetBackupPlanId(v string) *UpdateBackupPlanInput {
	s.BackupPlanId = &v
	return s
}

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

	// Contains a list of BackupOptions for each resource type.
	AdvancedBackupSettings []*AdvancedBackupSetting `type:"list"`

	// An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for
	// example, arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50.
	BackupPlanArn *string `type:"string"`

	// Uniquely identifies a backup plan.
	BackupPlanId *string `type:"string"`

	// The date and time a backup plan is updated, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most
	// 1,024 bytes long. Version Ids cannot be edited.
	VersionId *string `type:"string"`
}

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

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

// SetAdvancedBackupSettings sets the AdvancedBackupSettings field's value.
func (s *UpdateBackupPlanOutput) SetAdvancedBackupSettings(v []*AdvancedBackupSetting) *UpdateBackupPlanOutput {
	s.AdvancedBackupSettings = v
	return s
}

// SetBackupPlanArn sets the BackupPlanArn field's value.
func (s *UpdateBackupPlanOutput) SetBackupPlanArn(v string) *UpdateBackupPlanOutput {
	s.BackupPlanArn = &v
	return s
}

// SetBackupPlanId sets the BackupPlanId field's value.
func (s *UpdateBackupPlanOutput) SetBackupPlanId(v string) *UpdateBackupPlanOutput {
	s.BackupPlanId = &v
	return s
}

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

// SetVersionId sets the VersionId field's value.
func (s *UpdateBackupPlanOutput) SetVersionId(v string) *UpdateBackupPlanOutput {
	s.VersionId = &v
	return s
}

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

	// A list of resources along with the opt-in preferences for the account.
	GlobalSettings map[string]*string `type:"map"`
}

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

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

// SetGlobalSettings sets the GlobalSettings field's value.
func (s *UpdateGlobalSettingsInput) SetGlobalSettings(v map[string]*string) *UpdateGlobalSettingsInput {
	s.GlobalSettings = v
	return s
}

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

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

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

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

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	//
	// BackupVaultName is a required field
	BackupVaultName *string `location:"uri" locationName:"backupVaultName" type:"string" required:"true"`

	// The lifecycle defines when a protected resource is transitioned to cold storage
	// and when it expires. AWS Backup transitions and expires backups automatically
	// according to the lifecycle that you define.
	//
	// Backups transitioned to cold storage must be stored in cold storage for a
	// minimum of 90 days. Therefore, the “expire after days” setting must be
	// 90 days greater than the “transition to cold after days” setting. The
	// “transition to cold after days” setting cannot be changed after a backup
	// has been transitioned to cold.
	Lifecycle *Lifecycle `type:"structure"`

	// An Amazon Resource Name (ARN) that uniquely identifies a recovery point;
	// for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	//
	// RecoveryPointArn is a required field
	RecoveryPointArn *string `location:"uri" locationName:"recoveryPointArn" type:"string" required:"true"`
}

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

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

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

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

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *UpdateRecoveryPointLifecycleInput) SetBackupVaultName(v string) *UpdateRecoveryPointLifecycleInput {
	s.BackupVaultName = &v
	return s
}

// SetLifecycle sets the Lifecycle field's value.
func (s *UpdateRecoveryPointLifecycleInput) SetLifecycle(v *Lifecycle) *UpdateRecoveryPointLifecycleInput {
	s.Lifecycle = v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *UpdateRecoveryPointLifecycleInput) SetRecoveryPointArn(v string) *UpdateRecoveryPointLifecycleInput {
	s.RecoveryPointArn = &v
	return s
}

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

	// An ARN that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	BackupVaultArn *string `type:"string"`

	// A CalculatedLifecycle object containing DeleteAt and MoveToColdStorageAt
	// timestamps.
	CalculatedLifecycle *CalculatedLifecycle `type:"structure"`

	// The lifecycle defines when a protected resource is transitioned to cold storage
	// and when it expires. AWS Backup transitions and expires backups automatically
	// according to the lifecycle that you define.
	//
	// Backups transitioned to cold storage must be stored in cold storage for a
	// minimum of 90 days. Therefore, the “expire after days” setting must be
	// 90 days greater than the “transition to cold after days” setting. The
	// “transition to cold after days” setting cannot be changed after a backup
	// has been transitioned to cold.
	//
	// Only Amazon EFS file system backups can be transitioned to cold storage.
	Lifecycle *Lifecycle `type:"structure"`

	// An Amazon Resource Name (ARN) that uniquely identifies a recovery point;
	// for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
	RecoveryPointArn *string `type:"string"`
}

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

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

// SetBackupVaultArn sets the BackupVaultArn field's value.
func (s *UpdateRecoveryPointLifecycleOutput) SetBackupVaultArn(v string) *UpdateRecoveryPointLifecycleOutput {
	s.BackupVaultArn = &v
	return s
}

// SetCalculatedLifecycle sets the CalculatedLifecycle field's value.
func (s *UpdateRecoveryPointLifecycleOutput) SetCalculatedLifecycle(v *CalculatedLifecycle) *UpdateRecoveryPointLifecycleOutput {
	s.CalculatedLifecycle = v
	return s
}

// SetLifecycle sets the Lifecycle field's value.
func (s *UpdateRecoveryPointLifecycleOutput) SetLifecycle(v *Lifecycle) *UpdateRecoveryPointLifecycleOutput {
	s.Lifecycle = v
	return s
}

// SetRecoveryPointArn sets the RecoveryPointArn field's value.
func (s *UpdateRecoveryPointLifecycleOutput) SetRecoveryPointArn(v string) *UpdateRecoveryPointLifecycleOutput {
	s.RecoveryPointArn = &v
	return s
}

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

	// Updates the list of services along with the opt-in preferences for the Region.
	ResourceTypeOptInPreference map[string]*bool `type:"map"`
}

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

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

// SetResourceTypeOptInPreference sets the ResourceTypeOptInPreference field's value.
func (s *UpdateRegionSettingsInput) SetResourceTypeOptInPreference(v map[string]*bool) *UpdateRegionSettingsInput {
	s.ResourceTypeOptInPreference = v
	return s
}

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

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

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

// Contains metadata about a backup vault.
type VaultListMember struct {
	_ struct{} `type:"structure"`

	// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for
	// example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
	BackupVaultArn *string `type:"string"`

	// The name of a logical container where backups are stored. Backup vaults are
	// identified by names that are unique to the account used to create them and
	// the AWS Region where they are created. They consist of lowercase letters,
	// numbers, and hyphens.
	BackupVaultName *string `type:"string"`

	// The date and time a resource backup is created, in Unix format and Coordinated
	// Universal Time (UTC). The value of CreationDate is accurate to milliseconds.
	// For example, the value 1516925490.087 represents Friday, January 26, 2018
	// 12:11:30.087 AM.
	CreationDate *time.Time `type:"timestamp"`

	// A unique string that identifies the request and allows failed requests to
	// be retried without the risk of running the operation twice.
	CreatorRequestId *string `type:"string"`

	// The server-side encryption key that is used to protect your backups; for
	// example, arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab.
	EncryptionKeyArn *string `type:"string"`

	// The number of recovery points that are stored in a backup vault.
	NumberOfRecoveryPoints *int64 `type:"long"`
}

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

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

// SetBackupVaultArn sets the BackupVaultArn field's value.
func (s *VaultListMember) SetBackupVaultArn(v string) *VaultListMember {
	s.BackupVaultArn = &v
	return s
}

// SetBackupVaultName sets the BackupVaultName field's value.
func (s *VaultListMember) SetBackupVaultName(v string) *VaultListMember {
	s.BackupVaultName = &v
	return s
}

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

// SetCreatorRequestId sets the CreatorRequestId field's value.
func (s *VaultListMember) SetCreatorRequestId(v string) *VaultListMember {
	s.CreatorRequestId = &v
	return s
}

// SetEncryptionKeyArn sets the EncryptionKeyArn field's value.
func (s *VaultListMember) SetEncryptionKeyArn(v string) *VaultListMember {
	s.EncryptionKeyArn = &v
	return s
}

// SetNumberOfRecoveryPoints sets the NumberOfRecoveryPoints field's value.
func (s *VaultListMember) SetNumberOfRecoveryPoints(v int64) *VaultListMember {
	s.NumberOfRecoveryPoints = &v
	return s
}

const (
	// ConditionTypeStringequals is a ConditionType enum value
	ConditionTypeStringequals = "STRINGEQUALS"
)

// ConditionType_Values returns all elements of the ConditionType enum
func ConditionType_Values() []string {
	return []string{
		ConditionTypeStringequals,
	}
}

const (
	// CopyJobStateCreated is a CopyJobState enum value
	CopyJobStateCreated = "CREATED"

	// CopyJobStateRunning is a CopyJobState enum value
	CopyJobStateRunning = "RUNNING"

	// CopyJobStateCompleted is a CopyJobState enum value
	CopyJobStateCompleted = "COMPLETED"

	// CopyJobStateFailed is a CopyJobState enum value
	CopyJobStateFailed = "FAILED"
)

// CopyJobState_Values returns all elements of the CopyJobState enum
func CopyJobState_Values() []string {
	return []string{
		CopyJobStateCreated,
		CopyJobStateRunning,
		CopyJobStateCompleted,
		CopyJobStateFailed,
	}
}

const (
	// JobStateCreated is a JobState enum value
	JobStateCreated = "CREATED"

	// JobStatePending is a JobState enum value
	JobStatePending = "PENDING"

	// JobStateRunning is a JobState enum value
	JobStateRunning = "RUNNING"

	// JobStateAborting is a JobState enum value
	JobStateAborting = "ABORTING"

	// JobStateAborted is a JobState enum value
	JobStateAborted = "ABORTED"

	// JobStateCompleted is a JobState enum value
	JobStateCompleted = "COMPLETED"

	// JobStateFailed is a JobState enum value
	JobStateFailed = "FAILED"

	// JobStateExpired is a JobState enum value
	JobStateExpired = "EXPIRED"
)

// JobState_Values returns all elements of the JobState enum
func JobState_Values() []string {
	return []string{
		JobStateCreated,
		JobStatePending,
		JobStateRunning,
		JobStateAborting,
		JobStateAborted,
		JobStateCompleted,
		JobStateFailed,
		JobStateExpired,
	}
}

const (
	// RecoveryPointStatusCompleted is a RecoveryPointStatus enum value
	RecoveryPointStatusCompleted = "COMPLETED"

	// RecoveryPointStatusPartial is a RecoveryPointStatus enum value
	RecoveryPointStatusPartial = "PARTIAL"

	// RecoveryPointStatusDeleting is a RecoveryPointStatus enum value
	RecoveryPointStatusDeleting = "DELETING"

	// RecoveryPointStatusExpired is a RecoveryPointStatus enum value
	RecoveryPointStatusExpired = "EXPIRED"
)

// RecoveryPointStatus_Values returns all elements of the RecoveryPointStatus enum
func RecoveryPointStatus_Values() []string {
	return []string{
		RecoveryPointStatusCompleted,
		RecoveryPointStatusPartial,
		RecoveryPointStatusDeleting,
		RecoveryPointStatusExpired,
	}
}

const (
	// RestoreJobStatusPending is a RestoreJobStatus enum value
	RestoreJobStatusPending = "PENDING"

	// RestoreJobStatusRunning is a RestoreJobStatus enum value
	RestoreJobStatusRunning = "RUNNING"

	// RestoreJobStatusCompleted is a RestoreJobStatus enum value
	RestoreJobStatusCompleted = "COMPLETED"

	// RestoreJobStatusAborted is a RestoreJobStatus enum value
	RestoreJobStatusAborted = "ABORTED"

	// RestoreJobStatusFailed is a RestoreJobStatus enum value
	RestoreJobStatusFailed = "FAILED"
)

// RestoreJobStatus_Values returns all elements of the RestoreJobStatus enum
func RestoreJobStatus_Values() []string {
	return []string{
		RestoreJobStatusPending,
		RestoreJobStatusRunning,
		RestoreJobStatusCompleted,
		RestoreJobStatusAborted,
		RestoreJobStatusFailed,
	}
}

const (
	// StorageClassWarm is a StorageClass enum value
	StorageClassWarm = "WARM"

	// StorageClassCold is a StorageClass enum value
	StorageClassCold = "COLD"

	// StorageClassDeleted is a StorageClass enum value
	StorageClassDeleted = "DELETED"
)

// StorageClass_Values returns all elements of the StorageClass enum
func StorageClass_Values() []string {
	return []string{
		StorageClassWarm,
		StorageClassCold,
		StorageClassDeleted,
	}
}

const (
	// VaultEventBackupJobStarted is a VaultEvent enum value
	VaultEventBackupJobStarted = "BACKUP_JOB_STARTED"

	// VaultEventBackupJobCompleted is a VaultEvent enum value
	VaultEventBackupJobCompleted = "BACKUP_JOB_COMPLETED"

	// VaultEventBackupJobSuccessful is a VaultEvent enum value
	VaultEventBackupJobSuccessful = "BACKUP_JOB_SUCCESSFUL"

	// VaultEventBackupJobFailed is a VaultEvent enum value
	VaultEventBackupJobFailed = "BACKUP_JOB_FAILED"

	// VaultEventBackupJobExpired is a VaultEvent enum value
	VaultEventBackupJobExpired = "BACKUP_JOB_EXPIRED"

	// VaultEventRestoreJobStarted is a VaultEvent enum value
	VaultEventRestoreJobStarted = "RESTORE_JOB_STARTED"

	// VaultEventRestoreJobCompleted is a VaultEvent enum value
	VaultEventRestoreJobCompleted = "RESTORE_JOB_COMPLETED"

	// VaultEventRestoreJobSuccessful is a VaultEvent enum value
	VaultEventRestoreJobSuccessful = "RESTORE_JOB_SUCCESSFUL"

	// VaultEventRestoreJobFailed is a VaultEvent enum value
	VaultEventRestoreJobFailed = "RESTORE_JOB_FAILED"

	// VaultEventCopyJobStarted is a VaultEvent enum value
	VaultEventCopyJobStarted = "COPY_JOB_STARTED"

	// VaultEventCopyJobSuccessful is a VaultEvent enum value
	VaultEventCopyJobSuccessful = "COPY_JOB_SUCCESSFUL"

	// VaultEventCopyJobFailed is a VaultEvent enum value
	VaultEventCopyJobFailed = "COPY_JOB_FAILED"

	// VaultEventRecoveryPointModified is a VaultEvent enum value
	VaultEventRecoveryPointModified = "RECOVERY_POINT_MODIFIED"

	// VaultEventBackupPlanCreated is a VaultEvent enum value
	VaultEventBackupPlanCreated = "BACKUP_PLAN_CREATED"

	// VaultEventBackupPlanModified is a VaultEvent enum value
	VaultEventBackupPlanModified = "BACKUP_PLAN_MODIFIED"
)

// VaultEvent_Values returns all elements of the VaultEvent enum
func VaultEvent_Values() []string {
	return []string{
		VaultEventBackupJobStarted,
		VaultEventBackupJobCompleted,
		VaultEventBackupJobSuccessful,
		VaultEventBackupJobFailed,
		VaultEventBackupJobExpired,
		VaultEventRestoreJobStarted,
		VaultEventRestoreJobCompleted,
		VaultEventRestoreJobSuccessful,
		VaultEventRestoreJobFailed,
		VaultEventCopyJobStarted,
		VaultEventCopyJobSuccessful,
		VaultEventCopyJobFailed,
		VaultEventRecoveryPointModified,
		VaultEventBackupPlanCreated,
		VaultEventBackupPlanModified,
	}
}
