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

package backupgateway

import (
	"fmt"
	"time"

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

const opAssociateGatewayToServer = "AssociateGatewayToServer"

// AssociateGatewayToServerRequest generates a "aws/request.Request" representing the
// client's request for the AssociateGatewayToServer 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 AssociateGatewayToServer for more information on using the AssociateGatewayToServer
// 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 AssociateGatewayToServerRequest method.
//    req, resp := client.AssociateGatewayToServerRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/AssociateGatewayToServer
func (c *BackupGateway) AssociateGatewayToServerRequest(input *AssociateGatewayToServerInput) (req *request.Request, output *AssociateGatewayToServerOutput) {
	op := &request.Operation{
		Name:       opAssociateGatewayToServer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AssociateGatewayToServerInput{}
	}

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

// AssociateGatewayToServer API operation for AWS Backup Gateway.
//
// Associates a backup gateway with your server. After you complete the association
// process, you can back up and restore your VMs through the gateway.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation AssociateGatewayToServer for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * ConflictException
//   The operation cannot proceed because it is not supported.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/AssociateGatewayToServer
func (c *BackupGateway) AssociateGatewayToServer(input *AssociateGatewayToServerInput) (*AssociateGatewayToServerOutput, error) {
	req, out := c.AssociateGatewayToServerRequest(input)
	return out, req.Send()
}

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

const opCreateGateway = "CreateGateway"

// CreateGatewayRequest generates a "aws/request.Request" representing the
// client's request for the CreateGateway 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 CreateGateway for more information on using the CreateGateway
// 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 CreateGatewayRequest method.
//    req, resp := client.CreateGatewayRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/CreateGateway
func (c *BackupGateway) CreateGatewayRequest(input *CreateGatewayInput) (req *request.Request, output *CreateGatewayOutput) {
	op := &request.Operation{
		Name:       opCreateGateway,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateGatewayInput{}
	}

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

// CreateGateway API operation for AWS Backup Gateway.
//
// Creates a backup gateway. After you create a gateway, you can associate it
// with a server using the AssociateGatewayToServer operation.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation CreateGateway for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/CreateGateway
func (c *BackupGateway) CreateGateway(input *CreateGatewayInput) (*CreateGatewayOutput, error) {
	req, out := c.CreateGatewayRequest(input)
	return out, req.Send()
}

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

const opDeleteGateway = "DeleteGateway"

// DeleteGatewayRequest generates a "aws/request.Request" representing the
// client's request for the DeleteGateway 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 DeleteGateway for more information on using the DeleteGateway
// 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 DeleteGatewayRequest method.
//    req, resp := client.DeleteGatewayRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/DeleteGateway
func (c *BackupGateway) DeleteGatewayRequest(input *DeleteGatewayInput) (req *request.Request, output *DeleteGatewayOutput) {
	op := &request.Operation{
		Name:       opDeleteGateway,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteGatewayInput{}
	}

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

// DeleteGateway API operation for AWS Backup Gateway.
//
// Deletes a backup gateway.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation DeleteGateway for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
//   * ResourceNotFoundException
//   A resource that is required for the action wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/DeleteGateway
func (c *BackupGateway) DeleteGateway(input *DeleteGatewayInput) (*DeleteGatewayOutput, error) {
	req, out := c.DeleteGatewayRequest(input)
	return out, req.Send()
}

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

const opDeleteHypervisor = "DeleteHypervisor"

// DeleteHypervisorRequest generates a "aws/request.Request" representing the
// client's request for the DeleteHypervisor 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 DeleteHypervisor for more information on using the DeleteHypervisor
// 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 DeleteHypervisorRequest method.
//    req, resp := client.DeleteHypervisorRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/DeleteHypervisor
func (c *BackupGateway) DeleteHypervisorRequest(input *DeleteHypervisorInput) (req *request.Request, output *DeleteHypervisorOutput) {
	op := &request.Operation{
		Name:       opDeleteHypervisor,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteHypervisorInput{}
	}

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

// DeleteHypervisor API operation for AWS Backup Gateway.
//
// Deletes a hypervisor.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation DeleteHypervisor for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
//   * AccessDeniedException
//   The operation cannot proceed because you have insufficient permissions.
//
//   * ResourceNotFoundException
//   A resource that is required for the action wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/DeleteHypervisor
func (c *BackupGateway) DeleteHypervisor(input *DeleteHypervisorInput) (*DeleteHypervisorOutput, error) {
	req, out := c.DeleteHypervisorRequest(input)
	return out, req.Send()
}

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

const opDisassociateGatewayFromServer = "DisassociateGatewayFromServer"

// DisassociateGatewayFromServerRequest generates a "aws/request.Request" representing the
// client's request for the DisassociateGatewayFromServer 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 DisassociateGatewayFromServer for more information on using the DisassociateGatewayFromServer
// 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 DisassociateGatewayFromServerRequest method.
//    req, resp := client.DisassociateGatewayFromServerRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/DisassociateGatewayFromServer
func (c *BackupGateway) DisassociateGatewayFromServerRequest(input *DisassociateGatewayFromServerInput) (req *request.Request, output *DisassociateGatewayFromServerOutput) {
	op := &request.Operation{
		Name:       opDisassociateGatewayFromServer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DisassociateGatewayFromServerInput{}
	}

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

// DisassociateGatewayFromServer API operation for AWS Backup Gateway.
//
// Disassociates a backup gateway from the specified server. After the disassociation
// process finishes, the gateway can no longer access the virtual machines on
// the 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 AWS Backup Gateway's
// API operation DisassociateGatewayFromServer for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * ConflictException
//   The operation cannot proceed because it is not supported.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
//   * ResourceNotFoundException
//   A resource that is required for the action wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/DisassociateGatewayFromServer
func (c *BackupGateway) DisassociateGatewayFromServer(input *DisassociateGatewayFromServerInput) (*DisassociateGatewayFromServerOutput, error) {
	req, out := c.DisassociateGatewayFromServerRequest(input)
	return out, req.Send()
}

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

const opImportHypervisorConfiguration = "ImportHypervisorConfiguration"

// ImportHypervisorConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the ImportHypervisorConfiguration 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 ImportHypervisorConfiguration for more information on using the ImportHypervisorConfiguration
// 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 ImportHypervisorConfigurationRequest method.
//    req, resp := client.ImportHypervisorConfigurationRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/ImportHypervisorConfiguration
func (c *BackupGateway) ImportHypervisorConfigurationRequest(input *ImportHypervisorConfigurationInput) (req *request.Request, output *ImportHypervisorConfigurationOutput) {
	op := &request.Operation{
		Name:       opImportHypervisorConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ImportHypervisorConfigurationInput{}
	}

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

// ImportHypervisorConfiguration API operation for AWS Backup Gateway.
//
// Connect to a hypervisor by importing its configuration.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation ImportHypervisorConfiguration for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
//   * AccessDeniedException
//   The operation cannot proceed because you have insufficient permissions.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/ImportHypervisorConfiguration
func (c *BackupGateway) ImportHypervisorConfiguration(input *ImportHypervisorConfigurationInput) (*ImportHypervisorConfigurationOutput, error) {
	req, out := c.ImportHypervisorConfigurationRequest(input)
	return out, req.Send()
}

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

const opListGateways = "ListGateways"

// ListGatewaysRequest generates a "aws/request.Request" representing the
// client's request for the ListGateways 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 ListGateways for more information on using the ListGateways
// 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 ListGatewaysRequest method.
//    req, resp := client.ListGatewaysRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/ListGateways
func (c *BackupGateway) ListGatewaysRequest(input *ListGatewaysInput) (req *request.Request, output *ListGatewaysOutput) {
	op := &request.Operation{
		Name:       opListGateways,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListGatewaysInput{}
	}

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

// ListGateways API operation for AWS Backup Gateway.
//
// Lists backup gateways owned by an Amazon Web Services account in an Amazon
// Web Services Region. The returned list is ordered by gateway Amazon Resource
// Name (ARN).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation ListGateways for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/ListGateways
func (c *BackupGateway) ListGateways(input *ListGatewaysInput) (*ListGatewaysOutput, error) {
	req, out := c.ListGatewaysRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListHypervisors = "ListHypervisors"

// ListHypervisorsRequest generates a "aws/request.Request" representing the
// client's request for the ListHypervisors 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 ListHypervisors for more information on using the ListHypervisors
// 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 ListHypervisorsRequest method.
//    req, resp := client.ListHypervisorsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/ListHypervisors
func (c *BackupGateway) ListHypervisorsRequest(input *ListHypervisorsInput) (req *request.Request, output *ListHypervisorsOutput) {
	op := &request.Operation{
		Name:       opListHypervisors,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListHypervisorsInput{}
	}

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

// ListHypervisors API operation for AWS Backup Gateway.
//
// Lists your hypervisors.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation ListHypervisors for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/ListHypervisors
func (c *BackupGateway) ListHypervisors(input *ListHypervisorsInput) (*ListHypervisorsOutput, error) {
	req, out := c.ListHypervisorsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListTagsForResource = "ListTagsForResource"

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

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

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

// ListTagsForResource API operation for AWS Backup Gateway.
//
// Lists the tags applied to the resource identified by its Amazon Resource
// Name (ARN).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
//   * ResourceNotFoundException
//   A resource that is required for the action wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/ListTagsForResource
func (c *BackupGateway) 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 *BackupGateway) 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 opListVirtualMachines = "ListVirtualMachines"

// ListVirtualMachinesRequest generates a "aws/request.Request" representing the
// client's request for the ListVirtualMachines 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 ListVirtualMachines for more information on using the ListVirtualMachines
// 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 ListVirtualMachinesRequest method.
//    req, resp := client.ListVirtualMachinesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/ListVirtualMachines
func (c *BackupGateway) ListVirtualMachinesRequest(input *ListVirtualMachinesInput) (req *request.Request, output *ListVirtualMachinesOutput) {
	op := &request.Operation{
		Name:       opListVirtualMachines,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListVirtualMachinesInput{}
	}

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

// ListVirtualMachines API operation for AWS Backup Gateway.
//
// Lists your virtual machines.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation ListVirtualMachines for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/ListVirtualMachines
func (c *BackupGateway) ListVirtualMachines(input *ListVirtualMachinesInput) (*ListVirtualMachinesOutput, error) {
	req, out := c.ListVirtualMachinesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opPutMaintenanceStartTime = "PutMaintenanceStartTime"

// PutMaintenanceStartTimeRequest generates a "aws/request.Request" representing the
// client's request for the PutMaintenanceStartTime 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 PutMaintenanceStartTime for more information on using the PutMaintenanceStartTime
// 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 PutMaintenanceStartTimeRequest method.
//    req, resp := client.PutMaintenanceStartTimeRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/PutMaintenanceStartTime
func (c *BackupGateway) PutMaintenanceStartTimeRequest(input *PutMaintenanceStartTimeInput) (req *request.Request, output *PutMaintenanceStartTimeOutput) {
	op := &request.Operation{
		Name:       opPutMaintenanceStartTime,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutMaintenanceStartTimeInput{}
	}

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

// PutMaintenanceStartTime API operation for AWS Backup Gateway.
//
// Set the maintenance start time for a gateway.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation PutMaintenanceStartTime for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * ConflictException
//   The operation cannot proceed because it is not supported.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
//   * ResourceNotFoundException
//   A resource that is required for the action wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/PutMaintenanceStartTime
func (c *BackupGateway) PutMaintenanceStartTime(input *PutMaintenanceStartTimeInput) (*PutMaintenanceStartTimeOutput, error) {
	req, out := c.PutMaintenanceStartTimeRequest(input)
	return out, req.Send()
}

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

const opTagResource = "TagResource"

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

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

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

// TagResource API operation for AWS Backup Gateway.
//
// Tag the resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
//   * ResourceNotFoundException
//   A resource that is required for the action wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/TagResource
func (c *BackupGateway) 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 *BackupGateway) 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 opTestHypervisorConfiguration = "TestHypervisorConfiguration"

// TestHypervisorConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the TestHypervisorConfiguration 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 TestHypervisorConfiguration for more information on using the TestHypervisorConfiguration
// 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 TestHypervisorConfigurationRequest method.
//    req, resp := client.TestHypervisorConfigurationRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/TestHypervisorConfiguration
func (c *BackupGateway) TestHypervisorConfigurationRequest(input *TestHypervisorConfigurationInput) (req *request.Request, output *TestHypervisorConfigurationOutput) {
	op := &request.Operation{
		Name:       opTestHypervisorConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &TestHypervisorConfigurationInput{}
	}

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

// TestHypervisorConfiguration API operation for AWS Backup Gateway.
//
// Tests your hypervisor configuration to validate that backup gateway can connect
// with the hypervisor and its 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 AWS Backup Gateway's
// API operation TestHypervisorConfiguration for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * ConflictException
//   The operation cannot proceed because it is not supported.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
//   * ResourceNotFoundException
//   A resource that is required for the action wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/TestHypervisorConfiguration
func (c *BackupGateway) TestHypervisorConfiguration(input *TestHypervisorConfigurationInput) (*TestHypervisorConfigurationOutput, error) {
	req, out := c.TestHypervisorConfigurationRequest(input)
	return out, req.Send()
}

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

const opUntagResource = "UntagResource"

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

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

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

// UntagResource API operation for AWS Backup Gateway.
//
// Removes tags from the resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
//   * ResourceNotFoundException
//   A resource that is required for the action wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/UntagResource
func (c *BackupGateway) 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 *BackupGateway) 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 opUpdateGatewayInformation = "UpdateGatewayInformation"

// UpdateGatewayInformationRequest generates a "aws/request.Request" representing the
// client's request for the UpdateGatewayInformation 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 UpdateGatewayInformation for more information on using the UpdateGatewayInformation
// 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 UpdateGatewayInformationRequest method.
//    req, resp := client.UpdateGatewayInformationRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/UpdateGatewayInformation
func (c *BackupGateway) UpdateGatewayInformationRequest(input *UpdateGatewayInformationInput) (req *request.Request, output *UpdateGatewayInformationOutput) {
	op := &request.Operation{
		Name:       opUpdateGatewayInformation,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateGatewayInformationInput{}
	}

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

// UpdateGatewayInformation API operation for AWS Backup Gateway.
//
// Updates a gateway's name. Specify which gateway to update using the Amazon
// Resource Name (ARN) of the gateway in your request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation UpdateGatewayInformation for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * ConflictException
//   The operation cannot proceed because it is not supported.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
//   * ResourceNotFoundException
//   A resource that is required for the action wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/UpdateGatewayInformation
func (c *BackupGateway) UpdateGatewayInformation(input *UpdateGatewayInformationInput) (*UpdateGatewayInformationOutput, error) {
	req, out := c.UpdateGatewayInformationRequest(input)
	return out, req.Send()
}

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

const opUpdateHypervisor = "UpdateHypervisor"

// UpdateHypervisorRequest generates a "aws/request.Request" representing the
// client's request for the UpdateHypervisor 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 UpdateHypervisor for more information on using the UpdateHypervisor
// 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 UpdateHypervisorRequest method.
//    req, resp := client.UpdateHypervisorRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/UpdateHypervisor
func (c *BackupGateway) UpdateHypervisorRequest(input *UpdateHypervisorInput) (req *request.Request, output *UpdateHypervisorOutput) {
	op := &request.Operation{
		Name:       opUpdateHypervisor,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateHypervisorInput{}
	}

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

// UpdateHypervisor API operation for AWS Backup Gateway.
//
// Updates a hypervisor metadata, including its host, username, and password.
// Specify which hypervisor to update using the Amazon Resource Name (ARN) of
// the hypervisor in your request.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Backup Gateway's
// API operation UpdateHypervisor for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The operation did not succeed because a validation error occurred.
//
//   * InternalServerException
//   The operation did not succeed because an internal error occurred. Try again
//   later.
//
//   * AccessDeniedException
//   The operation cannot proceed because you have insufficient permissions.
//
//   * ResourceNotFoundException
//   A resource that is required for the action wasn't found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/backup-gateway-2021-01-01/UpdateHypervisor
func (c *BackupGateway) UpdateHypervisor(input *UpdateHypervisorInput) (*UpdateHypervisorOutput, error) {
	req, out := c.UpdateHypervisorRequest(input)
	return out, req.Send()
}

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

// The operation cannot proceed because you have insufficient permissions.
type AccessDeniedException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// A description of why you have insufficient permissions.
	//
	// ErrorCode is a required field
	ErrorCode *string `type:"string" required:"true"`

	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
}

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

	// The Amazon Resource Name (ARN) of the gateway. Use the ListGateways operation
	// to return a list of gateways for your account and Amazon Web Services Region.
	//
	// GatewayArn is a required field
	GatewayArn *string `min:"50" type:"string" required:"true"`

	// The Amazon Resource Name (ARN) of the server that hosts your virtual machines.
	//
	// ServerArn is a required field
	ServerArn *string `min:"50" 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 AssociateGatewayToServerInput) 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 AssociateGatewayToServerInput) GoString() string {
	return s.String()
}

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

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

// SetGatewayArn sets the GatewayArn field's value.
func (s *AssociateGatewayToServerInput) SetGatewayArn(v string) *AssociateGatewayToServerInput {
	s.GatewayArn = &v
	return s
}

// SetServerArn sets the ServerArn field's value.
func (s *AssociateGatewayToServerInput) SetServerArn(v string) *AssociateGatewayToServerInput {
	s.ServerArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of a gateway.
	GatewayArn *string `min:"50" 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 AssociateGatewayToServerOutput) 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 AssociateGatewayToServerOutput) GoString() string {
	return s.String()
}

// SetGatewayArn sets the GatewayArn field's value.
func (s *AssociateGatewayToServerOutput) SetGatewayArn(v string) *AssociateGatewayToServerOutput {
	s.GatewayArn = &v
	return s
}

// The operation cannot proceed because it is not supported.
type ConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// A description of why the operation is not supported.
	//
	// ErrorCode is a required field
	ErrorCode *string `type:"string" required:"true"`

	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 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 CreateGatewayInput struct {
	_ struct{} `type:"structure"`

	// The activation key of the created gateway.
	//
	// ActivationKey is a required field
	ActivationKey *string `min:"1" type:"string" required:"true"`

	// The display name of the created gateway.
	//
	// GatewayDisplayName is a required field
	GatewayDisplayName *string `min:"1" type:"string" required:"true"`

	// The type of created gateway.
	//
	// GatewayType is a required field
	GatewayType *string `type:"string" required:"true" enum:"GatewayType"`

	// A list of up to 50 tags to assign to the gateway. Each tag is a key-value
	// pair.
	Tags []*Tag `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 CreateGatewayInput) 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 CreateGatewayInput) GoString() string {
	return s.String()
}

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

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

// SetActivationKey sets the ActivationKey field's value.
func (s *CreateGatewayInput) SetActivationKey(v string) *CreateGatewayInput {
	s.ActivationKey = &v
	return s
}

// SetGatewayDisplayName sets the GatewayDisplayName field's value.
func (s *CreateGatewayInput) SetGatewayDisplayName(v string) *CreateGatewayInput {
	s.GatewayDisplayName = &v
	return s
}

// SetGatewayType sets the GatewayType field's value.
func (s *CreateGatewayInput) SetGatewayType(v string) *CreateGatewayInput {
	s.GatewayType = &v
	return s
}

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

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

	// The Amazon Resource Name (ARN) of the gateway you create.
	GatewayArn *string `min:"50" 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 CreateGatewayOutput) 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 CreateGatewayOutput) GoString() string {
	return s.String()
}

// SetGatewayArn sets the GatewayArn field's value.
func (s *CreateGatewayOutput) SetGatewayArn(v string) *CreateGatewayOutput {
	s.GatewayArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the gateway to delete.
	//
	// GatewayArn is a required field
	GatewayArn *string `min:"50" 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 DeleteGatewayInput) 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 DeleteGatewayInput) GoString() string {
	return s.String()
}

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

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

// SetGatewayArn sets the GatewayArn field's value.
func (s *DeleteGatewayInput) SetGatewayArn(v string) *DeleteGatewayInput {
	s.GatewayArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the gateway you deleted.
	GatewayArn *string `min:"50" 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 DeleteGatewayOutput) 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 DeleteGatewayOutput) GoString() string {
	return s.String()
}

// SetGatewayArn sets the GatewayArn field's value.
func (s *DeleteGatewayOutput) SetGatewayArn(v string) *DeleteGatewayOutput {
	s.GatewayArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the hypervisor to delete.
	//
	// HypervisorArn is a required field
	HypervisorArn *string `min:"50" 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 DeleteHypervisorInput) 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 DeleteHypervisorInput) GoString() string {
	return s.String()
}

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

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

// SetHypervisorArn sets the HypervisorArn field's value.
func (s *DeleteHypervisorInput) SetHypervisorArn(v string) *DeleteHypervisorInput {
	s.HypervisorArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the hypervisor you deleted.
	HypervisorArn *string `min:"50" 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 DeleteHypervisorOutput) 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 DeleteHypervisorOutput) GoString() string {
	return s.String()
}

// SetHypervisorArn sets the HypervisorArn field's value.
func (s *DeleteHypervisorOutput) SetHypervisorArn(v string) *DeleteHypervisorOutput {
	s.HypervisorArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the gateway to disassociate.
	//
	// GatewayArn is a required field
	GatewayArn *string `min:"50" 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 DisassociateGatewayFromServerInput) 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 DisassociateGatewayFromServerInput) GoString() string {
	return s.String()
}

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

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

// SetGatewayArn sets the GatewayArn field's value.
func (s *DisassociateGatewayFromServerInput) SetGatewayArn(v string) *DisassociateGatewayFromServerInput {
	s.GatewayArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the gateway you disassociated.
	GatewayArn *string `min:"50" 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 DisassociateGatewayFromServerOutput) 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 DisassociateGatewayFromServerOutput) GoString() string {
	return s.String()
}

// SetGatewayArn sets the GatewayArn field's value.
func (s *DisassociateGatewayFromServerOutput) SetGatewayArn(v string) *DisassociateGatewayFromServerOutput {
	s.GatewayArn = &v
	return s
}

// A gateway is an Backup Gateway appliance that runs on the customer's network
// to provide seamless connectivity to backup storage in the Amazon Web Services
// Cloud.
type Gateway struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the gateway. Use the ListGateways operation
	// to return a list of gateways for your account and Amazon Web Services Region.
	GatewayArn *string `min:"50" type:"string"`

	// The display name of the gateway.
	GatewayDisplayName *string `min:"1" type:"string"`

	// The type of the gateway.
	GatewayType *string `type:"string" enum:"GatewayType"`

	// The hypervisor ID of the gateway.
	HypervisorId *string `min:"1" type:"string"`

	// The last time Backup gateway communicated with the gateway, in Unix format
	// and UTC time.
	LastSeenTime *time.Time `type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Gateway) 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 Gateway) GoString() string {
	return s.String()
}

// SetGatewayArn sets the GatewayArn field's value.
func (s *Gateway) SetGatewayArn(v string) *Gateway {
	s.GatewayArn = &v
	return s
}

// SetGatewayDisplayName sets the GatewayDisplayName field's value.
func (s *Gateway) SetGatewayDisplayName(v string) *Gateway {
	s.GatewayDisplayName = &v
	return s
}

// SetGatewayType sets the GatewayType field's value.
func (s *Gateway) SetGatewayType(v string) *Gateway {
	s.GatewayType = &v
	return s
}

// SetHypervisorId sets the HypervisorId field's value.
func (s *Gateway) SetHypervisorId(v string) *Gateway {
	s.HypervisorId = &v
	return s
}

// SetLastSeenTime sets the LastSeenTime field's value.
func (s *Gateway) SetLastSeenTime(v time.Time) *Gateway {
	s.LastSeenTime = &v
	return s
}

// Represents the hypervisor's permissions to which the gateway will connect.
//
// A hypervisor is hardware, software, or firmware that creates and manages
// virtual machines, and allocates resources to them.
type Hypervisor struct {
	_ struct{} `type:"structure"`

	// The server host of the hypervisor. This can be either an IP address or a
	// fully-qualified domain name (FQDN).
	Host *string `min:"3" type:"string"`

	// The Amazon Resource Name (ARN) of the hypervisor.
	HypervisorArn *string `min:"50" type:"string"`

	// The Amazon Resource Name (ARN) of the Key Management Service used to encrypt
	// the hypervisor.
	KmsKeyArn *string `min:"50" type:"string"`

	// The name of the hypervisor.
	Name *string `min:"1" type:"string"`

	// The state of the hypervisor.
	State *string `type:"string" enum:"HypervisorState"`
}

// 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 Hypervisor) 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 Hypervisor) GoString() string {
	return s.String()
}

// SetHost sets the Host field's value.
func (s *Hypervisor) SetHost(v string) *Hypervisor {
	s.Host = &v
	return s
}

// SetHypervisorArn sets the HypervisorArn field's value.
func (s *Hypervisor) SetHypervisorArn(v string) *Hypervisor {
	s.HypervisorArn = &v
	return s
}

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

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

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

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

	// The server host of the hypervisor. This can be either an IP address or a
	// fully-qualified domain name (FQDN).
	//
	// Host is a required field
	Host *string `min:"3" type:"string" required:"true"`

	// The Key Management Service for the hypervisor.
	KmsKeyArn *string `min:"50" type:"string"`

	// The name of the hypervisor.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// The password for the hypervisor.
	//
	// Password is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ImportHypervisorConfigurationInput's
	// String and GoString methods.
	Password *string `min:"1" type:"string" sensitive:"true"`

	// The tags of the hypervisor configuration to import.
	Tags []*Tag `type:"list"`

	// The username for the hypervisor.
	//
	// Username is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ImportHypervisorConfigurationInput's
	// String and GoString methods.
	Username *string `min:"1" type:"string" 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 ImportHypervisorConfigurationInput) 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 ImportHypervisorConfigurationInput) GoString() string {
	return s.String()
}

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

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

// SetHost sets the Host field's value.
func (s *ImportHypervisorConfigurationInput) SetHost(v string) *ImportHypervisorConfigurationInput {
	s.Host = &v
	return s
}

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

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

// SetPassword sets the Password field's value.
func (s *ImportHypervisorConfigurationInput) SetPassword(v string) *ImportHypervisorConfigurationInput {
	s.Password = &v
	return s
}

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

// SetUsername sets the Username field's value.
func (s *ImportHypervisorConfigurationInput) SetUsername(v string) *ImportHypervisorConfigurationInput {
	s.Username = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the hypervisor you disassociated.
	HypervisorArn *string `min:"50" 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 ImportHypervisorConfigurationOutput) 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 ImportHypervisorConfigurationOutput) GoString() string {
	return s.String()
}

// SetHypervisorArn sets the HypervisorArn field's value.
func (s *ImportHypervisorConfigurationOutput) SetHypervisorArn(v string) *ImportHypervisorConfigurationOutput {
	s.HypervisorArn = &v
	return s
}

// The operation did not succeed because an internal error occurred. Try again
// later.
type InternalServerException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// A description of which internal error occured.
	ErrorCode *string `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 InternalServerException) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

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

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

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

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

	// The maximum number of gateways to list.
	MaxResults *int64 `min:"1" type:"integer"`

	// The next item following a partial list of returned resources. For example,
	// if a request is made to return MaxResults number of resources, NextToken
	// allows you to return more items in your list starting at the location pointed
	// to by the next token.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListGatewaysInput) 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 ListGatewaysInput) GoString() string {
	return s.String()
}

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

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

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

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

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

	// A list of your gateways.
	Gateways []*Gateway `type:"list"`

	// The next item following a partial list of returned resources. For example,
	// if a request is made to return maxResults number of resources, NextToken
	// allows you to return more items in your list starting at the location pointed
	// to by the next token.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListGatewaysOutput) 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 ListGatewaysOutput) GoString() string {
	return s.String()
}

// SetGateways sets the Gateways field's value.
func (s *ListGatewaysOutput) SetGateways(v []*Gateway) *ListGatewaysOutput {
	s.Gateways = v
	return s
}

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

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

	// The maximum number of hypervisors to list.
	MaxResults *int64 `min:"1" type:"integer"`

	// The next item following a partial list of returned resources. For example,
	// if a request is made to return maxResults number of resources, NextToken
	// allows you to return more items in your list starting at the location pointed
	// to by the next token.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListHypervisorsInput) 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 ListHypervisorsInput) GoString() string {
	return s.String()
}

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

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

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

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

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

	// A list of your Hypervisor objects, ordered by their Amazon Resource Names
	// (ARNs).
	Hypervisors []*Hypervisor `type:"list"`

	// The next item following a partial list of returned resources. For example,
	// if a request is made to return maxResults number of resources, NextToken
	// allows you to return more items in your list starting at the location pointed
	// to by the next token.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListHypervisorsOutput) 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 ListHypervisorsOutput) GoString() string {
	return s.String()
}

// SetHypervisors sets the Hypervisors field's value.
func (s *ListHypervisorsOutput) SetHypervisors(v []*Hypervisor) *ListHypervisorsOutput {
	s.Hypervisors = v
	return s
}

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

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

	// The Amazon Resource Name (ARN) of the resource's tags to list.
	//
	// ResourceArn is a required field
	ResourceArn *string `min:"50" 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) < 50 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 50))
	}

	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 Amazon Resource Name (ARN) of the resource's tags that you listed.
	ResourceArn *string `min:"50" type:"string"`

	// A list of the resource's tags.
	Tags []*Tag `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 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()
}

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

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

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

	// The maximum number of virtual machines to list.
	MaxResults *int64 `min:"1" type:"integer"`

	// The next item following a partial list of returned resources. For example,
	// if a request is made to return maxResults number of resources, NextToken
	// allows you to return more items in your list starting at the location pointed
	// to by the next token.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ListVirtualMachinesInput) 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 ListVirtualMachinesInput) GoString() string {
	return s.String()
}

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

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

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

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

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

	// The next item following a partial list of returned resources. For example,
	// if a request is made to return maxResults number of resources, NextToken
	// allows you to return more items in your list starting at the location pointed
	// to by the next token.
	NextToken *string `min:"1" type:"string"`

	// A list of your VirtualMachine objects, ordered by their Amazon Resource Names
	// (ARNs).
	VirtualMachines []*VirtualMachine `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 ListVirtualMachinesOutput) 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 ListVirtualMachinesOutput) GoString() string {
	return s.String()
}

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

// SetVirtualMachines sets the VirtualMachines field's value.
func (s *ListVirtualMachinesOutput) SetVirtualMachines(v []*VirtualMachine) *ListVirtualMachinesOutput {
	s.VirtualMachines = v
	return s
}

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

	// The day of the month start maintenance on a gateway.
	//
	// Valid values range from Sunday to Saturday.
	DayOfMonth *int64 `min:"1" type:"integer"`

	// The day of the week to start maintenance on a gateway.
	DayOfWeek *int64 `type:"integer"`

	// The Amazon Resource Name (ARN) for the gateway, used to specify its maintenance
	// start time.
	//
	// GatewayArn is a required field
	GatewayArn *string `min:"50" type:"string" required:"true"`

	// The hour of the day to start maintenance on a gateway.
	//
	// HourOfDay is a required field
	HourOfDay *int64 `type:"integer" required:"true"`

	// The minute of the hour to start maintenance on a gateway.
	//
	// MinuteOfHour is a required field
	MinuteOfHour *int64 `type:"integer" 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 PutMaintenanceStartTimeInput) 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 PutMaintenanceStartTimeInput) GoString() string {
	return s.String()
}

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

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

// SetDayOfMonth sets the DayOfMonth field's value.
func (s *PutMaintenanceStartTimeInput) SetDayOfMonth(v int64) *PutMaintenanceStartTimeInput {
	s.DayOfMonth = &v
	return s
}

// SetDayOfWeek sets the DayOfWeek field's value.
func (s *PutMaintenanceStartTimeInput) SetDayOfWeek(v int64) *PutMaintenanceStartTimeInput {
	s.DayOfWeek = &v
	return s
}

// SetGatewayArn sets the GatewayArn field's value.
func (s *PutMaintenanceStartTimeInput) SetGatewayArn(v string) *PutMaintenanceStartTimeInput {
	s.GatewayArn = &v
	return s
}

// SetHourOfDay sets the HourOfDay field's value.
func (s *PutMaintenanceStartTimeInput) SetHourOfDay(v int64) *PutMaintenanceStartTimeInput {
	s.HourOfDay = &v
	return s
}

// SetMinuteOfHour sets the MinuteOfHour field's value.
func (s *PutMaintenanceStartTimeInput) SetMinuteOfHour(v int64) *PutMaintenanceStartTimeInput {
	s.MinuteOfHour = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of a gateway for which you set the maintenance
	// start time.
	GatewayArn *string `min:"50" 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 PutMaintenanceStartTimeOutput) 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 PutMaintenanceStartTimeOutput) GoString() string {
	return s.String()
}

// SetGatewayArn sets the GatewayArn field's value.
func (s *PutMaintenanceStartTimeOutput) SetGatewayArn(v string) *PutMaintenanceStartTimeOutput {
	s.GatewayArn = &v
	return s
}

// A resource that is required for the action wasn't found.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// A description of which resource wasn't found.
	ErrorCode *string `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 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
}

// A key-value pair you can use to manage, filter, and search for your resources.
// Allowed characters include UTF-8 letters, numbers, spaces, and the following
// characters: + - = . _ : /.
type Tag struct {
	_ struct{} `type:"structure"`

	// The key part of a tag's key-value pair. The key can't start with aws:.
	//
	// Key is a required field
	Key *string `min:"1" type:"string" required:"true"`

	// The key part of a value's key-value pair.
	//
	// Value is a required field
	Value *string `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 Tag) 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 Tag) GoString() string {
	return s.String()
}

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

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

// SetKey sets the Key field's value.
func (s *Tag) SetKey(v string) *Tag {
	s.Key = &v
	return s
}

// SetValue sets the Value field's value.
func (s *Tag) SetValue(v string) *Tag {
	s.Value = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the resource to tag.
	//
	// ResourceARN is a required field
	ResourceARN *string `min:"50" type:"string" required:"true"`

	// A list of tags to assign to the resource.
	//
	// Tags is a required field
	Tags []*Tag `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 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) < 50 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceARN", 50))
	}
	if s.Tags == nil {
		invalidParams.Add(request.NewErrParamRequired("Tags"))
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// 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 []*Tag) *TagResourceInput {
	s.Tags = v
	return s
}

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

	// The Amazon Resource Name (ARN) of the resource you tagged.
	ResourceARN *string `min:"50" 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 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()
}

// SetResourceARN sets the ResourceARN field's value.
func (s *TagResourceOutput) SetResourceARN(v string) *TagResourceOutput {
	s.ResourceARN = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the gateway to the hypervisor to test.
	//
	// GatewayArn is a required field
	GatewayArn *string `min:"50" type:"string" required:"true"`

	// The server host of the hypervisor. This can be either an IP address or a
	// fully-qualified domain name (FQDN).
	//
	// Host is a required field
	Host *string `min:"3" type:"string" required:"true"`

	// The password for the hypervisor.
	//
	// Password is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by TestHypervisorConfigurationInput's
	// String and GoString methods.
	Password *string `min:"1" type:"string" sensitive:"true"`

	// The username for the hypervisor.
	//
	// Username is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by TestHypervisorConfigurationInput's
	// String and GoString methods.
	Username *string `min:"1" type:"string" 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 TestHypervisorConfigurationInput) 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 TestHypervisorConfigurationInput) GoString() string {
	return s.String()
}

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

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

// SetGatewayArn sets the GatewayArn field's value.
func (s *TestHypervisorConfigurationInput) SetGatewayArn(v string) *TestHypervisorConfigurationInput {
	s.GatewayArn = &v
	return s
}

// SetHost sets the Host field's value.
func (s *TestHypervisorConfigurationInput) SetHost(v string) *TestHypervisorConfigurationInput {
	s.Host = &v
	return s
}

// SetPassword sets the Password field's value.
func (s *TestHypervisorConfigurationInput) SetPassword(v string) *TestHypervisorConfigurationInput {
	s.Password = &v
	return s
}

// SetUsername sets the Username field's value.
func (s *TestHypervisorConfigurationInput) SetUsername(v string) *TestHypervisorConfigurationInput {
	s.Username = &v
	return s
}

type TestHypervisorConfigurationOutput 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 TestHypervisorConfigurationOutput) 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 TestHypervisorConfigurationOutput) GoString() string {
	return s.String()
}

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

	// The Amazon Resource Name (ARN) of the resource from which to remove tags.
	//
	// ResourceARN is a required field
	ResourceARN *string `min:"50" type:"string" required:"true"`

	// The list of tag keys specifying which tags to remove.
	//
	// TagKeys is a required field
	TagKeys []*string `type:"list" required:"true"`
}

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

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

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

	// The Amazon Resource Name (ARN) of the resource from which you removed tags.
	ResourceARN *string `min:"50" 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 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()
}

// SetResourceARN sets the ResourceARN field's value.
func (s *UntagResourceOutput) SetResourceARN(v string) *UntagResourceOutput {
	s.ResourceARN = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the gateway to update.
	//
	// GatewayArn is a required field
	GatewayArn *string `min:"50" type:"string" required:"true"`

	// The updated display name of the gateway.
	GatewayDisplayName *string `min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateGatewayInformationInput) 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 UpdateGatewayInformationInput) GoString() string {
	return s.String()
}

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

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

// SetGatewayArn sets the GatewayArn field's value.
func (s *UpdateGatewayInformationInput) SetGatewayArn(v string) *UpdateGatewayInformationInput {
	s.GatewayArn = &v
	return s
}

// SetGatewayDisplayName sets the GatewayDisplayName field's value.
func (s *UpdateGatewayInformationInput) SetGatewayDisplayName(v string) *UpdateGatewayInformationInput {
	s.GatewayDisplayName = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the gateway you updated.
	GatewayArn *string `min:"50" 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 UpdateGatewayInformationOutput) 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 UpdateGatewayInformationOutput) GoString() string {
	return s.String()
}

// SetGatewayArn sets the GatewayArn field's value.
func (s *UpdateGatewayInformationOutput) SetGatewayArn(v string) *UpdateGatewayInformationOutput {
	s.GatewayArn = &v
	return s
}

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

	// The updated host of the hypervisor. This can be either an IP address or a
	// fully-qualified domain name (FQDN).
	Host *string `min:"3" type:"string"`

	// The Amazon Resource Name (ARN) of the hypervisor to update.
	//
	// HypervisorArn is a required field
	HypervisorArn *string `min:"50" type:"string" required:"true"`

	// The updated password for the hypervisor.
	//
	// Password is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateHypervisorInput's
	// String and GoString methods.
	Password *string `min:"1" type:"string" sensitive:"true"`

	// The updated username for the hypervisor.
	//
	// Username is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateHypervisorInput's
	// String and GoString methods.
	Username *string `min:"1" type:"string" 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 UpdateHypervisorInput) 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 UpdateHypervisorInput) GoString() string {
	return s.String()
}

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

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

// SetHost sets the Host field's value.
func (s *UpdateHypervisorInput) SetHost(v string) *UpdateHypervisorInput {
	s.Host = &v
	return s
}

// SetHypervisorArn sets the HypervisorArn field's value.
func (s *UpdateHypervisorInput) SetHypervisorArn(v string) *UpdateHypervisorInput {
	s.HypervisorArn = &v
	return s
}

// SetPassword sets the Password field's value.
func (s *UpdateHypervisorInput) SetPassword(v string) *UpdateHypervisorInput {
	s.Password = &v
	return s
}

// SetUsername sets the Username field's value.
func (s *UpdateHypervisorInput) SetUsername(v string) *UpdateHypervisorInput {
	s.Username = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the hypervisor you updated.
	HypervisorArn *string `min:"50" 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 UpdateHypervisorOutput) 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 UpdateHypervisorOutput) GoString() string {
	return s.String()
}

// SetHypervisorArn sets the HypervisorArn field's value.
func (s *UpdateHypervisorOutput) SetHypervisorArn(v string) *UpdateHypervisorOutput {
	s.HypervisorArn = &v
	return s
}

// The operation did not succeed because a validation error occurred.
type ValidationException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// A description of what caused the validation error.
	ErrorCode *string `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 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
}

// A virtual machine that is on a hypervisor.
type VirtualMachine struct {
	_ struct{} `type:"structure"`

	// The host name of the virtual machine.
	HostName *string `min:"1" type:"string"`

	// The ID of the virtual machine's hypervisor.
	HypervisorId *string `type:"string"`

	// The most recent date a virtual machine was backed up, in Unix format and
	// UTC time.
	LastBackupDate *time.Time `type:"timestamp"`

	// The name of the virtual machine.
	Name *string `min:"1" type:"string"`

	// The path of the virtual machine.
	Path *string `min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the virtual machine.
	ResourceArn *string `min:"50" 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 VirtualMachine) 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 VirtualMachine) GoString() string {
	return s.String()
}

// SetHostName sets the HostName field's value.
func (s *VirtualMachine) SetHostName(v string) *VirtualMachine {
	s.HostName = &v
	return s
}

// SetHypervisorId sets the HypervisorId field's value.
func (s *VirtualMachine) SetHypervisorId(v string) *VirtualMachine {
	s.HypervisorId = &v
	return s
}

// SetLastBackupDate sets the LastBackupDate field's value.
func (s *VirtualMachine) SetLastBackupDate(v time.Time) *VirtualMachine {
	s.LastBackupDate = &v
	return s
}

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

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

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

const (
	// GatewayTypeBackupVm is a GatewayType enum value
	GatewayTypeBackupVm = "BACKUP_VM"
)

// GatewayType_Values returns all elements of the GatewayType enum
func GatewayType_Values() []string {
	return []string{
		GatewayTypeBackupVm,
	}
}

const (
	// HypervisorStatePending is a HypervisorState enum value
	HypervisorStatePending = "PENDING"

	// HypervisorStateOnline is a HypervisorState enum value
	HypervisorStateOnline = "ONLINE"

	// HypervisorStateOffline is a HypervisorState enum value
	HypervisorStateOffline = "OFFLINE"

	// HypervisorStateError is a HypervisorState enum value
	HypervisorStateError = "ERROR"
)

// HypervisorState_Values returns all elements of the HypervisorState enum
func HypervisorState_Values() []string {
	return []string{
		HypervisorStatePending,
		HypervisorStateOnline,
		HypervisorStateOffline,
		HypervisorStateError,
	}
}
