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

package drs

import (
	"fmt"

	"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 opCreateReplicationConfigurationTemplate = "CreateReplicationConfigurationTemplate"

// CreateReplicationConfigurationTemplateRequest generates a "aws/request.Request" representing the
// client's request for the CreateReplicationConfigurationTemplate 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 CreateReplicationConfigurationTemplate for more information on using the CreateReplicationConfigurationTemplate
// 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 CreateReplicationConfigurationTemplateRequest method.
//    req, resp := client.CreateReplicationConfigurationTemplateRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/CreateReplicationConfigurationTemplate
func (c *Drs) CreateReplicationConfigurationTemplateRequest(input *CreateReplicationConfigurationTemplateInput) (req *request.Request, output *CreateReplicationConfigurationTemplateOutput) {
	op := &request.Operation{
		Name:       opCreateReplicationConfigurationTemplate,
		HTTPMethod: "POST",
		HTTPPath:   "/CreateReplicationConfigurationTemplate",
	}

	if input == nil {
		input = &CreateReplicationConfigurationTemplateInput{}
	}

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

// CreateReplicationConfigurationTemplate API operation for Elastic Disaster Recovery Service.
//
// Creates a new ReplicationConfigurationTemplate.
//
// 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 Elastic Disaster Recovery Service's
// API operation CreateReplicationConfigurationTemplate for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ServiceQuotaExceededException
//   The request could not be completed because its exceeded the service quota.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * AccessDeniedException
//   TYou do not have sufficient access to perform this action.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/CreateReplicationConfigurationTemplate
func (c *Drs) CreateReplicationConfigurationTemplate(input *CreateReplicationConfigurationTemplateInput) (*CreateReplicationConfigurationTemplateOutput, error) {
	req, out := c.CreateReplicationConfigurationTemplateRequest(input)
	return out, req.Send()
}

// CreateReplicationConfigurationTemplateWithContext is the same as CreateReplicationConfigurationTemplate with the addition of
// the ability to pass a context and additional request options.
//
// See CreateReplicationConfigurationTemplate 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 *Drs) CreateReplicationConfigurationTemplateWithContext(ctx aws.Context, input *CreateReplicationConfigurationTemplateInput, opts ...request.Option) (*CreateReplicationConfigurationTemplateOutput, error) {
	req, out := c.CreateReplicationConfigurationTemplateRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteJob = "DeleteJob"

// DeleteJobRequest generates a "aws/request.Request" representing the
// client's request for the DeleteJob 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 DeleteJob for more information on using the DeleteJob
// 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 DeleteJobRequest method.
//    req, resp := client.DeleteJobRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DeleteJob
func (c *Drs) DeleteJobRequest(input *DeleteJobInput) (req *request.Request, output *DeleteJobOutput) {
	op := &request.Operation{
		Name:       opDeleteJob,
		HTTPMethod: "POST",
		HTTPPath:   "/DeleteJob",
	}

	if input == nil {
		input = &DeleteJobInput{}
	}

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

// DeleteJob API operation for Elastic Disaster Recovery Service.
//
// Deletes a single Job by 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 Elastic Disaster Recovery Service's
// API operation DeleteJob for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ConflictException
//   The request could not be completed due to a conflict with the current state
//   of the target resource.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DeleteJob
func (c *Drs) DeleteJob(input *DeleteJobInput) (*DeleteJobOutput, error) {
	req, out := c.DeleteJobRequest(input)
	return out, req.Send()
}

// DeleteJobWithContext is the same as DeleteJob with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteJob 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 *Drs) DeleteJobWithContext(ctx aws.Context, input *DeleteJobInput, opts ...request.Option) (*DeleteJobOutput, error) {
	req, out := c.DeleteJobRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteRecoveryInstance = "DeleteRecoveryInstance"

// DeleteRecoveryInstanceRequest generates a "aws/request.Request" representing the
// client's request for the DeleteRecoveryInstance 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 DeleteRecoveryInstance for more information on using the DeleteRecoveryInstance
// 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 DeleteRecoveryInstanceRequest method.
//    req, resp := client.DeleteRecoveryInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DeleteRecoveryInstance
func (c *Drs) DeleteRecoveryInstanceRequest(input *DeleteRecoveryInstanceInput) (req *request.Request, output *DeleteRecoveryInstanceOutput) {
	op := &request.Operation{
		Name:       opDeleteRecoveryInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/DeleteRecoveryInstance",
	}

	if input == nil {
		input = &DeleteRecoveryInstanceInput{}
	}

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

// DeleteRecoveryInstance API operation for Elastic Disaster Recovery Service.
//
// Deletes a single Recovery Instance by ID. This deletes the Recovery Instance
// resource from Elastic Disaster Recovery. The Recovery Instance must be disconnected
// first in order to delete it.
//
// 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 Elastic Disaster Recovery Service's
// API operation DeleteRecoveryInstance for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ConflictException
//   The request could not be completed due to a conflict with the current state
//   of the target resource.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * AccessDeniedException
//   TYou do not have sufficient access to perform this action.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DeleteRecoveryInstance
func (c *Drs) DeleteRecoveryInstance(input *DeleteRecoveryInstanceInput) (*DeleteRecoveryInstanceOutput, error) {
	req, out := c.DeleteRecoveryInstanceRequest(input)
	return out, req.Send()
}

// DeleteRecoveryInstanceWithContext is the same as DeleteRecoveryInstance with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteRecoveryInstance 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 *Drs) DeleteRecoveryInstanceWithContext(ctx aws.Context, input *DeleteRecoveryInstanceInput, opts ...request.Option) (*DeleteRecoveryInstanceOutput, error) {
	req, out := c.DeleteRecoveryInstanceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteReplicationConfigurationTemplate = "DeleteReplicationConfigurationTemplate"

// DeleteReplicationConfigurationTemplateRequest generates a "aws/request.Request" representing the
// client's request for the DeleteReplicationConfigurationTemplate 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 DeleteReplicationConfigurationTemplate for more information on using the DeleteReplicationConfigurationTemplate
// 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 DeleteReplicationConfigurationTemplateRequest method.
//    req, resp := client.DeleteReplicationConfigurationTemplateRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DeleteReplicationConfigurationTemplate
func (c *Drs) DeleteReplicationConfigurationTemplateRequest(input *DeleteReplicationConfigurationTemplateInput) (req *request.Request, output *DeleteReplicationConfigurationTemplateOutput) {
	op := &request.Operation{
		Name:       opDeleteReplicationConfigurationTemplate,
		HTTPMethod: "POST",
		HTTPPath:   "/DeleteReplicationConfigurationTemplate",
	}

	if input == nil {
		input = &DeleteReplicationConfigurationTemplateInput{}
	}

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

// DeleteReplicationConfigurationTemplate API operation for Elastic Disaster Recovery Service.
//
// Deletes a single Replication Configuration Template by 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 Elastic Disaster Recovery Service's
// API operation DeleteReplicationConfigurationTemplate for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ConflictException
//   The request could not be completed due to a conflict with the current state
//   of the target resource.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DeleteReplicationConfigurationTemplate
func (c *Drs) DeleteReplicationConfigurationTemplate(input *DeleteReplicationConfigurationTemplateInput) (*DeleteReplicationConfigurationTemplateOutput, error) {
	req, out := c.DeleteReplicationConfigurationTemplateRequest(input)
	return out, req.Send()
}

// DeleteReplicationConfigurationTemplateWithContext is the same as DeleteReplicationConfigurationTemplate with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteReplicationConfigurationTemplate 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 *Drs) DeleteReplicationConfigurationTemplateWithContext(ctx aws.Context, input *DeleteReplicationConfigurationTemplateInput, opts ...request.Option) (*DeleteReplicationConfigurationTemplateOutput, error) {
	req, out := c.DeleteReplicationConfigurationTemplateRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteSourceServer = "DeleteSourceServer"

// DeleteSourceServerRequest generates a "aws/request.Request" representing the
// client's request for the DeleteSourceServer 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 DeleteSourceServer for more information on using the DeleteSourceServer
// 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 DeleteSourceServerRequest method.
//    req, resp := client.DeleteSourceServerRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DeleteSourceServer
func (c *Drs) DeleteSourceServerRequest(input *DeleteSourceServerInput) (req *request.Request, output *DeleteSourceServerOutput) {
	op := &request.Operation{
		Name:       opDeleteSourceServer,
		HTTPMethod: "POST",
		HTTPPath:   "/DeleteSourceServer",
	}

	if input == nil {
		input = &DeleteSourceServerInput{}
	}

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

// DeleteSourceServer API operation for Elastic Disaster Recovery Service.
//
// Deletes a single Source Server by ID. The Source Server must be disconnected
// first.
//
// 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 Elastic Disaster Recovery Service's
// API operation DeleteSourceServer for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ConflictException
//   The request could not be completed due to a conflict with the current state
//   of the target resource.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DeleteSourceServer
func (c *Drs) DeleteSourceServer(input *DeleteSourceServerInput) (*DeleteSourceServerOutput, error) {
	req, out := c.DeleteSourceServerRequest(input)
	return out, req.Send()
}

// DeleteSourceServerWithContext is the same as DeleteSourceServer with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteSourceServer 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 *Drs) DeleteSourceServerWithContext(ctx aws.Context, input *DeleteSourceServerInput, opts ...request.Option) (*DeleteSourceServerOutput, error) {
	req, out := c.DeleteSourceServerRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeJobLogItems = "DescribeJobLogItems"

// DescribeJobLogItemsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeJobLogItems 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 DescribeJobLogItems for more information on using the DescribeJobLogItems
// 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 DescribeJobLogItemsRequest method.
//    req, resp := client.DescribeJobLogItemsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DescribeJobLogItems
func (c *Drs) DescribeJobLogItemsRequest(input *DescribeJobLogItemsInput) (req *request.Request, output *DescribeJobLogItemsOutput) {
	op := &request.Operation{
		Name:       opDescribeJobLogItems,
		HTTPMethod: "POST",
		HTTPPath:   "/DescribeJobLogItems",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &DescribeJobLogItemsInput{}
	}

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

// DescribeJobLogItems API operation for Elastic Disaster Recovery Service.
//
// Retrieves a detailed Job log with pagination.
//
// 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 Elastic Disaster Recovery Service's
// API operation DescribeJobLogItems for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DescribeJobLogItems
func (c *Drs) DescribeJobLogItems(input *DescribeJobLogItemsInput) (*DescribeJobLogItemsOutput, error) {
	req, out := c.DescribeJobLogItemsRequest(input)
	return out, req.Send()
}

// DescribeJobLogItemsWithContext is the same as DescribeJobLogItems with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeJobLogItems 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 *Drs) DescribeJobLogItemsWithContext(ctx aws.Context, input *DescribeJobLogItemsInput, opts ...request.Option) (*DescribeJobLogItemsOutput, error) {
	req, out := c.DescribeJobLogItemsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// DescribeJobLogItemsPages iterates over the pages of a DescribeJobLogItems operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See DescribeJobLogItems 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 DescribeJobLogItems operation.
//    pageNum := 0
//    err := client.DescribeJobLogItemsPages(params,
//        func(page *drs.DescribeJobLogItemsOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *Drs) DescribeJobLogItemsPages(input *DescribeJobLogItemsInput, fn func(*DescribeJobLogItemsOutput, bool) bool) error {
	return c.DescribeJobLogItemsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// DescribeJobLogItemsPagesWithContext same as DescribeJobLogItemsPages 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 *Drs) DescribeJobLogItemsPagesWithContext(ctx aws.Context, input *DescribeJobLogItemsInput, fn func(*DescribeJobLogItemsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *DescribeJobLogItemsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.DescribeJobLogItemsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opDescribeJobs = "DescribeJobs"

// DescribeJobsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeJobs 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 DescribeJobs for more information on using the DescribeJobs
// 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 DescribeJobsRequest method.
//    req, resp := client.DescribeJobsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DescribeJobs
func (c *Drs) DescribeJobsRequest(input *DescribeJobsInput) (req *request.Request, output *DescribeJobsOutput) {
	op := &request.Operation{
		Name:       opDescribeJobs,
		HTTPMethod: "POST",
		HTTPPath:   "/DescribeJobs",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &DescribeJobsInput{}
	}

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

// DescribeJobs API operation for Elastic Disaster Recovery Service.
//
// Returns a list of Jobs. Use the JobsID and fromDate and toDate filters to
// limit which jobs are returned. The response is sorted by creationDataTime
// - latest date first. Jobs are created by the StartRecovery, TerminateRecoveryInstances
// and StartFailbackLaunch APIs. Jobs are also created by DiagnosticLaunch and
// TerminateDiagnosticInstances, which are APIs available only to *Support*
// and only used in response to relevant support tickets.
//
// 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 Elastic Disaster Recovery Service's
// API operation DescribeJobs for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DescribeJobs
func (c *Drs) DescribeJobs(input *DescribeJobsInput) (*DescribeJobsOutput, error) {
	req, out := c.DescribeJobsRequest(input)
	return out, req.Send()
}

// DescribeJobsWithContext is the same as DescribeJobs with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeJobs 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 *Drs) DescribeJobsWithContext(ctx aws.Context, input *DescribeJobsInput, opts ...request.Option) (*DescribeJobsOutput, error) {
	req, out := c.DescribeJobsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// DescribeJobsPages iterates over the pages of a DescribeJobs operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See DescribeJobs 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 DescribeJobs operation.
//    pageNum := 0
//    err := client.DescribeJobsPages(params,
//        func(page *drs.DescribeJobsOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *Drs) DescribeJobsPages(input *DescribeJobsInput, fn func(*DescribeJobsOutput, bool) bool) error {
	return c.DescribeJobsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// DescribeJobsPagesWithContext same as DescribeJobsPages 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 *Drs) DescribeJobsPagesWithContext(ctx aws.Context, input *DescribeJobsInput, fn func(*DescribeJobsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *DescribeJobsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.DescribeJobsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opDescribeRecoveryInstances = "DescribeRecoveryInstances"

// DescribeRecoveryInstancesRequest generates a "aws/request.Request" representing the
// client's request for the DescribeRecoveryInstances 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 DescribeRecoveryInstances for more information on using the DescribeRecoveryInstances
// 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 DescribeRecoveryInstancesRequest method.
//    req, resp := client.DescribeRecoveryInstancesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DescribeRecoveryInstances
func (c *Drs) DescribeRecoveryInstancesRequest(input *DescribeRecoveryInstancesInput) (req *request.Request, output *DescribeRecoveryInstancesOutput) {
	op := &request.Operation{
		Name:       opDescribeRecoveryInstances,
		HTTPMethod: "POST",
		HTTPPath:   "/DescribeRecoveryInstances",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &DescribeRecoveryInstancesInput{}
	}

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

// DescribeRecoveryInstances API operation for Elastic Disaster Recovery Service.
//
// Lists all Recovery Instances or multiple Recovery Instances by 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 Elastic Disaster Recovery Service's
// API operation DescribeRecoveryInstances for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * AccessDeniedException
//   TYou do not have sufficient access to perform this action.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DescribeRecoveryInstances
func (c *Drs) DescribeRecoveryInstances(input *DescribeRecoveryInstancesInput) (*DescribeRecoveryInstancesOutput, error) {
	req, out := c.DescribeRecoveryInstancesRequest(input)
	return out, req.Send()
}

// DescribeRecoveryInstancesWithContext is the same as DescribeRecoveryInstances with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeRecoveryInstances 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 *Drs) DescribeRecoveryInstancesWithContext(ctx aws.Context, input *DescribeRecoveryInstancesInput, opts ...request.Option) (*DescribeRecoveryInstancesOutput, error) {
	req, out := c.DescribeRecoveryInstancesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// DescribeRecoveryInstancesPages iterates over the pages of a DescribeRecoveryInstances operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See DescribeRecoveryInstances 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 DescribeRecoveryInstances operation.
//    pageNum := 0
//    err := client.DescribeRecoveryInstancesPages(params,
//        func(page *drs.DescribeRecoveryInstancesOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *Drs) DescribeRecoveryInstancesPages(input *DescribeRecoveryInstancesInput, fn func(*DescribeRecoveryInstancesOutput, bool) bool) error {
	return c.DescribeRecoveryInstancesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// DescribeRecoveryInstancesPagesWithContext same as DescribeRecoveryInstancesPages 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 *Drs) DescribeRecoveryInstancesPagesWithContext(ctx aws.Context, input *DescribeRecoveryInstancesInput, fn func(*DescribeRecoveryInstancesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *DescribeRecoveryInstancesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.DescribeRecoveryInstancesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opDescribeRecoverySnapshots = "DescribeRecoverySnapshots"

// DescribeRecoverySnapshotsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeRecoverySnapshots 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 DescribeRecoverySnapshots for more information on using the DescribeRecoverySnapshots
// 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 DescribeRecoverySnapshotsRequest method.
//    req, resp := client.DescribeRecoverySnapshotsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DescribeRecoverySnapshots
func (c *Drs) DescribeRecoverySnapshotsRequest(input *DescribeRecoverySnapshotsInput) (req *request.Request, output *DescribeRecoverySnapshotsOutput) {
	op := &request.Operation{
		Name:       opDescribeRecoverySnapshots,
		HTTPMethod: "POST",
		HTTPPath:   "/DescribeRecoverySnapshots",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &DescribeRecoverySnapshotsInput{}
	}

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

// DescribeRecoverySnapshots API operation for Elastic Disaster Recovery Service.
//
// Lists all Recovery Snapshots for a single Source Server.
//
// 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 Elastic Disaster Recovery Service's
// API operation DescribeRecoverySnapshots for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * AccessDeniedException
//   TYou do not have sufficient access to perform this action.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DescribeRecoverySnapshots
func (c *Drs) DescribeRecoverySnapshots(input *DescribeRecoverySnapshotsInput) (*DescribeRecoverySnapshotsOutput, error) {
	req, out := c.DescribeRecoverySnapshotsRequest(input)
	return out, req.Send()
}

// DescribeRecoverySnapshotsWithContext is the same as DescribeRecoverySnapshots with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeRecoverySnapshots 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 *Drs) DescribeRecoverySnapshotsWithContext(ctx aws.Context, input *DescribeRecoverySnapshotsInput, opts ...request.Option) (*DescribeRecoverySnapshotsOutput, error) {
	req, out := c.DescribeRecoverySnapshotsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// DescribeRecoverySnapshotsPages iterates over the pages of a DescribeRecoverySnapshots operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See DescribeRecoverySnapshots 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 DescribeRecoverySnapshots operation.
//    pageNum := 0
//    err := client.DescribeRecoverySnapshotsPages(params,
//        func(page *drs.DescribeRecoverySnapshotsOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *Drs) DescribeRecoverySnapshotsPages(input *DescribeRecoverySnapshotsInput, fn func(*DescribeRecoverySnapshotsOutput, bool) bool) error {
	return c.DescribeRecoverySnapshotsPagesWithContext(aws.BackgroundContext(), input, fn)
}

// DescribeRecoverySnapshotsPagesWithContext same as DescribeRecoverySnapshotsPages 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 *Drs) DescribeRecoverySnapshotsPagesWithContext(ctx aws.Context, input *DescribeRecoverySnapshotsInput, fn func(*DescribeRecoverySnapshotsOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *DescribeRecoverySnapshotsInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.DescribeRecoverySnapshotsRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opDescribeReplicationConfigurationTemplates = "DescribeReplicationConfigurationTemplates"

// DescribeReplicationConfigurationTemplatesRequest generates a "aws/request.Request" representing the
// client's request for the DescribeReplicationConfigurationTemplates 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 DescribeReplicationConfigurationTemplates for more information on using the DescribeReplicationConfigurationTemplates
// 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 DescribeReplicationConfigurationTemplatesRequest method.
//    req, resp := client.DescribeReplicationConfigurationTemplatesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DescribeReplicationConfigurationTemplates
func (c *Drs) DescribeReplicationConfigurationTemplatesRequest(input *DescribeReplicationConfigurationTemplatesInput) (req *request.Request, output *DescribeReplicationConfigurationTemplatesOutput) {
	op := &request.Operation{
		Name:       opDescribeReplicationConfigurationTemplates,
		HTTPMethod: "POST",
		HTTPPath:   "/DescribeReplicationConfigurationTemplates",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &DescribeReplicationConfigurationTemplatesInput{}
	}

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

// DescribeReplicationConfigurationTemplates API operation for Elastic Disaster Recovery Service.
//
// Lists all ReplicationConfigurationTemplates, filtered by Source Server 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 Elastic Disaster Recovery Service's
// API operation DescribeReplicationConfigurationTemplates for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DescribeReplicationConfigurationTemplates
func (c *Drs) DescribeReplicationConfigurationTemplates(input *DescribeReplicationConfigurationTemplatesInput) (*DescribeReplicationConfigurationTemplatesOutput, error) {
	req, out := c.DescribeReplicationConfigurationTemplatesRequest(input)
	return out, req.Send()
}

// DescribeReplicationConfigurationTemplatesWithContext is the same as DescribeReplicationConfigurationTemplates with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeReplicationConfigurationTemplates 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 *Drs) DescribeReplicationConfigurationTemplatesWithContext(ctx aws.Context, input *DescribeReplicationConfigurationTemplatesInput, opts ...request.Option) (*DescribeReplicationConfigurationTemplatesOutput, error) {
	req, out := c.DescribeReplicationConfigurationTemplatesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// DescribeReplicationConfigurationTemplatesPages iterates over the pages of a DescribeReplicationConfigurationTemplates operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See DescribeReplicationConfigurationTemplates 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 DescribeReplicationConfigurationTemplates operation.
//    pageNum := 0
//    err := client.DescribeReplicationConfigurationTemplatesPages(params,
//        func(page *drs.DescribeReplicationConfigurationTemplatesOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *Drs) DescribeReplicationConfigurationTemplatesPages(input *DescribeReplicationConfigurationTemplatesInput, fn func(*DescribeReplicationConfigurationTemplatesOutput, bool) bool) error {
	return c.DescribeReplicationConfigurationTemplatesPagesWithContext(aws.BackgroundContext(), input, fn)
}

// DescribeReplicationConfigurationTemplatesPagesWithContext same as DescribeReplicationConfigurationTemplatesPages 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 *Drs) DescribeReplicationConfigurationTemplatesPagesWithContext(ctx aws.Context, input *DescribeReplicationConfigurationTemplatesInput, fn func(*DescribeReplicationConfigurationTemplatesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *DescribeReplicationConfigurationTemplatesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.DescribeReplicationConfigurationTemplatesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opDescribeSourceServers = "DescribeSourceServers"

// DescribeSourceServersRequest generates a "aws/request.Request" representing the
// client's request for the DescribeSourceServers 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 DescribeSourceServers for more information on using the DescribeSourceServers
// 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 DescribeSourceServersRequest method.
//    req, resp := client.DescribeSourceServersRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DescribeSourceServers
func (c *Drs) DescribeSourceServersRequest(input *DescribeSourceServersInput) (req *request.Request, output *DescribeSourceServersOutput) {
	op := &request.Operation{
		Name:       opDescribeSourceServers,
		HTTPMethod: "POST",
		HTTPPath:   "/DescribeSourceServers",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &DescribeSourceServersInput{}
	}

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

// DescribeSourceServers API operation for Elastic Disaster Recovery Service.
//
// Lists all Source Servers or multiple Source Servers filtered by 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 Elastic Disaster Recovery Service's
// API operation DescribeSourceServers for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DescribeSourceServers
func (c *Drs) DescribeSourceServers(input *DescribeSourceServersInput) (*DescribeSourceServersOutput, error) {
	req, out := c.DescribeSourceServersRequest(input)
	return out, req.Send()
}

// DescribeSourceServersWithContext is the same as DescribeSourceServers with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeSourceServers 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 *Drs) DescribeSourceServersWithContext(ctx aws.Context, input *DescribeSourceServersInput, opts ...request.Option) (*DescribeSourceServersOutput, error) {
	req, out := c.DescribeSourceServersRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// DescribeSourceServersPages iterates over the pages of a DescribeSourceServers operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See DescribeSourceServers 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 DescribeSourceServers operation.
//    pageNum := 0
//    err := client.DescribeSourceServersPages(params,
//        func(page *drs.DescribeSourceServersOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *Drs) DescribeSourceServersPages(input *DescribeSourceServersInput, fn func(*DescribeSourceServersOutput, bool) bool) error {
	return c.DescribeSourceServersPagesWithContext(aws.BackgroundContext(), input, fn)
}

// DescribeSourceServersPagesWithContext same as DescribeSourceServersPages 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 *Drs) DescribeSourceServersPagesWithContext(ctx aws.Context, input *DescribeSourceServersInput, fn func(*DescribeSourceServersOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *DescribeSourceServersInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.DescribeSourceServersRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opDisconnectRecoveryInstance = "DisconnectRecoveryInstance"

// DisconnectRecoveryInstanceRequest generates a "aws/request.Request" representing the
// client's request for the DisconnectRecoveryInstance 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 DisconnectRecoveryInstance for more information on using the DisconnectRecoveryInstance
// 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 DisconnectRecoveryInstanceRequest method.
//    req, resp := client.DisconnectRecoveryInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DisconnectRecoveryInstance
func (c *Drs) DisconnectRecoveryInstanceRequest(input *DisconnectRecoveryInstanceInput) (req *request.Request, output *DisconnectRecoveryInstanceOutput) {
	op := &request.Operation{
		Name:       opDisconnectRecoveryInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/DisconnectRecoveryInstance",
	}

	if input == nil {
		input = &DisconnectRecoveryInstanceInput{}
	}

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

// DisconnectRecoveryInstance API operation for Elastic Disaster Recovery Service.
//
// Disconnect a Recovery Instance from Elastic Disaster Recovery. Data replication
// is stopped immediately. All AWS resources created by Elastic Disaster Recovery
// for enabling the replication of the Recovery Instance will be terminated
// / deleted within 90 minutes. If the agent on the Recovery Instance has not
// been prevented from communicating with the Elastic Disaster Recovery service,
// then it will receive a command to uninstall itself (within approximately
// 10 minutes). The following properties of the Recovery Instance will be changed
// immediately: dataReplicationInfo.dataReplicationState will be set to DISCONNECTED;
// The totalStorageBytes property for each of dataReplicationInfo.replicatedDisks
// will be set to zero; dataReplicationInfo.lagDuration and dataReplicationInfo.lagDuration
// will be nullified.
//
// 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 Elastic Disaster Recovery Service's
// API operation DisconnectRecoveryInstance for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ConflictException
//   The request could not be completed due to a conflict with the current state
//   of the target resource.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * AccessDeniedException
//   TYou do not have sufficient access to perform this action.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DisconnectRecoveryInstance
func (c *Drs) DisconnectRecoveryInstance(input *DisconnectRecoveryInstanceInput) (*DisconnectRecoveryInstanceOutput, error) {
	req, out := c.DisconnectRecoveryInstanceRequest(input)
	return out, req.Send()
}

// DisconnectRecoveryInstanceWithContext is the same as DisconnectRecoveryInstance with the addition of
// the ability to pass a context and additional request options.
//
// See DisconnectRecoveryInstance 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 *Drs) DisconnectRecoveryInstanceWithContext(ctx aws.Context, input *DisconnectRecoveryInstanceInput, opts ...request.Option) (*DisconnectRecoveryInstanceOutput, error) {
	req, out := c.DisconnectRecoveryInstanceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDisconnectSourceServer = "DisconnectSourceServer"

// DisconnectSourceServerRequest generates a "aws/request.Request" representing the
// client's request for the DisconnectSourceServer 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 DisconnectSourceServer for more information on using the DisconnectSourceServer
// 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 DisconnectSourceServerRequest method.
//    req, resp := client.DisconnectSourceServerRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DisconnectSourceServer
func (c *Drs) DisconnectSourceServerRequest(input *DisconnectSourceServerInput) (req *request.Request, output *DisconnectSourceServerOutput) {
	op := &request.Operation{
		Name:       opDisconnectSourceServer,
		HTTPMethod: "POST",
		HTTPPath:   "/DisconnectSourceServer",
	}

	if input == nil {
		input = &DisconnectSourceServerInput{}
	}

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

// DisconnectSourceServer API operation for Elastic Disaster Recovery Service.
//
// Disconnects a specific Source Server from Elastic Disaster Recovery. Data
// replication is stopped immediately. All AWS resources created by Elastic
// Disaster Recovery for enabling the replication of the Source Server will
// be terminated / deleted within 90 minutes. You cannot disconnect a Source
// Server if it has a Recovery Instance. If the agent on the Source Server has
// not been prevented from communicating with the Elastic Disaster Recovery
// service, then it will receive a command to uninstall itself (within approximately
// 10 minutes). The following properties of the SourceServer will be changed
// immediately: dataReplicationInfo.dataReplicationState will be set to DISCONNECTED;
// The totalStorageBytes property for each of dataReplicationInfo.replicatedDisks
// will be set to zero; dataReplicationInfo.lagDuration and dataReplicationInfo.lagDuration
// will be nullified.
//
// 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 Elastic Disaster Recovery Service's
// API operation DisconnectSourceServer for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ConflictException
//   The request could not be completed due to a conflict with the current state
//   of the target resource.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/DisconnectSourceServer
func (c *Drs) DisconnectSourceServer(input *DisconnectSourceServerInput) (*DisconnectSourceServerOutput, error) {
	req, out := c.DisconnectSourceServerRequest(input)
	return out, req.Send()
}

// DisconnectSourceServerWithContext is the same as DisconnectSourceServer with the addition of
// the ability to pass a context and additional request options.
//
// See DisconnectSourceServer 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 *Drs) DisconnectSourceServerWithContext(ctx aws.Context, input *DisconnectSourceServerInput, opts ...request.Option) (*DisconnectSourceServerOutput, error) {
	req, out := c.DisconnectSourceServerRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetFailbackReplicationConfiguration = "GetFailbackReplicationConfiguration"

// GetFailbackReplicationConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the GetFailbackReplicationConfiguration 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 GetFailbackReplicationConfiguration for more information on using the GetFailbackReplicationConfiguration
// 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 GetFailbackReplicationConfigurationRequest method.
//    req, resp := client.GetFailbackReplicationConfigurationRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/GetFailbackReplicationConfiguration
func (c *Drs) GetFailbackReplicationConfigurationRequest(input *GetFailbackReplicationConfigurationInput) (req *request.Request, output *GetFailbackReplicationConfigurationOutput) {
	op := &request.Operation{
		Name:       opGetFailbackReplicationConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/GetFailbackReplicationConfiguration",
	}

	if input == nil {
		input = &GetFailbackReplicationConfigurationInput{}
	}

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

// GetFailbackReplicationConfiguration API operation for Elastic Disaster Recovery Service.
//
// Lists all Failback ReplicationConfigurations, filtered by Recovery Instance
// 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 Elastic Disaster Recovery Service's
// API operation GetFailbackReplicationConfiguration for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/GetFailbackReplicationConfiguration
func (c *Drs) GetFailbackReplicationConfiguration(input *GetFailbackReplicationConfigurationInput) (*GetFailbackReplicationConfigurationOutput, error) {
	req, out := c.GetFailbackReplicationConfigurationRequest(input)
	return out, req.Send()
}

// GetFailbackReplicationConfigurationWithContext is the same as GetFailbackReplicationConfiguration with the addition of
// the ability to pass a context and additional request options.
//
// See GetFailbackReplicationConfiguration 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 *Drs) GetFailbackReplicationConfigurationWithContext(ctx aws.Context, input *GetFailbackReplicationConfigurationInput, opts ...request.Option) (*GetFailbackReplicationConfigurationOutput, error) {
	req, out := c.GetFailbackReplicationConfigurationRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetLaunchConfiguration = "GetLaunchConfiguration"

// GetLaunchConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the GetLaunchConfiguration 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 GetLaunchConfiguration for more information on using the GetLaunchConfiguration
// 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 GetLaunchConfigurationRequest method.
//    req, resp := client.GetLaunchConfigurationRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/GetLaunchConfiguration
func (c *Drs) GetLaunchConfigurationRequest(input *GetLaunchConfigurationInput) (req *request.Request, output *GetLaunchConfigurationOutput) {
	op := &request.Operation{
		Name:       opGetLaunchConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/GetLaunchConfiguration",
	}

	if input == nil {
		input = &GetLaunchConfigurationInput{}
	}

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

// GetLaunchConfiguration API operation for Elastic Disaster Recovery Service.
//
// Gets a LaunchConfiguration, filtered by Source Server 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 Elastic Disaster Recovery Service's
// API operation GetLaunchConfiguration for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/GetLaunchConfiguration
func (c *Drs) GetLaunchConfiguration(input *GetLaunchConfigurationInput) (*GetLaunchConfigurationOutput, error) {
	req, out := c.GetLaunchConfigurationRequest(input)
	return out, req.Send()
}

// GetLaunchConfigurationWithContext is the same as GetLaunchConfiguration with the addition of
// the ability to pass a context and additional request options.
//
// See GetLaunchConfiguration 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 *Drs) GetLaunchConfigurationWithContext(ctx aws.Context, input *GetLaunchConfigurationInput, opts ...request.Option) (*GetLaunchConfigurationOutput, error) {
	req, out := c.GetLaunchConfigurationRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetReplicationConfiguration = "GetReplicationConfiguration"

// GetReplicationConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the GetReplicationConfiguration 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 GetReplicationConfiguration for more information on using the GetReplicationConfiguration
// 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 GetReplicationConfigurationRequest method.
//    req, resp := client.GetReplicationConfigurationRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/GetReplicationConfiguration
func (c *Drs) GetReplicationConfigurationRequest(input *GetReplicationConfigurationInput) (req *request.Request, output *GetReplicationConfigurationOutput) {
	op := &request.Operation{
		Name:       opGetReplicationConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/GetReplicationConfiguration",
	}

	if input == nil {
		input = &GetReplicationConfigurationInput{}
	}

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

// GetReplicationConfiguration API operation for Elastic Disaster Recovery Service.
//
// Gets a ReplicationConfiguration, filtered by Source Server 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 Elastic Disaster Recovery Service's
// API operation GetReplicationConfiguration for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/GetReplicationConfiguration
func (c *Drs) GetReplicationConfiguration(input *GetReplicationConfigurationInput) (*GetReplicationConfigurationOutput, error) {
	req, out := c.GetReplicationConfigurationRequest(input)
	return out, req.Send()
}

// GetReplicationConfigurationWithContext is the same as GetReplicationConfiguration with the addition of
// the ability to pass a context and additional request options.
//
// See GetReplicationConfiguration 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 *Drs) GetReplicationConfigurationWithContext(ctx aws.Context, input *GetReplicationConfigurationInput, opts ...request.Option) (*GetReplicationConfigurationOutput, error) {
	req, out := c.GetReplicationConfigurationRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opInitializeService = "InitializeService"

// InitializeServiceRequest generates a "aws/request.Request" representing the
// client's request for the InitializeService 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 InitializeService for more information on using the InitializeService
// 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 InitializeServiceRequest method.
//    req, resp := client.InitializeServiceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/InitializeService
func (c *Drs) InitializeServiceRequest(input *InitializeServiceInput) (req *request.Request, output *InitializeServiceOutput) {
	op := &request.Operation{
		Name:       opInitializeService,
		HTTPMethod: "POST",
		HTTPPath:   "/InitializeService",
	}

	if input == nil {
		input = &InitializeServiceInput{}
	}

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

// InitializeService API operation for Elastic Disaster Recovery Service.
//
// Initialize Elastic Disaster Recovery.
//
// 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 Elastic Disaster Recovery Service's
// API operation InitializeService for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * AccessDeniedException
//   TYou do not have sufficient access to perform this action.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/InitializeService
func (c *Drs) InitializeService(input *InitializeServiceInput) (*InitializeServiceOutput, error) {
	req, out := c.InitializeServiceRequest(input)
	return out, req.Send()
}

// InitializeServiceWithContext is the same as InitializeService with the addition of
// the ability to pass a context and additional request options.
//
// See InitializeService 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 *Drs) InitializeServiceWithContext(ctx aws.Context, input *InitializeServiceInput, opts ...request.Option) (*InitializeServiceOutput, error) {
	req, out := c.InitializeServiceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListTagsForResource = "ListTagsForResource"

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

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

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

// ListTagsForResource API operation for Elastic Disaster Recovery Service.
//
// List all tags for your Elastic Disaster Recovery resources.
//
// 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 Elastic Disaster Recovery Service's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * AccessDeniedException
//   TYou do not have sufficient access to perform this action.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/ListTagsForResource
func (c *Drs) ListTagsForResource(input *ListTagsForResourceInput) (*ListTagsForResourceOutput, error) {
	req, out := c.ListTagsForResourceRequest(input)
	return out, req.Send()
}

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

const opRetryDataReplication = "RetryDataReplication"

// RetryDataReplicationRequest generates a "aws/request.Request" representing the
// client's request for the RetryDataReplication 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 RetryDataReplication for more information on using the RetryDataReplication
// 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 RetryDataReplicationRequest method.
//    req, resp := client.RetryDataReplicationRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/RetryDataReplication
func (c *Drs) RetryDataReplicationRequest(input *RetryDataReplicationInput) (req *request.Request, output *RetryDataReplicationOutput) {
	op := &request.Operation{
		Name:       opRetryDataReplication,
		HTTPMethod: "POST",
		HTTPPath:   "/RetryDataReplication",
	}

	if input == nil {
		input = &RetryDataReplicationInput{}
	}

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

// RetryDataReplication API operation for Elastic Disaster Recovery Service.
//
// Causes the data replication initiation sequence to begin immediately upon
// next Handshake for the specified Source Server ID, regardless of when the
// previous initiation started. This command will work only if the Source Server
// is stalled or is in a DISCONNECTED or STOPPED state.
//
// 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 Elastic Disaster Recovery Service's
// API operation RetryDataReplication for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/RetryDataReplication
func (c *Drs) RetryDataReplication(input *RetryDataReplicationInput) (*RetryDataReplicationOutput, error) {
	req, out := c.RetryDataReplicationRequest(input)
	return out, req.Send()
}

// RetryDataReplicationWithContext is the same as RetryDataReplication with the addition of
// the ability to pass a context and additional request options.
//
// See RetryDataReplication 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 *Drs) RetryDataReplicationWithContext(ctx aws.Context, input *RetryDataReplicationInput, opts ...request.Option) (*RetryDataReplicationOutput, error) {
	req, out := c.RetryDataReplicationRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opStartFailbackLaunch = "StartFailbackLaunch"

// StartFailbackLaunchRequest generates a "aws/request.Request" representing the
// client's request for the StartFailbackLaunch 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 StartFailbackLaunch for more information on using the StartFailbackLaunch
// 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 StartFailbackLaunchRequest method.
//    req, resp := client.StartFailbackLaunchRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/StartFailbackLaunch
func (c *Drs) StartFailbackLaunchRequest(input *StartFailbackLaunchInput) (req *request.Request, output *StartFailbackLaunchOutput) {
	op := &request.Operation{
		Name:       opStartFailbackLaunch,
		HTTPMethod: "POST",
		HTTPPath:   "/StartFailbackLaunch",
	}

	if input == nil {
		input = &StartFailbackLaunchInput{}
	}

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

// StartFailbackLaunch API operation for Elastic Disaster Recovery Service.
//
// Initiates a Job for launching the machine that is being failed back to from
// the specified Recovery Instance. This will run conversion on the failback
// client and will reboot your machine, thus completing the failback 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 Elastic Disaster Recovery Service's
// API operation StartFailbackLaunch for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ConflictException
//   The request could not be completed due to a conflict with the current state
//   of the target resource.
//
//   * ServiceQuotaExceededException
//   The request could not be completed because its exceeded the service quota.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/StartFailbackLaunch
func (c *Drs) StartFailbackLaunch(input *StartFailbackLaunchInput) (*StartFailbackLaunchOutput, error) {
	req, out := c.StartFailbackLaunchRequest(input)
	return out, req.Send()
}

// StartFailbackLaunchWithContext is the same as StartFailbackLaunch with the addition of
// the ability to pass a context and additional request options.
//
// See StartFailbackLaunch 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 *Drs) StartFailbackLaunchWithContext(ctx aws.Context, input *StartFailbackLaunchInput, opts ...request.Option) (*StartFailbackLaunchOutput, error) {
	req, out := c.StartFailbackLaunchRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opStartRecovery = "StartRecovery"

// StartRecoveryRequest generates a "aws/request.Request" representing the
// client's request for the StartRecovery 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 StartRecovery for more information on using the StartRecovery
// 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 StartRecoveryRequest method.
//    req, resp := client.StartRecoveryRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/StartRecovery
func (c *Drs) StartRecoveryRequest(input *StartRecoveryInput) (req *request.Request, output *StartRecoveryOutput) {
	op := &request.Operation{
		Name:       opStartRecovery,
		HTTPMethod: "POST",
		HTTPPath:   "/StartRecovery",
	}

	if input == nil {
		input = &StartRecoveryInput{}
	}

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

// StartRecovery API operation for Elastic Disaster Recovery Service.
//
// Launches Recovery Instances for the specified Source Servers. For each Source
// Server you may choose a point in time snapshot to launch from, or use an
// on demand snapshot.
//
// 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 Elastic Disaster Recovery Service's
// API operation StartRecovery for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ConflictException
//   The request could not be completed due to a conflict with the current state
//   of the target resource.
//
//   * ServiceQuotaExceededException
//   The request could not be completed because its exceeded the service quota.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/StartRecovery
func (c *Drs) StartRecovery(input *StartRecoveryInput) (*StartRecoveryOutput, error) {
	req, out := c.StartRecoveryRequest(input)
	return out, req.Send()
}

// StartRecoveryWithContext is the same as StartRecovery with the addition of
// the ability to pass a context and additional request options.
//
// See StartRecovery 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 *Drs) StartRecoveryWithContext(ctx aws.Context, input *StartRecoveryInput, opts ...request.Option) (*StartRecoveryOutput, error) {
	req, out := c.StartRecoveryRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opStopFailback = "StopFailback"

// StopFailbackRequest generates a "aws/request.Request" representing the
// client's request for the StopFailback 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 StopFailback for more information on using the StopFailback
// 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 StopFailbackRequest method.
//    req, resp := client.StopFailbackRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/StopFailback
func (c *Drs) StopFailbackRequest(input *StopFailbackInput) (req *request.Request, output *StopFailbackOutput) {
	op := &request.Operation{
		Name:       opStopFailback,
		HTTPMethod: "POST",
		HTTPPath:   "/StopFailback",
	}

	if input == nil {
		input = &StopFailbackInput{}
	}

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

// StopFailback API operation for Elastic Disaster Recovery Service.
//
// Stops the failback process for a specified Recovery Instance. This changes
// the Failback State of the Recovery Instance back to FAILBACK_NOT_STARTED.
//
// 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 Elastic Disaster Recovery Service's
// API operation StopFailback for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/StopFailback
func (c *Drs) StopFailback(input *StopFailbackInput) (*StopFailbackOutput, error) {
	req, out := c.StopFailbackRequest(input)
	return out, req.Send()
}

// StopFailbackWithContext is the same as StopFailback with the addition of
// the ability to pass a context and additional request options.
//
// See StopFailback 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 *Drs) StopFailbackWithContext(ctx aws.Context, input *StopFailbackInput, opts ...request.Option) (*StopFailbackOutput, error) {
	req, out := c.StopFailbackRequest(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/drs-2020-02-26/TagResource
func (c *Drs) 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 Elastic Disaster Recovery Service.
//
// Adds or overwrites only the specified tags for the specified Elastic Disaster
// Recovery resource or resources. When you specify an existing tag key, the
// value is overwritten with the new value. Each resource can have a maximum
// of 50 tags. Each tag consists of a key and optional value.
//
// 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 Elastic Disaster Recovery Service's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * AccessDeniedException
//   TYou do not have sufficient access to perform this action.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/TagResource
func (c *Drs) 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 *Drs) 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 opTerminateRecoveryInstances = "TerminateRecoveryInstances"

// TerminateRecoveryInstancesRequest generates a "aws/request.Request" representing the
// client's request for the TerminateRecoveryInstances 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 TerminateRecoveryInstances for more information on using the TerminateRecoveryInstances
// 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 TerminateRecoveryInstancesRequest method.
//    req, resp := client.TerminateRecoveryInstancesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/TerminateRecoveryInstances
func (c *Drs) TerminateRecoveryInstancesRequest(input *TerminateRecoveryInstancesInput) (req *request.Request, output *TerminateRecoveryInstancesOutput) {
	op := &request.Operation{
		Name:       opTerminateRecoveryInstances,
		HTTPMethod: "POST",
		HTTPPath:   "/TerminateRecoveryInstances",
	}

	if input == nil {
		input = &TerminateRecoveryInstancesInput{}
	}

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

// TerminateRecoveryInstances API operation for Elastic Disaster Recovery Service.
//
// Initiates a Job for terminating the EC2 resources associated with the specified
// Recovery Instances, and then will delete the Recovery Instances from the
// Elastic Disaster Recovery service.
//
// 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 Elastic Disaster Recovery Service's
// API operation TerminateRecoveryInstances for usage and error information.
//
// Returned Error Types:
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ConflictException
//   The request could not be completed due to a conflict with the current state
//   of the target resource.
//
//   * ServiceQuotaExceededException
//   The request could not be completed because its exceeded the service quota.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/TerminateRecoveryInstances
func (c *Drs) TerminateRecoveryInstances(input *TerminateRecoveryInstancesInput) (*TerminateRecoveryInstancesOutput, error) {
	req, out := c.TerminateRecoveryInstancesRequest(input)
	return out, req.Send()
}

// TerminateRecoveryInstancesWithContext is the same as TerminateRecoveryInstances with the addition of
// the ability to pass a context and additional request options.
//
// See TerminateRecoveryInstances 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 *Drs) TerminateRecoveryInstancesWithContext(ctx aws.Context, input *TerminateRecoveryInstancesInput, opts ...request.Option) (*TerminateRecoveryInstancesOutput, error) {
	req, out := c.TerminateRecoveryInstancesRequest(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/drs-2020-02-26/UntagResource
func (c *Drs) UntagResourceRequest(input *UntagResourceInput) (req *request.Request, output *UntagResourceOutput) {
	op := &request.Operation{
		Name:       opUntagResource,
		HTTPMethod: "DELETE",
		HTTPPath:   "/tags/{resourceArn}",
	}

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

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

// UntagResource API operation for Elastic Disaster Recovery Service.
//
// Deletes the specified set of tags from the specified set of Elastic Disaster
// Recovery resources.
//
// 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 Elastic Disaster Recovery Service's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * AccessDeniedException
//   TYou do not have sufficient access to perform this action.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/UntagResource
func (c *Drs) 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 *Drs) 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 opUpdateFailbackReplicationConfiguration = "UpdateFailbackReplicationConfiguration"

// UpdateFailbackReplicationConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the UpdateFailbackReplicationConfiguration 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 UpdateFailbackReplicationConfiguration for more information on using the UpdateFailbackReplicationConfiguration
// 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 UpdateFailbackReplicationConfigurationRequest method.
//    req, resp := client.UpdateFailbackReplicationConfigurationRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/UpdateFailbackReplicationConfiguration
func (c *Drs) UpdateFailbackReplicationConfigurationRequest(input *UpdateFailbackReplicationConfigurationInput) (req *request.Request, output *UpdateFailbackReplicationConfigurationOutput) {
	op := &request.Operation{
		Name:       opUpdateFailbackReplicationConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/UpdateFailbackReplicationConfiguration",
	}

	if input == nil {
		input = &UpdateFailbackReplicationConfigurationInput{}
	}

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

// UpdateFailbackReplicationConfiguration API operation for Elastic Disaster Recovery Service.
//
// Allows you to update the failback replication configuration of a Recovery
// Instance by 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 Elastic Disaster Recovery Service's
// API operation UpdateFailbackReplicationConfiguration for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * AccessDeniedException
//   TYou do not have sufficient access to perform this action.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/UpdateFailbackReplicationConfiguration
func (c *Drs) UpdateFailbackReplicationConfiguration(input *UpdateFailbackReplicationConfigurationInput) (*UpdateFailbackReplicationConfigurationOutput, error) {
	req, out := c.UpdateFailbackReplicationConfigurationRequest(input)
	return out, req.Send()
}

// UpdateFailbackReplicationConfigurationWithContext is the same as UpdateFailbackReplicationConfiguration with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateFailbackReplicationConfiguration 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 *Drs) UpdateFailbackReplicationConfigurationWithContext(ctx aws.Context, input *UpdateFailbackReplicationConfigurationInput, opts ...request.Option) (*UpdateFailbackReplicationConfigurationOutput, error) {
	req, out := c.UpdateFailbackReplicationConfigurationRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateLaunchConfiguration = "UpdateLaunchConfiguration"

// UpdateLaunchConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the UpdateLaunchConfiguration 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 UpdateLaunchConfiguration for more information on using the UpdateLaunchConfiguration
// 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 UpdateLaunchConfigurationRequest method.
//    req, resp := client.UpdateLaunchConfigurationRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/UpdateLaunchConfiguration
func (c *Drs) UpdateLaunchConfigurationRequest(input *UpdateLaunchConfigurationInput) (req *request.Request, output *UpdateLaunchConfigurationOutput) {
	op := &request.Operation{
		Name:       opUpdateLaunchConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/UpdateLaunchConfiguration",
	}

	if input == nil {
		input = &UpdateLaunchConfigurationInput{}
	}

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

// UpdateLaunchConfiguration API operation for Elastic Disaster Recovery Service.
//
// Updates a LaunchConfiguration by Source Server 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 Elastic Disaster Recovery Service's
// API operation UpdateLaunchConfiguration for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ConflictException
//   The request could not be completed due to a conflict with the current state
//   of the target resource.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/UpdateLaunchConfiguration
func (c *Drs) UpdateLaunchConfiguration(input *UpdateLaunchConfigurationInput) (*UpdateLaunchConfigurationOutput, error) {
	req, out := c.UpdateLaunchConfigurationRequest(input)
	return out, req.Send()
}

// UpdateLaunchConfigurationWithContext is the same as UpdateLaunchConfiguration with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateLaunchConfiguration 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 *Drs) UpdateLaunchConfigurationWithContext(ctx aws.Context, input *UpdateLaunchConfigurationInput, opts ...request.Option) (*UpdateLaunchConfigurationOutput, error) {
	req, out := c.UpdateLaunchConfigurationRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateReplicationConfiguration = "UpdateReplicationConfiguration"

// UpdateReplicationConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the UpdateReplicationConfiguration 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 UpdateReplicationConfiguration for more information on using the UpdateReplicationConfiguration
// 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 UpdateReplicationConfigurationRequest method.
//    req, resp := client.UpdateReplicationConfigurationRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/UpdateReplicationConfiguration
func (c *Drs) UpdateReplicationConfigurationRequest(input *UpdateReplicationConfigurationInput) (req *request.Request, output *UpdateReplicationConfigurationOutput) {
	op := &request.Operation{
		Name:       opUpdateReplicationConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/UpdateReplicationConfiguration",
	}

	if input == nil {
		input = &UpdateReplicationConfigurationInput{}
	}

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

// UpdateReplicationConfiguration API operation for Elastic Disaster Recovery Service.
//
// Allows you to update a ReplicationConfiguration by Source Server 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 Elastic Disaster Recovery Service's
// API operation UpdateReplicationConfiguration for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ConflictException
//   The request could not be completed due to a conflict with the current state
//   of the target resource.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * AccessDeniedException
//   TYou do not have sufficient access to perform this action.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/UpdateReplicationConfiguration
func (c *Drs) UpdateReplicationConfiguration(input *UpdateReplicationConfigurationInput) (*UpdateReplicationConfigurationOutput, error) {
	req, out := c.UpdateReplicationConfigurationRequest(input)
	return out, req.Send()
}

// UpdateReplicationConfigurationWithContext is the same as UpdateReplicationConfiguration with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateReplicationConfiguration 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 *Drs) UpdateReplicationConfigurationWithContext(ctx aws.Context, input *UpdateReplicationConfigurationInput, opts ...request.Option) (*UpdateReplicationConfigurationOutput, error) {
	req, out := c.UpdateReplicationConfigurationRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateReplicationConfigurationTemplate = "UpdateReplicationConfigurationTemplate"

// UpdateReplicationConfigurationTemplateRequest generates a "aws/request.Request" representing the
// client's request for the UpdateReplicationConfigurationTemplate 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 UpdateReplicationConfigurationTemplate for more information on using the UpdateReplicationConfigurationTemplate
// 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 UpdateReplicationConfigurationTemplateRequest method.
//    req, resp := client.UpdateReplicationConfigurationTemplateRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/UpdateReplicationConfigurationTemplate
func (c *Drs) UpdateReplicationConfigurationTemplateRequest(input *UpdateReplicationConfigurationTemplateInput) (req *request.Request, output *UpdateReplicationConfigurationTemplateOutput) {
	op := &request.Operation{
		Name:       opUpdateReplicationConfigurationTemplate,
		HTTPMethod: "POST",
		HTTPPath:   "/UpdateReplicationConfigurationTemplate",
	}

	if input == nil {
		input = &UpdateReplicationConfigurationTemplateInput{}
	}

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

// UpdateReplicationConfigurationTemplate API operation for Elastic Disaster Recovery Service.
//
// Updates a ReplicationConfigurationTemplate by 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 Elastic Disaster Recovery Service's
// API operation UpdateReplicationConfigurationTemplate for usage and error information.
//
// Returned Error Types:
//   * ResourceNotFoundException
//   The resource for this operation was not found.
//
//   * InternalServerException
//   The request processing has failed because of an unknown error, exception
//   or failure.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * AccessDeniedException
//   TYou do not have sufficient access to perform this action.
//
//   * ValidationException
//   The input fails to satisfy the constraints specified by the AWS service.
//
//   * UninitializedAccountException
//   The account performing the request has not been initialized.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/drs-2020-02-26/UpdateReplicationConfigurationTemplate
func (c *Drs) UpdateReplicationConfigurationTemplate(input *UpdateReplicationConfigurationTemplateInput) (*UpdateReplicationConfigurationTemplateOutput, error) {
	req, out := c.UpdateReplicationConfigurationTemplateRequest(input)
	return out, req.Send()
}

// UpdateReplicationConfigurationTemplateWithContext is the same as UpdateReplicationConfigurationTemplate with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateReplicationConfigurationTemplate 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 *Drs) UpdateReplicationConfigurationTemplateWithContext(ctx aws.Context, input *UpdateReplicationConfigurationTemplateInput, opts ...request.Option) (*UpdateReplicationConfigurationTemplateOutput, error) {
	req, out := c.UpdateReplicationConfigurationTemplateRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

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

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

	Message_ *string `locationName:"message" type:"string"`
}

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

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

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

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

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

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

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

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

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

// Information about a server's CPU.
type CPU struct {
	_ struct{} `type:"structure"`

	// The number of CPU cores.
	Cores *int64 `locationName:"cores" type:"long"`

	// The model name of the CPU.
	ModelName *string `locationName:"modelName" type:"string"`
}

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

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

// SetCores sets the Cores field's value.
func (s *CPU) SetCores(v int64) *CPU {
	s.Cores = &v
	return s
}

// SetModelName sets the ModelName field's value.
func (s *CPU) SetModelName(v string) *CPU {
	s.ModelName = &v
	return s
}

// The request could not be completed due to a conflict with the current state
// of the target resource.
type ConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

	// The ID of the resource.
	ResourceId *string `locationName:"resourceId" type:"string"`

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

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

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

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

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

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

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

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

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

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

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

	// Whether to associate the default Elastic Disaster Recovery Security group
	// with the Replication Configuration Template.
	//
	// AssociateDefaultSecurityGroup is a required field
	AssociateDefaultSecurityGroup *bool `locationName:"associateDefaultSecurityGroup" type:"boolean" required:"true"`

	// Configure bandwidth throttling for the outbound data transfer rate of the
	// Source Server in Mbps.
	//
	// BandwidthThrottling is a required field
	BandwidthThrottling *int64 `locationName:"bandwidthThrottling" type:"long" required:"true"`

	// Whether to create a Public IP for the Recovery Instance by default.
	//
	// CreatePublicIP is a required field
	CreatePublicIP *bool `locationName:"createPublicIP" type:"boolean" required:"true"`

	// The data plane routing mechanism that will be used for replication.
	//
	// DataPlaneRouting is a required field
	DataPlaneRouting *string `locationName:"dataPlaneRouting" type:"string" required:"true" enum:"ReplicationConfigurationDataPlaneRouting"`

	// The Staging Disk EBS volume type to be used during replication.
	//
	// DefaultLargeStagingDiskType is a required field
	DefaultLargeStagingDiskType *string `locationName:"defaultLargeStagingDiskType" type:"string" required:"true" enum:"ReplicationConfigurationDefaultLargeStagingDiskType"`

	// The type of EBS encryption to be used during replication.
	//
	// EbsEncryption is a required field
	EbsEncryption *string `locationName:"ebsEncryption" type:"string" required:"true" enum:"ReplicationConfigurationEbsEncryption"`

	// The ARN of the EBS encryption key to be used during replication.
	EbsEncryptionKeyArn *string `locationName:"ebsEncryptionKeyArn" min:"20" type:"string"`

	// The Point in time (PIT) policy to manage snapshots taken during replication.
	//
	// PitPolicy is a required field
	PitPolicy []*PITPolicyRule `locationName:"pitPolicy" min:"1" type:"list" required:"true"`

	// The instance type to be used for the replication server.
	//
	// ReplicationServerInstanceType is a required field
	ReplicationServerInstanceType *string `locationName:"replicationServerInstanceType" type:"string" required:"true"`

	// The security group IDs that will be used by the replication server.
	//
	// ReplicationServersSecurityGroupsIDs is a required field
	ReplicationServersSecurityGroupsIDs []*string `locationName:"replicationServersSecurityGroupsIDs" type:"list" required:"true"`

	// The subnet to be used by the replication staging area.
	//
	// StagingAreaSubnetId is a required field
	StagingAreaSubnetId *string `locationName:"stagingAreaSubnetId" type:"string" required:"true"`

	// A set of tags to be associated with all resources created in the replication
	// staging area: EC2 replication server, EBS volumes, EBS snapshots, etc.
	//
	// StagingAreaTags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateReplicationConfigurationTemplateInput's
	// String and GoString methods.
	//
	// StagingAreaTags is a required field
	StagingAreaTags map[string]*string `locationName:"stagingAreaTags" type:"map" required:"true" sensitive:"true"`

	// A set of tags to be associated with the Replication Configuration Template
	// resource.
	//
	// Tags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateReplicationConfigurationTemplateInput's
	// String and GoString methods.
	Tags map[string]*string `locationName:"tags" type:"map" sensitive:"true"`

	// Whether to use a dedicated Replication Server in the replication staging
	// area.
	//
	// UseDedicatedReplicationServer is a required field
	UseDedicatedReplicationServer *bool `locationName:"useDedicatedReplicationServer" type:"boolean" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateReplicationConfigurationTemplateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateReplicationConfigurationTemplateInput"}
	if s.AssociateDefaultSecurityGroup == nil {
		invalidParams.Add(request.NewErrParamRequired("AssociateDefaultSecurityGroup"))
	}
	if s.BandwidthThrottling == nil {
		invalidParams.Add(request.NewErrParamRequired("BandwidthThrottling"))
	}
	if s.CreatePublicIP == nil {
		invalidParams.Add(request.NewErrParamRequired("CreatePublicIP"))
	}
	if s.DataPlaneRouting == nil {
		invalidParams.Add(request.NewErrParamRequired("DataPlaneRouting"))
	}
	if s.DefaultLargeStagingDiskType == nil {
		invalidParams.Add(request.NewErrParamRequired("DefaultLargeStagingDiskType"))
	}
	if s.EbsEncryption == nil {
		invalidParams.Add(request.NewErrParamRequired("EbsEncryption"))
	}
	if s.EbsEncryptionKeyArn != nil && len(*s.EbsEncryptionKeyArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("EbsEncryptionKeyArn", 20))
	}
	if s.PitPolicy == nil {
		invalidParams.Add(request.NewErrParamRequired("PitPolicy"))
	}
	if s.PitPolicy != nil && len(s.PitPolicy) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PitPolicy", 1))
	}
	if s.ReplicationServerInstanceType == nil {
		invalidParams.Add(request.NewErrParamRequired("ReplicationServerInstanceType"))
	}
	if s.ReplicationServersSecurityGroupsIDs == nil {
		invalidParams.Add(request.NewErrParamRequired("ReplicationServersSecurityGroupsIDs"))
	}
	if s.StagingAreaSubnetId == nil {
		invalidParams.Add(request.NewErrParamRequired("StagingAreaSubnetId"))
	}
	if s.StagingAreaTags == nil {
		invalidParams.Add(request.NewErrParamRequired("StagingAreaTags"))
	}
	if s.UseDedicatedReplicationServer == nil {
		invalidParams.Add(request.NewErrParamRequired("UseDedicatedReplicationServer"))
	}
	if s.PitPolicy != nil {
		for i, v := range s.PitPolicy {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PitPolicy", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetAssociateDefaultSecurityGroup sets the AssociateDefaultSecurityGroup field's value.
func (s *CreateReplicationConfigurationTemplateInput) SetAssociateDefaultSecurityGroup(v bool) *CreateReplicationConfigurationTemplateInput {
	s.AssociateDefaultSecurityGroup = &v
	return s
}

// SetBandwidthThrottling sets the BandwidthThrottling field's value.
func (s *CreateReplicationConfigurationTemplateInput) SetBandwidthThrottling(v int64) *CreateReplicationConfigurationTemplateInput {
	s.BandwidthThrottling = &v
	return s
}

// SetCreatePublicIP sets the CreatePublicIP field's value.
func (s *CreateReplicationConfigurationTemplateInput) SetCreatePublicIP(v bool) *CreateReplicationConfigurationTemplateInput {
	s.CreatePublicIP = &v
	return s
}

// SetDataPlaneRouting sets the DataPlaneRouting field's value.
func (s *CreateReplicationConfigurationTemplateInput) SetDataPlaneRouting(v string) *CreateReplicationConfigurationTemplateInput {
	s.DataPlaneRouting = &v
	return s
}

// SetDefaultLargeStagingDiskType sets the DefaultLargeStagingDiskType field's value.
func (s *CreateReplicationConfigurationTemplateInput) SetDefaultLargeStagingDiskType(v string) *CreateReplicationConfigurationTemplateInput {
	s.DefaultLargeStagingDiskType = &v
	return s
}

// SetEbsEncryption sets the EbsEncryption field's value.
func (s *CreateReplicationConfigurationTemplateInput) SetEbsEncryption(v string) *CreateReplicationConfigurationTemplateInput {
	s.EbsEncryption = &v
	return s
}

// SetEbsEncryptionKeyArn sets the EbsEncryptionKeyArn field's value.
func (s *CreateReplicationConfigurationTemplateInput) SetEbsEncryptionKeyArn(v string) *CreateReplicationConfigurationTemplateInput {
	s.EbsEncryptionKeyArn = &v
	return s
}

// SetPitPolicy sets the PitPolicy field's value.
func (s *CreateReplicationConfigurationTemplateInput) SetPitPolicy(v []*PITPolicyRule) *CreateReplicationConfigurationTemplateInput {
	s.PitPolicy = v
	return s
}

// SetReplicationServerInstanceType sets the ReplicationServerInstanceType field's value.
func (s *CreateReplicationConfigurationTemplateInput) SetReplicationServerInstanceType(v string) *CreateReplicationConfigurationTemplateInput {
	s.ReplicationServerInstanceType = &v
	return s
}

// SetReplicationServersSecurityGroupsIDs sets the ReplicationServersSecurityGroupsIDs field's value.
func (s *CreateReplicationConfigurationTemplateInput) SetReplicationServersSecurityGroupsIDs(v []*string) *CreateReplicationConfigurationTemplateInput {
	s.ReplicationServersSecurityGroupsIDs = v
	return s
}

// SetStagingAreaSubnetId sets the StagingAreaSubnetId field's value.
func (s *CreateReplicationConfigurationTemplateInput) SetStagingAreaSubnetId(v string) *CreateReplicationConfigurationTemplateInput {
	s.StagingAreaSubnetId = &v
	return s
}

// SetStagingAreaTags sets the StagingAreaTags field's value.
func (s *CreateReplicationConfigurationTemplateInput) SetStagingAreaTags(v map[string]*string) *CreateReplicationConfigurationTemplateInput {
	s.StagingAreaTags = v
	return s
}

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

// SetUseDedicatedReplicationServer sets the UseDedicatedReplicationServer field's value.
func (s *CreateReplicationConfigurationTemplateInput) SetUseDedicatedReplicationServer(v bool) *CreateReplicationConfigurationTemplateInput {
	s.UseDedicatedReplicationServer = &v
	return s
}

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

	// The Replication Configuration Template ARN.
	Arn *string `locationName:"arn" min:"20" type:"string"`

	// Whether to associate the default Elastic Disaster Recovery Security group
	// with the Replication Configuration Template.
	AssociateDefaultSecurityGroup *bool `locationName:"associateDefaultSecurityGroup" type:"boolean"`

	// Configure bandwidth throttling for the outbound data transfer rate of the
	// Source Server in Mbps.
	BandwidthThrottling *int64 `locationName:"bandwidthThrottling" type:"long"`

	// Whether to create a Public IP for the Recovery Instance by default.
	CreatePublicIP *bool `locationName:"createPublicIP" type:"boolean"`

	// The data plane routing mechanism that will be used for replication.
	DataPlaneRouting *string `locationName:"dataPlaneRouting" type:"string" enum:"ReplicationConfigurationDataPlaneRouting"`

	// The Staging Disk EBS volume type to be used during replication.
	DefaultLargeStagingDiskType *string `locationName:"defaultLargeStagingDiskType" type:"string" enum:"ReplicationConfigurationDefaultLargeStagingDiskType"`

	// The type of EBS encryption to be used during replication.
	EbsEncryption *string `locationName:"ebsEncryption" type:"string" enum:"ReplicationConfigurationEbsEncryption"`

	// The ARN of the EBS encryption key to be used during replication.
	EbsEncryptionKeyArn *string `locationName:"ebsEncryptionKeyArn" min:"20" type:"string"`

	// The Point in time (PIT) policy to manage snapshots taken during replication.
	PitPolicy []*PITPolicyRule `locationName:"pitPolicy" min:"1" type:"list"`

	// The Replication Configuration Template ID.
	//
	// ReplicationConfigurationTemplateID is a required field
	ReplicationConfigurationTemplateID *string `locationName:"replicationConfigurationTemplateID" min:"21" type:"string" required:"true"`

	// The instance type to be used for the replication server.
	ReplicationServerInstanceType *string `locationName:"replicationServerInstanceType" type:"string"`

	// The security group IDs that will be used by the replication server.
	ReplicationServersSecurityGroupsIDs []*string `locationName:"replicationServersSecurityGroupsIDs" type:"list"`

	// The subnet to be used by the replication staging area.
	StagingAreaSubnetId *string `locationName:"stagingAreaSubnetId" type:"string"`

	// A set of tags to be associated with all resources created in the replication
	// staging area: EC2 replication server, EBS volumes, EBS snapshots, etc.
	//
	// StagingAreaTags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateReplicationConfigurationTemplateOutput's
	// String and GoString methods.
	StagingAreaTags map[string]*string `locationName:"stagingAreaTags" type:"map" sensitive:"true"`

	// A set of tags to be associated with the Replication Configuration Template
	// resource.
	//
	// Tags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateReplicationConfigurationTemplateOutput's
	// String and GoString methods.
	Tags map[string]*string `locationName:"tags" type:"map" sensitive:"true"`

	// Whether to use a dedicated Replication Server in the replication staging
	// area.
	UseDedicatedReplicationServer *bool `locationName:"useDedicatedReplicationServer" type:"boolean"`
}

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

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

// SetArn sets the Arn field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetArn(v string) *CreateReplicationConfigurationTemplateOutput {
	s.Arn = &v
	return s
}

// SetAssociateDefaultSecurityGroup sets the AssociateDefaultSecurityGroup field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetAssociateDefaultSecurityGroup(v bool) *CreateReplicationConfigurationTemplateOutput {
	s.AssociateDefaultSecurityGroup = &v
	return s
}

// SetBandwidthThrottling sets the BandwidthThrottling field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetBandwidthThrottling(v int64) *CreateReplicationConfigurationTemplateOutput {
	s.BandwidthThrottling = &v
	return s
}

// SetCreatePublicIP sets the CreatePublicIP field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetCreatePublicIP(v bool) *CreateReplicationConfigurationTemplateOutput {
	s.CreatePublicIP = &v
	return s
}

// SetDataPlaneRouting sets the DataPlaneRouting field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetDataPlaneRouting(v string) *CreateReplicationConfigurationTemplateOutput {
	s.DataPlaneRouting = &v
	return s
}

// SetDefaultLargeStagingDiskType sets the DefaultLargeStagingDiskType field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetDefaultLargeStagingDiskType(v string) *CreateReplicationConfigurationTemplateOutput {
	s.DefaultLargeStagingDiskType = &v
	return s
}

// SetEbsEncryption sets the EbsEncryption field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetEbsEncryption(v string) *CreateReplicationConfigurationTemplateOutput {
	s.EbsEncryption = &v
	return s
}

// SetEbsEncryptionKeyArn sets the EbsEncryptionKeyArn field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetEbsEncryptionKeyArn(v string) *CreateReplicationConfigurationTemplateOutput {
	s.EbsEncryptionKeyArn = &v
	return s
}

// SetPitPolicy sets the PitPolicy field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetPitPolicy(v []*PITPolicyRule) *CreateReplicationConfigurationTemplateOutput {
	s.PitPolicy = v
	return s
}

// SetReplicationConfigurationTemplateID sets the ReplicationConfigurationTemplateID field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetReplicationConfigurationTemplateID(v string) *CreateReplicationConfigurationTemplateOutput {
	s.ReplicationConfigurationTemplateID = &v
	return s
}

// SetReplicationServerInstanceType sets the ReplicationServerInstanceType field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetReplicationServerInstanceType(v string) *CreateReplicationConfigurationTemplateOutput {
	s.ReplicationServerInstanceType = &v
	return s
}

// SetReplicationServersSecurityGroupsIDs sets the ReplicationServersSecurityGroupsIDs field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetReplicationServersSecurityGroupsIDs(v []*string) *CreateReplicationConfigurationTemplateOutput {
	s.ReplicationServersSecurityGroupsIDs = v
	return s
}

// SetStagingAreaSubnetId sets the StagingAreaSubnetId field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetStagingAreaSubnetId(v string) *CreateReplicationConfigurationTemplateOutput {
	s.StagingAreaSubnetId = &v
	return s
}

// SetStagingAreaTags sets the StagingAreaTags field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetStagingAreaTags(v map[string]*string) *CreateReplicationConfigurationTemplateOutput {
	s.StagingAreaTags = v
	return s
}

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

// SetUseDedicatedReplicationServer sets the UseDedicatedReplicationServer field's value.
func (s *CreateReplicationConfigurationTemplateOutput) SetUseDedicatedReplicationServer(v bool) *CreateReplicationConfigurationTemplateOutput {
	s.UseDedicatedReplicationServer = &v
	return s
}

// Error in data replication.
type DataReplicationError struct {
	_ struct{} `type:"structure"`

	// Error in data replication.
	Error *string `locationName:"error" type:"string" enum:"DataReplicationErrorString"`

	// Error in data replication.
	RawError *string `locationName:"rawError" type:"string"`
}

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

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

// SetError sets the Error field's value.
func (s *DataReplicationError) SetError(v string) *DataReplicationError {
	s.Error = &v
	return s
}

// SetRawError sets the RawError field's value.
func (s *DataReplicationError) SetRawError(v string) *DataReplicationError {
	s.RawError = &v
	return s
}

// Information about Data Replication
type DataReplicationInfo struct {
	_ struct{} `type:"structure"`

	// Error in data replication.
	DataReplicationError *DataReplicationError `locationName:"dataReplicationError" type:"structure"`

	// Information about whether the data replication has been initiated.
	DataReplicationInitiation *DataReplicationInitiation `locationName:"dataReplicationInitiation" type:"structure"`

	// The state of the data replication.
	DataReplicationState *string `locationName:"dataReplicationState" type:"string" enum:"DataReplicationState"`

	// An estimate of when the data replication will be completed.
	EtaDateTime *string `locationName:"etaDateTime" min:"19" type:"string"`

	// Data replication lag duration.
	LagDuration *string `locationName:"lagDuration" min:"19" type:"string"`

	// The disks that should be replicated.
	ReplicatedDisks []*DataReplicationInfoReplicatedDisk `locationName:"replicatedDisks" type:"list"`
}

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

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

// SetDataReplicationError sets the DataReplicationError field's value.
func (s *DataReplicationInfo) SetDataReplicationError(v *DataReplicationError) *DataReplicationInfo {
	s.DataReplicationError = v
	return s
}

// SetDataReplicationInitiation sets the DataReplicationInitiation field's value.
func (s *DataReplicationInfo) SetDataReplicationInitiation(v *DataReplicationInitiation) *DataReplicationInfo {
	s.DataReplicationInitiation = v
	return s
}

// SetDataReplicationState sets the DataReplicationState field's value.
func (s *DataReplicationInfo) SetDataReplicationState(v string) *DataReplicationInfo {
	s.DataReplicationState = &v
	return s
}

// SetEtaDateTime sets the EtaDateTime field's value.
func (s *DataReplicationInfo) SetEtaDateTime(v string) *DataReplicationInfo {
	s.EtaDateTime = &v
	return s
}

// SetLagDuration sets the LagDuration field's value.
func (s *DataReplicationInfo) SetLagDuration(v string) *DataReplicationInfo {
	s.LagDuration = &v
	return s
}

// SetReplicatedDisks sets the ReplicatedDisks field's value.
func (s *DataReplicationInfo) SetReplicatedDisks(v []*DataReplicationInfoReplicatedDisk) *DataReplicationInfo {
	s.ReplicatedDisks = v
	return s
}

// A disk that should be replicated.
type DataReplicationInfoReplicatedDisk struct {
	_ struct{} `type:"structure"`

	// The size of the replication backlog in bytes.
	BackloggedStorageBytes *int64 `locationName:"backloggedStorageBytes" type:"long"`

	// The name of the device.
	DeviceName *string `locationName:"deviceName" type:"string"`

	// The amount of data replicated so far in bytes.
	ReplicatedStorageBytes *int64 `locationName:"replicatedStorageBytes" type:"long"`

	// The amount of data to be rescanned in bytes.
	RescannedStorageBytes *int64 `locationName:"rescannedStorageBytes" type:"long"`

	// The total amount of data to be replicated in bytes.
	TotalStorageBytes *int64 `locationName:"totalStorageBytes" type:"long"`
}

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

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

// SetBackloggedStorageBytes sets the BackloggedStorageBytes field's value.
func (s *DataReplicationInfoReplicatedDisk) SetBackloggedStorageBytes(v int64) *DataReplicationInfoReplicatedDisk {
	s.BackloggedStorageBytes = &v
	return s
}

// SetDeviceName sets the DeviceName field's value.
func (s *DataReplicationInfoReplicatedDisk) SetDeviceName(v string) *DataReplicationInfoReplicatedDisk {
	s.DeviceName = &v
	return s
}

// SetReplicatedStorageBytes sets the ReplicatedStorageBytes field's value.
func (s *DataReplicationInfoReplicatedDisk) SetReplicatedStorageBytes(v int64) *DataReplicationInfoReplicatedDisk {
	s.ReplicatedStorageBytes = &v
	return s
}

// SetRescannedStorageBytes sets the RescannedStorageBytes field's value.
func (s *DataReplicationInfoReplicatedDisk) SetRescannedStorageBytes(v int64) *DataReplicationInfoReplicatedDisk {
	s.RescannedStorageBytes = &v
	return s
}

// SetTotalStorageBytes sets the TotalStorageBytes field's value.
func (s *DataReplicationInfoReplicatedDisk) SetTotalStorageBytes(v int64) *DataReplicationInfoReplicatedDisk {
	s.TotalStorageBytes = &v
	return s
}

// Data replication initiation.
type DataReplicationInitiation struct {
	_ struct{} `type:"structure"`

	// The date and time of the next attempt to initiate data replication.
	NextAttemptDateTime *string `locationName:"nextAttemptDateTime" min:"19" type:"string"`

	// The date and time of the current attempt to initiate data replication.
	StartDateTime *string `locationName:"startDateTime" min:"19" type:"string"`

	// The steps of the current attempt to initiate data replication.
	Steps []*DataReplicationInitiationStep `locationName:"steps" type:"list"`
}

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

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

// SetNextAttemptDateTime sets the NextAttemptDateTime field's value.
func (s *DataReplicationInitiation) SetNextAttemptDateTime(v string) *DataReplicationInitiation {
	s.NextAttemptDateTime = &v
	return s
}

// SetStartDateTime sets the StartDateTime field's value.
func (s *DataReplicationInitiation) SetStartDateTime(v string) *DataReplicationInitiation {
	s.StartDateTime = &v
	return s
}

// SetSteps sets the Steps field's value.
func (s *DataReplicationInitiation) SetSteps(v []*DataReplicationInitiationStep) *DataReplicationInitiation {
	s.Steps = v
	return s
}

// Data replication initiation step.
type DataReplicationInitiationStep struct {
	_ struct{} `type:"structure"`

	// The name of the step.
	Name *string `locationName:"name" type:"string" enum:"DataReplicationInitiationStepName"`

	// The status of the step.
	Status *string `locationName:"status" type:"string" enum:"DataReplicationInitiationStepStatus"`
}

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

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

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

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

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

	// The ID of the Job to be deleted.
	//
	// JobID is a required field
	JobID *string `locationName:"jobID" min:"24" type:"string" required:"true"`
}

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

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

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

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

// SetJobID sets the JobID field's value.
func (s *DeleteJobInput) SetJobID(v string) *DeleteJobInput {
	s.JobID = &v
	return s
}

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

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

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

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

	// RThe ID of the Recovery Instance to be deleted.
	//
	// RecoveryInstanceID is a required field
	RecoveryInstanceID *string `locationName:"recoveryInstanceID" min:"10" type:"string" required:"true"`
}

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

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

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

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

// SetRecoveryInstanceID sets the RecoveryInstanceID field's value.
func (s *DeleteRecoveryInstanceInput) SetRecoveryInstanceID(v string) *DeleteRecoveryInstanceInput {
	s.RecoveryInstanceID = &v
	return s
}

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

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

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

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

	// The ID of the Replication Configuration Template to be deleted.
	//
	// ReplicationConfigurationTemplateID is a required field
	ReplicationConfigurationTemplateID *string `locationName:"replicationConfigurationTemplateID" min:"21" type:"string" required:"true"`
}

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

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

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

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

// SetReplicationConfigurationTemplateID sets the ReplicationConfigurationTemplateID field's value.
func (s *DeleteReplicationConfigurationTemplateInput) SetReplicationConfigurationTemplateID(v string) *DeleteReplicationConfigurationTemplateInput {
	s.ReplicationConfigurationTemplateID = &v
	return s
}

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

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

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

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

	// The ID of the Source Server to be deleted.
	//
	// SourceServerID is a required field
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetSourceServerID sets the SourceServerID field's value.
func (s *DeleteSourceServerInput) SetSourceServerID(v string) *DeleteSourceServerInput {
	s.SourceServerID = &v
	return s
}

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

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

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

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

	// The ID of the Job for which Job log items will be retrieved.
	//
	// JobID is a required field
	JobID *string `locationName:"jobID" min:"24" type:"string" required:"true"`

	// Maximum number of Job log items to retrieve.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// The token of the next Job log items to retrieve.
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetJobID sets the JobID field's value.
func (s *DescribeJobLogItemsInput) SetJobID(v string) *DescribeJobLogItemsInput {
	s.JobID = &v
	return s
}

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

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

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

	// An array of Job log items.
	Items []*JobLog `locationName:"items" type:"list"`

	// The token of the next Job log items to retrieve.
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

// SetItems sets the Items field's value.
func (s *DescribeJobLogItemsOutput) SetItems(v []*JobLog) *DescribeJobLogItemsOutput {
	s.Items = v
	return s
}

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

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

	// A set of filters by which to return Jobs.
	//
	// Filters is a required field
	Filters *DescribeJobsRequestFilters `locationName:"filters" type:"structure" required:"true"`

	// Maximum number of Jobs to retrieve.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// The token of the next Job to retrieve.
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *DescribeJobsInput) SetFilters(v *DescribeJobsRequestFilters) *DescribeJobsInput {
	s.Filters = v
	return s
}

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

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

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

	// An array of Jobs.
	Items []*Job `locationName:"items" type:"list"`

	// The token of the next Job to retrieve.
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

// SetItems sets the Items field's value.
func (s *DescribeJobsOutput) SetItems(v []*Job) *DescribeJobsOutput {
	s.Items = v
	return s
}

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

// A set of filters by which to return Jobs.
type DescribeJobsRequestFilters struct {
	_ struct{} `type:"structure"`

	// The start date in a date range query.
	FromDate *string `locationName:"fromDate" min:"19" type:"string"`

	// An array of Job IDs that should be returned. An empty array means all jobs.
	JobIDs []*string `locationName:"jobIDs" type:"list"`

	// The end date in a date range query.
	ToDate *string `locationName:"toDate" min:"19" type:"string"`
}

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

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

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

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

// SetFromDate sets the FromDate field's value.
func (s *DescribeJobsRequestFilters) SetFromDate(v string) *DescribeJobsRequestFilters {
	s.FromDate = &v
	return s
}

// SetJobIDs sets the JobIDs field's value.
func (s *DescribeJobsRequestFilters) SetJobIDs(v []*string) *DescribeJobsRequestFilters {
	s.JobIDs = v
	return s
}

// SetToDate sets the ToDate field's value.
func (s *DescribeJobsRequestFilters) SetToDate(v string) *DescribeJobsRequestFilters {
	s.ToDate = &v
	return s
}

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

	// A set of filters by which to return Recovery Instances.
	//
	// Filters is a required field
	Filters *DescribeRecoveryInstancesRequestFilters `locationName:"filters" type:"structure" required:"true"`

	// Maximum number of Recovery Instances to retrieve.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// The token of the next Recovery Instance to retrieve.
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *DescribeRecoveryInstancesInput) SetFilters(v *DescribeRecoveryInstancesRequestFilters) *DescribeRecoveryInstancesInput {
	s.Filters = v
	return s
}

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

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

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

	// An array of Recovery Instances.
	Items []*RecoveryInstance `locationName:"items" type:"list"`

	// The token of the next Recovery Instance to retrieve.
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

// SetItems sets the Items field's value.
func (s *DescribeRecoveryInstancesOutput) SetItems(v []*RecoveryInstance) *DescribeRecoveryInstancesOutput {
	s.Items = v
	return s
}

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

// A set of filters by which to return Recovery Instances.
type DescribeRecoveryInstancesRequestFilters struct {
	_ struct{} `type:"structure"`

	// An array of Recovery Instance IDs that should be returned. An empty array
	// means all Recovery Instances.
	RecoveryInstanceIDs []*string `locationName:"recoveryInstanceIDs" type:"list"`

	// An array of Source Server IDs for which associated Recovery Instances should
	// be returned.
	SourceServerIDs []*string `locationName:"sourceServerIDs" type:"list"`
}

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

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

// SetRecoveryInstanceIDs sets the RecoveryInstanceIDs field's value.
func (s *DescribeRecoveryInstancesRequestFilters) SetRecoveryInstanceIDs(v []*string) *DescribeRecoveryInstancesRequestFilters {
	s.RecoveryInstanceIDs = v
	return s
}

// SetSourceServerIDs sets the SourceServerIDs field's value.
func (s *DescribeRecoveryInstancesRequestFilters) SetSourceServerIDs(v []*string) *DescribeRecoveryInstancesRequestFilters {
	s.SourceServerIDs = v
	return s
}

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

	// A set of filters by which to return Recovery Snapshots.
	Filters *DescribeRecoverySnapshotsRequestFilters `locationName:"filters" type:"structure"`

	// Maximum number of Recovery Snapshots to retrieve.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// The token of the next Recovery Snapshot to retrieve.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The sorted ordering by which to return Recovery Snapshots.
	Order *string `locationName:"order" type:"string" enum:"RecoverySnapshotsOrder"`

	// Filter Recovery Snapshots by Source Server ID.
	//
	// SourceServerID is a required field
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *DescribeRecoverySnapshotsInput) SetFilters(v *DescribeRecoverySnapshotsRequestFilters) *DescribeRecoverySnapshotsInput {
	s.Filters = v
	return s
}

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

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

// SetOrder sets the Order field's value.
func (s *DescribeRecoverySnapshotsInput) SetOrder(v string) *DescribeRecoverySnapshotsInput {
	s.Order = &v
	return s
}

// SetSourceServerID sets the SourceServerID field's value.
func (s *DescribeRecoverySnapshotsInput) SetSourceServerID(v string) *DescribeRecoverySnapshotsInput {
	s.SourceServerID = &v
	return s
}

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

	// An array of Recovery Snapshots.
	Items []*RecoverySnapshot `locationName:"items" type:"list"`

	// The token of the next Recovery Snapshot to retrieve.
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

// SetItems sets the Items field's value.
func (s *DescribeRecoverySnapshotsOutput) SetItems(v []*RecoverySnapshot) *DescribeRecoverySnapshotsOutput {
	s.Items = v
	return s
}

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

// A set of filters by which to return Recovery Snapshots.
type DescribeRecoverySnapshotsRequestFilters struct {
	_ struct{} `type:"structure"`

	// The start date in a date range query.
	FromDateTime *string `locationName:"fromDateTime" min:"19" type:"string"`

	// The end date in a date range query.
	ToDateTime *string `locationName:"toDateTime" min:"19" type:"string"`
}

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

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

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

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

// SetFromDateTime sets the FromDateTime field's value.
func (s *DescribeRecoverySnapshotsRequestFilters) SetFromDateTime(v string) *DescribeRecoverySnapshotsRequestFilters {
	s.FromDateTime = &v
	return s
}

// SetToDateTime sets the ToDateTime field's value.
func (s *DescribeRecoverySnapshotsRequestFilters) SetToDateTime(v string) *DescribeRecoverySnapshotsRequestFilters {
	s.ToDateTime = &v
	return s
}

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

	// Maximum number of Replication Configuration Templates to retrieve.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// The token of the next Replication Configuration Template to retrieve.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The IDs of the Replication Configuration Templates to retrieve. An empty
	// list means all Replication Configuration Templates.
	//
	// ReplicationConfigurationTemplateIDs is a required field
	ReplicationConfigurationTemplateIDs []*string `locationName:"replicationConfigurationTemplateIDs" type:"list" required:"true"`
}

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

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

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

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

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

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

// SetReplicationConfigurationTemplateIDs sets the ReplicationConfigurationTemplateIDs field's value.
func (s *DescribeReplicationConfigurationTemplatesInput) SetReplicationConfigurationTemplateIDs(v []*string) *DescribeReplicationConfigurationTemplatesInput {
	s.ReplicationConfigurationTemplateIDs = v
	return s
}

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

	// An array of Replication Configuration Templates.
	Items []*ReplicationConfigurationTemplate `locationName:"items" type:"list"`

	// The token of the next Replication Configuration Template to retrieve.
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

// SetItems sets the Items field's value.
func (s *DescribeReplicationConfigurationTemplatesOutput) SetItems(v []*ReplicationConfigurationTemplate) *DescribeReplicationConfigurationTemplatesOutput {
	s.Items = v
	return s
}

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

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

	// A set of filters by which to return Source Servers.
	//
	// Filters is a required field
	Filters *DescribeSourceServersRequestFilters `locationName:"filters" type:"structure" required:"true"`

	// Maximum number of Source Servers to retrieve.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// The token of the next Source Server to retrieve.
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *DescribeSourceServersInput) SetFilters(v *DescribeSourceServersRequestFilters) *DescribeSourceServersInput {
	s.Filters = v
	return s
}

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

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

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

	// An array of Source Servers.
	Items []*SourceServer `locationName:"items" type:"list"`

	// The token of the next Source Server to retrieve.
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

// SetItems sets the Items field's value.
func (s *DescribeSourceServersOutput) SetItems(v []*SourceServer) *DescribeSourceServersOutput {
	s.Items = v
	return s
}

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

// A set of filters by which to return Source Servers.
type DescribeSourceServersRequestFilters struct {
	_ struct{} `type:"structure"`

	// An ID that describes the hardware of the Source Server. This is either an
	// EC2 instance id, a VMware uuid or a mac address.
	HardwareId *string `locationName:"hardwareId" type:"string"`

	// An array of Source Servers IDs that should be returned. An empty array means
	// all Source Servers.
	SourceServerIDs []*string `locationName:"sourceServerIDs" type:"list"`
}

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

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

// SetHardwareId sets the HardwareId field's value.
func (s *DescribeSourceServersRequestFilters) SetHardwareId(v string) *DescribeSourceServersRequestFilters {
	s.HardwareId = &v
	return s
}

// SetSourceServerIDs sets the SourceServerIDs field's value.
func (s *DescribeSourceServersRequestFilters) SetSourceServerIDs(v []*string) *DescribeSourceServersRequestFilters {
	s.SourceServerIDs = v
	return s
}

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

	// The ID of the Recovery Instance to disconnect.
	//
	// RecoveryInstanceID is a required field
	RecoveryInstanceID *string `locationName:"recoveryInstanceID" min:"10" type:"string" required:"true"`
}

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

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

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

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

// SetRecoveryInstanceID sets the RecoveryInstanceID field's value.
func (s *DisconnectRecoveryInstanceInput) SetRecoveryInstanceID(v string) *DisconnectRecoveryInstanceInput {
	s.RecoveryInstanceID = &v
	return s
}

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

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

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

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

	// The ID of the Source Server to disconnect.
	//
	// SourceServerID is a required field
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetSourceServerID sets the SourceServerID field's value.
func (s *DisconnectSourceServerInput) SetSourceServerID(v string) *DisconnectSourceServerInput {
	s.SourceServerID = &v
	return s
}

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

	// The ARN of the Source Server.
	Arn *string `locationName:"arn" min:"20" type:"string"`

	// The Data Replication Info of the Source Server.
	DataReplicationInfo *DataReplicationInfo `locationName:"dataReplicationInfo" type:"structure"`

	// The status of the last recovery launch of this Source Server.
	LastLaunchResult *string `locationName:"lastLaunchResult" type:"string" enum:"LastLaunchResult"`

	// The lifecycle information of this Source Server.
	LifeCycle *LifeCycle `locationName:"lifeCycle" type:"structure"`

	// The ID of the Recovery Instance associated with this Source Server.
	RecoveryInstanceId *string `locationName:"recoveryInstanceId" min:"10" type:"string"`

	// The source properties of the Source Server.
	SourceProperties *SourceProperties `locationName:"sourceProperties" type:"structure"`

	// The ID of the Source Server.
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string"`

	// The tags associated with the Source Server.
	//
	// Tags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DisconnectSourceServerOutput's
	// String and GoString methods.
	Tags map[string]*string `locationName:"tags" type:"map" sensitive:"true"`
}

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

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

// SetArn sets the Arn field's value.
func (s *DisconnectSourceServerOutput) SetArn(v string) *DisconnectSourceServerOutput {
	s.Arn = &v
	return s
}

// SetDataReplicationInfo sets the DataReplicationInfo field's value.
func (s *DisconnectSourceServerOutput) SetDataReplicationInfo(v *DataReplicationInfo) *DisconnectSourceServerOutput {
	s.DataReplicationInfo = v
	return s
}

// SetLastLaunchResult sets the LastLaunchResult field's value.
func (s *DisconnectSourceServerOutput) SetLastLaunchResult(v string) *DisconnectSourceServerOutput {
	s.LastLaunchResult = &v
	return s
}

// SetLifeCycle sets the LifeCycle field's value.
func (s *DisconnectSourceServerOutput) SetLifeCycle(v *LifeCycle) *DisconnectSourceServerOutput {
	s.LifeCycle = v
	return s
}

// SetRecoveryInstanceId sets the RecoveryInstanceId field's value.
func (s *DisconnectSourceServerOutput) SetRecoveryInstanceId(v string) *DisconnectSourceServerOutput {
	s.RecoveryInstanceId = &v
	return s
}

// SetSourceProperties sets the SourceProperties field's value.
func (s *DisconnectSourceServerOutput) SetSourceProperties(v *SourceProperties) *DisconnectSourceServerOutput {
	s.SourceProperties = v
	return s
}

// SetSourceServerID sets the SourceServerID field's value.
func (s *DisconnectSourceServerOutput) SetSourceServerID(v string) *DisconnectSourceServerOutput {
	s.SourceServerID = &v
	return s
}

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

// An object representing a data storage device on a server.
type Disk struct {
	_ struct{} `type:"structure"`

	// The amount of storage on the disk in bytes.
	Bytes *int64 `locationName:"bytes" type:"long"`

	// The disk or device name.
	DeviceName *string `locationName:"deviceName" type:"string"`
}

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

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

// SetBytes sets the Bytes field's value.
func (s *Disk) SetBytes(v int64) *Disk {
	s.Bytes = &v
	return s
}

// SetDeviceName sets the DeviceName field's value.
func (s *Disk) SetDeviceName(v string) *Disk {
	s.DeviceName = &v
	return s
}

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

	// The ID of the Recovery Instance whose failback replication configuration
	// should be returned.
	//
	// RecoveryInstanceID is a required field
	RecoveryInstanceID *string `locationName:"recoveryInstanceID" min:"10" type:"string" required:"true"`
}

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

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

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

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

// SetRecoveryInstanceID sets the RecoveryInstanceID field's value.
func (s *GetFailbackReplicationConfigurationInput) SetRecoveryInstanceID(v string) *GetFailbackReplicationConfigurationInput {
	s.RecoveryInstanceID = &v
	return s
}

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

	// Configure bandwidth throttling for the outbound data transfer rate of the
	// Recovery Instance in Mbps.
	BandwidthThrottling *int64 `locationName:"bandwidthThrottling" type:"long"`

	// The name of the Failback Replication Configuration.
	Name *string `locationName:"name" type:"string"`

	// The ID of the Recovery Instance.
	//
	// RecoveryInstanceID is a required field
	RecoveryInstanceID *string `locationName:"recoveryInstanceID" min:"10" type:"string" required:"true"`

	// Whether to use Private IP for the failback replication of the Recovery Instance.
	UsePrivateIP *bool `locationName:"usePrivateIP" type:"boolean"`
}

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

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

// SetBandwidthThrottling sets the BandwidthThrottling field's value.
func (s *GetFailbackReplicationConfigurationOutput) SetBandwidthThrottling(v int64) *GetFailbackReplicationConfigurationOutput {
	s.BandwidthThrottling = &v
	return s
}

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

// SetRecoveryInstanceID sets the RecoveryInstanceID field's value.
func (s *GetFailbackReplicationConfigurationOutput) SetRecoveryInstanceID(v string) *GetFailbackReplicationConfigurationOutput {
	s.RecoveryInstanceID = &v
	return s
}

// SetUsePrivateIP sets the UsePrivateIP field's value.
func (s *GetFailbackReplicationConfigurationOutput) SetUsePrivateIP(v bool) *GetFailbackReplicationConfigurationOutput {
	s.UsePrivateIP = &v
	return s
}

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

	// The ID of the Source Server that we want to retrieve a Launch Configuration
	// for.
	//
	// SourceServerID is a required field
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetSourceServerID sets the SourceServerID field's value.
func (s *GetLaunchConfigurationInput) SetSourceServerID(v string) *GetLaunchConfigurationInput {
	s.SourceServerID = &v
	return s
}

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

	// Whether we should copy the Private IP of the Source Server to the Recovery
	// Instance.
	CopyPrivateIp *bool `locationName:"copyPrivateIp" type:"boolean"`

	// Whether we want to copy the tags of the Source Server to the EC2 machine
	// of the Recovery Instance.
	CopyTags *bool `locationName:"copyTags" type:"boolean"`

	// The EC2 launch template ID of this launch configuration.
	Ec2LaunchTemplateID *string `locationName:"ec2LaunchTemplateID" type:"string"`

	// The state of the Recovery Instance in EC2 after the recovery operation.
	LaunchDisposition *string `locationName:"launchDisposition" type:"string" enum:"LaunchDisposition"`

	// The licensing configuration to be used for this launch configuration.
	Licensing *Licensing `locationName:"licensing" type:"structure"`

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

	// The ID of the Source Server for this launch configuration.
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string"`

	// Whether Elastic Disaster Recovery should try to automatically choose the
	// instance type that best matches the OS, CPU, and RAM of your Source Server.
	TargetInstanceTypeRightSizingMethod *string `locationName:"targetInstanceTypeRightSizingMethod" type:"string" enum:"TargetInstanceTypeRightSizingMethod"`
}

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

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

// SetCopyPrivateIp sets the CopyPrivateIp field's value.
func (s *GetLaunchConfigurationOutput) SetCopyPrivateIp(v bool) *GetLaunchConfigurationOutput {
	s.CopyPrivateIp = &v
	return s
}

// SetCopyTags sets the CopyTags field's value.
func (s *GetLaunchConfigurationOutput) SetCopyTags(v bool) *GetLaunchConfigurationOutput {
	s.CopyTags = &v
	return s
}

// SetEc2LaunchTemplateID sets the Ec2LaunchTemplateID field's value.
func (s *GetLaunchConfigurationOutput) SetEc2LaunchTemplateID(v string) *GetLaunchConfigurationOutput {
	s.Ec2LaunchTemplateID = &v
	return s
}

// SetLaunchDisposition sets the LaunchDisposition field's value.
func (s *GetLaunchConfigurationOutput) SetLaunchDisposition(v string) *GetLaunchConfigurationOutput {
	s.LaunchDisposition = &v
	return s
}

// SetLicensing sets the Licensing field's value.
func (s *GetLaunchConfigurationOutput) SetLicensing(v *Licensing) *GetLaunchConfigurationOutput {
	s.Licensing = v
	return s
}

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

// SetSourceServerID sets the SourceServerID field's value.
func (s *GetLaunchConfigurationOutput) SetSourceServerID(v string) *GetLaunchConfigurationOutput {
	s.SourceServerID = &v
	return s
}

// SetTargetInstanceTypeRightSizingMethod sets the TargetInstanceTypeRightSizingMethod field's value.
func (s *GetLaunchConfigurationOutput) SetTargetInstanceTypeRightSizingMethod(v string) *GetLaunchConfigurationOutput {
	s.TargetInstanceTypeRightSizingMethod = &v
	return s
}

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

	// The ID of the Source Serve for this Replication Configuration.r
	//
	// SourceServerID is a required field
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetSourceServerID sets the SourceServerID field's value.
func (s *GetReplicationConfigurationInput) SetSourceServerID(v string) *GetReplicationConfigurationInput {
	s.SourceServerID = &v
	return s
}

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

	// Whether to associate the default Elastic Disaster Recovery Security group
	// with the Replication Configuration.
	AssociateDefaultSecurityGroup *bool `locationName:"associateDefaultSecurityGroup" type:"boolean"`

	// Configure bandwidth throttling for the outbound data transfer rate of the
	// Source Server in Mbps.
	BandwidthThrottling *int64 `locationName:"bandwidthThrottling" type:"long"`

	// Whether to create a Public IP for the Recovery Instance by default.
	CreatePublicIP *bool `locationName:"createPublicIP" type:"boolean"`

	// The data plane routing mechanism that will be used for replication.
	DataPlaneRouting *string `locationName:"dataPlaneRouting" type:"string" enum:"ReplicationConfigurationDataPlaneRouting"`

	// The Staging Disk EBS volume type to be used during replication.
	DefaultLargeStagingDiskType *string `locationName:"defaultLargeStagingDiskType" type:"string" enum:"ReplicationConfigurationDefaultLargeStagingDiskType"`

	// The type of EBS encryption to be used during replication.
	EbsEncryption *string `locationName:"ebsEncryption" type:"string" enum:"ReplicationConfigurationEbsEncryption"`

	// The ARN of the EBS encryption key to be used during replication.
	EbsEncryptionKeyArn *string `locationName:"ebsEncryptionKeyArn" min:"20" type:"string"`

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

	// The Point in time (PIT) policy to manage snapshots taken during replication.
	PitPolicy []*PITPolicyRule `locationName:"pitPolicy" min:"1" type:"list"`

	// The configuration of the disks of the Source Server to be replicated.
	ReplicatedDisks []*ReplicationConfigurationReplicatedDisk `locationName:"replicatedDisks" type:"list"`

	// The instance type to be used for the replication server.
	ReplicationServerInstanceType *string `locationName:"replicationServerInstanceType" type:"string"`

	// The security group IDs that will be used by the replication server.
	ReplicationServersSecurityGroupsIDs []*string `locationName:"replicationServersSecurityGroupsIDs" type:"list"`

	// The ID of the Source Server for this Replication Configuration.
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string"`

	// The subnet to be used by the replication staging area.
	StagingAreaSubnetId *string `locationName:"stagingAreaSubnetId" type:"string"`

	// A set of tags to be associated with all resources created in the replication
	// staging area: EC2 replication server, EBS volumes, EBS snapshots, etc.
	//
	// StagingAreaTags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by GetReplicationConfigurationOutput's
	// String and GoString methods.
	StagingAreaTags map[string]*string `locationName:"stagingAreaTags" type:"map" sensitive:"true"`

	// Whether to use a dedicated Replication Server in the replication staging
	// area.
	UseDedicatedReplicationServer *bool `locationName:"useDedicatedReplicationServer" type:"boolean"`
}

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

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

// SetAssociateDefaultSecurityGroup sets the AssociateDefaultSecurityGroup field's value.
func (s *GetReplicationConfigurationOutput) SetAssociateDefaultSecurityGroup(v bool) *GetReplicationConfigurationOutput {
	s.AssociateDefaultSecurityGroup = &v
	return s
}

// SetBandwidthThrottling sets the BandwidthThrottling field's value.
func (s *GetReplicationConfigurationOutput) SetBandwidthThrottling(v int64) *GetReplicationConfigurationOutput {
	s.BandwidthThrottling = &v
	return s
}

// SetCreatePublicIP sets the CreatePublicIP field's value.
func (s *GetReplicationConfigurationOutput) SetCreatePublicIP(v bool) *GetReplicationConfigurationOutput {
	s.CreatePublicIP = &v
	return s
}

// SetDataPlaneRouting sets the DataPlaneRouting field's value.
func (s *GetReplicationConfigurationOutput) SetDataPlaneRouting(v string) *GetReplicationConfigurationOutput {
	s.DataPlaneRouting = &v
	return s
}

// SetDefaultLargeStagingDiskType sets the DefaultLargeStagingDiskType field's value.
func (s *GetReplicationConfigurationOutput) SetDefaultLargeStagingDiskType(v string) *GetReplicationConfigurationOutput {
	s.DefaultLargeStagingDiskType = &v
	return s
}

// SetEbsEncryption sets the EbsEncryption field's value.
func (s *GetReplicationConfigurationOutput) SetEbsEncryption(v string) *GetReplicationConfigurationOutput {
	s.EbsEncryption = &v
	return s
}

// SetEbsEncryptionKeyArn sets the EbsEncryptionKeyArn field's value.
func (s *GetReplicationConfigurationOutput) SetEbsEncryptionKeyArn(v string) *GetReplicationConfigurationOutput {
	s.EbsEncryptionKeyArn = &v
	return s
}

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

// SetPitPolicy sets the PitPolicy field's value.
func (s *GetReplicationConfigurationOutput) SetPitPolicy(v []*PITPolicyRule) *GetReplicationConfigurationOutput {
	s.PitPolicy = v
	return s
}

// SetReplicatedDisks sets the ReplicatedDisks field's value.
func (s *GetReplicationConfigurationOutput) SetReplicatedDisks(v []*ReplicationConfigurationReplicatedDisk) *GetReplicationConfigurationOutput {
	s.ReplicatedDisks = v
	return s
}

// SetReplicationServerInstanceType sets the ReplicationServerInstanceType field's value.
func (s *GetReplicationConfigurationOutput) SetReplicationServerInstanceType(v string) *GetReplicationConfigurationOutput {
	s.ReplicationServerInstanceType = &v
	return s
}

// SetReplicationServersSecurityGroupsIDs sets the ReplicationServersSecurityGroupsIDs field's value.
func (s *GetReplicationConfigurationOutput) SetReplicationServersSecurityGroupsIDs(v []*string) *GetReplicationConfigurationOutput {
	s.ReplicationServersSecurityGroupsIDs = v
	return s
}

// SetSourceServerID sets the SourceServerID field's value.
func (s *GetReplicationConfigurationOutput) SetSourceServerID(v string) *GetReplicationConfigurationOutput {
	s.SourceServerID = &v
	return s
}

// SetStagingAreaSubnetId sets the StagingAreaSubnetId field's value.
func (s *GetReplicationConfigurationOutput) SetStagingAreaSubnetId(v string) *GetReplicationConfigurationOutput {
	s.StagingAreaSubnetId = &v
	return s
}

// SetStagingAreaTags sets the StagingAreaTags field's value.
func (s *GetReplicationConfigurationOutput) SetStagingAreaTags(v map[string]*string) *GetReplicationConfigurationOutput {
	s.StagingAreaTags = v
	return s
}

// SetUseDedicatedReplicationServer sets the UseDedicatedReplicationServer field's value.
func (s *GetReplicationConfigurationOutput) SetUseDedicatedReplicationServer(v bool) *GetReplicationConfigurationOutput {
	s.UseDedicatedReplicationServer = &v
	return s
}

// Hints used to uniquely identify a machine.
type IdentificationHints struct {
	_ struct{} `type:"structure"`

	// AWS Instance ID identification hint.
	AwsInstanceID *string `locationName:"awsInstanceID" type:"string"`

	// Fully Qualified Domain Name identification hint.
	Fqdn *string `locationName:"fqdn" type:"string"`

	// Hostname identification hint.
	Hostname *string `locationName:"hostname" type:"string"`

	// vCenter VM path identification hint.
	VmWareUuid *string `locationName:"vmWareUuid" type:"string"`
}

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

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

// SetAwsInstanceID sets the AwsInstanceID field's value.
func (s *IdentificationHints) SetAwsInstanceID(v string) *IdentificationHints {
	s.AwsInstanceID = &v
	return s
}

// SetFqdn sets the Fqdn field's value.
func (s *IdentificationHints) SetFqdn(v string) *IdentificationHints {
	s.Fqdn = &v
	return s
}

// SetHostname sets the Hostname field's value.
func (s *IdentificationHints) SetHostname(v string) *IdentificationHints {
	s.Hostname = &v
	return s
}

// SetVmWareUuid sets the VmWareUuid field's value.
func (s *IdentificationHints) SetVmWareUuid(v string) *IdentificationHints {
	s.VmWareUuid = &v
	return s
}

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

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

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

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

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

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

// The request processing has failed because of an unknown error, exception
// or failure.
type InternalServerException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

	// The number of seconds after which the request should be safe to retry.
	RetryAfterSeconds *int64 `location:"header" locationName:"Retry-After" type:"long"`
}

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

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

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

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

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

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

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

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

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

// A job is an asynchronous workflow.
type Job struct {
	_ struct{} `type:"structure"`

	// The ARN of a Job.
	Arn *string `locationName:"arn" min:"20" type:"string"`

	// The date and time of when the Job was created.
	CreationDateTime *string `locationName:"creationDateTime" min:"19" type:"string"`

	// The date and time of when the Job ended.
	EndDateTime *string `locationName:"endDateTime" min:"19" type:"string"`

	// A string representing who initiated the Job.
	InitiatedBy *string `locationName:"initiatedBy" type:"string" enum:"InitiatedBy"`

	// The ID of the Job.
	//
	// JobID is a required field
	JobID *string `locationName:"jobID" min:"24" type:"string" required:"true"`

	// A list of servers that the Job is acting upon.
	ParticipatingServers []*ParticipatingServer `locationName:"participatingServers" type:"list"`

	// The status of the Job.
	Status *string `locationName:"status" type:"string" enum:"JobStatus"`

	// A list of tags associated with the Job.
	//
	// Tags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by Job's
	// String and GoString methods.
	Tags map[string]*string `locationName:"tags" type:"map" sensitive:"true"`

	// The type of the Job.
	Type *string `locationName:"type" type:"string" enum:"JobType"`
}

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

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

// SetArn sets the Arn field's value.
func (s *Job) SetArn(v string) *Job {
	s.Arn = &v
	return s
}

// SetCreationDateTime sets the CreationDateTime field's value.
func (s *Job) SetCreationDateTime(v string) *Job {
	s.CreationDateTime = &v
	return s
}

// SetEndDateTime sets the EndDateTime field's value.
func (s *Job) SetEndDateTime(v string) *Job {
	s.EndDateTime = &v
	return s
}

// SetInitiatedBy sets the InitiatedBy field's value.
func (s *Job) SetInitiatedBy(v string) *Job {
	s.InitiatedBy = &v
	return s
}

// SetJobID sets the JobID field's value.
func (s *Job) SetJobID(v string) *Job {
	s.JobID = &v
	return s
}

// SetParticipatingServers sets the ParticipatingServers field's value.
func (s *Job) SetParticipatingServers(v []*ParticipatingServer) *Job {
	s.ParticipatingServers = v
	return s
}

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

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

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

// A log outputted by a Job.
type JobLog struct {
	_ struct{} `type:"structure"`

	// The event represents the type of a log.
	Event *string `locationName:"event" type:"string" enum:"JobLogEvent"`

	// Metadata associated with a Job log.
	EventData *JobLogEventData `locationName:"eventData" type:"structure"`

	// The date and time the log was taken.
	LogDateTime *string `locationName:"logDateTime" min:"19" type:"string"`
}

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

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

// SetEvent sets the Event field's value.
func (s *JobLog) SetEvent(v string) *JobLog {
	s.Event = &v
	return s
}

// SetEventData sets the EventData field's value.
func (s *JobLog) SetEventData(v *JobLogEventData) *JobLog {
	s.EventData = v
	return s
}

// SetLogDateTime sets the LogDateTime field's value.
func (s *JobLog) SetLogDateTime(v string) *JobLog {
	s.LogDateTime = &v
	return s
}

// Metadata associated with a Job log.
type JobLogEventData struct {
	_ struct{} `type:"structure"`

	// The ID of a conversion server.
	ConversionServerID *string `locationName:"conversionServerID" type:"string"`

	// A string representing a job error.
	RawError *string `locationName:"rawError" type:"string"`

	// The ID of a Source Server.
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string"`

	// The ID of a Recovery Instance.
	TargetInstanceID *string `locationName:"targetInstanceID" type:"string"`
}

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

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

// SetConversionServerID sets the ConversionServerID field's value.
func (s *JobLogEventData) SetConversionServerID(v string) *JobLogEventData {
	s.ConversionServerID = &v
	return s
}

// SetRawError sets the RawError field's value.
func (s *JobLogEventData) SetRawError(v string) *JobLogEventData {
	s.RawError = &v
	return s
}

// SetSourceServerID sets the SourceServerID field's value.
func (s *JobLogEventData) SetSourceServerID(v string) *JobLogEventData {
	s.SourceServerID = &v
	return s
}

// SetTargetInstanceID sets the TargetInstanceID field's value.
func (s *JobLogEventData) SetTargetInstanceID(v string) *JobLogEventData {
	s.TargetInstanceID = &v
	return s
}

// Configuration of a machine's license.
type Licensing struct {
	_ struct{} `type:"structure"`

	// Whether to enable "Bring your own license" or not.
	OsByol *bool `locationName:"osByol" type:"boolean"`
}

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

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

// SetOsByol sets the OsByol field's value.
func (s *Licensing) SetOsByol(v bool) *Licensing {
	s.OsByol = &v
	return s
}

// An object representing the Source Server Lifecycle.
type LifeCycle struct {
	_ struct{} `type:"structure"`

	// The date and time of when the Source Server was added to the service.
	AddedToServiceDateTime *string `locationName:"addedToServiceDateTime" min:"19" type:"string"`

	// The amount of time that the Source Server has been replicating for.
	ElapsedReplicationDuration *string `locationName:"elapsedReplicationDuration" min:"19" type:"string"`

	// The date and time of the first byte that was replicated from the Source Server.
	FirstByteDateTime *string `locationName:"firstByteDateTime" min:"19" type:"string"`

	// An object containing information regarding the last launch of the Source
	// Server.
	LastLaunch *LifeCycleLastLaunch `locationName:"lastLaunch" type:"structure"`

	// The date and time this Source Server was last seen by the service.
	LastSeenByServiceDateTime *string `locationName:"lastSeenByServiceDateTime" min:"19" type:"string"`
}

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

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

// SetAddedToServiceDateTime sets the AddedToServiceDateTime field's value.
func (s *LifeCycle) SetAddedToServiceDateTime(v string) *LifeCycle {
	s.AddedToServiceDateTime = &v
	return s
}

// SetElapsedReplicationDuration sets the ElapsedReplicationDuration field's value.
func (s *LifeCycle) SetElapsedReplicationDuration(v string) *LifeCycle {
	s.ElapsedReplicationDuration = &v
	return s
}

// SetFirstByteDateTime sets the FirstByteDateTime field's value.
func (s *LifeCycle) SetFirstByteDateTime(v string) *LifeCycle {
	s.FirstByteDateTime = &v
	return s
}

// SetLastLaunch sets the LastLaunch field's value.
func (s *LifeCycle) SetLastLaunch(v *LifeCycleLastLaunch) *LifeCycle {
	s.LastLaunch = v
	return s
}

// SetLastSeenByServiceDateTime sets the LastSeenByServiceDateTime field's value.
func (s *LifeCycle) SetLastSeenByServiceDateTime(v string) *LifeCycle {
	s.LastSeenByServiceDateTime = &v
	return s
}

// An object containing information regarding the last launch of a Source Server.
type LifeCycleLastLaunch struct {
	_ struct{} `type:"structure"`

	// An object containing information regarding the initiation of the last launch
	// of a Source Server.
	Initiated *LifeCycleLastLaunchInitiated `locationName:"initiated" type:"structure"`
}

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

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

// SetInitiated sets the Initiated field's value.
func (s *LifeCycleLastLaunch) SetInitiated(v *LifeCycleLastLaunchInitiated) *LifeCycleLastLaunch {
	s.Initiated = v
	return s
}

// An object containing information regarding the initiation of the last launch
// of a Source Server.
type LifeCycleLastLaunchInitiated struct {
	_ struct{} `type:"structure"`

	// The date and time the last Source Server launch was initiated.
	ApiCallDateTime *string `locationName:"apiCallDateTime" min:"19" type:"string"`

	// The ID of the Job that was used to last launch the Source Server.
	JobID *string `locationName:"jobID" min:"24" type:"string"`

	// The Job type that was used to last launch the Source Server.
	Type *string `locationName:"type" type:"string" enum:"LastLaunchType"`
}

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

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

// SetApiCallDateTime sets the ApiCallDateTime field's value.
func (s *LifeCycleLastLaunchInitiated) SetApiCallDateTime(v string) *LifeCycleLastLaunchInitiated {
	s.ApiCallDateTime = &v
	return s
}

// SetJobID sets the JobID field's value.
func (s *LifeCycleLastLaunchInitiated) SetJobID(v string) *LifeCycleLastLaunchInitiated {
	s.JobID = &v
	return s
}

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

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

	// The ARN of the resource whose tags should be returned.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" min:"20" type:"string" required:"true"`
}

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

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

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

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

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

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

	// The tags of the requested resource.
	//
	// Tags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ListTagsForResourceOutput's
	// String and GoString methods.
	Tags map[string]*string `locationName:"tags" type:"map" sensitive:"true"`
}

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

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

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

// Network interface.
type NetworkInterface struct {
	_ struct{} `type:"structure"`

	// Network interface IPs.
	Ips []*string `locationName:"ips" type:"list"`

	// Whether this is the primary network interface.
	IsPrimary *bool `locationName:"isPrimary" type:"boolean"`

	// The MAC address of the network interface.
	MacAddress *string `locationName:"macAddress" type:"string"`
}

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

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

// SetIps sets the Ips field's value.
func (s *NetworkInterface) SetIps(v []*string) *NetworkInterface {
	s.Ips = v
	return s
}

// SetIsPrimary sets the IsPrimary field's value.
func (s *NetworkInterface) SetIsPrimary(v bool) *NetworkInterface {
	s.IsPrimary = &v
	return s
}

// SetMacAddress sets the MacAddress field's value.
func (s *NetworkInterface) SetMacAddress(v string) *NetworkInterface {
	s.MacAddress = &v
	return s
}

// Operating System.
type OS struct {
	_ struct{} `type:"structure"`

	// The long name of the Operating System.
	FullString *string `locationName:"fullString" type:"string"`
}

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

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

// SetFullString sets the FullString field's value.
func (s *OS) SetFullString(v string) *OS {
	s.FullString = &v
	return s
}

// A rule in the Point in Time (PIT) policy representing when to take snapshots
// and how long to retain them for.
type PITPolicyRule struct {
	_ struct{} `type:"structure"`

	// Whether this rule is enabled or not.
	Enabled *bool `locationName:"enabled" type:"boolean"`

	// How often, in the chosen units, a snapshot should be taken.
	//
	// Interval is a required field
	Interval *int64 `locationName:"interval" min:"1" type:"integer" required:"true"`

	// The duration to retain a snapshot for, in the chosen units.
	//
	// RetentionDuration is a required field
	RetentionDuration *int64 `locationName:"retentionDuration" min:"1" type:"integer" required:"true"`

	// The ID of the rule.
	RuleID *int64 `locationName:"ruleID" type:"long"`

	// The units used to measure the interval and retentionDuration.
	//
	// Units is a required field
	Units *string `locationName:"units" type:"string" required:"true" enum:"PITPolicyRuleUnits"`
}

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

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

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

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

// SetEnabled sets the Enabled field's value.
func (s *PITPolicyRule) SetEnabled(v bool) *PITPolicyRule {
	s.Enabled = &v
	return s
}

// SetInterval sets the Interval field's value.
func (s *PITPolicyRule) SetInterval(v int64) *PITPolicyRule {
	s.Interval = &v
	return s
}

// SetRetentionDuration sets the RetentionDuration field's value.
func (s *PITPolicyRule) SetRetentionDuration(v int64) *PITPolicyRule {
	s.RetentionDuration = &v
	return s
}

// SetRuleID sets the RuleID field's value.
func (s *PITPolicyRule) SetRuleID(v int64) *PITPolicyRule {
	s.RuleID = &v
	return s
}

// SetUnits sets the Units field's value.
func (s *PITPolicyRule) SetUnits(v string) *PITPolicyRule {
	s.Units = &v
	return s
}

// Represents a server participating in an asynchronous Job.
type ParticipatingServer struct {
	_ struct{} `type:"structure"`

	// The launch status of a participating server.
	LaunchStatus *string `locationName:"launchStatus" type:"string" enum:"LaunchStatus"`

	// The Recovery Instance ID of a participating server.
	RecoveryInstanceID *string `locationName:"recoveryInstanceID" min:"10" type:"string"`

	// The Source Server ID of a participating server.
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string"`
}

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

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

// SetLaunchStatus sets the LaunchStatus field's value.
func (s *ParticipatingServer) SetLaunchStatus(v string) *ParticipatingServer {
	s.LaunchStatus = &v
	return s
}

// SetRecoveryInstanceID sets the RecoveryInstanceID field's value.
func (s *ParticipatingServer) SetRecoveryInstanceID(v string) *ParticipatingServer {
	s.RecoveryInstanceID = &v
	return s
}

// SetSourceServerID sets the SourceServerID field's value.
func (s *ParticipatingServer) SetSourceServerID(v string) *ParticipatingServer {
	s.SourceServerID = &v
	return s
}

// A Recovery Instance is a replica of a Source Server running on EC2.
type RecoveryInstance struct {
	_ struct{} `type:"structure"`

	// The ARN of the Recovery Instance.
	Arn *string `locationName:"arn" min:"20" type:"string"`

	// The Data Replication Info of the Recovery Instance.
	DataReplicationInfo *RecoveryInstanceDataReplicationInfo `locationName:"dataReplicationInfo" type:"structure"`

	// The EC2 instance ID of the Recovery Instance.
	Ec2InstanceID *string `locationName:"ec2InstanceID" type:"string"`

	// The state of the EC2 instance for this Recovery Instance.
	Ec2InstanceState *string `locationName:"ec2InstanceState" type:"string" enum:"EC2InstanceState"`

	// An object representing failback related information of the Recovery Instance.
	Failback *RecoveryInstanceFailback `locationName:"failback" type:"structure"`

	// Whether this Recovery Instance was created for a drill or for an actual Recovery
	// event.
	IsDrill *bool `locationName:"isDrill" type:"boolean"`

	// The ID of the Job that created the Recovery Instance.
	JobID *string `locationName:"jobID" min:"24" type:"string"`

	// The date and time of the Point in Time (PIT) snapshot that this Recovery
	// Instance was launched from.
	PointInTimeSnapshotDateTime *string `locationName:"pointInTimeSnapshotDateTime" min:"19" type:"string"`

	// The ID of the Recovery Instance.
	RecoveryInstanceID *string `locationName:"recoveryInstanceID" min:"10" type:"string"`

	// Properties of the Recovery Instance machine.
	RecoveryInstanceProperties *RecoveryInstanceProperties `locationName:"recoveryInstanceProperties" type:"structure"`

	// The Source Server ID that this Recovery Instance is associated with.
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string"`

	// An array of tags that are associated with the Recovery Instance.
	//
	// Tags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by RecoveryInstance's
	// String and GoString methods.
	Tags map[string]*string `locationName:"tags" type:"map" sensitive:"true"`
}

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

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

// SetArn sets the Arn field's value.
func (s *RecoveryInstance) SetArn(v string) *RecoveryInstance {
	s.Arn = &v
	return s
}

// SetDataReplicationInfo sets the DataReplicationInfo field's value.
func (s *RecoveryInstance) SetDataReplicationInfo(v *RecoveryInstanceDataReplicationInfo) *RecoveryInstance {
	s.DataReplicationInfo = v
	return s
}

// SetEc2InstanceID sets the Ec2InstanceID field's value.
func (s *RecoveryInstance) SetEc2InstanceID(v string) *RecoveryInstance {
	s.Ec2InstanceID = &v
	return s
}

// SetEc2InstanceState sets the Ec2InstanceState field's value.
func (s *RecoveryInstance) SetEc2InstanceState(v string) *RecoveryInstance {
	s.Ec2InstanceState = &v
	return s
}

// SetFailback sets the Failback field's value.
func (s *RecoveryInstance) SetFailback(v *RecoveryInstanceFailback) *RecoveryInstance {
	s.Failback = v
	return s
}

// SetIsDrill sets the IsDrill field's value.
func (s *RecoveryInstance) SetIsDrill(v bool) *RecoveryInstance {
	s.IsDrill = &v
	return s
}

// SetJobID sets the JobID field's value.
func (s *RecoveryInstance) SetJobID(v string) *RecoveryInstance {
	s.JobID = &v
	return s
}

// SetPointInTimeSnapshotDateTime sets the PointInTimeSnapshotDateTime field's value.
func (s *RecoveryInstance) SetPointInTimeSnapshotDateTime(v string) *RecoveryInstance {
	s.PointInTimeSnapshotDateTime = &v
	return s
}

// SetRecoveryInstanceID sets the RecoveryInstanceID field's value.
func (s *RecoveryInstance) SetRecoveryInstanceID(v string) *RecoveryInstance {
	s.RecoveryInstanceID = &v
	return s
}

// SetRecoveryInstanceProperties sets the RecoveryInstanceProperties field's value.
func (s *RecoveryInstance) SetRecoveryInstanceProperties(v *RecoveryInstanceProperties) *RecoveryInstance {
	s.RecoveryInstanceProperties = v
	return s
}

// SetSourceServerID sets the SourceServerID field's value.
func (s *RecoveryInstance) SetSourceServerID(v string) *RecoveryInstance {
	s.SourceServerID = &v
	return s
}

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

// Error in data replication.
type RecoveryInstanceDataReplicationError struct {
	_ struct{} `type:"structure"`

	// Error in data replication.
	Error *string `locationName:"error" type:"string" enum:"FailbackReplicationError"`

	// Error in data replication.
	RawError *string `locationName:"rawError" type:"string"`
}

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

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

// SetError sets the Error field's value.
func (s *RecoveryInstanceDataReplicationError) SetError(v string) *RecoveryInstanceDataReplicationError {
	s.Error = &v
	return s
}

// SetRawError sets the RawError field's value.
func (s *RecoveryInstanceDataReplicationError) SetRawError(v string) *RecoveryInstanceDataReplicationError {
	s.RawError = &v
	return s
}

// Information about Data Replication
type RecoveryInstanceDataReplicationInfo struct {
	_ struct{} `type:"structure"`

	// Information about Data Replication
	DataReplicationError *RecoveryInstanceDataReplicationError `locationName:"dataReplicationError" type:"structure"`

	// Information about whether the data replication has been initiated.
	DataReplicationInitiation *RecoveryInstanceDataReplicationInitiation `locationName:"dataReplicationInitiation" type:"structure"`

	// The state of the data replication.
	DataReplicationState *string `locationName:"dataReplicationState" type:"string" enum:"RecoveryInstanceDataReplicationState"`

	// An estimate of when the data replication will be completed.
	EtaDateTime *string `locationName:"etaDateTime" min:"19" type:"string"`

	// Data replication lag duration.
	LagDuration *string `locationName:"lagDuration" min:"19" type:"string"`

	// The disks that should be replicated.
	ReplicatedDisks []*RecoveryInstanceDataReplicationInfoReplicatedDisk `locationName:"replicatedDisks" type:"list"`
}

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

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

// SetDataReplicationError sets the DataReplicationError field's value.
func (s *RecoveryInstanceDataReplicationInfo) SetDataReplicationError(v *RecoveryInstanceDataReplicationError) *RecoveryInstanceDataReplicationInfo {
	s.DataReplicationError = v
	return s
}

// SetDataReplicationInitiation sets the DataReplicationInitiation field's value.
func (s *RecoveryInstanceDataReplicationInfo) SetDataReplicationInitiation(v *RecoveryInstanceDataReplicationInitiation) *RecoveryInstanceDataReplicationInfo {
	s.DataReplicationInitiation = v
	return s
}

// SetDataReplicationState sets the DataReplicationState field's value.
func (s *RecoveryInstanceDataReplicationInfo) SetDataReplicationState(v string) *RecoveryInstanceDataReplicationInfo {
	s.DataReplicationState = &v
	return s
}

// SetEtaDateTime sets the EtaDateTime field's value.
func (s *RecoveryInstanceDataReplicationInfo) SetEtaDateTime(v string) *RecoveryInstanceDataReplicationInfo {
	s.EtaDateTime = &v
	return s
}

// SetLagDuration sets the LagDuration field's value.
func (s *RecoveryInstanceDataReplicationInfo) SetLagDuration(v string) *RecoveryInstanceDataReplicationInfo {
	s.LagDuration = &v
	return s
}

// SetReplicatedDisks sets the ReplicatedDisks field's value.
func (s *RecoveryInstanceDataReplicationInfo) SetReplicatedDisks(v []*RecoveryInstanceDataReplicationInfoReplicatedDisk) *RecoveryInstanceDataReplicationInfo {
	s.ReplicatedDisks = v
	return s
}

// A disk that should be replicated.
type RecoveryInstanceDataReplicationInfoReplicatedDisk struct {
	_ struct{} `type:"structure"`

	// The size of the replication backlog in bytes.
	BackloggedStorageBytes *int64 `locationName:"backloggedStorageBytes" type:"long"`

	// The name of the device.
	DeviceName *string `locationName:"deviceName" type:"string"`

	// The amount of data replicated so far in bytes.
	ReplicatedStorageBytes *int64 `locationName:"replicatedStorageBytes" type:"long"`

	// The amount of data to be rescanned in bytes.
	RescannedStorageBytes *int64 `locationName:"rescannedStorageBytes" type:"long"`

	// The total amount of data to be replicated in bytes.
	TotalStorageBytes *int64 `locationName:"totalStorageBytes" type:"long"`
}

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

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

// SetBackloggedStorageBytes sets the BackloggedStorageBytes field's value.
func (s *RecoveryInstanceDataReplicationInfoReplicatedDisk) SetBackloggedStorageBytes(v int64) *RecoveryInstanceDataReplicationInfoReplicatedDisk {
	s.BackloggedStorageBytes = &v
	return s
}

// SetDeviceName sets the DeviceName field's value.
func (s *RecoveryInstanceDataReplicationInfoReplicatedDisk) SetDeviceName(v string) *RecoveryInstanceDataReplicationInfoReplicatedDisk {
	s.DeviceName = &v
	return s
}

// SetReplicatedStorageBytes sets the ReplicatedStorageBytes field's value.
func (s *RecoveryInstanceDataReplicationInfoReplicatedDisk) SetReplicatedStorageBytes(v int64) *RecoveryInstanceDataReplicationInfoReplicatedDisk {
	s.ReplicatedStorageBytes = &v
	return s
}

// SetRescannedStorageBytes sets the RescannedStorageBytes field's value.
func (s *RecoveryInstanceDataReplicationInfoReplicatedDisk) SetRescannedStorageBytes(v int64) *RecoveryInstanceDataReplicationInfoReplicatedDisk {
	s.RescannedStorageBytes = &v
	return s
}

// SetTotalStorageBytes sets the TotalStorageBytes field's value.
func (s *RecoveryInstanceDataReplicationInfoReplicatedDisk) SetTotalStorageBytes(v int64) *RecoveryInstanceDataReplicationInfoReplicatedDisk {
	s.TotalStorageBytes = &v
	return s
}

// Data replication initiation.
type RecoveryInstanceDataReplicationInitiation struct {
	_ struct{} `type:"structure"`

	// The date and time of the current attempt to initiate data replication.
	StartDateTime *string `locationName:"startDateTime" min:"19" type:"string"`

	// The steps of the current attempt to initiate data replication.
	Steps []*RecoveryInstanceDataReplicationInitiationStep `locationName:"steps" type:"list"`
}

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

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

// SetStartDateTime sets the StartDateTime field's value.
func (s *RecoveryInstanceDataReplicationInitiation) SetStartDateTime(v string) *RecoveryInstanceDataReplicationInitiation {
	s.StartDateTime = &v
	return s
}

// SetSteps sets the Steps field's value.
func (s *RecoveryInstanceDataReplicationInitiation) SetSteps(v []*RecoveryInstanceDataReplicationInitiationStep) *RecoveryInstanceDataReplicationInitiation {
	s.Steps = v
	return s
}

// Data replication initiation step.
type RecoveryInstanceDataReplicationInitiationStep struct {
	_ struct{} `type:"structure"`

	// The name of the step.
	Name *string `locationName:"name" type:"string" enum:"RecoveryInstanceDataReplicationInitiationStepName"`

	// The status of the step.
	Status *string `locationName:"status" type:"string" enum:"RecoveryInstanceDataReplicationInitiationStepStatus"`
}

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

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

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

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

// An object representing a block storage device on the Recovery Instance.
type RecoveryInstanceDisk struct {
	_ struct{} `type:"structure"`

	// The amount of storage on the disk in bytes.
	Bytes *int64 `locationName:"bytes" type:"long"`

	// The EBS Volume ID of this disk.
	EbsVolumeID *string `locationName:"ebsVolumeID" min:"10" type:"string"`

	// The internal device name of this disk. This is the name that is visible on
	// the machine itself and not from the EC2 console.
	InternalDeviceName *string `locationName:"internalDeviceName" type:"string"`
}

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

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

// SetBytes sets the Bytes field's value.
func (s *RecoveryInstanceDisk) SetBytes(v int64) *RecoveryInstanceDisk {
	s.Bytes = &v
	return s
}

// SetEbsVolumeID sets the EbsVolumeID field's value.
func (s *RecoveryInstanceDisk) SetEbsVolumeID(v string) *RecoveryInstanceDisk {
	s.EbsVolumeID = &v
	return s
}

// SetInternalDeviceName sets the InternalDeviceName field's value.
func (s *RecoveryInstanceDisk) SetInternalDeviceName(v string) *RecoveryInstanceDisk {
	s.InternalDeviceName = &v
	return s
}

// An object representing failback related information of the Recovery Instance.
type RecoveryInstanceFailback struct {
	_ struct{} `type:"structure"`

	// The date and time the agent on the Recovery Instance was last seen by the
	// service.
	AgentLastSeenByServiceDateTime *string `locationName:"agentLastSeenByServiceDateTime" min:"19" type:"string"`

	// The amount of time that the Recovery Instance has been replicating for.
	ElapsedReplicationDuration *string `locationName:"elapsedReplicationDuration" min:"19" type:"string"`

	// The ID of the failback client that this Recovery Instance is associated with.
	FailbackClientID *string `locationName:"failbackClientID" type:"string"`

	// The date and time that the failback client was last seen by the service.
	FailbackClientLastSeenByServiceDateTime *string `locationName:"failbackClientLastSeenByServiceDateTime" min:"19" type:"string"`

	// The date and time that the failback initiation started.
	FailbackInitiationTime *string `locationName:"failbackInitiationTime" min:"19" type:"string"`

	// The Job ID of the last failback log for this Recovery Instance.
	FailbackJobID *string `locationName:"failbackJobID" min:"24" type:"string"`

	// Whether we are failing back to the original Source Server for this Recovery
	// Instance.
	FailbackToOriginalServer *bool `locationName:"failbackToOriginalServer" type:"boolean"`

	// The date and time of the first byte that was replicated from the Recovery
	// Instance.
	FirstByteDateTime *string `locationName:"firstByteDateTime" min:"19" type:"string"`

	// The state of the failback process that this Recovery Instance is in.
	State *string `locationName:"state" type:"string" enum:"FailbackState"`
}

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

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

// SetAgentLastSeenByServiceDateTime sets the AgentLastSeenByServiceDateTime field's value.
func (s *RecoveryInstanceFailback) SetAgentLastSeenByServiceDateTime(v string) *RecoveryInstanceFailback {
	s.AgentLastSeenByServiceDateTime = &v
	return s
}

// SetElapsedReplicationDuration sets the ElapsedReplicationDuration field's value.
func (s *RecoveryInstanceFailback) SetElapsedReplicationDuration(v string) *RecoveryInstanceFailback {
	s.ElapsedReplicationDuration = &v
	return s
}

// SetFailbackClientID sets the FailbackClientID field's value.
func (s *RecoveryInstanceFailback) SetFailbackClientID(v string) *RecoveryInstanceFailback {
	s.FailbackClientID = &v
	return s
}

// SetFailbackClientLastSeenByServiceDateTime sets the FailbackClientLastSeenByServiceDateTime field's value.
func (s *RecoveryInstanceFailback) SetFailbackClientLastSeenByServiceDateTime(v string) *RecoveryInstanceFailback {
	s.FailbackClientLastSeenByServiceDateTime = &v
	return s
}

// SetFailbackInitiationTime sets the FailbackInitiationTime field's value.
func (s *RecoveryInstanceFailback) SetFailbackInitiationTime(v string) *RecoveryInstanceFailback {
	s.FailbackInitiationTime = &v
	return s
}

// SetFailbackJobID sets the FailbackJobID field's value.
func (s *RecoveryInstanceFailback) SetFailbackJobID(v string) *RecoveryInstanceFailback {
	s.FailbackJobID = &v
	return s
}

// SetFailbackToOriginalServer sets the FailbackToOriginalServer field's value.
func (s *RecoveryInstanceFailback) SetFailbackToOriginalServer(v bool) *RecoveryInstanceFailback {
	s.FailbackToOriginalServer = &v
	return s
}

// SetFirstByteDateTime sets the FirstByteDateTime field's value.
func (s *RecoveryInstanceFailback) SetFirstByteDateTime(v string) *RecoveryInstanceFailback {
	s.FirstByteDateTime = &v
	return s
}

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

// Properties of the Recovery Instance machine.
type RecoveryInstanceProperties struct {
	_ struct{} `type:"structure"`

	// An array of CPUs.
	Cpus []*CPU `locationName:"cpus" type:"list"`

	// An array of disks.
	Disks []*RecoveryInstanceDisk `locationName:"disks" type:"list"`

	// Hints used to uniquely identify a machine.
	IdentificationHints *IdentificationHints `locationName:"identificationHints" type:"structure"`

	// The date and time the Recovery Instance properties were last updated on.
	LastUpdatedDateTime *string `locationName:"lastUpdatedDateTime" min:"19" type:"string"`

	// An array of network interfaces.
	NetworkInterfaces []*NetworkInterface `locationName:"networkInterfaces" type:"list"`

	// Operating system.
	Os *OS `locationName:"os" type:"structure"`

	// The amount of RAM in bytes.
	RamBytes *int64 `locationName:"ramBytes" type:"long"`
}

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

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

// SetCpus sets the Cpus field's value.
func (s *RecoveryInstanceProperties) SetCpus(v []*CPU) *RecoveryInstanceProperties {
	s.Cpus = v
	return s
}

// SetDisks sets the Disks field's value.
func (s *RecoveryInstanceProperties) SetDisks(v []*RecoveryInstanceDisk) *RecoveryInstanceProperties {
	s.Disks = v
	return s
}

// SetIdentificationHints sets the IdentificationHints field's value.
func (s *RecoveryInstanceProperties) SetIdentificationHints(v *IdentificationHints) *RecoveryInstanceProperties {
	s.IdentificationHints = v
	return s
}

// SetLastUpdatedDateTime sets the LastUpdatedDateTime field's value.
func (s *RecoveryInstanceProperties) SetLastUpdatedDateTime(v string) *RecoveryInstanceProperties {
	s.LastUpdatedDateTime = &v
	return s
}

// SetNetworkInterfaces sets the NetworkInterfaces field's value.
func (s *RecoveryInstanceProperties) SetNetworkInterfaces(v []*NetworkInterface) *RecoveryInstanceProperties {
	s.NetworkInterfaces = v
	return s
}

// SetOs sets the Os field's value.
func (s *RecoveryInstanceProperties) SetOs(v *OS) *RecoveryInstanceProperties {
	s.Os = v
	return s
}

// SetRamBytes sets the RamBytes field's value.
func (s *RecoveryInstanceProperties) SetRamBytes(v int64) *RecoveryInstanceProperties {
	s.RamBytes = &v
	return s
}

// A snapshot of a Source Server used during recovery.
type RecoverySnapshot struct {
	_ struct{} `type:"structure"`

	// A list of EBS snapshots.
	EbsSnapshots []*string `locationName:"ebsSnapshots" type:"list"`

	// The timestamp of when we expect the snapshot to be taken.
	//
	// ExpectedTimestamp is a required field
	ExpectedTimestamp *string `locationName:"expectedTimestamp" min:"19" type:"string" required:"true"`

	// The ID of the Recovery Snapshot.
	//
	// SnapshotID is a required field
	SnapshotID *string `locationName:"snapshotID" min:"21" type:"string" required:"true"`

	// The ID of the Source Server that the snapshot was taken for.
	//
	// SourceServerID is a required field
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string" required:"true"`

	// The actual timestamp that the snapshot was taken.
	Timestamp *string `locationName:"timestamp" min:"19" type:"string"`
}

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

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

// SetEbsSnapshots sets the EbsSnapshots field's value.
func (s *RecoverySnapshot) SetEbsSnapshots(v []*string) *RecoverySnapshot {
	s.EbsSnapshots = v
	return s
}

// SetExpectedTimestamp sets the ExpectedTimestamp field's value.
func (s *RecoverySnapshot) SetExpectedTimestamp(v string) *RecoverySnapshot {
	s.ExpectedTimestamp = &v
	return s
}

// SetSnapshotID sets the SnapshotID field's value.
func (s *RecoverySnapshot) SetSnapshotID(v string) *RecoverySnapshot {
	s.SnapshotID = &v
	return s
}

// SetSourceServerID sets the SourceServerID field's value.
func (s *RecoverySnapshot) SetSourceServerID(v string) *RecoverySnapshot {
	s.SourceServerID = &v
	return s
}

// SetTimestamp sets the Timestamp field's value.
func (s *RecoverySnapshot) SetTimestamp(v string) *RecoverySnapshot {
	s.Timestamp = &v
	return s
}

// The configuration of a disk of the Source Server to be replicated.
type ReplicationConfigurationReplicatedDisk struct {
	_ struct{} `type:"structure"`

	// The name of the device.
	DeviceName *string `locationName:"deviceName" type:"string"`

	// The requested number of I/O operations per second (IOPS).
	Iops *int64 `locationName:"iops" type:"long"`

	// Whether to boot from this disk or not.
	IsBootDisk *bool `locationName:"isBootDisk" type:"boolean"`

	// The Staging Disk EBS volume type to be used during replication.
	StagingDiskType *string `locationName:"stagingDiskType" type:"string" enum:"ReplicationConfigurationReplicatedDiskStagingDiskType"`

	// The throughput to use for the EBS volume in MiB/s. This parameter is valid
	// only for gp3 volumes.
	Throughput *int64 `locationName:"throughput" type:"long"`
}

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

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

// SetDeviceName sets the DeviceName field's value.
func (s *ReplicationConfigurationReplicatedDisk) SetDeviceName(v string) *ReplicationConfigurationReplicatedDisk {
	s.DeviceName = &v
	return s
}

// SetIops sets the Iops field's value.
func (s *ReplicationConfigurationReplicatedDisk) SetIops(v int64) *ReplicationConfigurationReplicatedDisk {
	s.Iops = &v
	return s
}

// SetIsBootDisk sets the IsBootDisk field's value.
func (s *ReplicationConfigurationReplicatedDisk) SetIsBootDisk(v bool) *ReplicationConfigurationReplicatedDisk {
	s.IsBootDisk = &v
	return s
}

// SetStagingDiskType sets the StagingDiskType field's value.
func (s *ReplicationConfigurationReplicatedDisk) SetStagingDiskType(v string) *ReplicationConfigurationReplicatedDisk {
	s.StagingDiskType = &v
	return s
}

// SetThroughput sets the Throughput field's value.
func (s *ReplicationConfigurationReplicatedDisk) SetThroughput(v int64) *ReplicationConfigurationReplicatedDisk {
	s.Throughput = &v
	return s
}

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

	// The Replication Configuration Template ARN.
	Arn *string `locationName:"arn" min:"20" type:"string"`

	// Whether to associate the default Elastic Disaster Recovery Security group
	// with the Replication Configuration Template.
	AssociateDefaultSecurityGroup *bool `locationName:"associateDefaultSecurityGroup" type:"boolean"`

	// Configure bandwidth throttling for the outbound data transfer rate of the
	// Source Server in Mbps.
	BandwidthThrottling *int64 `locationName:"bandwidthThrottling" type:"long"`

	// Whether to create a Public IP for the Recovery Instance by default.
	CreatePublicIP *bool `locationName:"createPublicIP" type:"boolean"`

	// The data plane routing mechanism that will be used for replication.
	DataPlaneRouting *string `locationName:"dataPlaneRouting" type:"string" enum:"ReplicationConfigurationDataPlaneRouting"`

	// The Staging Disk EBS volume type to be used during replication.
	DefaultLargeStagingDiskType *string `locationName:"defaultLargeStagingDiskType" type:"string" enum:"ReplicationConfigurationDefaultLargeStagingDiskType"`

	// The type of EBS encryption to be used during replication.
	EbsEncryption *string `locationName:"ebsEncryption" type:"string" enum:"ReplicationConfigurationEbsEncryption"`

	// The ARN of the EBS encryption key to be used during replication.
	EbsEncryptionKeyArn *string `locationName:"ebsEncryptionKeyArn" min:"20" type:"string"`

	// The Point in time (PIT) policy to manage snapshots taken during replication.
	PitPolicy []*PITPolicyRule `locationName:"pitPolicy" min:"1" type:"list"`

	// The Replication Configuration Template ID.
	//
	// ReplicationConfigurationTemplateID is a required field
	ReplicationConfigurationTemplateID *string `locationName:"replicationConfigurationTemplateID" min:"21" type:"string" required:"true"`

	// The instance type to be used for the replication server.
	ReplicationServerInstanceType *string `locationName:"replicationServerInstanceType" type:"string"`

	// The security group IDs that will be used by the replication server.
	ReplicationServersSecurityGroupsIDs []*string `locationName:"replicationServersSecurityGroupsIDs" type:"list"`

	// The subnet to be used by the replication staging area.
	StagingAreaSubnetId *string `locationName:"stagingAreaSubnetId" type:"string"`

	// A set of tags to be associated with all resources created in the replication
	// staging area: EC2 replication server, EBS volumes, EBS snapshots, etc.
	//
	// StagingAreaTags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ReplicationConfigurationTemplate's
	// String and GoString methods.
	StagingAreaTags map[string]*string `locationName:"stagingAreaTags" type:"map" sensitive:"true"`

	// A set of tags to be associated with the Replication Configuration Template
	// resource.
	//
	// Tags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ReplicationConfigurationTemplate's
	// String and GoString methods.
	Tags map[string]*string `locationName:"tags" type:"map" sensitive:"true"`

	// Whether to use a dedicated Replication Server in the replication staging
	// area.
	UseDedicatedReplicationServer *bool `locationName:"useDedicatedReplicationServer" type:"boolean"`
}

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

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

// SetArn sets the Arn field's value.
func (s *ReplicationConfigurationTemplate) SetArn(v string) *ReplicationConfigurationTemplate {
	s.Arn = &v
	return s
}

// SetAssociateDefaultSecurityGroup sets the AssociateDefaultSecurityGroup field's value.
func (s *ReplicationConfigurationTemplate) SetAssociateDefaultSecurityGroup(v bool) *ReplicationConfigurationTemplate {
	s.AssociateDefaultSecurityGroup = &v
	return s
}

// SetBandwidthThrottling sets the BandwidthThrottling field's value.
func (s *ReplicationConfigurationTemplate) SetBandwidthThrottling(v int64) *ReplicationConfigurationTemplate {
	s.BandwidthThrottling = &v
	return s
}

// SetCreatePublicIP sets the CreatePublicIP field's value.
func (s *ReplicationConfigurationTemplate) SetCreatePublicIP(v bool) *ReplicationConfigurationTemplate {
	s.CreatePublicIP = &v
	return s
}

// SetDataPlaneRouting sets the DataPlaneRouting field's value.
func (s *ReplicationConfigurationTemplate) SetDataPlaneRouting(v string) *ReplicationConfigurationTemplate {
	s.DataPlaneRouting = &v
	return s
}

// SetDefaultLargeStagingDiskType sets the DefaultLargeStagingDiskType field's value.
func (s *ReplicationConfigurationTemplate) SetDefaultLargeStagingDiskType(v string) *ReplicationConfigurationTemplate {
	s.DefaultLargeStagingDiskType = &v
	return s
}

// SetEbsEncryption sets the EbsEncryption field's value.
func (s *ReplicationConfigurationTemplate) SetEbsEncryption(v string) *ReplicationConfigurationTemplate {
	s.EbsEncryption = &v
	return s
}

// SetEbsEncryptionKeyArn sets the EbsEncryptionKeyArn field's value.
func (s *ReplicationConfigurationTemplate) SetEbsEncryptionKeyArn(v string) *ReplicationConfigurationTemplate {
	s.EbsEncryptionKeyArn = &v
	return s
}

// SetPitPolicy sets the PitPolicy field's value.
func (s *ReplicationConfigurationTemplate) SetPitPolicy(v []*PITPolicyRule) *ReplicationConfigurationTemplate {
	s.PitPolicy = v
	return s
}

// SetReplicationConfigurationTemplateID sets the ReplicationConfigurationTemplateID field's value.
func (s *ReplicationConfigurationTemplate) SetReplicationConfigurationTemplateID(v string) *ReplicationConfigurationTemplate {
	s.ReplicationConfigurationTemplateID = &v
	return s
}

// SetReplicationServerInstanceType sets the ReplicationServerInstanceType field's value.
func (s *ReplicationConfigurationTemplate) SetReplicationServerInstanceType(v string) *ReplicationConfigurationTemplate {
	s.ReplicationServerInstanceType = &v
	return s
}

// SetReplicationServersSecurityGroupsIDs sets the ReplicationServersSecurityGroupsIDs field's value.
func (s *ReplicationConfigurationTemplate) SetReplicationServersSecurityGroupsIDs(v []*string) *ReplicationConfigurationTemplate {
	s.ReplicationServersSecurityGroupsIDs = v
	return s
}

// SetStagingAreaSubnetId sets the StagingAreaSubnetId field's value.
func (s *ReplicationConfigurationTemplate) SetStagingAreaSubnetId(v string) *ReplicationConfigurationTemplate {
	s.StagingAreaSubnetId = &v
	return s
}

// SetStagingAreaTags sets the StagingAreaTags field's value.
func (s *ReplicationConfigurationTemplate) SetStagingAreaTags(v map[string]*string) *ReplicationConfigurationTemplate {
	s.StagingAreaTags = v
	return s
}

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

// SetUseDedicatedReplicationServer sets the UseDedicatedReplicationServer field's value.
func (s *ReplicationConfigurationTemplate) SetUseDedicatedReplicationServer(v bool) *ReplicationConfigurationTemplate {
	s.UseDedicatedReplicationServer = &v
	return s
}

// The resource for this operation was not found.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

	// The ID of the resource.
	ResourceId *string `locationName:"resourceId" type:"string"`

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

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

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

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

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

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

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

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

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

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

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

	// The ID of the Source Server whose data replication should be retried.
	//
	// SourceServerID is a required field
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetSourceServerID sets the SourceServerID field's value.
func (s *RetryDataReplicationInput) SetSourceServerID(v string) *RetryDataReplicationInput {
	s.SourceServerID = &v
	return s
}

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

	// The ARN of the Source Server.
	Arn *string `locationName:"arn" min:"20" type:"string"`

	// The Data Replication Info of the Source Server.
	DataReplicationInfo *DataReplicationInfo `locationName:"dataReplicationInfo" type:"structure"`

	// The status of the last recovery launch of this Source Server.
	LastLaunchResult *string `locationName:"lastLaunchResult" type:"string" enum:"LastLaunchResult"`

	// The lifecycle information of this Source Server.
	LifeCycle *LifeCycle `locationName:"lifeCycle" type:"structure"`

	// The ID of the Recovery Instance associated with this Source Server.
	RecoveryInstanceId *string `locationName:"recoveryInstanceId" min:"10" type:"string"`

	// The source properties of the Source Server.
	SourceProperties *SourceProperties `locationName:"sourceProperties" type:"structure"`

	// The ID of the Source Server.
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string"`

	// The tags associated with the Source Server.
	//
	// Tags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by RetryDataReplicationOutput's
	// String and GoString methods.
	Tags map[string]*string `locationName:"tags" type:"map" sensitive:"true"`
}

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

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

// SetArn sets the Arn field's value.
func (s *RetryDataReplicationOutput) SetArn(v string) *RetryDataReplicationOutput {
	s.Arn = &v
	return s
}

// SetDataReplicationInfo sets the DataReplicationInfo field's value.
func (s *RetryDataReplicationOutput) SetDataReplicationInfo(v *DataReplicationInfo) *RetryDataReplicationOutput {
	s.DataReplicationInfo = v
	return s
}

// SetLastLaunchResult sets the LastLaunchResult field's value.
func (s *RetryDataReplicationOutput) SetLastLaunchResult(v string) *RetryDataReplicationOutput {
	s.LastLaunchResult = &v
	return s
}

// SetLifeCycle sets the LifeCycle field's value.
func (s *RetryDataReplicationOutput) SetLifeCycle(v *LifeCycle) *RetryDataReplicationOutput {
	s.LifeCycle = v
	return s
}

// SetRecoveryInstanceId sets the RecoveryInstanceId field's value.
func (s *RetryDataReplicationOutput) SetRecoveryInstanceId(v string) *RetryDataReplicationOutput {
	s.RecoveryInstanceId = &v
	return s
}

// SetSourceProperties sets the SourceProperties field's value.
func (s *RetryDataReplicationOutput) SetSourceProperties(v *SourceProperties) *RetryDataReplicationOutput {
	s.SourceProperties = v
	return s
}

// SetSourceServerID sets the SourceServerID field's value.
func (s *RetryDataReplicationOutput) SetSourceServerID(v string) *RetryDataReplicationOutput {
	s.SourceServerID = &v
	return s
}

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

// The request could not be completed because its exceeded the service quota.
type ServiceQuotaExceededException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

	// Quota code.
	QuotaCode *string `locationName:"quotaCode" type:"string"`

	// The ID of the resource.
	ResourceId *string `locationName:"resourceId" type:"string"`

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

	// Service code.
	ServiceCode *string `locationName:"serviceCode" type:"string"`
}

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

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

func newErrorServiceQuotaExceededException(v protocol.ResponseMetadata) error {
	return &ServiceQuotaExceededException{
		RespMetadata: v,
	}
}

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

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

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

func (s *ServiceQuotaExceededException) 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 *ServiceQuotaExceededException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// Properties of the Source Server machine.
type SourceProperties struct {
	_ struct{} `type:"structure"`

	// An array of CPUs.
	Cpus []*CPU `locationName:"cpus" type:"list"`

	// An array of disks.
	Disks []*Disk `locationName:"disks" type:"list"`

	// Hints used to uniquely identify a machine.
	IdentificationHints *IdentificationHints `locationName:"identificationHints" type:"structure"`

	// The date and time the Source Properties were last updated on.
	LastUpdatedDateTime *string `locationName:"lastUpdatedDateTime" min:"19" type:"string"`

	// An array of network interfaces.
	NetworkInterfaces []*NetworkInterface `locationName:"networkInterfaces" type:"list"`

	// Operating system.
	Os *OS `locationName:"os" type:"structure"`

	// The amount of RAM in bytes.
	RamBytes *int64 `locationName:"ramBytes" type:"long"`

	// The recommended EC2 instance type that will be used when recovering the Source
	// Server.
	RecommendedInstanceType *string `locationName:"recommendedInstanceType" type:"string"`
}

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

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

// SetCpus sets the Cpus field's value.
func (s *SourceProperties) SetCpus(v []*CPU) *SourceProperties {
	s.Cpus = v
	return s
}

// SetDisks sets the Disks field's value.
func (s *SourceProperties) SetDisks(v []*Disk) *SourceProperties {
	s.Disks = v
	return s
}

// SetIdentificationHints sets the IdentificationHints field's value.
func (s *SourceProperties) SetIdentificationHints(v *IdentificationHints) *SourceProperties {
	s.IdentificationHints = v
	return s
}

// SetLastUpdatedDateTime sets the LastUpdatedDateTime field's value.
func (s *SourceProperties) SetLastUpdatedDateTime(v string) *SourceProperties {
	s.LastUpdatedDateTime = &v
	return s
}

// SetNetworkInterfaces sets the NetworkInterfaces field's value.
func (s *SourceProperties) SetNetworkInterfaces(v []*NetworkInterface) *SourceProperties {
	s.NetworkInterfaces = v
	return s
}

// SetOs sets the Os field's value.
func (s *SourceProperties) SetOs(v *OS) *SourceProperties {
	s.Os = v
	return s
}

// SetRamBytes sets the RamBytes field's value.
func (s *SourceProperties) SetRamBytes(v int64) *SourceProperties {
	s.RamBytes = &v
	return s
}

// SetRecommendedInstanceType sets the RecommendedInstanceType field's value.
func (s *SourceProperties) SetRecommendedInstanceType(v string) *SourceProperties {
	s.RecommendedInstanceType = &v
	return s
}

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

	// The ARN of the Source Server.
	Arn *string `locationName:"arn" min:"20" type:"string"`

	// The Data Replication Info of the Source Server.
	DataReplicationInfo *DataReplicationInfo `locationName:"dataReplicationInfo" type:"structure"`

	// The status of the last recovery launch of this Source Server.
	LastLaunchResult *string `locationName:"lastLaunchResult" type:"string" enum:"LastLaunchResult"`

	// The lifecycle information of this Source Server.
	LifeCycle *LifeCycle `locationName:"lifeCycle" type:"structure"`

	// The ID of the Recovery Instance associated with this Source Server.
	RecoveryInstanceId *string `locationName:"recoveryInstanceId" min:"10" type:"string"`

	// The source properties of the Source Server.
	SourceProperties *SourceProperties `locationName:"sourceProperties" type:"structure"`

	// The ID of the Source Server.
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string"`

	// The tags associated with the Source Server.
	//
	// Tags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by SourceServer's
	// String and GoString methods.
	Tags map[string]*string `locationName:"tags" type:"map" sensitive:"true"`
}

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

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

// SetArn sets the Arn field's value.
func (s *SourceServer) SetArn(v string) *SourceServer {
	s.Arn = &v
	return s
}

// SetDataReplicationInfo sets the DataReplicationInfo field's value.
func (s *SourceServer) SetDataReplicationInfo(v *DataReplicationInfo) *SourceServer {
	s.DataReplicationInfo = v
	return s
}

// SetLastLaunchResult sets the LastLaunchResult field's value.
func (s *SourceServer) SetLastLaunchResult(v string) *SourceServer {
	s.LastLaunchResult = &v
	return s
}

// SetLifeCycle sets the LifeCycle field's value.
func (s *SourceServer) SetLifeCycle(v *LifeCycle) *SourceServer {
	s.LifeCycle = v
	return s
}

// SetRecoveryInstanceId sets the RecoveryInstanceId field's value.
func (s *SourceServer) SetRecoveryInstanceId(v string) *SourceServer {
	s.RecoveryInstanceId = &v
	return s
}

// SetSourceProperties sets the SourceProperties field's value.
func (s *SourceServer) SetSourceProperties(v *SourceProperties) *SourceServer {
	s.SourceProperties = v
	return s
}

// SetSourceServerID sets the SourceServerID field's value.
func (s *SourceServer) SetSourceServerID(v string) *SourceServer {
	s.SourceServerID = &v
	return s
}

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

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

	// The IDs of the Recovery Instance whose failback launch we want to request.
	//
	// RecoveryInstanceIDs is a required field
	RecoveryInstanceIDs []*string `locationName:"recoveryInstanceIDs" min:"1" type:"list" required:"true"`

	// The tags to be associated with the failback launch Job.
	//
	// Tags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by StartFailbackLaunchInput's
	// String and GoString methods.
	Tags map[string]*string `locationName:"tags" type:"map" sensitive:"true"`
}

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

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

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

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

// SetRecoveryInstanceIDs sets the RecoveryInstanceIDs field's value.
func (s *StartFailbackLaunchInput) SetRecoveryInstanceIDs(v []*string) *StartFailbackLaunchInput {
	s.RecoveryInstanceIDs = v
	return s
}

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

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

	// The failback launch Job.
	Job *Job `locationName:"job" type:"structure"`
}

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

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

// SetJob sets the Job field's value.
func (s *StartFailbackLaunchOutput) SetJob(v *Job) *StartFailbackLaunchOutput {
	s.Job = v
	return s
}

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

	// Whether this Source Server Recovery operation is a drill or not.
	IsDrill *bool `locationName:"isDrill" type:"boolean"`

	// The Source Servers that we want to start a Recovery Job for.
	//
	// SourceServers is a required field
	SourceServers []*StartRecoveryRequestSourceServer `locationName:"sourceServers" min:"1" type:"list" required:"true"`

	// The tags to be associated with the Recovery Job.
	//
	// Tags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by StartRecoveryInput's
	// String and GoString methods.
	Tags map[string]*string `locationName:"tags" type:"map" sensitive:"true"`
}

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

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

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

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

// SetIsDrill sets the IsDrill field's value.
func (s *StartRecoveryInput) SetIsDrill(v bool) *StartRecoveryInput {
	s.IsDrill = &v
	return s
}

// SetSourceServers sets the SourceServers field's value.
func (s *StartRecoveryInput) SetSourceServers(v []*StartRecoveryRequestSourceServer) *StartRecoveryInput {
	s.SourceServers = v
	return s
}

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

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

	// The Recovery Job.
	Job *Job `locationName:"job" type:"structure"`
}

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

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

// SetJob sets the Job field's value.
func (s *StartRecoveryOutput) SetJob(v *Job) *StartRecoveryOutput {
	s.Job = v
	return s
}

// An object representing the Source Server to recover.
type StartRecoveryRequestSourceServer struct {
	_ struct{} `type:"structure"`

	// The ID of a Recovery Snapshot we want to recover from. Omit this field to
	// launch from the latest data by taking an on-demand snapshot.
	RecoverySnapshotID *string `locationName:"recoverySnapshotID" min:"21" type:"string"`

	// The ID of the Source Server you want to recover.
	//
	// SourceServerID is a required field
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetRecoverySnapshotID sets the RecoverySnapshotID field's value.
func (s *StartRecoveryRequestSourceServer) SetRecoverySnapshotID(v string) *StartRecoveryRequestSourceServer {
	s.RecoverySnapshotID = &v
	return s
}

// SetSourceServerID sets the SourceServerID field's value.
func (s *StartRecoveryRequestSourceServer) SetSourceServerID(v string) *StartRecoveryRequestSourceServer {
	s.SourceServerID = &v
	return s
}

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

	// The ID of the Recovery Instance we want to stop failback for.
	//
	// RecoveryInstanceID is a required field
	RecoveryInstanceID *string `locationName:"recoveryInstanceID" min:"10" type:"string" required:"true"`
}

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

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

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

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

// SetRecoveryInstanceID sets the RecoveryInstanceID field's value.
func (s *StopFailbackInput) SetRecoveryInstanceID(v string) *StopFailbackInput {
	s.RecoveryInstanceID = &v
	return s
}

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

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

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

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

	// ARN of the resource for which tags are to be added or updated.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" min:"20" type:"string" required:"true"`

	// Array of tags to be added or updated.
	//
	// Tags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by TagResourceInput's
	// String and GoString methods.
	//
	// Tags is a required field
	Tags map[string]*string `locationName:"tags" type:"map" required:"true" sensitive:"true"`
}

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

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

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

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

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

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

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

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

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

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

	// The IDs of the Recovery Instances that should be terminated.
	//
	// RecoveryInstanceIDs is a required field
	RecoveryInstanceIDs []*string `locationName:"recoveryInstanceIDs" min:"1" type:"list" required:"true"`
}

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

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

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

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

// SetRecoveryInstanceIDs sets the RecoveryInstanceIDs field's value.
func (s *TerminateRecoveryInstancesInput) SetRecoveryInstanceIDs(v []*string) *TerminateRecoveryInstancesInput {
	s.RecoveryInstanceIDs = v
	return s
}

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

	// The Job for terminating the Recovery Instances.
	Job *Job `locationName:"job" type:"structure"`
}

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

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

// SetJob sets the Job field's value.
func (s *TerminateRecoveryInstancesOutput) SetJob(v *Job) *TerminateRecoveryInstancesOutput {
	s.Job = v
	return s
}

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

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

	// Quota code.
	QuotaCode *string `locationName:"quotaCode" type:"string"`

	// The number of seconds after which the request should be safe to retry.
	RetryAfterSeconds *string `location:"header" locationName:"Retry-After" type:"string"`

	// Service code.
	ServiceCode *string `locationName:"serviceCode" type:"string"`
}

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

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

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

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

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

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

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

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

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

// The account performing the request has not been initialized.
type UninitializedAccountException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

	Message_ *string `locationName:"message" type:"string"`
}

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

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

func newErrorUninitializedAccountException(v protocol.ResponseMetadata) error {
	return &UninitializedAccountException{
		RespMetadata: v,
	}
}

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

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

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

func (s *UninitializedAccountException) 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 *UninitializedAccountException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

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

	// ARN of the resource for which tags are to be removed.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" min:"20" type:"string" required:"true"`

	// Array of tags to be removed.
	//
	// TagKeys is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UntagResourceInput's
	// String and GoString methods.
	//
	// TagKeys is a required field
	TagKeys []*string `location:"querystring" locationName:"tagKeys" type:"list" required:"true" sensitive:"true"`
}

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

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

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

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

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

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

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

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

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

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

	// Configure bandwidth throttling for the outbound data transfer rate of the
	// Recovery Instance in Mbps.
	BandwidthThrottling *int64 `locationName:"bandwidthThrottling" type:"long"`

	// The name of the Failback Replication Configuration.
	Name *string `locationName:"name" type:"string"`

	// The ID of the Recovery Instance.
	//
	// RecoveryInstanceID is a required field
	RecoveryInstanceID *string `locationName:"recoveryInstanceID" min:"10" type:"string" required:"true"`

	// Whether to use Private IP for the failback replication of the Recovery Instance.
	UsePrivateIP *bool `locationName:"usePrivateIP" type:"boolean"`
}

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

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

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

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

// SetBandwidthThrottling sets the BandwidthThrottling field's value.
func (s *UpdateFailbackReplicationConfigurationInput) SetBandwidthThrottling(v int64) *UpdateFailbackReplicationConfigurationInput {
	s.BandwidthThrottling = &v
	return s
}

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

// SetRecoveryInstanceID sets the RecoveryInstanceID field's value.
func (s *UpdateFailbackReplicationConfigurationInput) SetRecoveryInstanceID(v string) *UpdateFailbackReplicationConfigurationInput {
	s.RecoveryInstanceID = &v
	return s
}

// SetUsePrivateIP sets the UsePrivateIP field's value.
func (s *UpdateFailbackReplicationConfigurationInput) SetUsePrivateIP(v bool) *UpdateFailbackReplicationConfigurationInput {
	s.UsePrivateIP = &v
	return s
}

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

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

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

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

	// Whether we should copy the Private IP of the Source Server to the Recovery
	// Instance.
	CopyPrivateIp *bool `locationName:"copyPrivateIp" type:"boolean"`

	// Whether we want to copy the tags of the Source Server to the EC2 machine
	// of the Recovery Instance.
	CopyTags *bool `locationName:"copyTags" type:"boolean"`

	// The state of the Recovery Instance in EC2 after the recovery operation.
	LaunchDisposition *string `locationName:"launchDisposition" type:"string" enum:"LaunchDisposition"`

	// The licensing configuration to be used for this launch configuration.
	Licensing *Licensing `locationName:"licensing" type:"structure"`

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

	// The ID of the Source Server that we want to retrieve a Launch Configuration
	// for.
	//
	// SourceServerID is a required field
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string" required:"true"`

	// Whether Elastic Disaster Recovery should try to automatically choose the
	// instance type that best matches the OS, CPU, and RAM of your Source Server.
	TargetInstanceTypeRightSizingMethod *string `locationName:"targetInstanceTypeRightSizingMethod" type:"string" enum:"TargetInstanceTypeRightSizingMethod"`
}

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

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

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

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

// SetCopyPrivateIp sets the CopyPrivateIp field's value.
func (s *UpdateLaunchConfigurationInput) SetCopyPrivateIp(v bool) *UpdateLaunchConfigurationInput {
	s.CopyPrivateIp = &v
	return s
}

// SetCopyTags sets the CopyTags field's value.
func (s *UpdateLaunchConfigurationInput) SetCopyTags(v bool) *UpdateLaunchConfigurationInput {
	s.CopyTags = &v
	return s
}

// SetLaunchDisposition sets the LaunchDisposition field's value.
func (s *UpdateLaunchConfigurationInput) SetLaunchDisposition(v string) *UpdateLaunchConfigurationInput {
	s.LaunchDisposition = &v
	return s
}

// SetLicensing sets the Licensing field's value.
func (s *UpdateLaunchConfigurationInput) SetLicensing(v *Licensing) *UpdateLaunchConfigurationInput {
	s.Licensing = v
	return s
}

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

// SetSourceServerID sets the SourceServerID field's value.
func (s *UpdateLaunchConfigurationInput) SetSourceServerID(v string) *UpdateLaunchConfigurationInput {
	s.SourceServerID = &v
	return s
}

// SetTargetInstanceTypeRightSizingMethod sets the TargetInstanceTypeRightSizingMethod field's value.
func (s *UpdateLaunchConfigurationInput) SetTargetInstanceTypeRightSizingMethod(v string) *UpdateLaunchConfigurationInput {
	s.TargetInstanceTypeRightSizingMethod = &v
	return s
}

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

	// Whether we should copy the Private IP of the Source Server to the Recovery
	// Instance.
	CopyPrivateIp *bool `locationName:"copyPrivateIp" type:"boolean"`

	// Whether we want to copy the tags of the Source Server to the EC2 machine
	// of the Recovery Instance.
	CopyTags *bool `locationName:"copyTags" type:"boolean"`

	// The EC2 launch template ID of this launch configuration.
	Ec2LaunchTemplateID *string `locationName:"ec2LaunchTemplateID" type:"string"`

	// The state of the Recovery Instance in EC2 after the recovery operation.
	LaunchDisposition *string `locationName:"launchDisposition" type:"string" enum:"LaunchDisposition"`

	// The licensing configuration to be used for this launch configuration.
	Licensing *Licensing `locationName:"licensing" type:"structure"`

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

	// The ID of the Source Server for this launch configuration.
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string"`

	// Whether Elastic Disaster Recovery should try to automatically choose the
	// instance type that best matches the OS, CPU, and RAM of your Source Server.
	TargetInstanceTypeRightSizingMethod *string `locationName:"targetInstanceTypeRightSizingMethod" type:"string" enum:"TargetInstanceTypeRightSizingMethod"`
}

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

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

// SetCopyPrivateIp sets the CopyPrivateIp field's value.
func (s *UpdateLaunchConfigurationOutput) SetCopyPrivateIp(v bool) *UpdateLaunchConfigurationOutput {
	s.CopyPrivateIp = &v
	return s
}

// SetCopyTags sets the CopyTags field's value.
func (s *UpdateLaunchConfigurationOutput) SetCopyTags(v bool) *UpdateLaunchConfigurationOutput {
	s.CopyTags = &v
	return s
}

// SetEc2LaunchTemplateID sets the Ec2LaunchTemplateID field's value.
func (s *UpdateLaunchConfigurationOutput) SetEc2LaunchTemplateID(v string) *UpdateLaunchConfigurationOutput {
	s.Ec2LaunchTemplateID = &v
	return s
}

// SetLaunchDisposition sets the LaunchDisposition field's value.
func (s *UpdateLaunchConfigurationOutput) SetLaunchDisposition(v string) *UpdateLaunchConfigurationOutput {
	s.LaunchDisposition = &v
	return s
}

// SetLicensing sets the Licensing field's value.
func (s *UpdateLaunchConfigurationOutput) SetLicensing(v *Licensing) *UpdateLaunchConfigurationOutput {
	s.Licensing = v
	return s
}

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

// SetSourceServerID sets the SourceServerID field's value.
func (s *UpdateLaunchConfigurationOutput) SetSourceServerID(v string) *UpdateLaunchConfigurationOutput {
	s.SourceServerID = &v
	return s
}

// SetTargetInstanceTypeRightSizingMethod sets the TargetInstanceTypeRightSizingMethod field's value.
func (s *UpdateLaunchConfigurationOutput) SetTargetInstanceTypeRightSizingMethod(v string) *UpdateLaunchConfigurationOutput {
	s.TargetInstanceTypeRightSizingMethod = &v
	return s
}

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

	// Whether to associate the default Elastic Disaster Recovery Security group
	// with the Replication Configuration.
	AssociateDefaultSecurityGroup *bool `locationName:"associateDefaultSecurityGroup" type:"boolean"`

	// Configure bandwidth throttling for the outbound data transfer rate of the
	// Source Server in Mbps.
	BandwidthThrottling *int64 `locationName:"bandwidthThrottling" type:"long"`

	// Whether to create a Public IP for the Recovery Instance by default.
	CreatePublicIP *bool `locationName:"createPublicIP" type:"boolean"`

	// The data plane routing mechanism that will be used for replication.
	DataPlaneRouting *string `locationName:"dataPlaneRouting" type:"string" enum:"ReplicationConfigurationDataPlaneRouting"`

	// The Staging Disk EBS volume type to be used during replication.
	DefaultLargeStagingDiskType *string `locationName:"defaultLargeStagingDiskType" type:"string" enum:"ReplicationConfigurationDefaultLargeStagingDiskType"`

	// The type of EBS encryption to be used during replication.
	EbsEncryption *string `locationName:"ebsEncryption" type:"string" enum:"ReplicationConfigurationEbsEncryption"`

	// The ARN of the EBS encryption key to be used during replication.
	EbsEncryptionKeyArn *string `locationName:"ebsEncryptionKeyArn" min:"20" type:"string"`

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

	// The Point in time (PIT) policy to manage snapshots taken during replication.
	PitPolicy []*PITPolicyRule `locationName:"pitPolicy" min:"1" type:"list"`

	// The configuration of the disks of the Source Server to be replicated.
	ReplicatedDisks []*ReplicationConfigurationReplicatedDisk `locationName:"replicatedDisks" type:"list"`

	// The instance type to be used for the replication server.
	ReplicationServerInstanceType *string `locationName:"replicationServerInstanceType" type:"string"`

	// The security group IDs that will be used by the replication server.
	ReplicationServersSecurityGroupsIDs []*string `locationName:"replicationServersSecurityGroupsIDs" type:"list"`

	// The ID of the Source Server for this Replication Configuration.
	//
	// SourceServerID is a required field
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string" required:"true"`

	// The subnet to be used by the replication staging area.
	StagingAreaSubnetId *string `locationName:"stagingAreaSubnetId" type:"string"`

	// A set of tags to be associated with all resources created in the replication
	// staging area: EC2 replication server, EBS volumes, EBS snapshots, etc.
	//
	// StagingAreaTags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateReplicationConfigurationInput's
	// String and GoString methods.
	StagingAreaTags map[string]*string `locationName:"stagingAreaTags" type:"map" sensitive:"true"`

	// Whether to use a dedicated Replication Server in the replication staging
	// area.
	UseDedicatedReplicationServer *bool `locationName:"useDedicatedReplicationServer" type:"boolean"`
}

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

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

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

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

// SetAssociateDefaultSecurityGroup sets the AssociateDefaultSecurityGroup field's value.
func (s *UpdateReplicationConfigurationInput) SetAssociateDefaultSecurityGroup(v bool) *UpdateReplicationConfigurationInput {
	s.AssociateDefaultSecurityGroup = &v
	return s
}

// SetBandwidthThrottling sets the BandwidthThrottling field's value.
func (s *UpdateReplicationConfigurationInput) SetBandwidthThrottling(v int64) *UpdateReplicationConfigurationInput {
	s.BandwidthThrottling = &v
	return s
}

// SetCreatePublicIP sets the CreatePublicIP field's value.
func (s *UpdateReplicationConfigurationInput) SetCreatePublicIP(v bool) *UpdateReplicationConfigurationInput {
	s.CreatePublicIP = &v
	return s
}

// SetDataPlaneRouting sets the DataPlaneRouting field's value.
func (s *UpdateReplicationConfigurationInput) SetDataPlaneRouting(v string) *UpdateReplicationConfigurationInput {
	s.DataPlaneRouting = &v
	return s
}

// SetDefaultLargeStagingDiskType sets the DefaultLargeStagingDiskType field's value.
func (s *UpdateReplicationConfigurationInput) SetDefaultLargeStagingDiskType(v string) *UpdateReplicationConfigurationInput {
	s.DefaultLargeStagingDiskType = &v
	return s
}

// SetEbsEncryption sets the EbsEncryption field's value.
func (s *UpdateReplicationConfigurationInput) SetEbsEncryption(v string) *UpdateReplicationConfigurationInput {
	s.EbsEncryption = &v
	return s
}

// SetEbsEncryptionKeyArn sets the EbsEncryptionKeyArn field's value.
func (s *UpdateReplicationConfigurationInput) SetEbsEncryptionKeyArn(v string) *UpdateReplicationConfigurationInput {
	s.EbsEncryptionKeyArn = &v
	return s
}

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

// SetPitPolicy sets the PitPolicy field's value.
func (s *UpdateReplicationConfigurationInput) SetPitPolicy(v []*PITPolicyRule) *UpdateReplicationConfigurationInput {
	s.PitPolicy = v
	return s
}

// SetReplicatedDisks sets the ReplicatedDisks field's value.
func (s *UpdateReplicationConfigurationInput) SetReplicatedDisks(v []*ReplicationConfigurationReplicatedDisk) *UpdateReplicationConfigurationInput {
	s.ReplicatedDisks = v
	return s
}

// SetReplicationServerInstanceType sets the ReplicationServerInstanceType field's value.
func (s *UpdateReplicationConfigurationInput) SetReplicationServerInstanceType(v string) *UpdateReplicationConfigurationInput {
	s.ReplicationServerInstanceType = &v
	return s
}

// SetReplicationServersSecurityGroupsIDs sets the ReplicationServersSecurityGroupsIDs field's value.
func (s *UpdateReplicationConfigurationInput) SetReplicationServersSecurityGroupsIDs(v []*string) *UpdateReplicationConfigurationInput {
	s.ReplicationServersSecurityGroupsIDs = v
	return s
}

// SetSourceServerID sets the SourceServerID field's value.
func (s *UpdateReplicationConfigurationInput) SetSourceServerID(v string) *UpdateReplicationConfigurationInput {
	s.SourceServerID = &v
	return s
}

// SetStagingAreaSubnetId sets the StagingAreaSubnetId field's value.
func (s *UpdateReplicationConfigurationInput) SetStagingAreaSubnetId(v string) *UpdateReplicationConfigurationInput {
	s.StagingAreaSubnetId = &v
	return s
}

// SetStagingAreaTags sets the StagingAreaTags field's value.
func (s *UpdateReplicationConfigurationInput) SetStagingAreaTags(v map[string]*string) *UpdateReplicationConfigurationInput {
	s.StagingAreaTags = v
	return s
}

// SetUseDedicatedReplicationServer sets the UseDedicatedReplicationServer field's value.
func (s *UpdateReplicationConfigurationInput) SetUseDedicatedReplicationServer(v bool) *UpdateReplicationConfigurationInput {
	s.UseDedicatedReplicationServer = &v
	return s
}

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

	// Whether to associate the default Elastic Disaster Recovery Security group
	// with the Replication Configuration.
	AssociateDefaultSecurityGroup *bool `locationName:"associateDefaultSecurityGroup" type:"boolean"`

	// Configure bandwidth throttling for the outbound data transfer rate of the
	// Source Server in Mbps.
	BandwidthThrottling *int64 `locationName:"bandwidthThrottling" type:"long"`

	// Whether to create a Public IP for the Recovery Instance by default.
	CreatePublicIP *bool `locationName:"createPublicIP" type:"boolean"`

	// The data plane routing mechanism that will be used for replication.
	DataPlaneRouting *string `locationName:"dataPlaneRouting" type:"string" enum:"ReplicationConfigurationDataPlaneRouting"`

	// The Staging Disk EBS volume type to be used during replication.
	DefaultLargeStagingDiskType *string `locationName:"defaultLargeStagingDiskType" type:"string" enum:"ReplicationConfigurationDefaultLargeStagingDiskType"`

	// The type of EBS encryption to be used during replication.
	EbsEncryption *string `locationName:"ebsEncryption" type:"string" enum:"ReplicationConfigurationEbsEncryption"`

	// The ARN of the EBS encryption key to be used during replication.
	EbsEncryptionKeyArn *string `locationName:"ebsEncryptionKeyArn" min:"20" type:"string"`

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

	// The Point in time (PIT) policy to manage snapshots taken during replication.
	PitPolicy []*PITPolicyRule `locationName:"pitPolicy" min:"1" type:"list"`

	// The configuration of the disks of the Source Server to be replicated.
	ReplicatedDisks []*ReplicationConfigurationReplicatedDisk `locationName:"replicatedDisks" type:"list"`

	// The instance type to be used for the replication server.
	ReplicationServerInstanceType *string `locationName:"replicationServerInstanceType" type:"string"`

	// The security group IDs that will be used by the replication server.
	ReplicationServersSecurityGroupsIDs []*string `locationName:"replicationServersSecurityGroupsIDs" type:"list"`

	// The ID of the Source Server for this Replication Configuration.
	SourceServerID *string `locationName:"sourceServerID" min:"19" type:"string"`

	// The subnet to be used by the replication staging area.
	StagingAreaSubnetId *string `locationName:"stagingAreaSubnetId" type:"string"`

	// A set of tags to be associated with all resources created in the replication
	// staging area: EC2 replication server, EBS volumes, EBS snapshots, etc.
	//
	// StagingAreaTags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateReplicationConfigurationOutput's
	// String and GoString methods.
	StagingAreaTags map[string]*string `locationName:"stagingAreaTags" type:"map" sensitive:"true"`

	// Whether to use a dedicated Replication Server in the replication staging
	// area.
	UseDedicatedReplicationServer *bool `locationName:"useDedicatedReplicationServer" type:"boolean"`
}

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

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

// SetAssociateDefaultSecurityGroup sets the AssociateDefaultSecurityGroup field's value.
func (s *UpdateReplicationConfigurationOutput) SetAssociateDefaultSecurityGroup(v bool) *UpdateReplicationConfigurationOutput {
	s.AssociateDefaultSecurityGroup = &v
	return s
}

// SetBandwidthThrottling sets the BandwidthThrottling field's value.
func (s *UpdateReplicationConfigurationOutput) SetBandwidthThrottling(v int64) *UpdateReplicationConfigurationOutput {
	s.BandwidthThrottling = &v
	return s
}

// SetCreatePublicIP sets the CreatePublicIP field's value.
func (s *UpdateReplicationConfigurationOutput) SetCreatePublicIP(v bool) *UpdateReplicationConfigurationOutput {
	s.CreatePublicIP = &v
	return s
}

// SetDataPlaneRouting sets the DataPlaneRouting field's value.
func (s *UpdateReplicationConfigurationOutput) SetDataPlaneRouting(v string) *UpdateReplicationConfigurationOutput {
	s.DataPlaneRouting = &v
	return s
}

// SetDefaultLargeStagingDiskType sets the DefaultLargeStagingDiskType field's value.
func (s *UpdateReplicationConfigurationOutput) SetDefaultLargeStagingDiskType(v string) *UpdateReplicationConfigurationOutput {
	s.DefaultLargeStagingDiskType = &v
	return s
}

// SetEbsEncryption sets the EbsEncryption field's value.
func (s *UpdateReplicationConfigurationOutput) SetEbsEncryption(v string) *UpdateReplicationConfigurationOutput {
	s.EbsEncryption = &v
	return s
}

// SetEbsEncryptionKeyArn sets the EbsEncryptionKeyArn field's value.
func (s *UpdateReplicationConfigurationOutput) SetEbsEncryptionKeyArn(v string) *UpdateReplicationConfigurationOutput {
	s.EbsEncryptionKeyArn = &v
	return s
}

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

// SetPitPolicy sets the PitPolicy field's value.
func (s *UpdateReplicationConfigurationOutput) SetPitPolicy(v []*PITPolicyRule) *UpdateReplicationConfigurationOutput {
	s.PitPolicy = v
	return s
}

// SetReplicatedDisks sets the ReplicatedDisks field's value.
func (s *UpdateReplicationConfigurationOutput) SetReplicatedDisks(v []*ReplicationConfigurationReplicatedDisk) *UpdateReplicationConfigurationOutput {
	s.ReplicatedDisks = v
	return s
}

// SetReplicationServerInstanceType sets the ReplicationServerInstanceType field's value.
func (s *UpdateReplicationConfigurationOutput) SetReplicationServerInstanceType(v string) *UpdateReplicationConfigurationOutput {
	s.ReplicationServerInstanceType = &v
	return s
}

// SetReplicationServersSecurityGroupsIDs sets the ReplicationServersSecurityGroupsIDs field's value.
func (s *UpdateReplicationConfigurationOutput) SetReplicationServersSecurityGroupsIDs(v []*string) *UpdateReplicationConfigurationOutput {
	s.ReplicationServersSecurityGroupsIDs = v
	return s
}

// SetSourceServerID sets the SourceServerID field's value.
func (s *UpdateReplicationConfigurationOutput) SetSourceServerID(v string) *UpdateReplicationConfigurationOutput {
	s.SourceServerID = &v
	return s
}

// SetStagingAreaSubnetId sets the StagingAreaSubnetId field's value.
func (s *UpdateReplicationConfigurationOutput) SetStagingAreaSubnetId(v string) *UpdateReplicationConfigurationOutput {
	s.StagingAreaSubnetId = &v
	return s
}

// SetStagingAreaTags sets the StagingAreaTags field's value.
func (s *UpdateReplicationConfigurationOutput) SetStagingAreaTags(v map[string]*string) *UpdateReplicationConfigurationOutput {
	s.StagingAreaTags = v
	return s
}

// SetUseDedicatedReplicationServer sets the UseDedicatedReplicationServer field's value.
func (s *UpdateReplicationConfigurationOutput) SetUseDedicatedReplicationServer(v bool) *UpdateReplicationConfigurationOutput {
	s.UseDedicatedReplicationServer = &v
	return s
}

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

	// The Replication Configuration Template ARN.
	Arn *string `locationName:"arn" min:"20" type:"string"`

	// Whether to associate the default Elastic Disaster Recovery Security group
	// with the Replication Configuration Template.
	AssociateDefaultSecurityGroup *bool `locationName:"associateDefaultSecurityGroup" type:"boolean"`

	// Configure bandwidth throttling for the outbound data transfer rate of the
	// Source Server in Mbps.
	BandwidthThrottling *int64 `locationName:"bandwidthThrottling" type:"long"`

	// Whether to create a Public IP for the Recovery Instance by default.
	CreatePublicIP *bool `locationName:"createPublicIP" type:"boolean"`

	// The data plane routing mechanism that will be used for replication.
	DataPlaneRouting *string `locationName:"dataPlaneRouting" type:"string" enum:"ReplicationConfigurationDataPlaneRouting"`

	// The Staging Disk EBS volume type to be used during replication.
	DefaultLargeStagingDiskType *string `locationName:"defaultLargeStagingDiskType" type:"string" enum:"ReplicationConfigurationDefaultLargeStagingDiskType"`

	// The type of EBS encryption to be used during replication.
	EbsEncryption *string `locationName:"ebsEncryption" type:"string" enum:"ReplicationConfigurationEbsEncryption"`

	// The ARN of the EBS encryption key to be used during replication.
	EbsEncryptionKeyArn *string `locationName:"ebsEncryptionKeyArn" min:"20" type:"string"`

	// The Point in time (PIT) policy to manage snapshots taken during replication.
	PitPolicy []*PITPolicyRule `locationName:"pitPolicy" min:"1" type:"list"`

	// The Replication Configuration Template ID.
	//
	// ReplicationConfigurationTemplateID is a required field
	ReplicationConfigurationTemplateID *string `locationName:"replicationConfigurationTemplateID" min:"21" type:"string" required:"true"`

	// The instance type to be used for the replication server.
	ReplicationServerInstanceType *string `locationName:"replicationServerInstanceType" type:"string"`

	// The security group IDs that will be used by the replication server.
	ReplicationServersSecurityGroupsIDs []*string `locationName:"replicationServersSecurityGroupsIDs" type:"list"`

	// The subnet to be used by the replication staging area.
	StagingAreaSubnetId *string `locationName:"stagingAreaSubnetId" type:"string"`

	// A set of tags to be associated with all resources created in the replication
	// staging area: EC2 replication server, EBS volumes, EBS snapshots, etc.
	//
	// StagingAreaTags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateReplicationConfigurationTemplateInput's
	// String and GoString methods.
	StagingAreaTags map[string]*string `locationName:"stagingAreaTags" type:"map" sensitive:"true"`

	// Whether to use a dedicated Replication Server in the replication staging
	// area.
	UseDedicatedReplicationServer *bool `locationName:"useDedicatedReplicationServer" type:"boolean"`
}

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

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

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

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

// SetArn sets the Arn field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetArn(v string) *UpdateReplicationConfigurationTemplateInput {
	s.Arn = &v
	return s
}

// SetAssociateDefaultSecurityGroup sets the AssociateDefaultSecurityGroup field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetAssociateDefaultSecurityGroup(v bool) *UpdateReplicationConfigurationTemplateInput {
	s.AssociateDefaultSecurityGroup = &v
	return s
}

// SetBandwidthThrottling sets the BandwidthThrottling field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetBandwidthThrottling(v int64) *UpdateReplicationConfigurationTemplateInput {
	s.BandwidthThrottling = &v
	return s
}

// SetCreatePublicIP sets the CreatePublicIP field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetCreatePublicIP(v bool) *UpdateReplicationConfigurationTemplateInput {
	s.CreatePublicIP = &v
	return s
}

// SetDataPlaneRouting sets the DataPlaneRouting field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetDataPlaneRouting(v string) *UpdateReplicationConfigurationTemplateInput {
	s.DataPlaneRouting = &v
	return s
}

// SetDefaultLargeStagingDiskType sets the DefaultLargeStagingDiskType field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetDefaultLargeStagingDiskType(v string) *UpdateReplicationConfigurationTemplateInput {
	s.DefaultLargeStagingDiskType = &v
	return s
}

// SetEbsEncryption sets the EbsEncryption field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetEbsEncryption(v string) *UpdateReplicationConfigurationTemplateInput {
	s.EbsEncryption = &v
	return s
}

// SetEbsEncryptionKeyArn sets the EbsEncryptionKeyArn field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetEbsEncryptionKeyArn(v string) *UpdateReplicationConfigurationTemplateInput {
	s.EbsEncryptionKeyArn = &v
	return s
}

// SetPitPolicy sets the PitPolicy field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetPitPolicy(v []*PITPolicyRule) *UpdateReplicationConfigurationTemplateInput {
	s.PitPolicy = v
	return s
}

// SetReplicationConfigurationTemplateID sets the ReplicationConfigurationTemplateID field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetReplicationConfigurationTemplateID(v string) *UpdateReplicationConfigurationTemplateInput {
	s.ReplicationConfigurationTemplateID = &v
	return s
}

// SetReplicationServerInstanceType sets the ReplicationServerInstanceType field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetReplicationServerInstanceType(v string) *UpdateReplicationConfigurationTemplateInput {
	s.ReplicationServerInstanceType = &v
	return s
}

// SetReplicationServersSecurityGroupsIDs sets the ReplicationServersSecurityGroupsIDs field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetReplicationServersSecurityGroupsIDs(v []*string) *UpdateReplicationConfigurationTemplateInput {
	s.ReplicationServersSecurityGroupsIDs = v
	return s
}

// SetStagingAreaSubnetId sets the StagingAreaSubnetId field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetStagingAreaSubnetId(v string) *UpdateReplicationConfigurationTemplateInput {
	s.StagingAreaSubnetId = &v
	return s
}

// SetStagingAreaTags sets the StagingAreaTags field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetStagingAreaTags(v map[string]*string) *UpdateReplicationConfigurationTemplateInput {
	s.StagingAreaTags = v
	return s
}

// SetUseDedicatedReplicationServer sets the UseDedicatedReplicationServer field's value.
func (s *UpdateReplicationConfigurationTemplateInput) SetUseDedicatedReplicationServer(v bool) *UpdateReplicationConfigurationTemplateInput {
	s.UseDedicatedReplicationServer = &v
	return s
}

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

	// The Replication Configuration Template ARN.
	Arn *string `locationName:"arn" min:"20" type:"string"`

	// Whether to associate the default Elastic Disaster Recovery Security group
	// with the Replication Configuration Template.
	AssociateDefaultSecurityGroup *bool `locationName:"associateDefaultSecurityGroup" type:"boolean"`

	// Configure bandwidth throttling for the outbound data transfer rate of the
	// Source Server in Mbps.
	BandwidthThrottling *int64 `locationName:"bandwidthThrottling" type:"long"`

	// Whether to create a Public IP for the Recovery Instance by default.
	CreatePublicIP *bool `locationName:"createPublicIP" type:"boolean"`

	// The data plane routing mechanism that will be used for replication.
	DataPlaneRouting *string `locationName:"dataPlaneRouting" type:"string" enum:"ReplicationConfigurationDataPlaneRouting"`

	// The Staging Disk EBS volume type to be used during replication.
	DefaultLargeStagingDiskType *string `locationName:"defaultLargeStagingDiskType" type:"string" enum:"ReplicationConfigurationDefaultLargeStagingDiskType"`

	// The type of EBS encryption to be used during replication.
	EbsEncryption *string `locationName:"ebsEncryption" type:"string" enum:"ReplicationConfigurationEbsEncryption"`

	// The ARN of the EBS encryption key to be used during replication.
	EbsEncryptionKeyArn *string `locationName:"ebsEncryptionKeyArn" min:"20" type:"string"`

	// The Point in time (PIT) policy to manage snapshots taken during replication.
	PitPolicy []*PITPolicyRule `locationName:"pitPolicy" min:"1" type:"list"`

	// The Replication Configuration Template ID.
	//
	// ReplicationConfigurationTemplateID is a required field
	ReplicationConfigurationTemplateID *string `locationName:"replicationConfigurationTemplateID" min:"21" type:"string" required:"true"`

	// The instance type to be used for the replication server.
	ReplicationServerInstanceType *string `locationName:"replicationServerInstanceType" type:"string"`

	// The security group IDs that will be used by the replication server.
	ReplicationServersSecurityGroupsIDs []*string `locationName:"replicationServersSecurityGroupsIDs" type:"list"`

	// The subnet to be used by the replication staging area.
	StagingAreaSubnetId *string `locationName:"stagingAreaSubnetId" type:"string"`

	// A set of tags to be associated with all resources created in the replication
	// staging area: EC2 replication server, EBS volumes, EBS snapshots, etc.
	//
	// StagingAreaTags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateReplicationConfigurationTemplateOutput's
	// String and GoString methods.
	StagingAreaTags map[string]*string `locationName:"stagingAreaTags" type:"map" sensitive:"true"`

	// A set of tags to be associated with the Replication Configuration Template
	// resource.
	//
	// Tags is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateReplicationConfigurationTemplateOutput's
	// String and GoString methods.
	Tags map[string]*string `locationName:"tags" type:"map" sensitive:"true"`

	// Whether to use a dedicated Replication Server in the replication staging
	// area.
	UseDedicatedReplicationServer *bool `locationName:"useDedicatedReplicationServer" type:"boolean"`
}

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

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

// SetArn sets the Arn field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetArn(v string) *UpdateReplicationConfigurationTemplateOutput {
	s.Arn = &v
	return s
}

// SetAssociateDefaultSecurityGroup sets the AssociateDefaultSecurityGroup field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetAssociateDefaultSecurityGroup(v bool) *UpdateReplicationConfigurationTemplateOutput {
	s.AssociateDefaultSecurityGroup = &v
	return s
}

// SetBandwidthThrottling sets the BandwidthThrottling field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetBandwidthThrottling(v int64) *UpdateReplicationConfigurationTemplateOutput {
	s.BandwidthThrottling = &v
	return s
}

// SetCreatePublicIP sets the CreatePublicIP field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetCreatePublicIP(v bool) *UpdateReplicationConfigurationTemplateOutput {
	s.CreatePublicIP = &v
	return s
}

// SetDataPlaneRouting sets the DataPlaneRouting field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetDataPlaneRouting(v string) *UpdateReplicationConfigurationTemplateOutput {
	s.DataPlaneRouting = &v
	return s
}

// SetDefaultLargeStagingDiskType sets the DefaultLargeStagingDiskType field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetDefaultLargeStagingDiskType(v string) *UpdateReplicationConfigurationTemplateOutput {
	s.DefaultLargeStagingDiskType = &v
	return s
}

// SetEbsEncryption sets the EbsEncryption field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetEbsEncryption(v string) *UpdateReplicationConfigurationTemplateOutput {
	s.EbsEncryption = &v
	return s
}

// SetEbsEncryptionKeyArn sets the EbsEncryptionKeyArn field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetEbsEncryptionKeyArn(v string) *UpdateReplicationConfigurationTemplateOutput {
	s.EbsEncryptionKeyArn = &v
	return s
}

// SetPitPolicy sets the PitPolicy field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetPitPolicy(v []*PITPolicyRule) *UpdateReplicationConfigurationTemplateOutput {
	s.PitPolicy = v
	return s
}

// SetReplicationConfigurationTemplateID sets the ReplicationConfigurationTemplateID field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetReplicationConfigurationTemplateID(v string) *UpdateReplicationConfigurationTemplateOutput {
	s.ReplicationConfigurationTemplateID = &v
	return s
}

// SetReplicationServerInstanceType sets the ReplicationServerInstanceType field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetReplicationServerInstanceType(v string) *UpdateReplicationConfigurationTemplateOutput {
	s.ReplicationServerInstanceType = &v
	return s
}

// SetReplicationServersSecurityGroupsIDs sets the ReplicationServersSecurityGroupsIDs field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetReplicationServersSecurityGroupsIDs(v []*string) *UpdateReplicationConfigurationTemplateOutput {
	s.ReplicationServersSecurityGroupsIDs = v
	return s
}

// SetStagingAreaSubnetId sets the StagingAreaSubnetId field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetStagingAreaSubnetId(v string) *UpdateReplicationConfigurationTemplateOutput {
	s.StagingAreaSubnetId = &v
	return s
}

// SetStagingAreaTags sets the StagingAreaTags field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetStagingAreaTags(v map[string]*string) *UpdateReplicationConfigurationTemplateOutput {
	s.StagingAreaTags = v
	return s
}

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

// SetUseDedicatedReplicationServer sets the UseDedicatedReplicationServer field's value.
func (s *UpdateReplicationConfigurationTemplateOutput) SetUseDedicatedReplicationServer(v bool) *UpdateReplicationConfigurationTemplateOutput {
	s.UseDedicatedReplicationServer = &v
	return s
}

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

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

	// A list of fields that failed validation.
	FieldList []*ValidationExceptionField `locationName:"fieldList" type:"list"`

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

	// Validation exception reason.
	Reason *string `locationName:"reason" type:"string" enum:"ValidationExceptionReason"`
}

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

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

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

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

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

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

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

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

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

// Validate exception field.
type ValidationExceptionField struct {
	_ struct{} `type:"structure"`

	// Validate exception field message.
	Message *string `locationName:"message" type:"string"`

	// Validate exception field name.
	Name *string `locationName:"name" type:"string"`
}

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

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

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

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

const (
	// DataReplicationErrorStringAgentNotSeen is a DataReplicationErrorString enum value
	DataReplicationErrorStringAgentNotSeen = "AGENT_NOT_SEEN"

	// DataReplicationErrorStringSnapshotsFailure is a DataReplicationErrorString enum value
	DataReplicationErrorStringSnapshotsFailure = "SNAPSHOTS_FAILURE"

	// DataReplicationErrorStringNotConverging is a DataReplicationErrorString enum value
	DataReplicationErrorStringNotConverging = "NOT_CONVERGING"

	// DataReplicationErrorStringUnstableNetwork is a DataReplicationErrorString enum value
	DataReplicationErrorStringUnstableNetwork = "UNSTABLE_NETWORK"

	// DataReplicationErrorStringFailedToCreateSecurityGroup is a DataReplicationErrorString enum value
	DataReplicationErrorStringFailedToCreateSecurityGroup = "FAILED_TO_CREATE_SECURITY_GROUP"

	// DataReplicationErrorStringFailedToLaunchReplicationServer is a DataReplicationErrorString enum value
	DataReplicationErrorStringFailedToLaunchReplicationServer = "FAILED_TO_LAUNCH_REPLICATION_SERVER"

	// DataReplicationErrorStringFailedToBootReplicationServer is a DataReplicationErrorString enum value
	DataReplicationErrorStringFailedToBootReplicationServer = "FAILED_TO_BOOT_REPLICATION_SERVER"

	// DataReplicationErrorStringFailedToAuthenticateWithService is a DataReplicationErrorString enum value
	DataReplicationErrorStringFailedToAuthenticateWithService = "FAILED_TO_AUTHENTICATE_WITH_SERVICE"

	// DataReplicationErrorStringFailedToDownloadReplicationSoftware is a DataReplicationErrorString enum value
	DataReplicationErrorStringFailedToDownloadReplicationSoftware = "FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE"

	// DataReplicationErrorStringFailedToCreateStagingDisks is a DataReplicationErrorString enum value
	DataReplicationErrorStringFailedToCreateStagingDisks = "FAILED_TO_CREATE_STAGING_DISKS"

	// DataReplicationErrorStringFailedToAttachStagingDisks is a DataReplicationErrorString enum value
	DataReplicationErrorStringFailedToAttachStagingDisks = "FAILED_TO_ATTACH_STAGING_DISKS"

	// DataReplicationErrorStringFailedToPairReplicationServerWithAgent is a DataReplicationErrorString enum value
	DataReplicationErrorStringFailedToPairReplicationServerWithAgent = "FAILED_TO_PAIR_REPLICATION_SERVER_WITH_AGENT"

	// DataReplicationErrorStringFailedToConnectAgentToReplicationServer is a DataReplicationErrorString enum value
	DataReplicationErrorStringFailedToConnectAgentToReplicationServer = "FAILED_TO_CONNECT_AGENT_TO_REPLICATION_SERVER"

	// DataReplicationErrorStringFailedToStartDataTransfer is a DataReplicationErrorString enum value
	DataReplicationErrorStringFailedToStartDataTransfer = "FAILED_TO_START_DATA_TRANSFER"
)

// DataReplicationErrorString_Values returns all elements of the DataReplicationErrorString enum
func DataReplicationErrorString_Values() []string {
	return []string{
		DataReplicationErrorStringAgentNotSeen,
		DataReplicationErrorStringSnapshotsFailure,
		DataReplicationErrorStringNotConverging,
		DataReplicationErrorStringUnstableNetwork,
		DataReplicationErrorStringFailedToCreateSecurityGroup,
		DataReplicationErrorStringFailedToLaunchReplicationServer,
		DataReplicationErrorStringFailedToBootReplicationServer,
		DataReplicationErrorStringFailedToAuthenticateWithService,
		DataReplicationErrorStringFailedToDownloadReplicationSoftware,
		DataReplicationErrorStringFailedToCreateStagingDisks,
		DataReplicationErrorStringFailedToAttachStagingDisks,
		DataReplicationErrorStringFailedToPairReplicationServerWithAgent,
		DataReplicationErrorStringFailedToConnectAgentToReplicationServer,
		DataReplicationErrorStringFailedToStartDataTransfer,
	}
}

const (
	// DataReplicationInitiationStepNameWait is a DataReplicationInitiationStepName enum value
	DataReplicationInitiationStepNameWait = "WAIT"

	// DataReplicationInitiationStepNameCreateSecurityGroup is a DataReplicationInitiationStepName enum value
	DataReplicationInitiationStepNameCreateSecurityGroup = "CREATE_SECURITY_GROUP"

	// DataReplicationInitiationStepNameLaunchReplicationServer is a DataReplicationInitiationStepName enum value
	DataReplicationInitiationStepNameLaunchReplicationServer = "LAUNCH_REPLICATION_SERVER"

	// DataReplicationInitiationStepNameBootReplicationServer is a DataReplicationInitiationStepName enum value
	DataReplicationInitiationStepNameBootReplicationServer = "BOOT_REPLICATION_SERVER"

	// DataReplicationInitiationStepNameAuthenticateWithService is a DataReplicationInitiationStepName enum value
	DataReplicationInitiationStepNameAuthenticateWithService = "AUTHENTICATE_WITH_SERVICE"

	// DataReplicationInitiationStepNameDownloadReplicationSoftware is a DataReplicationInitiationStepName enum value
	DataReplicationInitiationStepNameDownloadReplicationSoftware = "DOWNLOAD_REPLICATION_SOFTWARE"

	// DataReplicationInitiationStepNameCreateStagingDisks is a DataReplicationInitiationStepName enum value
	DataReplicationInitiationStepNameCreateStagingDisks = "CREATE_STAGING_DISKS"

	// DataReplicationInitiationStepNameAttachStagingDisks is a DataReplicationInitiationStepName enum value
	DataReplicationInitiationStepNameAttachStagingDisks = "ATTACH_STAGING_DISKS"

	// DataReplicationInitiationStepNamePairReplicationServerWithAgent is a DataReplicationInitiationStepName enum value
	DataReplicationInitiationStepNamePairReplicationServerWithAgent = "PAIR_REPLICATION_SERVER_WITH_AGENT"

	// DataReplicationInitiationStepNameConnectAgentToReplicationServer is a DataReplicationInitiationStepName enum value
	DataReplicationInitiationStepNameConnectAgentToReplicationServer = "CONNECT_AGENT_TO_REPLICATION_SERVER"

	// DataReplicationInitiationStepNameStartDataTransfer is a DataReplicationInitiationStepName enum value
	DataReplicationInitiationStepNameStartDataTransfer = "START_DATA_TRANSFER"
)

// DataReplicationInitiationStepName_Values returns all elements of the DataReplicationInitiationStepName enum
func DataReplicationInitiationStepName_Values() []string {
	return []string{
		DataReplicationInitiationStepNameWait,
		DataReplicationInitiationStepNameCreateSecurityGroup,
		DataReplicationInitiationStepNameLaunchReplicationServer,
		DataReplicationInitiationStepNameBootReplicationServer,
		DataReplicationInitiationStepNameAuthenticateWithService,
		DataReplicationInitiationStepNameDownloadReplicationSoftware,
		DataReplicationInitiationStepNameCreateStagingDisks,
		DataReplicationInitiationStepNameAttachStagingDisks,
		DataReplicationInitiationStepNamePairReplicationServerWithAgent,
		DataReplicationInitiationStepNameConnectAgentToReplicationServer,
		DataReplicationInitiationStepNameStartDataTransfer,
	}
}

const (
	// DataReplicationInitiationStepStatusNotStarted is a DataReplicationInitiationStepStatus enum value
	DataReplicationInitiationStepStatusNotStarted = "NOT_STARTED"

	// DataReplicationInitiationStepStatusInProgress is a DataReplicationInitiationStepStatus enum value
	DataReplicationInitiationStepStatusInProgress = "IN_PROGRESS"

	// DataReplicationInitiationStepStatusSucceeded is a DataReplicationInitiationStepStatus enum value
	DataReplicationInitiationStepStatusSucceeded = "SUCCEEDED"

	// DataReplicationInitiationStepStatusFailed is a DataReplicationInitiationStepStatus enum value
	DataReplicationInitiationStepStatusFailed = "FAILED"

	// DataReplicationInitiationStepStatusSkipped is a DataReplicationInitiationStepStatus enum value
	DataReplicationInitiationStepStatusSkipped = "SKIPPED"
)

// DataReplicationInitiationStepStatus_Values returns all elements of the DataReplicationInitiationStepStatus enum
func DataReplicationInitiationStepStatus_Values() []string {
	return []string{
		DataReplicationInitiationStepStatusNotStarted,
		DataReplicationInitiationStepStatusInProgress,
		DataReplicationInitiationStepStatusSucceeded,
		DataReplicationInitiationStepStatusFailed,
		DataReplicationInitiationStepStatusSkipped,
	}
}

const (
	// DataReplicationStateStopped is a DataReplicationState enum value
	DataReplicationStateStopped = "STOPPED"

	// DataReplicationStateInitiating is a DataReplicationState enum value
	DataReplicationStateInitiating = "INITIATING"

	// DataReplicationStateInitialSync is a DataReplicationState enum value
	DataReplicationStateInitialSync = "INITIAL_SYNC"

	// DataReplicationStateBacklog is a DataReplicationState enum value
	DataReplicationStateBacklog = "BACKLOG"

	// DataReplicationStateCreatingSnapshot is a DataReplicationState enum value
	DataReplicationStateCreatingSnapshot = "CREATING_SNAPSHOT"

	// DataReplicationStateContinuous is a DataReplicationState enum value
	DataReplicationStateContinuous = "CONTINUOUS"

	// DataReplicationStatePaused is a DataReplicationState enum value
	DataReplicationStatePaused = "PAUSED"

	// DataReplicationStateRescan is a DataReplicationState enum value
	DataReplicationStateRescan = "RESCAN"

	// DataReplicationStateStalled is a DataReplicationState enum value
	DataReplicationStateStalled = "STALLED"

	// DataReplicationStateDisconnected is a DataReplicationState enum value
	DataReplicationStateDisconnected = "DISCONNECTED"
)

// DataReplicationState_Values returns all elements of the DataReplicationState enum
func DataReplicationState_Values() []string {
	return []string{
		DataReplicationStateStopped,
		DataReplicationStateInitiating,
		DataReplicationStateInitialSync,
		DataReplicationStateBacklog,
		DataReplicationStateCreatingSnapshot,
		DataReplicationStateContinuous,
		DataReplicationStatePaused,
		DataReplicationStateRescan,
		DataReplicationStateStalled,
		DataReplicationStateDisconnected,
	}
}

const (
	// EC2InstanceStatePending is a EC2InstanceState enum value
	EC2InstanceStatePending = "PENDING"

	// EC2InstanceStateRunning is a EC2InstanceState enum value
	EC2InstanceStateRunning = "RUNNING"

	// EC2InstanceStateStopping is a EC2InstanceState enum value
	EC2InstanceStateStopping = "STOPPING"

	// EC2InstanceStateStopped is a EC2InstanceState enum value
	EC2InstanceStateStopped = "STOPPED"

	// EC2InstanceStateShuttingDown is a EC2InstanceState enum value
	EC2InstanceStateShuttingDown = "SHUTTING-DOWN"

	// EC2InstanceStateTerminated is a EC2InstanceState enum value
	EC2InstanceStateTerminated = "TERMINATED"

	// EC2InstanceStateNotFound is a EC2InstanceState enum value
	EC2InstanceStateNotFound = "NOT_FOUND"
)

// EC2InstanceState_Values returns all elements of the EC2InstanceState enum
func EC2InstanceState_Values() []string {
	return []string{
		EC2InstanceStatePending,
		EC2InstanceStateRunning,
		EC2InstanceStateStopping,
		EC2InstanceStateStopped,
		EC2InstanceStateShuttingDown,
		EC2InstanceStateTerminated,
		EC2InstanceStateNotFound,
	}
}

const (
	// FailbackReplicationErrorAgentNotSeen is a FailbackReplicationError enum value
	FailbackReplicationErrorAgentNotSeen = "AGENT_NOT_SEEN"

	// FailbackReplicationErrorFailbackClientNotSeen is a FailbackReplicationError enum value
	FailbackReplicationErrorFailbackClientNotSeen = "FAILBACK_CLIENT_NOT_SEEN"

	// FailbackReplicationErrorNotConverging is a FailbackReplicationError enum value
	FailbackReplicationErrorNotConverging = "NOT_CONVERGING"

	// FailbackReplicationErrorUnstableNetwork is a FailbackReplicationError enum value
	FailbackReplicationErrorUnstableNetwork = "UNSTABLE_NETWORK"

	// FailbackReplicationErrorFailedToEstablishRecoveryInstanceCommunication is a FailbackReplicationError enum value
	FailbackReplicationErrorFailedToEstablishRecoveryInstanceCommunication = "FAILED_TO_ESTABLISH_RECOVERY_INSTANCE_COMMUNICATION"

	// FailbackReplicationErrorFailedToDownloadReplicationSoftwareToFailbackClient is a FailbackReplicationError enum value
	FailbackReplicationErrorFailedToDownloadReplicationSoftwareToFailbackClient = "FAILED_TO_DOWNLOAD_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT"

	// FailbackReplicationErrorFailedToConfigureReplicationSoftware is a FailbackReplicationError enum value
	FailbackReplicationErrorFailedToConfigureReplicationSoftware = "FAILED_TO_CONFIGURE_REPLICATION_SOFTWARE"

	// FailbackReplicationErrorFailedToPairAgentWithReplicationSoftware is a FailbackReplicationError enum value
	FailbackReplicationErrorFailedToPairAgentWithReplicationSoftware = "FAILED_TO_PAIR_AGENT_WITH_REPLICATION_SOFTWARE"

	// FailbackReplicationErrorFailedToEstablishAgentReplicatorSoftwareCommunication is a FailbackReplicationError enum value
	FailbackReplicationErrorFailedToEstablishAgentReplicatorSoftwareCommunication = "FAILED_TO_ESTABLISH_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION"
)

// FailbackReplicationError_Values returns all elements of the FailbackReplicationError enum
func FailbackReplicationError_Values() []string {
	return []string{
		FailbackReplicationErrorAgentNotSeen,
		FailbackReplicationErrorFailbackClientNotSeen,
		FailbackReplicationErrorNotConverging,
		FailbackReplicationErrorUnstableNetwork,
		FailbackReplicationErrorFailedToEstablishRecoveryInstanceCommunication,
		FailbackReplicationErrorFailedToDownloadReplicationSoftwareToFailbackClient,
		FailbackReplicationErrorFailedToConfigureReplicationSoftware,
		FailbackReplicationErrorFailedToPairAgentWithReplicationSoftware,
		FailbackReplicationErrorFailedToEstablishAgentReplicatorSoftwareCommunication,
	}
}

const (
	// FailbackStateFailbackNotStarted is a FailbackState enum value
	FailbackStateFailbackNotStarted = "FAILBACK_NOT_STARTED"

	// FailbackStateFailbackInProgress is a FailbackState enum value
	FailbackStateFailbackInProgress = "FAILBACK_IN_PROGRESS"

	// FailbackStateFailbackReadyForLaunch is a FailbackState enum value
	FailbackStateFailbackReadyForLaunch = "FAILBACK_READY_FOR_LAUNCH"

	// FailbackStateFailbackCompleted is a FailbackState enum value
	FailbackStateFailbackCompleted = "FAILBACK_COMPLETED"

	// FailbackStateFailbackError is a FailbackState enum value
	FailbackStateFailbackError = "FAILBACK_ERROR"
)

// FailbackState_Values returns all elements of the FailbackState enum
func FailbackState_Values() []string {
	return []string{
		FailbackStateFailbackNotStarted,
		FailbackStateFailbackInProgress,
		FailbackStateFailbackReadyForLaunch,
		FailbackStateFailbackCompleted,
		FailbackStateFailbackError,
	}
}

const (
	// InitiatedByStartRecovery is a InitiatedBy enum value
	InitiatedByStartRecovery = "START_RECOVERY"

	// InitiatedByStartDrill is a InitiatedBy enum value
	InitiatedByStartDrill = "START_DRILL"

	// InitiatedByFailback is a InitiatedBy enum value
	InitiatedByFailback = "FAILBACK"

	// InitiatedByDiagnostic is a InitiatedBy enum value
	InitiatedByDiagnostic = "DIAGNOSTIC"

	// InitiatedByTerminateRecoveryInstances is a InitiatedBy enum value
	InitiatedByTerminateRecoveryInstances = "TERMINATE_RECOVERY_INSTANCES"
)

// InitiatedBy_Values returns all elements of the InitiatedBy enum
func InitiatedBy_Values() []string {
	return []string{
		InitiatedByStartRecovery,
		InitiatedByStartDrill,
		InitiatedByFailback,
		InitiatedByDiagnostic,
		InitiatedByTerminateRecoveryInstances,
	}
}

const (
	// JobLogEventJobStart is a JobLogEvent enum value
	JobLogEventJobStart = "JOB_START"

	// JobLogEventServerSkipped is a JobLogEvent enum value
	JobLogEventServerSkipped = "SERVER_SKIPPED"

	// JobLogEventCleanupStart is a JobLogEvent enum value
	JobLogEventCleanupStart = "CLEANUP_START"

	// JobLogEventCleanupEnd is a JobLogEvent enum value
	JobLogEventCleanupEnd = "CLEANUP_END"

	// JobLogEventCleanupFail is a JobLogEvent enum value
	JobLogEventCleanupFail = "CLEANUP_FAIL"

	// JobLogEventSnapshotStart is a JobLogEvent enum value
	JobLogEventSnapshotStart = "SNAPSHOT_START"

	// JobLogEventSnapshotEnd is a JobLogEvent enum value
	JobLogEventSnapshotEnd = "SNAPSHOT_END"

	// JobLogEventSnapshotFail is a JobLogEvent enum value
	JobLogEventSnapshotFail = "SNAPSHOT_FAIL"

	// JobLogEventUsingPreviousSnapshot is a JobLogEvent enum value
	JobLogEventUsingPreviousSnapshot = "USING_PREVIOUS_SNAPSHOT"

	// JobLogEventUsingPreviousSnapshotFailed is a JobLogEvent enum value
	JobLogEventUsingPreviousSnapshotFailed = "USING_PREVIOUS_SNAPSHOT_FAILED"

	// JobLogEventConversionStart is a JobLogEvent enum value
	JobLogEventConversionStart = "CONVERSION_START"

	// JobLogEventConversionEnd is a JobLogEvent enum value
	JobLogEventConversionEnd = "CONVERSION_END"

	// JobLogEventConversionFail is a JobLogEvent enum value
	JobLogEventConversionFail = "CONVERSION_FAIL"

	// JobLogEventLaunchStart is a JobLogEvent enum value
	JobLogEventLaunchStart = "LAUNCH_START"

	// JobLogEventLaunchFailed is a JobLogEvent enum value
	JobLogEventLaunchFailed = "LAUNCH_FAILED"

	// JobLogEventJobCancel is a JobLogEvent enum value
	JobLogEventJobCancel = "JOB_CANCEL"

	// JobLogEventJobEnd is a JobLogEvent enum value
	JobLogEventJobEnd = "JOB_END"
)

// JobLogEvent_Values returns all elements of the JobLogEvent enum
func JobLogEvent_Values() []string {
	return []string{
		JobLogEventJobStart,
		JobLogEventServerSkipped,
		JobLogEventCleanupStart,
		JobLogEventCleanupEnd,
		JobLogEventCleanupFail,
		JobLogEventSnapshotStart,
		JobLogEventSnapshotEnd,
		JobLogEventSnapshotFail,
		JobLogEventUsingPreviousSnapshot,
		JobLogEventUsingPreviousSnapshotFailed,
		JobLogEventConversionStart,
		JobLogEventConversionEnd,
		JobLogEventConversionFail,
		JobLogEventLaunchStart,
		JobLogEventLaunchFailed,
		JobLogEventJobCancel,
		JobLogEventJobEnd,
	}
}

const (
	// JobStatusPending is a JobStatus enum value
	JobStatusPending = "PENDING"

	// JobStatusStarted is a JobStatus enum value
	JobStatusStarted = "STARTED"

	// JobStatusCompleted is a JobStatus enum value
	JobStatusCompleted = "COMPLETED"
)

// JobStatus_Values returns all elements of the JobStatus enum
func JobStatus_Values() []string {
	return []string{
		JobStatusPending,
		JobStatusStarted,
		JobStatusCompleted,
	}
}

const (
	// JobTypeLaunch is a JobType enum value
	JobTypeLaunch = "LAUNCH"

	// JobTypeTerminate is a JobType enum value
	JobTypeTerminate = "TERMINATE"
)

// JobType_Values returns all elements of the JobType enum
func JobType_Values() []string {
	return []string{
		JobTypeLaunch,
		JobTypeTerminate,
	}
}

const (
	// LastLaunchResultNotStarted is a LastLaunchResult enum value
	LastLaunchResultNotStarted = "NOT_STARTED"

	// LastLaunchResultPending is a LastLaunchResult enum value
	LastLaunchResultPending = "PENDING"

	// LastLaunchResultSucceeded is a LastLaunchResult enum value
	LastLaunchResultSucceeded = "SUCCEEDED"

	// LastLaunchResultFailed is a LastLaunchResult enum value
	LastLaunchResultFailed = "FAILED"
)

// LastLaunchResult_Values returns all elements of the LastLaunchResult enum
func LastLaunchResult_Values() []string {
	return []string{
		LastLaunchResultNotStarted,
		LastLaunchResultPending,
		LastLaunchResultSucceeded,
		LastLaunchResultFailed,
	}
}

const (
	// LastLaunchTypeRecovery is a LastLaunchType enum value
	LastLaunchTypeRecovery = "RECOVERY"

	// LastLaunchTypeDrill is a LastLaunchType enum value
	LastLaunchTypeDrill = "DRILL"
)

// LastLaunchType_Values returns all elements of the LastLaunchType enum
func LastLaunchType_Values() []string {
	return []string{
		LastLaunchTypeRecovery,
		LastLaunchTypeDrill,
	}
}

const (
	// LaunchDispositionStopped is a LaunchDisposition enum value
	LaunchDispositionStopped = "STOPPED"

	// LaunchDispositionStarted is a LaunchDisposition enum value
	LaunchDispositionStarted = "STARTED"
)

// LaunchDisposition_Values returns all elements of the LaunchDisposition enum
func LaunchDisposition_Values() []string {
	return []string{
		LaunchDispositionStopped,
		LaunchDispositionStarted,
	}
}

const (
	// LaunchStatusPending is a LaunchStatus enum value
	LaunchStatusPending = "PENDING"

	// LaunchStatusInProgress is a LaunchStatus enum value
	LaunchStatusInProgress = "IN_PROGRESS"

	// LaunchStatusLaunched is a LaunchStatus enum value
	LaunchStatusLaunched = "LAUNCHED"

	// LaunchStatusFailed is a LaunchStatus enum value
	LaunchStatusFailed = "FAILED"

	// LaunchStatusTerminated is a LaunchStatus enum value
	LaunchStatusTerminated = "TERMINATED"
)

// LaunchStatus_Values returns all elements of the LaunchStatus enum
func LaunchStatus_Values() []string {
	return []string{
		LaunchStatusPending,
		LaunchStatusInProgress,
		LaunchStatusLaunched,
		LaunchStatusFailed,
		LaunchStatusTerminated,
	}
}

const (
	// PITPolicyRuleUnitsMinute is a PITPolicyRuleUnits enum value
	PITPolicyRuleUnitsMinute = "MINUTE"

	// PITPolicyRuleUnitsHour is a PITPolicyRuleUnits enum value
	PITPolicyRuleUnitsHour = "HOUR"

	// PITPolicyRuleUnitsDay is a PITPolicyRuleUnits enum value
	PITPolicyRuleUnitsDay = "DAY"
)

// PITPolicyRuleUnits_Values returns all elements of the PITPolicyRuleUnits enum
func PITPolicyRuleUnits_Values() []string {
	return []string{
		PITPolicyRuleUnitsMinute,
		PITPolicyRuleUnitsHour,
		PITPolicyRuleUnitsDay,
	}
}

const (
	// RecoveryInstanceDataReplicationInitiationStepNameLinkFailbackClientWithRecoveryInstance is a RecoveryInstanceDataReplicationInitiationStepName enum value
	RecoveryInstanceDataReplicationInitiationStepNameLinkFailbackClientWithRecoveryInstance = "LINK_FAILBACK_CLIENT_WITH_RECOVERY_INSTANCE"

	// RecoveryInstanceDataReplicationInitiationStepNameCompleteVolumeMapping is a RecoveryInstanceDataReplicationInitiationStepName enum value
	RecoveryInstanceDataReplicationInitiationStepNameCompleteVolumeMapping = "COMPLETE_VOLUME_MAPPING"

	// RecoveryInstanceDataReplicationInitiationStepNameEstablishRecoveryInstanceCommunication is a RecoveryInstanceDataReplicationInitiationStepName enum value
	RecoveryInstanceDataReplicationInitiationStepNameEstablishRecoveryInstanceCommunication = "ESTABLISH_RECOVERY_INSTANCE_COMMUNICATION"

	// RecoveryInstanceDataReplicationInitiationStepNameDownloadReplicationSoftwareToFailbackClient is a RecoveryInstanceDataReplicationInitiationStepName enum value
	RecoveryInstanceDataReplicationInitiationStepNameDownloadReplicationSoftwareToFailbackClient = "DOWNLOAD_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT"

	// RecoveryInstanceDataReplicationInitiationStepNameConfigureReplicationSoftware is a RecoveryInstanceDataReplicationInitiationStepName enum value
	RecoveryInstanceDataReplicationInitiationStepNameConfigureReplicationSoftware = "CONFIGURE_REPLICATION_SOFTWARE"

	// RecoveryInstanceDataReplicationInitiationStepNamePairAgentWithReplicationSoftware is a RecoveryInstanceDataReplicationInitiationStepName enum value
	RecoveryInstanceDataReplicationInitiationStepNamePairAgentWithReplicationSoftware = "PAIR_AGENT_WITH_REPLICATION_SOFTWARE"

	// RecoveryInstanceDataReplicationInitiationStepNameEstablishAgentReplicatorSoftwareCommunication is a RecoveryInstanceDataReplicationInitiationStepName enum value
	RecoveryInstanceDataReplicationInitiationStepNameEstablishAgentReplicatorSoftwareCommunication = "ESTABLISH_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION"
)

// RecoveryInstanceDataReplicationInitiationStepName_Values returns all elements of the RecoveryInstanceDataReplicationInitiationStepName enum
func RecoveryInstanceDataReplicationInitiationStepName_Values() []string {
	return []string{
		RecoveryInstanceDataReplicationInitiationStepNameLinkFailbackClientWithRecoveryInstance,
		RecoveryInstanceDataReplicationInitiationStepNameCompleteVolumeMapping,
		RecoveryInstanceDataReplicationInitiationStepNameEstablishRecoveryInstanceCommunication,
		RecoveryInstanceDataReplicationInitiationStepNameDownloadReplicationSoftwareToFailbackClient,
		RecoveryInstanceDataReplicationInitiationStepNameConfigureReplicationSoftware,
		RecoveryInstanceDataReplicationInitiationStepNamePairAgentWithReplicationSoftware,
		RecoveryInstanceDataReplicationInitiationStepNameEstablishAgentReplicatorSoftwareCommunication,
	}
}

const (
	// RecoveryInstanceDataReplicationInitiationStepStatusNotStarted is a RecoveryInstanceDataReplicationInitiationStepStatus enum value
	RecoveryInstanceDataReplicationInitiationStepStatusNotStarted = "NOT_STARTED"

	// RecoveryInstanceDataReplicationInitiationStepStatusInProgress is a RecoveryInstanceDataReplicationInitiationStepStatus enum value
	RecoveryInstanceDataReplicationInitiationStepStatusInProgress = "IN_PROGRESS"

	// RecoveryInstanceDataReplicationInitiationStepStatusSucceeded is a RecoveryInstanceDataReplicationInitiationStepStatus enum value
	RecoveryInstanceDataReplicationInitiationStepStatusSucceeded = "SUCCEEDED"

	// RecoveryInstanceDataReplicationInitiationStepStatusFailed is a RecoveryInstanceDataReplicationInitiationStepStatus enum value
	RecoveryInstanceDataReplicationInitiationStepStatusFailed = "FAILED"

	// RecoveryInstanceDataReplicationInitiationStepStatusSkipped is a RecoveryInstanceDataReplicationInitiationStepStatus enum value
	RecoveryInstanceDataReplicationInitiationStepStatusSkipped = "SKIPPED"
)

// RecoveryInstanceDataReplicationInitiationStepStatus_Values returns all elements of the RecoveryInstanceDataReplicationInitiationStepStatus enum
func RecoveryInstanceDataReplicationInitiationStepStatus_Values() []string {
	return []string{
		RecoveryInstanceDataReplicationInitiationStepStatusNotStarted,
		RecoveryInstanceDataReplicationInitiationStepStatusInProgress,
		RecoveryInstanceDataReplicationInitiationStepStatusSucceeded,
		RecoveryInstanceDataReplicationInitiationStepStatusFailed,
		RecoveryInstanceDataReplicationInitiationStepStatusSkipped,
	}
}

const (
	// RecoveryInstanceDataReplicationStateStopped is a RecoveryInstanceDataReplicationState enum value
	RecoveryInstanceDataReplicationStateStopped = "STOPPED"

	// RecoveryInstanceDataReplicationStateInitiating is a RecoveryInstanceDataReplicationState enum value
	RecoveryInstanceDataReplicationStateInitiating = "INITIATING"

	// RecoveryInstanceDataReplicationStateInitialSync is a RecoveryInstanceDataReplicationState enum value
	RecoveryInstanceDataReplicationStateInitialSync = "INITIAL_SYNC"

	// RecoveryInstanceDataReplicationStateBacklog is a RecoveryInstanceDataReplicationState enum value
	RecoveryInstanceDataReplicationStateBacklog = "BACKLOG"

	// RecoveryInstanceDataReplicationStateCreatingSnapshot is a RecoveryInstanceDataReplicationState enum value
	RecoveryInstanceDataReplicationStateCreatingSnapshot = "CREATING_SNAPSHOT"

	// RecoveryInstanceDataReplicationStateContinuous is a RecoveryInstanceDataReplicationState enum value
	RecoveryInstanceDataReplicationStateContinuous = "CONTINUOUS"

	// RecoveryInstanceDataReplicationStatePaused is a RecoveryInstanceDataReplicationState enum value
	RecoveryInstanceDataReplicationStatePaused = "PAUSED"

	// RecoveryInstanceDataReplicationStateRescan is a RecoveryInstanceDataReplicationState enum value
	RecoveryInstanceDataReplicationStateRescan = "RESCAN"

	// RecoveryInstanceDataReplicationStateStalled is a RecoveryInstanceDataReplicationState enum value
	RecoveryInstanceDataReplicationStateStalled = "STALLED"

	// RecoveryInstanceDataReplicationStateDisconnected is a RecoveryInstanceDataReplicationState enum value
	RecoveryInstanceDataReplicationStateDisconnected = "DISCONNECTED"
)

// RecoveryInstanceDataReplicationState_Values returns all elements of the RecoveryInstanceDataReplicationState enum
func RecoveryInstanceDataReplicationState_Values() []string {
	return []string{
		RecoveryInstanceDataReplicationStateStopped,
		RecoveryInstanceDataReplicationStateInitiating,
		RecoveryInstanceDataReplicationStateInitialSync,
		RecoveryInstanceDataReplicationStateBacklog,
		RecoveryInstanceDataReplicationStateCreatingSnapshot,
		RecoveryInstanceDataReplicationStateContinuous,
		RecoveryInstanceDataReplicationStatePaused,
		RecoveryInstanceDataReplicationStateRescan,
		RecoveryInstanceDataReplicationStateStalled,
		RecoveryInstanceDataReplicationStateDisconnected,
	}
}

const (
	// RecoverySnapshotsOrderAsc is a RecoverySnapshotsOrder enum value
	RecoverySnapshotsOrderAsc = "ASC"

	// RecoverySnapshotsOrderDesc is a RecoverySnapshotsOrder enum value
	RecoverySnapshotsOrderDesc = "DESC"
)

// RecoverySnapshotsOrder_Values returns all elements of the RecoverySnapshotsOrder enum
func RecoverySnapshotsOrder_Values() []string {
	return []string{
		RecoverySnapshotsOrderAsc,
		RecoverySnapshotsOrderDesc,
	}
}

const (
	// ReplicationConfigurationDataPlaneRoutingPrivateIp is a ReplicationConfigurationDataPlaneRouting enum value
	ReplicationConfigurationDataPlaneRoutingPrivateIp = "PRIVATE_IP"

	// ReplicationConfigurationDataPlaneRoutingPublicIp is a ReplicationConfigurationDataPlaneRouting enum value
	ReplicationConfigurationDataPlaneRoutingPublicIp = "PUBLIC_IP"
)

// ReplicationConfigurationDataPlaneRouting_Values returns all elements of the ReplicationConfigurationDataPlaneRouting enum
func ReplicationConfigurationDataPlaneRouting_Values() []string {
	return []string{
		ReplicationConfigurationDataPlaneRoutingPrivateIp,
		ReplicationConfigurationDataPlaneRoutingPublicIp,
	}
}

const (
	// ReplicationConfigurationDefaultLargeStagingDiskTypeGp2 is a ReplicationConfigurationDefaultLargeStagingDiskType enum value
	ReplicationConfigurationDefaultLargeStagingDiskTypeGp2 = "GP2"

	// ReplicationConfigurationDefaultLargeStagingDiskTypeGp3 is a ReplicationConfigurationDefaultLargeStagingDiskType enum value
	ReplicationConfigurationDefaultLargeStagingDiskTypeGp3 = "GP3"

	// ReplicationConfigurationDefaultLargeStagingDiskTypeSt1 is a ReplicationConfigurationDefaultLargeStagingDiskType enum value
	ReplicationConfigurationDefaultLargeStagingDiskTypeSt1 = "ST1"
)

// ReplicationConfigurationDefaultLargeStagingDiskType_Values returns all elements of the ReplicationConfigurationDefaultLargeStagingDiskType enum
func ReplicationConfigurationDefaultLargeStagingDiskType_Values() []string {
	return []string{
		ReplicationConfigurationDefaultLargeStagingDiskTypeGp2,
		ReplicationConfigurationDefaultLargeStagingDiskTypeGp3,
		ReplicationConfigurationDefaultLargeStagingDiskTypeSt1,
	}
}

const (
	// ReplicationConfigurationEbsEncryptionDefault is a ReplicationConfigurationEbsEncryption enum value
	ReplicationConfigurationEbsEncryptionDefault = "DEFAULT"

	// ReplicationConfigurationEbsEncryptionCustom is a ReplicationConfigurationEbsEncryption enum value
	ReplicationConfigurationEbsEncryptionCustom = "CUSTOM"
)

// ReplicationConfigurationEbsEncryption_Values returns all elements of the ReplicationConfigurationEbsEncryption enum
func ReplicationConfigurationEbsEncryption_Values() []string {
	return []string{
		ReplicationConfigurationEbsEncryptionDefault,
		ReplicationConfigurationEbsEncryptionCustom,
	}
}

const (
	// ReplicationConfigurationReplicatedDiskStagingDiskTypeAuto is a ReplicationConfigurationReplicatedDiskStagingDiskType enum value
	ReplicationConfigurationReplicatedDiskStagingDiskTypeAuto = "AUTO"

	// ReplicationConfigurationReplicatedDiskStagingDiskTypeGp2 is a ReplicationConfigurationReplicatedDiskStagingDiskType enum value
	ReplicationConfigurationReplicatedDiskStagingDiskTypeGp2 = "GP2"

	// ReplicationConfigurationReplicatedDiskStagingDiskTypeGp3 is a ReplicationConfigurationReplicatedDiskStagingDiskType enum value
	ReplicationConfigurationReplicatedDiskStagingDiskTypeGp3 = "GP3"

	// ReplicationConfigurationReplicatedDiskStagingDiskTypeIo1 is a ReplicationConfigurationReplicatedDiskStagingDiskType enum value
	ReplicationConfigurationReplicatedDiskStagingDiskTypeIo1 = "IO1"

	// ReplicationConfigurationReplicatedDiskStagingDiskTypeSc1 is a ReplicationConfigurationReplicatedDiskStagingDiskType enum value
	ReplicationConfigurationReplicatedDiskStagingDiskTypeSc1 = "SC1"

	// ReplicationConfigurationReplicatedDiskStagingDiskTypeSt1 is a ReplicationConfigurationReplicatedDiskStagingDiskType enum value
	ReplicationConfigurationReplicatedDiskStagingDiskTypeSt1 = "ST1"

	// ReplicationConfigurationReplicatedDiskStagingDiskTypeStandard is a ReplicationConfigurationReplicatedDiskStagingDiskType enum value
	ReplicationConfigurationReplicatedDiskStagingDiskTypeStandard = "STANDARD"
)

// ReplicationConfigurationReplicatedDiskStagingDiskType_Values returns all elements of the ReplicationConfigurationReplicatedDiskStagingDiskType enum
func ReplicationConfigurationReplicatedDiskStagingDiskType_Values() []string {
	return []string{
		ReplicationConfigurationReplicatedDiskStagingDiskTypeAuto,
		ReplicationConfigurationReplicatedDiskStagingDiskTypeGp2,
		ReplicationConfigurationReplicatedDiskStagingDiskTypeGp3,
		ReplicationConfigurationReplicatedDiskStagingDiskTypeIo1,
		ReplicationConfigurationReplicatedDiskStagingDiskTypeSc1,
		ReplicationConfigurationReplicatedDiskStagingDiskTypeSt1,
		ReplicationConfigurationReplicatedDiskStagingDiskTypeStandard,
	}
}

const (
	// TargetInstanceTypeRightSizingMethodNone is a TargetInstanceTypeRightSizingMethod enum value
	TargetInstanceTypeRightSizingMethodNone = "NONE"

	// TargetInstanceTypeRightSizingMethodBasic is a TargetInstanceTypeRightSizingMethod enum value
	TargetInstanceTypeRightSizingMethodBasic = "BASIC"
)

// TargetInstanceTypeRightSizingMethod_Values returns all elements of the TargetInstanceTypeRightSizingMethod enum
func TargetInstanceTypeRightSizingMethod_Values() []string {
	return []string{
		TargetInstanceTypeRightSizingMethodNone,
		TargetInstanceTypeRightSizingMethodBasic,
	}
}

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

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

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

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

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