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

// Package sms provides a client for AWS Server Migration Service.
package sms

import (
	"time"

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

const opCreateReplicationJob = "CreateReplicationJob"

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

	if input == nil {
		input = &CreateReplicationJobInput{}
	}

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

// CreateReplicationJob API operation for AWS Server Migration Service.
//
// The CreateReplicationJob API is used to create a ReplicationJob to replicate
// a server on AWS. Call this API to first create a ReplicationJob, which will
// then schedule periodic ReplicationRuns to replicate your server to AWS. Each
// ReplicationRun will result in the creation of an AWS AMI.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Server Migration Service's
// API operation CreateReplicationJob for usage and error information.
//
// Returned Error Codes:
//   * InvalidParameterException
//   A parameter specified in the request is not valid, is unsupported, or cannot
//   be used.
//
//   * MissingRequiredParameterException
//   The request is missing a required parameter. Ensure that you have supplied
//   all the required parameters for the request.
//
//   * UnauthorizedOperationException
//   This user does not have permissions to perform this operation.
//
//   * OperationNotPermittedException
//   The specified operation is not allowed. This error can occur for a number
//   of reasons; for example, you might be trying to start a Replication Run before
//   seed Replication Run.
//
//   * ServerCannotBeReplicatedException
//   The provided server cannot be replicated.
//
//   * ReplicationJobAlreadyExistsException
//   An active Replication Job already exists for the specified server.
//
//   * NoConnectorsAvailableException
//   No connectors are available to handle this request. Please associate connector(s)
//   and verify any existing connectors are healthy and can respond to requests.
//
//   * InternalError
//   An internal error has occured.
//
func (c *SMS) CreateReplicationJob(input *CreateReplicationJobInput) (*CreateReplicationJobOutput, error) {
	req, out := c.CreateReplicationJobRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteReplicationJob = "DeleteReplicationJob"

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

	if input == nil {
		input = &DeleteReplicationJobInput{}
	}

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

// DeleteReplicationJob API operation for AWS Server Migration Service.
//
// The DeleteReplicationJob API is used to delete a ReplicationJob, resulting
// in no further ReplicationRuns. This will delete the contents of the S3 bucket
// used to store SMS artifacts, but will not delete any AMIs created by the
// SMS 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 AWS Server Migration Service's
// API operation DeleteReplicationJob for usage and error information.
//
// Returned Error Codes:
//   * InvalidParameterException
//   A parameter specified in the request is not valid, is unsupported, or cannot
//   be used.
//
//   * MissingRequiredParameterException
//   The request is missing a required parameter. Ensure that you have supplied
//   all the required parameters for the request.
//
//   * UnauthorizedOperationException
//   This user does not have permissions to perform this operation.
//
//   * OperationNotPermittedException
//   The specified operation is not allowed. This error can occur for a number
//   of reasons; for example, you might be trying to start a Replication Run before
//   seed Replication Run.
//
//   * ReplicationJobNotFoundException
//   The specified Replication Job cannot be found.
//
func (c *SMS) DeleteReplicationJob(input *DeleteReplicationJobInput) (*DeleteReplicationJobOutput, error) {
	req, out := c.DeleteReplicationJobRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteServerCatalog = "DeleteServerCatalog"

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

	if input == nil {
		input = &DeleteServerCatalogInput{}
	}

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

// DeleteServerCatalog API operation for AWS Server Migration Service.
//
// The DeleteServerCatalog API clears all servers from your server catalog.
// This means that these servers will no longer be accessible to the Server
// Migration 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 AWS Server Migration Service's
// API operation DeleteServerCatalog for usage and error information.
//
// Returned Error Codes:
//   * UnauthorizedOperationException
//   This user does not have permissions to perform this operation.
//
//   * OperationNotPermittedException
//   The specified operation is not allowed. This error can occur for a number
//   of reasons; for example, you might be trying to start a Replication Run before
//   seed Replication Run.
//
//   * InvalidParameterException
//   A parameter specified in the request is not valid, is unsupported, or cannot
//   be used.
//
//   * MissingRequiredParameterException
//   The request is missing a required parameter. Ensure that you have supplied
//   all the required parameters for the request.
//
func (c *SMS) DeleteServerCatalog(input *DeleteServerCatalogInput) (*DeleteServerCatalogOutput, error) {
	req, out := c.DeleteServerCatalogRequest(input)
	err := req.Send()
	return out, err
}

const opDisassociateConnector = "DisassociateConnector"

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

	if input == nil {
		input = &DisassociateConnectorInput{}
	}

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

// DisassociateConnector API operation for AWS Server Migration Service.
//
// The DisassociateConnector API will disassociate a connector from the Server
// Migration Service, rendering it unavailable to support replication jobs.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Server Migration Service's
// API operation DisassociateConnector for usage and error information.
//
// Returned Error Codes:
//   * MissingRequiredParameterException
//   The request is missing a required parameter. Ensure that you have supplied
//   all the required parameters for the request.
//
//   * UnauthorizedOperationException
//   This user does not have permissions to perform this operation.
//
//   * OperationNotPermittedException
//   The specified operation is not allowed. This error can occur for a number
//   of reasons; for example, you might be trying to start a Replication Run before
//   seed Replication Run.
//
//   * InvalidParameterException
//   A parameter specified in the request is not valid, is unsupported, or cannot
//   be used.
//
func (c *SMS) DisassociateConnector(input *DisassociateConnectorInput) (*DisassociateConnectorOutput, error) {
	req, out := c.DisassociateConnectorRequest(input)
	err := req.Send()
	return out, err
}

const opGetConnectors = "GetConnectors"

// GetConnectorsRequest generates a "aws/request.Request" representing the
// client's request for the GetConnectors operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See GetConnectors for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the GetConnectors method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the GetConnectorsRequest method.
//    req, resp := client.GetConnectorsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *SMS) GetConnectorsRequest(input *GetConnectorsInput) (req *request.Request, output *GetConnectorsOutput) {
	op := &request.Operation{
		Name:       opGetConnectors,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &GetConnectorsInput{}
	}

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

// GetConnectors API operation for AWS Server Migration Service.
//
// The GetConnectors API returns a list of connectors that are registered with
// the Server Migration 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 AWS Server Migration Service's
// API operation GetConnectors for usage and error information.
//
// Returned Error Codes:
//   * UnauthorizedOperationException
//   This user does not have permissions to perform this operation.
//
func (c *SMS) GetConnectors(input *GetConnectorsInput) (*GetConnectorsOutput, error) {
	req, out := c.GetConnectorsRequest(input)
	err := req.Send()
	return out, err
}

// GetConnectorsPages iterates over the pages of a GetConnectors operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See GetConnectors 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 GetConnectors operation.
//    pageNum := 0
//    err := client.GetConnectorsPages(params,
//        func(page *GetConnectorsOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *SMS) GetConnectorsPages(input *GetConnectorsInput, fn func(p *GetConnectorsOutput, lastPage bool) (shouldContinue bool)) error {
	page, _ := c.GetConnectorsRequest(input)
	page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator"))
	return page.EachPage(func(p interface{}, lastPage bool) bool {
		return fn(p.(*GetConnectorsOutput), lastPage)
	})
}

const opGetReplicationJobs = "GetReplicationJobs"

// GetReplicationJobsRequest generates a "aws/request.Request" representing the
// client's request for the GetReplicationJobs operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See GetReplicationJobs for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the GetReplicationJobs method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the GetReplicationJobsRequest method.
//    req, resp := client.GetReplicationJobsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *SMS) GetReplicationJobsRequest(input *GetReplicationJobsInput) (req *request.Request, output *GetReplicationJobsOutput) {
	op := &request.Operation{
		Name:       opGetReplicationJobs,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &GetReplicationJobsInput{}
	}

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

// GetReplicationJobs API operation for AWS Server Migration Service.
//
// The GetReplicationJobs API will return all of your ReplicationJobs and their
// details. This API returns a paginated list, that may be consecutively called
// with nextToken to retrieve all ReplicationJobs.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Server Migration Service's
// API operation GetReplicationJobs for usage and error information.
//
// Returned Error Codes:
//   * InvalidParameterException
//   A parameter specified in the request is not valid, is unsupported, or cannot
//   be used.
//
//   * MissingRequiredParameterException
//   The request is missing a required parameter. Ensure that you have supplied
//   all the required parameters for the request.
//
//   * UnauthorizedOperationException
//   This user does not have permissions to perform this operation.
//
func (c *SMS) GetReplicationJobs(input *GetReplicationJobsInput) (*GetReplicationJobsOutput, error) {
	req, out := c.GetReplicationJobsRequest(input)
	err := req.Send()
	return out, err
}

// GetReplicationJobsPages iterates over the pages of a GetReplicationJobs operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See GetReplicationJobs 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 GetReplicationJobs operation.
//    pageNum := 0
//    err := client.GetReplicationJobsPages(params,
//        func(page *GetReplicationJobsOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *SMS) GetReplicationJobsPages(input *GetReplicationJobsInput, fn func(p *GetReplicationJobsOutput, lastPage bool) (shouldContinue bool)) error {
	page, _ := c.GetReplicationJobsRequest(input)
	page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator"))
	return page.EachPage(func(p interface{}, lastPage bool) bool {
		return fn(p.(*GetReplicationJobsOutput), lastPage)
	})
}

const opGetReplicationRuns = "GetReplicationRuns"

// GetReplicationRunsRequest generates a "aws/request.Request" representing the
// client's request for the GetReplicationRuns operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See GetReplicationRuns for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the GetReplicationRuns method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the GetReplicationRunsRequest method.
//    req, resp := client.GetReplicationRunsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *SMS) GetReplicationRunsRequest(input *GetReplicationRunsInput) (req *request.Request, output *GetReplicationRunsOutput) {
	op := &request.Operation{
		Name:       opGetReplicationRuns,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &GetReplicationRunsInput{}
	}

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

// GetReplicationRuns API operation for AWS Server Migration Service.
//
// The GetReplicationRuns API will return all ReplicationRuns for a given ReplicationJob.
// This API returns a paginated list, that may be consecutively called with
// nextToken to retrieve all ReplicationRuns for a ReplicationJob.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Server Migration Service's
// API operation GetReplicationRuns for usage and error information.
//
// Returned Error Codes:
//   * InvalidParameterException
//   A parameter specified in the request is not valid, is unsupported, or cannot
//   be used.
//
//   * MissingRequiredParameterException
//   The request is missing a required parameter. Ensure that you have supplied
//   all the required parameters for the request.
//
//   * UnauthorizedOperationException
//   This user does not have permissions to perform this operation.
//
func (c *SMS) GetReplicationRuns(input *GetReplicationRunsInput) (*GetReplicationRunsOutput, error) {
	req, out := c.GetReplicationRunsRequest(input)
	err := req.Send()
	return out, err
}

// GetReplicationRunsPages iterates over the pages of a GetReplicationRuns operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See GetReplicationRuns 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 GetReplicationRuns operation.
//    pageNum := 0
//    err := client.GetReplicationRunsPages(params,
//        func(page *GetReplicationRunsOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *SMS) GetReplicationRunsPages(input *GetReplicationRunsInput, fn func(p *GetReplicationRunsOutput, lastPage bool) (shouldContinue bool)) error {
	page, _ := c.GetReplicationRunsRequest(input)
	page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator"))
	return page.EachPage(func(p interface{}, lastPage bool) bool {
		return fn(p.(*GetReplicationRunsOutput), lastPage)
	})
}

const opGetServers = "GetServers"

// GetServersRequest generates a "aws/request.Request" representing the
// client's request for the GetServers operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See GetServers for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the GetServers method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the GetServersRequest method.
//    req, resp := client.GetServersRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *SMS) GetServersRequest(input *GetServersInput) (req *request.Request, output *GetServersOutput) {
	op := &request.Operation{
		Name:       opGetServers,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &GetServersInput{}
	}

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

// GetServers API operation for AWS Server Migration Service.
//
// The GetServers API returns a list of all servers in your server catalog.
// For this call to succeed, you must previously have called ImportServerCatalog.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Server Migration Service's
// API operation GetServers for usage and error information.
//
// Returned Error Codes:
//   * UnauthorizedOperationException
//   This user does not have permissions to perform this operation.
//
func (c *SMS) GetServers(input *GetServersInput) (*GetServersOutput, error) {
	req, out := c.GetServersRequest(input)
	err := req.Send()
	return out, err
}

// GetServersPages iterates over the pages of a GetServers operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See GetServers 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 GetServers operation.
//    pageNum := 0
//    err := client.GetServersPages(params,
//        func(page *GetServersOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *SMS) GetServersPages(input *GetServersInput, fn func(p *GetServersOutput, lastPage bool) (shouldContinue bool)) error {
	page, _ := c.GetServersRequest(input)
	page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator"))
	return page.EachPage(func(p interface{}, lastPage bool) bool {
		return fn(p.(*GetServersOutput), lastPage)
	})
}

const opImportServerCatalog = "ImportServerCatalog"

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

	if input == nil {
		input = &ImportServerCatalogInput{}
	}

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

// ImportServerCatalog API operation for AWS Server Migration Service.
//
// The ImportServerCatalog API is used to gather the complete list of on-premises
// servers on your premises. This API call requires connectors to be installed
// and monitoring all servers you would like imported. This API call returns
// immediately, but may take some time to retrieve all of the servers.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Server Migration Service's
// API operation ImportServerCatalog for usage and error information.
//
// Returned Error Codes:
//   * UnauthorizedOperationException
//   This user does not have permissions to perform this operation.
//
//   * OperationNotPermittedException
//   The specified operation is not allowed. This error can occur for a number
//   of reasons; for example, you might be trying to start a Replication Run before
//   seed Replication Run.
//
//   * InvalidParameterException
//   A parameter specified in the request is not valid, is unsupported, or cannot
//   be used.
//
//   * MissingRequiredParameterException
//   The request is missing a required parameter. Ensure that you have supplied
//   all the required parameters for the request.
//
//   * NoConnectorsAvailableException
//   No connectors are available to handle this request. Please associate connector(s)
//   and verify any existing connectors are healthy and can respond to requests.
//
func (c *SMS) ImportServerCatalog(input *ImportServerCatalogInput) (*ImportServerCatalogOutput, error) {
	req, out := c.ImportServerCatalogRequest(input)
	err := req.Send()
	return out, err
}

const opStartOnDemandReplicationRun = "StartOnDemandReplicationRun"

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

	if input == nil {
		input = &StartOnDemandReplicationRunInput{}
	}

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

// StartOnDemandReplicationRun API operation for AWS Server Migration Service.
//
// The StartOnDemandReplicationRun API is used to start a ReplicationRun on
// demand (in addition to those that are scheduled based on your frequency).
// This ReplicationRun will start immediately. StartOnDemandReplicationRun is
// subject to limits on how many on demand ReplicationRuns you may call per
// 24-hour period.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Server Migration Service's
// API operation StartOnDemandReplicationRun for usage and error information.
//
// Returned Error Codes:
//   * InvalidParameterException
//   A parameter specified in the request is not valid, is unsupported, or cannot
//   be used.
//
//   * MissingRequiredParameterException
//   The request is missing a required parameter. Ensure that you have supplied
//   all the required parameters for the request.
//
//   * UnauthorizedOperationException
//   This user does not have permissions to perform this operation.
//
//   * OperationNotPermittedException
//   The specified operation is not allowed. This error can occur for a number
//   of reasons; for example, you might be trying to start a Replication Run before
//   seed Replication Run.
//
//   * ReplicationRunLimitExceededException
//   This user has exceeded the maximum allowed Replication Run limit.
//
func (c *SMS) StartOnDemandReplicationRun(input *StartOnDemandReplicationRunInput) (*StartOnDemandReplicationRunOutput, error) {
	req, out := c.StartOnDemandReplicationRunRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateReplicationJob = "UpdateReplicationJob"

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

	if input == nil {
		input = &UpdateReplicationJobInput{}
	}

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

// UpdateReplicationJob API operation for AWS Server Migration Service.
//
// The UpdateReplicationJob API is used to change the settings of your existing
// ReplicationJob created using CreateReplicationJob. Calling this API will
// affect the next scheduled ReplicationRun.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Server Migration Service's
// API operation UpdateReplicationJob for usage and error information.
//
// Returned Error Codes:
//   * InvalidParameterException
//   A parameter specified in the request is not valid, is unsupported, or cannot
//   be used.
//
//   * MissingRequiredParameterException
//   The request is missing a required parameter. Ensure that you have supplied
//   all the required parameters for the request.
//
//   * OperationNotPermittedException
//   The specified operation is not allowed. This error can occur for a number
//   of reasons; for example, you might be trying to start a Replication Run before
//   seed Replication Run.
//
//   * UnauthorizedOperationException
//   This user does not have permissions to perform this operation.
//
//   * ServerCannotBeReplicatedException
//   The provided server cannot be replicated.
//
//   * ReplicationJobNotFoundException
//   The specified Replication Job cannot be found.
//
//   * InternalError
//   An internal error has occured.
//
func (c *SMS) UpdateReplicationJob(input *UpdateReplicationJobInput) (*UpdateReplicationJobOutput, error) {
	req, out := c.UpdateReplicationJobRequest(input)
	err := req.Send()
	return out, err
}

// Object representing a Connector
type Connector struct {
	_ struct{} `type:"structure"`

	// Timestamp of an operation
	AssociatedOn *time.Time `locationName:"associatedOn" type:"timestamp" timestampFormat:"unix"`

	// List of Connector Capabilities
	CapabilityList []*string `locationName:"capabilityList" locationNameList:"item" type:"list"`

	// Unique Identifier for Connector
	ConnectorId *string `locationName:"connectorId" type:"string"`

	// Internet Protocol (IP) Address
	IpAddress *string `locationName:"ipAddress" type:"string"`

	// Hardware (MAC) address
	MacAddress *string `locationName:"macAddress" type:"string"`

	// Status of on-premise Connector
	Status *string `locationName:"status" type:"string" enum:"ConnectorStatus"`

	// Connector version string
	Version *string `locationName:"version" type:"string"`

	// Unique Identifier for VM Manager
	VmManagerId *string `locationName:"vmManagerId" type:"string"`

	// VM Manager Name
	VmManagerName *string `locationName:"vmManagerName" type:"string"`

	// VM Management Product
	VmManagerType *string `locationName:"vmManagerType" type:"string" enum:"VmManagerType"`
}

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

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

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

	// The description for a Replication Job/Run.
	Description *string `locationName:"description" type:"string"`

	// Interval between Replication Runs. This value is specified in hours, and
	// represents the time between consecutive Replication Runs.
	//
	// Frequency is a required field
	Frequency *int64 `locationName:"frequency" type:"integer" required:"true"`

	// The license type to be used for the Amazon Machine Image (AMI) created after
	// a successful ReplicationRun.
	LicenseType *string `locationName:"licenseType" type:"string" enum:"LicenseType"`

	// Name of service role in customer's account to be used by SMS service.
	RoleName *string `locationName:"roleName" type:"string"`

	// Timestamp of an operation
	//
	// SeedReplicationTime is a required field
	SeedReplicationTime *time.Time `locationName:"seedReplicationTime" type:"timestamp" timestampFormat:"unix" required:"true"`

	// Unique Identifier for a server
	//
	// ServerId is a required field
	ServerId *string `locationName:"serverId" type:"string" required:"true"`
}

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

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

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

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

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

	// The unique identifier for a Replication Job.
	ReplicationJobId *string `locationName:"replicationJobId" type:"string"`
}

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

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

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

	// The unique identifier for a Replication Job.
	//
	// ReplicationJobId is a required field
	ReplicationJobId *string `locationName:"replicationJobId" type:"string" required:"true"`
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	// Unique Identifier for Connector
	//
	// ConnectorId is a required field
	ConnectorId *string `locationName:"connectorId" type:"string" required:"true"`
}

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

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

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

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

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

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

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

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

	// The maximum number of results to return in one API call. If left empty, this
	// will default to 50.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// Pagination token to pass as input to API call
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

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

	// List of connectors
	ConnectorList []*Connector `locationName:"connectorList" locationNameList:"item" type:"list"`

	// Pagination token to pass as input to API call
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

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

	// The maximum number of results to return in one API call. If left empty, this
	// will default to 50.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// Pagination token to pass as input to API call
	NextToken *string `locationName:"nextToken" type:"string"`

	// The unique identifier for a Replication Job.
	ReplicationJobId *string `locationName:"replicationJobId" type:"string"`
}

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

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

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

	// Pagination token to pass as input to API call
	NextToken *string `locationName:"nextToken" type:"string"`

	// List of Replication Jobs
	ReplicationJobList []*ReplicationJob `locationName:"replicationJobList" locationNameList:"item" type:"list"`
}

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

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

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

	// The maximum number of results to return in one API call. If left empty, this
	// will default to 50.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// Pagination token to pass as input to API call
	NextToken *string `locationName:"nextToken" type:"string"`

	// The unique identifier for a Replication Job.
	//
	// ReplicationJobId is a required field
	ReplicationJobId *string `locationName:"replicationJobId" type:"string" required:"true"`
}

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

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

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

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

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

	// Pagination token to pass as input to API call
	NextToken *string `locationName:"nextToken" type:"string"`

	// Object representing a Replication Job
	ReplicationJob *ReplicationJob `locationName:"replicationJob" type:"structure"`

	// List of Replication Runs
	ReplicationRunList []*ReplicationRun `locationName:"replicationRunList" locationNameList:"item" type:"list"`
}

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

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

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

	// The maximum number of results to return in one API call. If left empty, this
	// will default to 50.
	MaxResults *int64 `locationName:"maxResults" type:"integer"`

	// Pagination token to pass as input to API call
	NextToken *string `locationName:"nextToken" type:"string"`
}

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

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

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

	// Timestamp of an operation
	LastModifiedOn *time.Time `locationName:"lastModifiedOn" type:"timestamp" timestampFormat:"unix"`

	// Pagination token to pass as input to API call
	NextToken *string `locationName:"nextToken" type:"string"`

	// Status of Server catalog
	ServerCatalogStatus *string `locationName:"serverCatalogStatus" type:"string" enum:"ServerCatalogStatus"`

	// List of servers from catalog
	ServerList []*Server `locationName:"serverList" locationNameList:"item" type:"list"`
}

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

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

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

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

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

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

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

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

// Object representing a Replication Job
type ReplicationJob struct {
	_ struct{} `type:"structure"`

	// The description for a Replication Job/Run.
	Description *string `locationName:"description" type:"string"`

	// Interval between Replication Runs. This value is specified in hours, and
	// represents the time between consecutive Replication Runs.
	Frequency *int64 `locationName:"frequency" type:"integer"`

	// The AMI id for the image resulting from a Replication Run.
	LatestAmiId *string `locationName:"latestAmiId" type:"string"`

	// The license type to be used for the Amazon Machine Image (AMI) created after
	// a successful ReplicationRun.
	LicenseType *string `locationName:"licenseType" type:"string" enum:"LicenseType"`

	// Timestamp of an operation
	NextReplicationRunStartTime *time.Time `locationName:"nextReplicationRunStartTime" type:"timestamp" timestampFormat:"unix"`

	// The unique identifier for a Replication Job.
	ReplicationJobId *string `locationName:"replicationJobId" type:"string"`

	// List of Replication Runs
	ReplicationRunList []*ReplicationRun `locationName:"replicationRunList" locationNameList:"item" type:"list"`

	// Name of service role in customer's account to be used by SMS service.
	RoleName *string `locationName:"roleName" type:"string"`

	// Timestamp of an operation
	SeedReplicationTime *time.Time `locationName:"seedReplicationTime" type:"timestamp" timestampFormat:"unix"`

	// Unique Identifier for a server
	ServerId *string `locationName:"serverId" type:"string"`

	// Type of server.
	ServerType *string `locationName:"serverType" type:"string" enum:"ServerType"`

	// Current state of Replication Job
	State *string `locationName:"state" type:"string" enum:"ReplicationJobState"`

	// String describing current status of Replication Job
	StatusMessage *string `locationName:"statusMessage" type:"string"`

	// Object representing a VM server
	VmServer *VmServer `locationName:"vmServer" type:"structure"`
}

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

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

// Object representing a Replication Run
type ReplicationRun struct {
	_ struct{} `type:"structure"`

	// The AMI id for the image resulting from a Replication Run.
	AmiId *string `locationName:"amiId" type:"string"`

	// Timestamp of an operation
	CompletedTime *time.Time `locationName:"completedTime" type:"timestamp" timestampFormat:"unix"`

	// The description for a Replication Job/Run.
	Description *string `locationName:"description" type:"string"`

	// The unique identifier for a Replication Run.
	ReplicationRunId *string `locationName:"replicationRunId" type:"string"`

	// Timestamp of an operation
	ScheduledStartTime *time.Time `locationName:"scheduledStartTime" type:"timestamp" timestampFormat:"unix"`

	// Current state of Replication Run
	State *string `locationName:"state" type:"string" enum:"ReplicationRunState"`

	// String describing current status of Replication Run
	StatusMessage *string `locationName:"statusMessage" type:"string"`

	// Type of Replication Run
	Type *string `locationName:"type" type:"string" enum:"ReplicationRunType"`
}

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

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

// Object representing a server
type Server struct {
	_ struct{} `type:"structure"`

	// The unique identifier for a Replication Job.
	ReplicationJobId *string `locationName:"replicationJobId" type:"string"`

	// An indicator of the Replication Job being deleted or failed.
	ReplicationJobTerminated *bool `locationName:"replicationJobTerminated" type:"boolean"`

	// Unique Identifier for a server
	ServerId *string `locationName:"serverId" type:"string"`

	// Type of server.
	ServerType *string `locationName:"serverType" type:"string" enum:"ServerType"`

	// Object representing a VM server
	VmServer *VmServer `locationName:"vmServer" type:"structure"`
}

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

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

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

	// The description for a Replication Job/Run.
	Description *string `locationName:"description" type:"string"`

	// The unique identifier for a Replication Job.
	//
	// ReplicationJobId is a required field
	ReplicationJobId *string `locationName:"replicationJobId" type:"string" required:"true"`
}

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

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

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

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

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

	// The unique identifier for a Replication Run.
	ReplicationRunId *string `locationName:"replicationRunId" type:"string"`
}

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

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

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

	// The description for a Replication Job/Run.
	Description *string `locationName:"description" type:"string"`

	// Interval between Replication Runs. This value is specified in hours, and
	// represents the time between consecutive Replication Runs.
	Frequency *int64 `locationName:"frequency" type:"integer"`

	// The license type to be used for the Amazon Machine Image (AMI) created after
	// a successful ReplicationRun.
	LicenseType *string `locationName:"licenseType" type:"string" enum:"LicenseType"`

	// Timestamp of an operation
	NextReplicationRunStartTime *time.Time `locationName:"nextReplicationRunStartTime" type:"timestamp" timestampFormat:"unix"`

	// The unique identifier for a Replication Job.
	//
	// ReplicationJobId is a required field
	ReplicationJobId *string `locationName:"replicationJobId" type:"string" required:"true"`

	// Name of service role in customer's account to be used by SMS service.
	RoleName *string `locationName:"roleName" type:"string"`
}

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

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

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

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

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

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

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

// Object representing a VM server
type VmServer struct {
	_ struct{} `type:"structure"`

	// VM Manager Name
	VmManagerName *string `locationName:"vmManagerName" type:"string"`

	// VM Management Product
	VmManagerType *string `locationName:"vmManagerType" type:"string" enum:"VmManagerType"`

	// Name of Virtual Machine
	VmName *string `locationName:"vmName" type:"string"`

	// Path to VM
	VmPath *string `locationName:"vmPath" type:"string"`

	// Object representing a server's location
	VmServerAddress *VmServerAddress `locationName:"vmServerAddress" type:"structure"`
}

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

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

// Object representing a server's location
type VmServerAddress struct {
	_ struct{} `type:"structure"`

	// Unique Identifier for a VM
	VmId *string `locationName:"vmId" type:"string"`

	// Unique Identifier for VM Manager
	VmManagerId *string `locationName:"vmManagerId" type:"string"`
}

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

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

// Capabilities for a Connector
const (
	// ConnectorCapabilityVsphere is a ConnectorCapability enum value
	ConnectorCapabilityVsphere = "VSPHERE"
)

// Status of on-premise Connector
const (
	// ConnectorStatusHealthy is a ConnectorStatus enum value
	ConnectorStatusHealthy = "HEALTHY"

	// ConnectorStatusUnhealthy is a ConnectorStatus enum value
	ConnectorStatusUnhealthy = "UNHEALTHY"
)

// The license type to be used for the Amazon Machine Image (AMI) created after
// a successful ReplicationRun.
const (
	// LicenseTypeAws is a LicenseType enum value
	LicenseTypeAws = "AWS"

	// LicenseTypeByol is a LicenseType enum value
	LicenseTypeByol = "BYOL"
)

// Current state of Replication Job
const (
	// ReplicationJobStatePending is a ReplicationJobState enum value
	ReplicationJobStatePending = "PENDING"

	// ReplicationJobStateActive is a ReplicationJobState enum value
	ReplicationJobStateActive = "ACTIVE"

	// ReplicationJobStateFailed is a ReplicationJobState enum value
	ReplicationJobStateFailed = "FAILED"

	// ReplicationJobStateDeleting is a ReplicationJobState enum value
	ReplicationJobStateDeleting = "DELETING"

	// ReplicationJobStateDeleted is a ReplicationJobState enum value
	ReplicationJobStateDeleted = "DELETED"
)

// Current state of Replication Run
const (
	// ReplicationRunStatePending is a ReplicationRunState enum value
	ReplicationRunStatePending = "PENDING"

	// ReplicationRunStateMissed is a ReplicationRunState enum value
	ReplicationRunStateMissed = "MISSED"

	// ReplicationRunStateActive is a ReplicationRunState enum value
	ReplicationRunStateActive = "ACTIVE"

	// ReplicationRunStateFailed is a ReplicationRunState enum value
	ReplicationRunStateFailed = "FAILED"

	// ReplicationRunStateCompleted is a ReplicationRunState enum value
	ReplicationRunStateCompleted = "COMPLETED"

	// ReplicationRunStateDeleting is a ReplicationRunState enum value
	ReplicationRunStateDeleting = "DELETING"

	// ReplicationRunStateDeleted is a ReplicationRunState enum value
	ReplicationRunStateDeleted = "DELETED"
)

// Type of Replication Run
const (
	// ReplicationRunTypeOnDemand is a ReplicationRunType enum value
	ReplicationRunTypeOnDemand = "ON_DEMAND"

	// ReplicationRunTypeAutomatic is a ReplicationRunType enum value
	ReplicationRunTypeAutomatic = "AUTOMATIC"
)

// Status of Server catalog
const (
	// ServerCatalogStatusNotImported is a ServerCatalogStatus enum value
	ServerCatalogStatusNotImported = "NOT_IMPORTED"

	// ServerCatalogStatusImporting is a ServerCatalogStatus enum value
	ServerCatalogStatusImporting = "IMPORTING"

	// ServerCatalogStatusAvailable is a ServerCatalogStatus enum value
	ServerCatalogStatusAvailable = "AVAILABLE"

	// ServerCatalogStatusDeleted is a ServerCatalogStatus enum value
	ServerCatalogStatusDeleted = "DELETED"

	// ServerCatalogStatusExpired is a ServerCatalogStatus enum value
	ServerCatalogStatusExpired = "EXPIRED"
)

// Type of server.
const (
	// ServerTypeVirtualMachine is a ServerType enum value
	ServerTypeVirtualMachine = "VIRTUAL_MACHINE"
)

// VM Management Product
const (
	// VmManagerTypeVsphere is a VmManagerType enum value
	VmManagerTypeVsphere = "VSPHERE"
)
