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

package networkmanager

import (
	"fmt"
	"time"

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

const opAssociateCustomerGateway = "AssociateCustomerGateway"

// AssociateCustomerGatewayRequest generates a "aws/request.Request" representing the
// client's request for the AssociateCustomerGateway 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 AssociateCustomerGateway for more information on using the AssociateCustomerGateway
// 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 AssociateCustomerGatewayRequest method.
//    req, resp := client.AssociateCustomerGatewayRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/AssociateCustomerGateway
func (c *NetworkManager) AssociateCustomerGatewayRequest(input *AssociateCustomerGatewayInput) (req *request.Request, output *AssociateCustomerGatewayOutput) {
	op := &request.Operation{
		Name:       opAssociateCustomerGateway,
		HTTPMethod: "POST",
		HTTPPath:   "/global-networks/{globalNetworkId}/customer-gateway-associations",
	}

	if input == nil {
		input = &AssociateCustomerGatewayInput{}
	}

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

// AssociateCustomerGateway API operation for AWS Network Manager.
//
// Associates a customer gateway with a device and optionally, with a link.
// If you specify a link, it must be associated with the specified device.
//
// You can only associate customer gateways that are connected to a VPN attachment
// on a transit gateway. The transit gateway must be registered in your global
// network. When you register a transit gateway, customer gateways that are
// connected to the transit gateway are automatically included in the global
// network. To list customer gateways that are connected to a transit gateway,
// use the DescribeVpnConnections (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpnConnections.html)
// EC2 API and filter by transit-gateway-id.
//
// You cannot associate a customer gateway with more than one device and link.
//
// 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 Network Manager's
// API operation AssociateCustomerGateway for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * ServiceQuotaExceededException
//   A service limit was exceeded.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/AssociateCustomerGateway
func (c *NetworkManager) AssociateCustomerGateway(input *AssociateCustomerGatewayInput) (*AssociateCustomerGatewayOutput, error) {
	req, out := c.AssociateCustomerGatewayRequest(input)
	return out, req.Send()
}

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

const opAssociateLink = "AssociateLink"

// AssociateLinkRequest generates a "aws/request.Request" representing the
// client's request for the AssociateLink 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 AssociateLink for more information on using the AssociateLink
// 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 AssociateLinkRequest method.
//    req, resp := client.AssociateLinkRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/AssociateLink
func (c *NetworkManager) AssociateLinkRequest(input *AssociateLinkInput) (req *request.Request, output *AssociateLinkOutput) {
	op := &request.Operation{
		Name:       opAssociateLink,
		HTTPMethod: "POST",
		HTTPPath:   "/global-networks/{globalNetworkId}/link-associations",
	}

	if input == nil {
		input = &AssociateLinkInput{}
	}

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

// AssociateLink API operation for AWS Network Manager.
//
// Associates a link to a device. A device can be associated to multiple links
// and a link can be associated to multiple devices. The device and link must
// be in the same global network and the same site.
//
// 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 Network Manager's
// API operation AssociateLink for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * ServiceQuotaExceededException
//   A service limit was exceeded.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/AssociateLink
func (c *NetworkManager) AssociateLink(input *AssociateLinkInput) (*AssociateLinkOutput, error) {
	req, out := c.AssociateLinkRequest(input)
	return out, req.Send()
}

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

const opCreateDevice = "CreateDevice"

// CreateDeviceRequest generates a "aws/request.Request" representing the
// client's request for the CreateDevice 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 CreateDevice for more information on using the CreateDevice
// 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 CreateDeviceRequest method.
//    req, resp := client.CreateDeviceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/CreateDevice
func (c *NetworkManager) CreateDeviceRequest(input *CreateDeviceInput) (req *request.Request, output *CreateDeviceOutput) {
	op := &request.Operation{
		Name:       opCreateDevice,
		HTTPMethod: "POST",
		HTTPPath:   "/global-networks/{globalNetworkId}/devices",
	}

	if input == nil {
		input = &CreateDeviceInput{}
	}

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

// CreateDevice API operation for AWS Network Manager.
//
// Creates a new device in a global network. If you specify both a site ID and
// a location, the location of the site is used for visualization in the Network
// Manager console.
//
// 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 Network Manager's
// API operation CreateDevice for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * ServiceQuotaExceededException
//   A service limit was exceeded.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/CreateDevice
func (c *NetworkManager) CreateDevice(input *CreateDeviceInput) (*CreateDeviceOutput, error) {
	req, out := c.CreateDeviceRequest(input)
	return out, req.Send()
}

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

const opCreateGlobalNetwork = "CreateGlobalNetwork"

// CreateGlobalNetworkRequest generates a "aws/request.Request" representing the
// client's request for the CreateGlobalNetwork 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 CreateGlobalNetwork for more information on using the CreateGlobalNetwork
// 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 CreateGlobalNetworkRequest method.
//    req, resp := client.CreateGlobalNetworkRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/CreateGlobalNetwork
func (c *NetworkManager) CreateGlobalNetworkRequest(input *CreateGlobalNetworkInput) (req *request.Request, output *CreateGlobalNetworkOutput) {
	op := &request.Operation{
		Name:       opCreateGlobalNetwork,
		HTTPMethod: "POST",
		HTTPPath:   "/global-networks",
	}

	if input == nil {
		input = &CreateGlobalNetworkInput{}
	}

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

// CreateGlobalNetwork API operation for AWS Network Manager.
//
// Creates a new, empty global network.
//
// 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 Network Manager's
// API operation CreateGlobalNetwork for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * ServiceQuotaExceededException
//   A service limit was exceeded.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/CreateGlobalNetwork
func (c *NetworkManager) CreateGlobalNetwork(input *CreateGlobalNetworkInput) (*CreateGlobalNetworkOutput, error) {
	req, out := c.CreateGlobalNetworkRequest(input)
	return out, req.Send()
}

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

const opCreateLink = "CreateLink"

// CreateLinkRequest generates a "aws/request.Request" representing the
// client's request for the CreateLink 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 CreateLink for more information on using the CreateLink
// 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 CreateLinkRequest method.
//    req, resp := client.CreateLinkRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/CreateLink
func (c *NetworkManager) CreateLinkRequest(input *CreateLinkInput) (req *request.Request, output *CreateLinkOutput) {
	op := &request.Operation{
		Name:       opCreateLink,
		HTTPMethod: "POST",
		HTTPPath:   "/global-networks/{globalNetworkId}/links",
	}

	if input == nil {
		input = &CreateLinkInput{}
	}

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

// CreateLink API operation for AWS Network Manager.
//
// Creates a new link for a specified site.
//
// 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 Network Manager's
// API operation CreateLink for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * ServiceQuotaExceededException
//   A service limit was exceeded.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/CreateLink
func (c *NetworkManager) CreateLink(input *CreateLinkInput) (*CreateLinkOutput, error) {
	req, out := c.CreateLinkRequest(input)
	return out, req.Send()
}

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

const opCreateSite = "CreateSite"

// CreateSiteRequest generates a "aws/request.Request" representing the
// client's request for the CreateSite 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 CreateSite for more information on using the CreateSite
// 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 CreateSiteRequest method.
//    req, resp := client.CreateSiteRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/CreateSite
func (c *NetworkManager) CreateSiteRequest(input *CreateSiteInput) (req *request.Request, output *CreateSiteOutput) {
	op := &request.Operation{
		Name:       opCreateSite,
		HTTPMethod: "POST",
		HTTPPath:   "/global-networks/{globalNetworkId}/sites",
	}

	if input == nil {
		input = &CreateSiteInput{}
	}

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

// CreateSite API operation for AWS Network Manager.
//
// Creates a new site in a global network.
//
// 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 Network Manager's
// API operation CreateSite for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * ServiceQuotaExceededException
//   A service limit was exceeded.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/CreateSite
func (c *NetworkManager) CreateSite(input *CreateSiteInput) (*CreateSiteOutput, error) {
	req, out := c.CreateSiteRequest(input)
	return out, req.Send()
}

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

const opDeleteDevice = "DeleteDevice"

// DeleteDeviceRequest generates a "aws/request.Request" representing the
// client's request for the DeleteDevice 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 DeleteDevice for more information on using the DeleteDevice
// 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 DeleteDeviceRequest method.
//    req, resp := client.DeleteDeviceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DeleteDevice
func (c *NetworkManager) DeleteDeviceRequest(input *DeleteDeviceInput) (req *request.Request, output *DeleteDeviceOutput) {
	op := &request.Operation{
		Name:       opDeleteDevice,
		HTTPMethod: "DELETE",
		HTTPPath:   "/global-networks/{globalNetworkId}/devices/{deviceId}",
	}

	if input == nil {
		input = &DeleteDeviceInput{}
	}

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

// DeleteDevice API operation for AWS Network Manager.
//
// Deletes an existing device. You must first disassociate the device from any
// links and customer gateways.
//
// 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 Network Manager's
// API operation DeleteDevice for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DeleteDevice
func (c *NetworkManager) DeleteDevice(input *DeleteDeviceInput) (*DeleteDeviceOutput, error) {
	req, out := c.DeleteDeviceRequest(input)
	return out, req.Send()
}

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

const opDeleteGlobalNetwork = "DeleteGlobalNetwork"

// DeleteGlobalNetworkRequest generates a "aws/request.Request" representing the
// client's request for the DeleteGlobalNetwork 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 DeleteGlobalNetwork for more information on using the DeleteGlobalNetwork
// 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 DeleteGlobalNetworkRequest method.
//    req, resp := client.DeleteGlobalNetworkRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DeleteGlobalNetwork
func (c *NetworkManager) DeleteGlobalNetworkRequest(input *DeleteGlobalNetworkInput) (req *request.Request, output *DeleteGlobalNetworkOutput) {
	op := &request.Operation{
		Name:       opDeleteGlobalNetwork,
		HTTPMethod: "DELETE",
		HTTPPath:   "/global-networks/{globalNetworkId}",
	}

	if input == nil {
		input = &DeleteGlobalNetworkInput{}
	}

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

// DeleteGlobalNetwork API operation for AWS Network Manager.
//
// Deletes an existing global network. You must first delete all global network
// objects (devices, links, and sites) and deregister all transit gateways.
//
// 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 Network Manager's
// API operation DeleteGlobalNetwork for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DeleteGlobalNetwork
func (c *NetworkManager) DeleteGlobalNetwork(input *DeleteGlobalNetworkInput) (*DeleteGlobalNetworkOutput, error) {
	req, out := c.DeleteGlobalNetworkRequest(input)
	return out, req.Send()
}

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

const opDeleteLink = "DeleteLink"

// DeleteLinkRequest generates a "aws/request.Request" representing the
// client's request for the DeleteLink 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 DeleteLink for more information on using the DeleteLink
// 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 DeleteLinkRequest method.
//    req, resp := client.DeleteLinkRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DeleteLink
func (c *NetworkManager) DeleteLinkRequest(input *DeleteLinkInput) (req *request.Request, output *DeleteLinkOutput) {
	op := &request.Operation{
		Name:       opDeleteLink,
		HTTPMethod: "DELETE",
		HTTPPath:   "/global-networks/{globalNetworkId}/links/{linkId}",
	}

	if input == nil {
		input = &DeleteLinkInput{}
	}

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

// DeleteLink API operation for AWS Network Manager.
//
// Deletes an existing link. You must first disassociate the link from any devices
// and customer gateways.
//
// 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 Network Manager's
// API operation DeleteLink for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DeleteLink
func (c *NetworkManager) DeleteLink(input *DeleteLinkInput) (*DeleteLinkOutput, error) {
	req, out := c.DeleteLinkRequest(input)
	return out, req.Send()
}

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

const opDeleteSite = "DeleteSite"

// DeleteSiteRequest generates a "aws/request.Request" representing the
// client's request for the DeleteSite 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 DeleteSite for more information on using the DeleteSite
// 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 DeleteSiteRequest method.
//    req, resp := client.DeleteSiteRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DeleteSite
func (c *NetworkManager) DeleteSiteRequest(input *DeleteSiteInput) (req *request.Request, output *DeleteSiteOutput) {
	op := &request.Operation{
		Name:       opDeleteSite,
		HTTPMethod: "DELETE",
		HTTPPath:   "/global-networks/{globalNetworkId}/sites/{siteId}",
	}

	if input == nil {
		input = &DeleteSiteInput{}
	}

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

// DeleteSite API operation for AWS Network Manager.
//
// Deletes an existing site. The site cannot be associated with any device or
// link.
//
// 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 Network Manager's
// API operation DeleteSite for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DeleteSite
func (c *NetworkManager) DeleteSite(input *DeleteSiteInput) (*DeleteSiteOutput, error) {
	req, out := c.DeleteSiteRequest(input)
	return out, req.Send()
}

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

const opDeregisterTransitGateway = "DeregisterTransitGateway"

// DeregisterTransitGatewayRequest generates a "aws/request.Request" representing the
// client's request for the DeregisterTransitGateway 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 DeregisterTransitGateway for more information on using the DeregisterTransitGateway
// 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 DeregisterTransitGatewayRequest method.
//    req, resp := client.DeregisterTransitGatewayRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DeregisterTransitGateway
func (c *NetworkManager) DeregisterTransitGatewayRequest(input *DeregisterTransitGatewayInput) (req *request.Request, output *DeregisterTransitGatewayOutput) {
	op := &request.Operation{
		Name:       opDeregisterTransitGateway,
		HTTPMethod: "DELETE",
		HTTPPath:   "/global-networks/{globalNetworkId}/transit-gateway-registrations/{transitGatewayArn}",
	}

	if input == nil {
		input = &DeregisterTransitGatewayInput{}
	}

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

// DeregisterTransitGateway API operation for AWS Network Manager.
//
// Deregisters a transit gateway from your global network. This action does
// not delete your transit gateway, or modify any of its attachments. This action
// removes any customer gateway associations.
//
// 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 Network Manager's
// API operation DeregisterTransitGateway for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DeregisterTransitGateway
func (c *NetworkManager) DeregisterTransitGateway(input *DeregisterTransitGatewayInput) (*DeregisterTransitGatewayOutput, error) {
	req, out := c.DeregisterTransitGatewayRequest(input)
	return out, req.Send()
}

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

const opDescribeGlobalNetworks = "DescribeGlobalNetworks"

// DescribeGlobalNetworksRequest generates a "aws/request.Request" representing the
// client's request for the DescribeGlobalNetworks 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 DescribeGlobalNetworks for more information on using the DescribeGlobalNetworks
// 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 DescribeGlobalNetworksRequest method.
//    req, resp := client.DescribeGlobalNetworksRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DescribeGlobalNetworks
func (c *NetworkManager) DescribeGlobalNetworksRequest(input *DescribeGlobalNetworksInput) (req *request.Request, output *DescribeGlobalNetworksOutput) {
	op := &request.Operation{
		Name:       opDescribeGlobalNetworks,
		HTTPMethod: "GET",
		HTTPPath:   "/global-networks",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &DescribeGlobalNetworksInput{}
	}

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

// DescribeGlobalNetworks API operation for AWS Network Manager.
//
// Describes one or more global networks. By default, all global networks are
// described. To describe the objects in your global network, you must use the
// appropriate Get* action. For example, to list the transit gateways in your
// global network, use GetTransitGatewayRegistrations.
//
// 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 Network Manager's
// API operation DescribeGlobalNetworks for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DescribeGlobalNetworks
func (c *NetworkManager) DescribeGlobalNetworks(input *DescribeGlobalNetworksInput) (*DescribeGlobalNetworksOutput, error) {
	req, out := c.DescribeGlobalNetworksRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opDisassociateCustomerGateway = "DisassociateCustomerGateway"

// DisassociateCustomerGatewayRequest generates a "aws/request.Request" representing the
// client's request for the DisassociateCustomerGateway 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 DisassociateCustomerGateway for more information on using the DisassociateCustomerGateway
// 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 DisassociateCustomerGatewayRequest method.
//    req, resp := client.DisassociateCustomerGatewayRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DisassociateCustomerGateway
func (c *NetworkManager) DisassociateCustomerGatewayRequest(input *DisassociateCustomerGatewayInput) (req *request.Request, output *DisassociateCustomerGatewayOutput) {
	op := &request.Operation{
		Name:       opDisassociateCustomerGateway,
		HTTPMethod: "DELETE",
		HTTPPath:   "/global-networks/{globalNetworkId}/customer-gateway-associations/{customerGatewayArn}",
	}

	if input == nil {
		input = &DisassociateCustomerGatewayInput{}
	}

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

// DisassociateCustomerGateway API operation for AWS Network Manager.
//
// Disassociates a customer gateway from a device and a link.
//
// 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 Network Manager's
// API operation DisassociateCustomerGateway for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DisassociateCustomerGateway
func (c *NetworkManager) DisassociateCustomerGateway(input *DisassociateCustomerGatewayInput) (*DisassociateCustomerGatewayOutput, error) {
	req, out := c.DisassociateCustomerGatewayRequest(input)
	return out, req.Send()
}

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

const opDisassociateLink = "DisassociateLink"

// DisassociateLinkRequest generates a "aws/request.Request" representing the
// client's request for the DisassociateLink 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 DisassociateLink for more information on using the DisassociateLink
// 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 DisassociateLinkRequest method.
//    req, resp := client.DisassociateLinkRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DisassociateLink
func (c *NetworkManager) DisassociateLinkRequest(input *DisassociateLinkInput) (req *request.Request, output *DisassociateLinkOutput) {
	op := &request.Operation{
		Name:       opDisassociateLink,
		HTTPMethod: "DELETE",
		HTTPPath:   "/global-networks/{globalNetworkId}/link-associations",
	}

	if input == nil {
		input = &DisassociateLinkInput{}
	}

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

// DisassociateLink API operation for AWS Network Manager.
//
// Disassociates an existing device from a link. You must first disassociate
// any customer gateways that are associated with the link.
//
// 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 Network Manager's
// API operation DisassociateLink for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/DisassociateLink
func (c *NetworkManager) DisassociateLink(input *DisassociateLinkInput) (*DisassociateLinkOutput, error) {
	req, out := c.DisassociateLinkRequest(input)
	return out, req.Send()
}

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

const opGetCustomerGatewayAssociations = "GetCustomerGatewayAssociations"

// GetCustomerGatewayAssociationsRequest generates a "aws/request.Request" representing the
// client's request for the GetCustomerGatewayAssociations 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 GetCustomerGatewayAssociations for more information on using the GetCustomerGatewayAssociations
// 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 GetCustomerGatewayAssociationsRequest method.
//    req, resp := client.GetCustomerGatewayAssociationsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/GetCustomerGatewayAssociations
func (c *NetworkManager) GetCustomerGatewayAssociationsRequest(input *GetCustomerGatewayAssociationsInput) (req *request.Request, output *GetCustomerGatewayAssociationsOutput) {
	op := &request.Operation{
		Name:       opGetCustomerGatewayAssociations,
		HTTPMethod: "GET",
		HTTPPath:   "/global-networks/{globalNetworkId}/customer-gateway-associations",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &GetCustomerGatewayAssociationsInput{}
	}

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

// GetCustomerGatewayAssociations API operation for AWS Network Manager.
//
// Gets the association information for customer gateways that are associated
// with devices and links in your global network.
//
// 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 Network Manager's
// API operation GetCustomerGatewayAssociations for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/GetCustomerGatewayAssociations
func (c *NetworkManager) GetCustomerGatewayAssociations(input *GetCustomerGatewayAssociationsInput) (*GetCustomerGatewayAssociationsOutput, error) {
	req, out := c.GetCustomerGatewayAssociationsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opGetDevices = "GetDevices"

// GetDevicesRequest generates a "aws/request.Request" representing the
// client's request for the GetDevices 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 GetDevices for more information on using the GetDevices
// 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 GetDevicesRequest method.
//    req, resp := client.GetDevicesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/GetDevices
func (c *NetworkManager) GetDevicesRequest(input *GetDevicesInput) (req *request.Request, output *GetDevicesOutput) {
	op := &request.Operation{
		Name:       opGetDevices,
		HTTPMethod: "GET",
		HTTPPath:   "/global-networks/{globalNetworkId}/devices",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &GetDevicesInput{}
	}

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

// GetDevices API operation for AWS Network Manager.
//
// Gets information about one or more of your devices in a global network.
//
// 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 Network Manager's
// API operation GetDevices for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/GetDevices
func (c *NetworkManager) GetDevices(input *GetDevicesInput) (*GetDevicesOutput, error) {
	req, out := c.GetDevicesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opGetLinkAssociations = "GetLinkAssociations"

// GetLinkAssociationsRequest generates a "aws/request.Request" representing the
// client's request for the GetLinkAssociations 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 GetLinkAssociations for more information on using the GetLinkAssociations
// 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 GetLinkAssociationsRequest method.
//    req, resp := client.GetLinkAssociationsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/GetLinkAssociations
func (c *NetworkManager) GetLinkAssociationsRequest(input *GetLinkAssociationsInput) (req *request.Request, output *GetLinkAssociationsOutput) {
	op := &request.Operation{
		Name:       opGetLinkAssociations,
		HTTPMethod: "GET",
		HTTPPath:   "/global-networks/{globalNetworkId}/link-associations",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &GetLinkAssociationsInput{}
	}

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

// GetLinkAssociations API operation for AWS Network Manager.
//
// Gets the link associations for a device or a link. Either the device ID or
// the link ID must be specified.
//
// 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 Network Manager's
// API operation GetLinkAssociations for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/GetLinkAssociations
func (c *NetworkManager) GetLinkAssociations(input *GetLinkAssociationsInput) (*GetLinkAssociationsOutput, error) {
	req, out := c.GetLinkAssociationsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opGetLinks = "GetLinks"

// GetLinksRequest generates a "aws/request.Request" representing the
// client's request for the GetLinks 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 GetLinks for more information on using the GetLinks
// 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 GetLinksRequest method.
//    req, resp := client.GetLinksRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/GetLinks
func (c *NetworkManager) GetLinksRequest(input *GetLinksInput) (req *request.Request, output *GetLinksOutput) {
	op := &request.Operation{
		Name:       opGetLinks,
		HTTPMethod: "GET",
		HTTPPath:   "/global-networks/{globalNetworkId}/links",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &GetLinksInput{}
	}

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

// GetLinks API operation for AWS Network Manager.
//
// Gets information about one or more links in a specified global network.
//
// If you specify the site ID, you cannot specify the type or provider in the
// same request. You can specify the type and provider in the same 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 Network Manager's
// API operation GetLinks for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/GetLinks
func (c *NetworkManager) GetLinks(input *GetLinksInput) (*GetLinksOutput, error) {
	req, out := c.GetLinksRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opGetSites = "GetSites"

// GetSitesRequest generates a "aws/request.Request" representing the
// client's request for the GetSites 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 GetSites for more information on using the GetSites
// 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 GetSitesRequest method.
//    req, resp := client.GetSitesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/GetSites
func (c *NetworkManager) GetSitesRequest(input *GetSitesInput) (req *request.Request, output *GetSitesOutput) {
	op := &request.Operation{
		Name:       opGetSites,
		HTTPMethod: "GET",
		HTTPPath:   "/global-networks/{globalNetworkId}/sites",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &GetSitesInput{}
	}

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

// GetSites API operation for AWS Network Manager.
//
// Gets information about one or more of your sites in a global network.
//
// 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 Network Manager's
// API operation GetSites for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/GetSites
func (c *NetworkManager) GetSites(input *GetSitesInput) (*GetSitesOutput, error) {
	req, out := c.GetSitesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opGetTransitGatewayRegistrations = "GetTransitGatewayRegistrations"

// GetTransitGatewayRegistrationsRequest generates a "aws/request.Request" representing the
// client's request for the GetTransitGatewayRegistrations 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 GetTransitGatewayRegistrations for more information on using the GetTransitGatewayRegistrations
// 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 GetTransitGatewayRegistrationsRequest method.
//    req, resp := client.GetTransitGatewayRegistrationsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/GetTransitGatewayRegistrations
func (c *NetworkManager) GetTransitGatewayRegistrationsRequest(input *GetTransitGatewayRegistrationsInput) (req *request.Request, output *GetTransitGatewayRegistrationsOutput) {
	op := &request.Operation{
		Name:       opGetTransitGatewayRegistrations,
		HTTPMethod: "GET",
		HTTPPath:   "/global-networks/{globalNetworkId}/transit-gateway-registrations",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &GetTransitGatewayRegistrationsInput{}
	}

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

// GetTransitGatewayRegistrations API operation for AWS Network Manager.
//
// Gets information about the transit gateway registrations in a specified global
// network.
//
// 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 Network Manager's
// API operation GetTransitGatewayRegistrations for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/GetTransitGatewayRegistrations
func (c *NetworkManager) GetTransitGatewayRegistrations(input *GetTransitGatewayRegistrationsInput) (*GetTransitGatewayRegistrationsOutput, error) {
	req, out := c.GetTransitGatewayRegistrationsRequest(input)
	return out, req.Send()
}

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

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

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

	for p.Next() {
		if !fn(p.Page().(*GetTransitGatewayRegistrationsOutput), !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/networkmanager-2019-07-05/ListTagsForResource
func (c *NetworkManager) ListTagsForResourceRequest(input *ListTagsForResourceInput) (req *request.Request, output *ListTagsForResourceOutput) {
	op := &request.Operation{
		Name:       opListTagsForResource,
		HTTPMethod: "GET",
		HTTPPath:   "/tags/{resourceArn}",
	}

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

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

// ListTagsForResource API operation for AWS Network Manager.
//
// Lists the tags for a specified resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Network Manager's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/ListTagsForResource
func (c *NetworkManager) 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 *NetworkManager) 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 opRegisterTransitGateway = "RegisterTransitGateway"

// RegisterTransitGatewayRequest generates a "aws/request.Request" representing the
// client's request for the RegisterTransitGateway 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 RegisterTransitGateway for more information on using the RegisterTransitGateway
// 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 RegisterTransitGatewayRequest method.
//    req, resp := client.RegisterTransitGatewayRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/RegisterTransitGateway
func (c *NetworkManager) RegisterTransitGatewayRequest(input *RegisterTransitGatewayInput) (req *request.Request, output *RegisterTransitGatewayOutput) {
	op := &request.Operation{
		Name:       opRegisterTransitGateway,
		HTTPMethod: "POST",
		HTTPPath:   "/global-networks/{globalNetworkId}/transit-gateway-registrations",
	}

	if input == nil {
		input = &RegisterTransitGatewayInput{}
	}

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

// RegisterTransitGateway API operation for AWS Network Manager.
//
// Registers a transit gateway in your global network. The transit gateway can
// be in any AWS Region, but it must be owned by the same AWS account that owns
// the global network. You cannot register a transit gateway in more than one
// global network.
//
// 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 Network Manager's
// API operation RegisterTransitGateway for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/RegisterTransitGateway
func (c *NetworkManager) RegisterTransitGateway(input *RegisterTransitGatewayInput) (*RegisterTransitGatewayOutput, error) {
	req, out := c.RegisterTransitGatewayRequest(input)
	return out, req.Send()
}

// RegisterTransitGatewayWithContext is the same as RegisterTransitGateway with the addition of
// the ability to pass a context and additional request options.
//
// See RegisterTransitGateway 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 *NetworkManager) RegisterTransitGatewayWithContext(ctx aws.Context, input *RegisterTransitGatewayInput, opts ...request.Option) (*RegisterTransitGatewayOutput, error) {
	req, out := c.RegisterTransitGatewayRequest(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/networkmanager-2019-07-05/TagResource
func (c *NetworkManager) TagResourceRequest(input *TagResourceInput) (req *request.Request, output *TagResourceOutput) {
	op := &request.Operation{
		Name:       opTagResource,
		HTTPMethod: "POST",
		HTTPPath:   "/tags/{resourceArn}",
	}

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

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

// TagResource API operation for AWS Network Manager.
//
// Tags a specified resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Network Manager's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * ServiceQuotaExceededException
//   A service limit was exceeded.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/TagResource
func (c *NetworkManager) 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 *NetworkManager) TagResourceWithContext(ctx aws.Context, input *TagResourceInput, opts ...request.Option) (*TagResourceOutput, error) {
	req, out := c.TagResourceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUntagResource = "UntagResource"

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

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

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

// UntagResource API operation for AWS Network Manager.
//
// Removes tags from a specified resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Network Manager's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/UntagResource
func (c *NetworkManager) 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 *NetworkManager) 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 opUpdateDevice = "UpdateDevice"

// UpdateDeviceRequest generates a "aws/request.Request" representing the
// client's request for the UpdateDevice 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 UpdateDevice for more information on using the UpdateDevice
// 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 UpdateDeviceRequest method.
//    req, resp := client.UpdateDeviceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/UpdateDevice
func (c *NetworkManager) UpdateDeviceRequest(input *UpdateDeviceInput) (req *request.Request, output *UpdateDeviceOutput) {
	op := &request.Operation{
		Name:       opUpdateDevice,
		HTTPMethod: "PATCH",
		HTTPPath:   "/global-networks/{globalNetworkId}/devices/{deviceId}",
	}

	if input == nil {
		input = &UpdateDeviceInput{}
	}

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

// UpdateDevice API operation for AWS Network Manager.
//
// Updates the details for an existing device. To remove information for any
// of the parameters, specify an empty string.
//
// 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 Network Manager's
// API operation UpdateDevice for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/UpdateDevice
func (c *NetworkManager) UpdateDevice(input *UpdateDeviceInput) (*UpdateDeviceOutput, error) {
	req, out := c.UpdateDeviceRequest(input)
	return out, req.Send()
}

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

const opUpdateGlobalNetwork = "UpdateGlobalNetwork"

// UpdateGlobalNetworkRequest generates a "aws/request.Request" representing the
// client's request for the UpdateGlobalNetwork 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 UpdateGlobalNetwork for more information on using the UpdateGlobalNetwork
// 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 UpdateGlobalNetworkRequest method.
//    req, resp := client.UpdateGlobalNetworkRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/UpdateGlobalNetwork
func (c *NetworkManager) UpdateGlobalNetworkRequest(input *UpdateGlobalNetworkInput) (req *request.Request, output *UpdateGlobalNetworkOutput) {
	op := &request.Operation{
		Name:       opUpdateGlobalNetwork,
		HTTPMethod: "PATCH",
		HTTPPath:   "/global-networks/{globalNetworkId}",
	}

	if input == nil {
		input = &UpdateGlobalNetworkInput{}
	}

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

// UpdateGlobalNetwork API operation for AWS Network Manager.
//
// Updates an existing global network. To remove information for any of the
// parameters, specify an empty string.
//
// 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 Network Manager's
// API operation UpdateGlobalNetwork for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/UpdateGlobalNetwork
func (c *NetworkManager) UpdateGlobalNetwork(input *UpdateGlobalNetworkInput) (*UpdateGlobalNetworkOutput, error) {
	req, out := c.UpdateGlobalNetworkRequest(input)
	return out, req.Send()
}

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

const opUpdateLink = "UpdateLink"

// UpdateLinkRequest generates a "aws/request.Request" representing the
// client's request for the UpdateLink 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 UpdateLink for more information on using the UpdateLink
// 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 UpdateLinkRequest method.
//    req, resp := client.UpdateLinkRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/UpdateLink
func (c *NetworkManager) UpdateLinkRequest(input *UpdateLinkInput) (req *request.Request, output *UpdateLinkOutput) {
	op := &request.Operation{
		Name:       opUpdateLink,
		HTTPMethod: "PATCH",
		HTTPPath:   "/global-networks/{globalNetworkId}/links/{linkId}",
	}

	if input == nil {
		input = &UpdateLinkInput{}
	}

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

// UpdateLink API operation for AWS Network Manager.
//
// Updates the details for an existing link. To remove information for any of
// the parameters, specify an empty string.
//
// 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 Network Manager's
// API operation UpdateLink for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * ServiceQuotaExceededException
//   A service limit was exceeded.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/UpdateLink
func (c *NetworkManager) UpdateLink(input *UpdateLinkInput) (*UpdateLinkOutput, error) {
	req, out := c.UpdateLinkRequest(input)
	return out, req.Send()
}

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

const opUpdateSite = "UpdateSite"

// UpdateSiteRequest generates a "aws/request.Request" representing the
// client's request for the UpdateSite 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 UpdateSite for more information on using the UpdateSite
// 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 UpdateSiteRequest method.
//    req, resp := client.UpdateSiteRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/UpdateSite
func (c *NetworkManager) UpdateSiteRequest(input *UpdateSiteInput) (req *request.Request, output *UpdateSiteOutput) {
	op := &request.Operation{
		Name:       opUpdateSite,
		HTTPMethod: "PATCH",
		HTTPPath:   "/global-networks/{globalNetworkId}/sites/{siteId}",
	}

	if input == nil {
		input = &UpdateSiteInput{}
	}

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

// UpdateSite API operation for AWS Network Manager.
//
// Updates the information for an existing site. To remove information for any
// of the parameters, specify an empty string.
//
// 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 Network Manager's
// API operation UpdateSite for usage and error information.
//
// Returned Error Types:
//   * ValidationException
//   The input fails to satisfy the constraints.
//
//   * AccessDeniedException
//   You do not have sufficient access to perform this action.
//
//   * ResourceNotFoundException
//   The specified resource could not be found.
//
//   * ConflictException
//   There was a conflict processing the request. Updating or deleting the resource
//   can cause an inconsistent state.
//
//   * ThrottlingException
//   The request was denied due to request throttling.
//
//   * InternalServerException
//   The request has failed due to an internal error.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/networkmanager-2019-07-05/UpdateSite
func (c *NetworkManager) UpdateSite(input *UpdateSiteInput) (*UpdateSiteOutput, error) {
	req, out := c.UpdateSiteRequest(input)
	return out, req.Send()
}

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

// You do not have sufficient access to perform this action.
type AccessDeniedException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

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

// GoString returns the string representation
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", s.Code(), s.Message())
}

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

	// The Amazon Resource Name (ARN) of the customer gateway. For more information,
	// see Resources Defined by Amazon EC2 (https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonec2.html#amazonec2-resources-for-iam-policies).
	//
	// CustomerGatewayArn is a required field
	CustomerGatewayArn *string `type:"string" required:"true"`

	// The ID of the device.
	//
	// DeviceId is a required field
	DeviceId *string `type:"string" required:"true"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The ID of the link.
	LinkId *string `type:"string"`
}

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

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

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

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

// SetCustomerGatewayArn sets the CustomerGatewayArn field's value.
func (s *AssociateCustomerGatewayInput) SetCustomerGatewayArn(v string) *AssociateCustomerGatewayInput {
	s.CustomerGatewayArn = &v
	return s
}

// SetDeviceId sets the DeviceId field's value.
func (s *AssociateCustomerGatewayInput) SetDeviceId(v string) *AssociateCustomerGatewayInput {
	s.DeviceId = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *AssociateCustomerGatewayInput) SetGlobalNetworkId(v string) *AssociateCustomerGatewayInput {
	s.GlobalNetworkId = &v
	return s
}

// SetLinkId sets the LinkId field's value.
func (s *AssociateCustomerGatewayInput) SetLinkId(v string) *AssociateCustomerGatewayInput {
	s.LinkId = &v
	return s
}

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

	// The customer gateway association.
	CustomerGatewayAssociation *CustomerGatewayAssociation `type:"structure"`
}

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

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

// SetCustomerGatewayAssociation sets the CustomerGatewayAssociation field's value.
func (s *AssociateCustomerGatewayOutput) SetCustomerGatewayAssociation(v *CustomerGatewayAssociation) *AssociateCustomerGatewayOutput {
	s.CustomerGatewayAssociation = v
	return s
}

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

	// The ID of the device.
	//
	// DeviceId is a required field
	DeviceId *string `type:"string" required:"true"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The ID of the link.
	//
	// LinkId is a required field
	LinkId *string `type:"string" required:"true"`
}

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

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

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

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

// SetDeviceId sets the DeviceId field's value.
func (s *AssociateLinkInput) SetDeviceId(v string) *AssociateLinkInput {
	s.DeviceId = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *AssociateLinkInput) SetGlobalNetworkId(v string) *AssociateLinkInput {
	s.GlobalNetworkId = &v
	return s
}

// SetLinkId sets the LinkId field's value.
func (s *AssociateLinkInput) SetLinkId(v string) *AssociateLinkInput {
	s.LinkId = &v
	return s
}

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

	// The link association.
	LinkAssociation *LinkAssociation `type:"structure"`
}

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

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

// SetLinkAssociation sets the LinkAssociation field's value.
func (s *AssociateLinkOutput) SetLinkAssociation(v *LinkAssociation) *AssociateLinkOutput {
	s.LinkAssociation = v
	return s
}

// Describes bandwidth information.
type Bandwidth struct {
	_ struct{} `type:"structure"`

	// Download speed in Mbps.
	DownloadSpeed *int64 `type:"integer"`

	// Upload speed in Mbps.
	UploadSpeed *int64 `type:"integer"`
}

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

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

// SetDownloadSpeed sets the DownloadSpeed field's value.
func (s *Bandwidth) SetDownloadSpeed(v int64) *Bandwidth {
	s.DownloadSpeed = &v
	return s
}

// SetUploadSpeed sets the UploadSpeed field's value.
func (s *Bandwidth) SetUploadSpeed(v int64) *Bandwidth {
	s.UploadSpeed = &v
	return s
}

// There was a conflict processing the request. Updating or deleting the resource
// can cause an inconsistent state.
type ConflictException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

	// The ID of the resource.
	//
	// ResourceId is a required field
	ResourceId *string `type:"string" required:"true"`

	// The resource type.
	//
	// ResourceType is a required field
	ResourceType *string `type:"string" required:"true"`
}

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

// GoString returns the string representation
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 CreateDeviceInput struct {
	_ struct{} `type:"structure"`

	// A description of the device.
	//
	// Length Constraints: Maximum length of 256 characters.
	Description *string `type:"string"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The location of the device.
	Location *Location `type:"structure"`

	// The model of the device.
	//
	// Length Constraints: Maximum length of 128 characters.
	Model *string `type:"string"`

	// The serial number of the device.
	//
	// Length Constraints: Maximum length of 128 characters.
	SerialNumber *string `type:"string"`

	// The ID of the site.
	SiteId *string `type:"string"`

	// The tags to apply to the resource during creation.
	Tags []*Tag `type:"list"`

	// The type of the device.
	Type *string `type:"string"`

	// The vendor of the device.
	//
	// Length Constraints: Maximum length of 128 characters.
	Vendor *string `type:"string"`
}

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

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

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

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

// SetDescription sets the Description field's value.
func (s *CreateDeviceInput) SetDescription(v string) *CreateDeviceInput {
	s.Description = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *CreateDeviceInput) SetGlobalNetworkId(v string) *CreateDeviceInput {
	s.GlobalNetworkId = &v
	return s
}

// SetLocation sets the Location field's value.
func (s *CreateDeviceInput) SetLocation(v *Location) *CreateDeviceInput {
	s.Location = v
	return s
}

// SetModel sets the Model field's value.
func (s *CreateDeviceInput) SetModel(v string) *CreateDeviceInput {
	s.Model = &v
	return s
}

// SetSerialNumber sets the SerialNumber field's value.
func (s *CreateDeviceInput) SetSerialNumber(v string) *CreateDeviceInput {
	s.SerialNumber = &v
	return s
}

// SetSiteId sets the SiteId field's value.
func (s *CreateDeviceInput) SetSiteId(v string) *CreateDeviceInput {
	s.SiteId = &v
	return s
}

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

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

// SetVendor sets the Vendor field's value.
func (s *CreateDeviceInput) SetVendor(v string) *CreateDeviceInput {
	s.Vendor = &v
	return s
}

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

	// Information about the device.
	Device *Device `type:"structure"`
}

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

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

// SetDevice sets the Device field's value.
func (s *CreateDeviceOutput) SetDevice(v *Device) *CreateDeviceOutput {
	s.Device = v
	return s
}

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

	// A description of the global network.
	//
	// Length Constraints: Maximum length of 256 characters.
	Description *string `type:"string"`

	// The tags to apply to the resource during creation.
	Tags []*Tag `type:"list"`
}

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

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

// SetDescription sets the Description field's value.
func (s *CreateGlobalNetworkInput) SetDescription(v string) *CreateGlobalNetworkInput {
	s.Description = &v
	return s
}

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

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

	// Information about the global network object.
	GlobalNetwork *GlobalNetwork `type:"structure"`
}

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

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

// SetGlobalNetwork sets the GlobalNetwork field's value.
func (s *CreateGlobalNetworkOutput) SetGlobalNetwork(v *GlobalNetwork) *CreateGlobalNetworkOutput {
	s.GlobalNetwork = v
	return s
}

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

	// The upload speed and download speed in Mbps.
	//
	// Bandwidth is a required field
	Bandwidth *Bandwidth `type:"structure" required:"true"`

	// A description of the link.
	//
	// Length Constraints: Maximum length of 256 characters.
	Description *string `type:"string"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The provider of the link.
	//
	// Constraints: Cannot include the following characters: | \ ^
	//
	// Length Constraints: Maximum length of 128 characters.
	Provider *string `type:"string"`

	// The ID of the site.
	//
	// SiteId is a required field
	SiteId *string `type:"string" required:"true"`

	// The tags to apply to the resource during creation.
	Tags []*Tag `type:"list"`

	// The type of the link.
	//
	// Constraints: Cannot include the following characters: | \ ^
	//
	// Length Constraints: Maximum length of 128 characters.
	Type *string `type:"string"`
}

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

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

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

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

// SetBandwidth sets the Bandwidth field's value.
func (s *CreateLinkInput) SetBandwidth(v *Bandwidth) *CreateLinkInput {
	s.Bandwidth = v
	return s
}

// SetDescription sets the Description field's value.
func (s *CreateLinkInput) SetDescription(v string) *CreateLinkInput {
	s.Description = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *CreateLinkInput) SetGlobalNetworkId(v string) *CreateLinkInput {
	s.GlobalNetworkId = &v
	return s
}

// SetProvider sets the Provider field's value.
func (s *CreateLinkInput) SetProvider(v string) *CreateLinkInput {
	s.Provider = &v
	return s
}

// SetSiteId sets the SiteId field's value.
func (s *CreateLinkInput) SetSiteId(v string) *CreateLinkInput {
	s.SiteId = &v
	return s
}

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

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

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

	// Information about the link.
	Link *Link `type:"structure"`
}

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

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

// SetLink sets the Link field's value.
func (s *CreateLinkOutput) SetLink(v *Link) *CreateLinkOutput {
	s.Link = v
	return s
}

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

	// A description of your site.
	//
	// Length Constraints: Maximum length of 256 characters.
	Description *string `type:"string"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The site location. This information is used for visualization in the Network
	// Manager console. If you specify the address, the latitude and longitude are
	// automatically calculated.
	//
	//    * Address: The physical address of the site.
	//
	//    * Latitude: The latitude of the site.
	//
	//    * Longitude: The longitude of the site.
	Location *Location `type:"structure"`

	// The tags to apply to the resource during creation.
	Tags []*Tag `type:"list"`
}

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

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

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

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

// SetDescription sets the Description field's value.
func (s *CreateSiteInput) SetDescription(v string) *CreateSiteInput {
	s.Description = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *CreateSiteInput) SetGlobalNetworkId(v string) *CreateSiteInput {
	s.GlobalNetworkId = &v
	return s
}

// SetLocation sets the Location field's value.
func (s *CreateSiteInput) SetLocation(v *Location) *CreateSiteInput {
	s.Location = v
	return s
}

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

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

	// Information about the site.
	Site *Site `type:"structure"`
}

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

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

// SetSite sets the Site field's value.
func (s *CreateSiteOutput) SetSite(v *Site) *CreateSiteOutput {
	s.Site = v
	return s
}

// Describes the association between a customer gateway, a device, and a link.
type CustomerGatewayAssociation struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the customer gateway.
	CustomerGatewayArn *string `type:"string"`

	// The ID of the device.
	DeviceId *string `type:"string"`

	// The ID of the global network.
	GlobalNetworkId *string `type:"string"`

	// The ID of the link.
	LinkId *string `type:"string"`

	// The association state.
	State *string `type:"string" enum:"CustomerGatewayAssociationState"`
}

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

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

// SetCustomerGatewayArn sets the CustomerGatewayArn field's value.
func (s *CustomerGatewayAssociation) SetCustomerGatewayArn(v string) *CustomerGatewayAssociation {
	s.CustomerGatewayArn = &v
	return s
}

// SetDeviceId sets the DeviceId field's value.
func (s *CustomerGatewayAssociation) SetDeviceId(v string) *CustomerGatewayAssociation {
	s.DeviceId = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *CustomerGatewayAssociation) SetGlobalNetworkId(v string) *CustomerGatewayAssociation {
	s.GlobalNetworkId = &v
	return s
}

// SetLinkId sets the LinkId field's value.
func (s *CustomerGatewayAssociation) SetLinkId(v string) *CustomerGatewayAssociation {
	s.LinkId = &v
	return s
}

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

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

	// The ID of the device.
	//
	// DeviceId is a required field
	DeviceId *string `location:"uri" locationName:"deviceId" type:"string" required:"true"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`
}

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

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

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

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

// SetDeviceId sets the DeviceId field's value.
func (s *DeleteDeviceInput) SetDeviceId(v string) *DeleteDeviceInput {
	s.DeviceId = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *DeleteDeviceInput) SetGlobalNetworkId(v string) *DeleteDeviceInput {
	s.GlobalNetworkId = &v
	return s
}

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

	// Information about the device.
	Device *Device `type:"structure"`
}

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

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

// SetDevice sets the Device field's value.
func (s *DeleteDeviceOutput) SetDevice(v *Device) *DeleteDeviceOutput {
	s.Device = v
	return s
}

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

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`
}

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

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

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

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

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *DeleteGlobalNetworkInput) SetGlobalNetworkId(v string) *DeleteGlobalNetworkInput {
	s.GlobalNetworkId = &v
	return s
}

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

	// Information about the global network.
	GlobalNetwork *GlobalNetwork `type:"structure"`
}

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

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

// SetGlobalNetwork sets the GlobalNetwork field's value.
func (s *DeleteGlobalNetworkOutput) SetGlobalNetwork(v *GlobalNetwork) *DeleteGlobalNetworkOutput {
	s.GlobalNetwork = v
	return s
}

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

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The ID of the link.
	//
	// LinkId is a required field
	LinkId *string `location:"uri" locationName:"linkId" type:"string" required:"true"`
}

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

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

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

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

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *DeleteLinkInput) SetGlobalNetworkId(v string) *DeleteLinkInput {
	s.GlobalNetworkId = &v
	return s
}

// SetLinkId sets the LinkId field's value.
func (s *DeleteLinkInput) SetLinkId(v string) *DeleteLinkInput {
	s.LinkId = &v
	return s
}

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

	// Information about the link.
	Link *Link `type:"structure"`
}

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

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

// SetLink sets the Link field's value.
func (s *DeleteLinkOutput) SetLink(v *Link) *DeleteLinkOutput {
	s.Link = v
	return s
}

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

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The ID of the site.
	//
	// SiteId is a required field
	SiteId *string `location:"uri" locationName:"siteId" type:"string" required:"true"`
}

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

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

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

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

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *DeleteSiteInput) SetGlobalNetworkId(v string) *DeleteSiteInput {
	s.GlobalNetworkId = &v
	return s
}

// SetSiteId sets the SiteId field's value.
func (s *DeleteSiteInput) SetSiteId(v string) *DeleteSiteInput {
	s.SiteId = &v
	return s
}

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

	// Information about the site.
	Site *Site `type:"structure"`
}

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

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

// SetSite sets the Site field's value.
func (s *DeleteSiteOutput) SetSite(v *Site) *DeleteSiteOutput {
	s.Site = v
	return s
}

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

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The Amazon Resource Name (ARN) of the transit gateway.
	//
	// TransitGatewayArn is a required field
	TransitGatewayArn *string `location:"uri" locationName:"transitGatewayArn" type:"string" required:"true"`
}

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

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

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

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

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *DeregisterTransitGatewayInput) SetGlobalNetworkId(v string) *DeregisterTransitGatewayInput {
	s.GlobalNetworkId = &v
	return s
}

// SetTransitGatewayArn sets the TransitGatewayArn field's value.
func (s *DeregisterTransitGatewayInput) SetTransitGatewayArn(v string) *DeregisterTransitGatewayInput {
	s.TransitGatewayArn = &v
	return s
}

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

	// The transit gateway registration information.
	TransitGatewayRegistration *TransitGatewayRegistration `type:"structure"`
}

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

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

// SetTransitGatewayRegistration sets the TransitGatewayRegistration field's value.
func (s *DeregisterTransitGatewayOutput) SetTransitGatewayRegistration(v *TransitGatewayRegistration) *DeregisterTransitGatewayOutput {
	s.TransitGatewayRegistration = v
	return s
}

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

	// The IDs of one or more global networks. The maximum is 10.
	GlobalNetworkIds []*string `location:"querystring" locationName:"globalNetworkIds" type:"list"`

	// The maximum number of results to return.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next page of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetGlobalNetworkIds sets the GlobalNetworkIds field's value.
func (s *DescribeGlobalNetworksInput) SetGlobalNetworkIds(v []*string) *DescribeGlobalNetworksInput {
	s.GlobalNetworkIds = v
	return s
}

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

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

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

	// Information about the global networks.
	GlobalNetworks []*GlobalNetwork `type:"list"`

	// The token for the next page of results.
	NextToken *string `type:"string"`
}

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

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

// SetGlobalNetworks sets the GlobalNetworks field's value.
func (s *DescribeGlobalNetworksOutput) SetGlobalNetworks(v []*GlobalNetwork) *DescribeGlobalNetworksOutput {
	s.GlobalNetworks = v
	return s
}

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

// Describes a device.
type Device struct {
	_ struct{} `type:"structure"`

	// The date and time that the site was created.
	CreatedAt *time.Time `type:"timestamp"`

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

	// The Amazon Resource Name (ARN) of the device.
	DeviceArn *string `type:"string"`

	// The ID of the device.
	DeviceId *string `type:"string"`

	// The ID of the global network.
	GlobalNetworkId *string `type:"string"`

	// The site location.
	Location *Location `type:"structure"`

	// The device model.
	Model *string `type:"string"`

	// The device serial number.
	SerialNumber *string `type:"string"`

	// The site ID.
	SiteId *string `type:"string"`

	// The device state.
	State *string `type:"string" enum:"DeviceState"`

	// The tags for the device.
	Tags []*Tag `type:"list"`

	// The device type.
	Type *string `type:"string"`

	// The device vendor.
	Vendor *string `type:"string"`
}

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

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

// SetCreatedAt sets the CreatedAt field's value.
func (s *Device) SetCreatedAt(v time.Time) *Device {
	s.CreatedAt = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *Device) SetDescription(v string) *Device {
	s.Description = &v
	return s
}

// SetDeviceArn sets the DeviceArn field's value.
func (s *Device) SetDeviceArn(v string) *Device {
	s.DeviceArn = &v
	return s
}

// SetDeviceId sets the DeviceId field's value.
func (s *Device) SetDeviceId(v string) *Device {
	s.DeviceId = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *Device) SetGlobalNetworkId(v string) *Device {
	s.GlobalNetworkId = &v
	return s
}

// SetLocation sets the Location field's value.
func (s *Device) SetLocation(v *Location) *Device {
	s.Location = v
	return s
}

// SetModel sets the Model field's value.
func (s *Device) SetModel(v string) *Device {
	s.Model = &v
	return s
}

// SetSerialNumber sets the SerialNumber field's value.
func (s *Device) SetSerialNumber(v string) *Device {
	s.SerialNumber = &v
	return s
}

// SetSiteId sets the SiteId field's value.
func (s *Device) SetSiteId(v string) *Device {
	s.SiteId = &v
	return s
}

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

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

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

// SetVendor sets the Vendor field's value.
func (s *Device) SetVendor(v string) *Device {
	s.Vendor = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the customer gateway. For more information,
	// see Resources Defined by Amazon EC2 (https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonec2.html#amazonec2-resources-for-iam-policies).
	//
	// CustomerGatewayArn is a required field
	CustomerGatewayArn *string `location:"uri" locationName:"customerGatewayArn" type:"string" required:"true"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`
}

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

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

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

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

// SetCustomerGatewayArn sets the CustomerGatewayArn field's value.
func (s *DisassociateCustomerGatewayInput) SetCustomerGatewayArn(v string) *DisassociateCustomerGatewayInput {
	s.CustomerGatewayArn = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *DisassociateCustomerGatewayInput) SetGlobalNetworkId(v string) *DisassociateCustomerGatewayInput {
	s.GlobalNetworkId = &v
	return s
}

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

	// Information about the customer gateway association.
	CustomerGatewayAssociation *CustomerGatewayAssociation `type:"structure"`
}

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

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

// SetCustomerGatewayAssociation sets the CustomerGatewayAssociation field's value.
func (s *DisassociateCustomerGatewayOutput) SetCustomerGatewayAssociation(v *CustomerGatewayAssociation) *DisassociateCustomerGatewayOutput {
	s.CustomerGatewayAssociation = v
	return s
}

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

	// The ID of the device.
	//
	// DeviceId is a required field
	DeviceId *string `location:"querystring" locationName:"deviceId" type:"string" required:"true"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The ID of the link.
	//
	// LinkId is a required field
	LinkId *string `location:"querystring" locationName:"linkId" type:"string" required:"true"`
}

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

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

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

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

// SetDeviceId sets the DeviceId field's value.
func (s *DisassociateLinkInput) SetDeviceId(v string) *DisassociateLinkInput {
	s.DeviceId = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *DisassociateLinkInput) SetGlobalNetworkId(v string) *DisassociateLinkInput {
	s.GlobalNetworkId = &v
	return s
}

// SetLinkId sets the LinkId field's value.
func (s *DisassociateLinkInput) SetLinkId(v string) *DisassociateLinkInput {
	s.LinkId = &v
	return s
}

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

	// Information about the link association.
	LinkAssociation *LinkAssociation `type:"structure"`
}

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

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

// SetLinkAssociation sets the LinkAssociation field's value.
func (s *DisassociateLinkOutput) SetLinkAssociation(v *LinkAssociation) *DisassociateLinkOutput {
	s.LinkAssociation = v
	return s
}

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

	// One or more customer gateway Amazon Resource Names (ARNs). For more information,
	// see Resources Defined by Amazon EC2 (https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonec2.html#amazonec2-resources-for-iam-policies).
	// The maximum is 10.
	CustomerGatewayArns []*string `location:"querystring" locationName:"customerGatewayArns" type:"list"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The maximum number of results to return.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next page of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetCustomerGatewayArns sets the CustomerGatewayArns field's value.
func (s *GetCustomerGatewayAssociationsInput) SetCustomerGatewayArns(v []*string) *GetCustomerGatewayAssociationsInput {
	s.CustomerGatewayArns = v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *GetCustomerGatewayAssociationsInput) SetGlobalNetworkId(v string) *GetCustomerGatewayAssociationsInput {
	s.GlobalNetworkId = &v
	return s
}

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

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

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

	// The customer gateway associations.
	CustomerGatewayAssociations []*CustomerGatewayAssociation `type:"list"`

	// The token for the next page of results.
	NextToken *string `type:"string"`
}

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

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

// SetCustomerGatewayAssociations sets the CustomerGatewayAssociations field's value.
func (s *GetCustomerGatewayAssociationsOutput) SetCustomerGatewayAssociations(v []*CustomerGatewayAssociation) *GetCustomerGatewayAssociationsOutput {
	s.CustomerGatewayAssociations = v
	return s
}

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

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

	// One or more device IDs. The maximum is 10.
	DeviceIds []*string `location:"querystring" locationName:"deviceIds" type:"list"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The maximum number of results to return.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next page of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The ID of the site.
	SiteId *string `location:"querystring" locationName:"siteId" type:"string"`
}

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

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

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

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

// SetDeviceIds sets the DeviceIds field's value.
func (s *GetDevicesInput) SetDeviceIds(v []*string) *GetDevicesInput {
	s.DeviceIds = v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *GetDevicesInput) SetGlobalNetworkId(v string) *GetDevicesInput {
	s.GlobalNetworkId = &v
	return s
}

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

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

// SetSiteId sets the SiteId field's value.
func (s *GetDevicesInput) SetSiteId(v string) *GetDevicesInput {
	s.SiteId = &v
	return s
}

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

	// The devices.
	Devices []*Device `type:"list"`

	// The token for the next page of results.
	NextToken *string `type:"string"`
}

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

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

// SetDevices sets the Devices field's value.
func (s *GetDevicesOutput) SetDevices(v []*Device) *GetDevicesOutput {
	s.Devices = v
	return s
}

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

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

	// The ID of the device.
	DeviceId *string `location:"querystring" locationName:"deviceId" type:"string"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The ID of the link.
	LinkId *string `location:"querystring" locationName:"linkId" type:"string"`

	// The maximum number of results to return.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next page of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

// SetDeviceId sets the DeviceId field's value.
func (s *GetLinkAssociationsInput) SetDeviceId(v string) *GetLinkAssociationsInput {
	s.DeviceId = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *GetLinkAssociationsInput) SetGlobalNetworkId(v string) *GetLinkAssociationsInput {
	s.GlobalNetworkId = &v
	return s
}

// SetLinkId sets the LinkId field's value.
func (s *GetLinkAssociationsInput) SetLinkId(v string) *GetLinkAssociationsInput {
	s.LinkId = &v
	return s
}

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

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

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

	// The link associations.
	LinkAssociations []*LinkAssociation `type:"list"`

	// The token for the next page of results.
	NextToken *string `type:"string"`
}

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

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

// SetLinkAssociations sets the LinkAssociations field's value.
func (s *GetLinkAssociationsOutput) SetLinkAssociations(v []*LinkAssociation) *GetLinkAssociationsOutput {
	s.LinkAssociations = v
	return s
}

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

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

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// One or more link IDs. The maximum is 10.
	LinkIds []*string `location:"querystring" locationName:"linkIds" type:"list"`

	// The maximum number of results to return.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next page of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The link provider.
	Provider *string `location:"querystring" locationName:"provider" type:"string"`

	// The ID of the site.
	SiteId *string `location:"querystring" locationName:"siteId" type:"string"`

	// The link type.
	Type *string `location:"querystring" locationName:"type" type:"string"`
}

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

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

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

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

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *GetLinksInput) SetGlobalNetworkId(v string) *GetLinksInput {
	s.GlobalNetworkId = &v
	return s
}

// SetLinkIds sets the LinkIds field's value.
func (s *GetLinksInput) SetLinkIds(v []*string) *GetLinksInput {
	s.LinkIds = v
	return s
}

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

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

// SetProvider sets the Provider field's value.
func (s *GetLinksInput) SetProvider(v string) *GetLinksInput {
	s.Provider = &v
	return s
}

// SetSiteId sets the SiteId field's value.
func (s *GetLinksInput) SetSiteId(v string) *GetLinksInput {
	s.SiteId = &v
	return s
}

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

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

	// The links.
	Links []*Link `type:"list"`

	// The token for the next page of results.
	NextToken *string `type:"string"`
}

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

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

// SetLinks sets the Links field's value.
func (s *GetLinksOutput) SetLinks(v []*Link) *GetLinksOutput {
	s.Links = v
	return s
}

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

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

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The maximum number of results to return.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next page of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// One or more site IDs. The maximum is 10.
	SiteIds []*string `location:"querystring" locationName:"siteIds" type:"list"`
}

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

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

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

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

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *GetSitesInput) SetGlobalNetworkId(v string) *GetSitesInput {
	s.GlobalNetworkId = &v
	return s
}

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

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

// SetSiteIds sets the SiteIds field's value.
func (s *GetSitesInput) SetSiteIds(v []*string) *GetSitesInput {
	s.SiteIds = v
	return s
}

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

	// The token for the next page of results.
	NextToken *string `type:"string"`

	// The sites.
	Sites []*Site `type:"list"`
}

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

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

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

// SetSites sets the Sites field's value.
func (s *GetSitesOutput) SetSites(v []*Site) *GetSitesOutput {
	s.Sites = v
	return s
}

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

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The maximum number of results to return.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next page of results.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// The Amazon Resource Names (ARNs) of one or more transit gateways. The maximum
	// is 10.
	TransitGatewayArns []*string `location:"querystring" locationName:"transitGatewayArns" type:"list"`
}

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

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

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

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

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *GetTransitGatewayRegistrationsInput) SetGlobalNetworkId(v string) *GetTransitGatewayRegistrationsInput {
	s.GlobalNetworkId = &v
	return s
}

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

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

// SetTransitGatewayArns sets the TransitGatewayArns field's value.
func (s *GetTransitGatewayRegistrationsInput) SetTransitGatewayArns(v []*string) *GetTransitGatewayRegistrationsInput {
	s.TransitGatewayArns = v
	return s
}

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

	// The token for the next page of results.
	NextToken *string `type:"string"`

	// The transit gateway registrations.
	TransitGatewayRegistrations []*TransitGatewayRegistration `type:"list"`
}

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

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

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

// SetTransitGatewayRegistrations sets the TransitGatewayRegistrations field's value.
func (s *GetTransitGatewayRegistrationsOutput) SetTransitGatewayRegistrations(v []*TransitGatewayRegistration) *GetTransitGatewayRegistrationsOutput {
	s.TransitGatewayRegistrations = v
	return s
}

// Describes a global network.
type GlobalNetwork struct {
	_ struct{} `type:"structure"`

	// The date and time that the global network was created.
	CreatedAt *time.Time `type:"timestamp"`

	// The description of the global network.
	Description *string `type:"string"`

	// The Amazon Resource Name (ARN) of the global network.
	GlobalNetworkArn *string `type:"string"`

	// The ID of the global network.
	GlobalNetworkId *string `type:"string"`

	// The state of the global network.
	State *string `type:"string" enum:"GlobalNetworkState"`

	// The tags for the global network.
	Tags []*Tag `type:"list"`
}

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

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

// SetCreatedAt sets the CreatedAt field's value.
func (s *GlobalNetwork) SetCreatedAt(v time.Time) *GlobalNetwork {
	s.CreatedAt = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *GlobalNetwork) SetDescription(v string) *GlobalNetwork {
	s.Description = &v
	return s
}

// SetGlobalNetworkArn sets the GlobalNetworkArn field's value.
func (s *GlobalNetwork) SetGlobalNetworkArn(v string) *GlobalNetwork {
	s.GlobalNetworkArn = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *GlobalNetwork) SetGlobalNetworkId(v string) *GlobalNetwork {
	s.GlobalNetworkId = &v
	return s
}

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

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

// The request has failed due to an internal error.
type InternalServerException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

	// Indicates when to retry the request.
	RetryAfterSeconds *int64 `location:"header" locationName:"Retry-After" type:"integer"`
}

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

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

// Describes a link.
type Link struct {
	_ struct{} `type:"structure"`

	// The bandwidth for the link.
	Bandwidth *Bandwidth `type:"structure"`

	// The date and time that the link was created.
	CreatedAt *time.Time `type:"timestamp"`

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

	// The ID of the global network.
	GlobalNetworkId *string `type:"string"`

	// The Amazon Resource Name (ARN) of the link.
	LinkArn *string `type:"string"`

	// The ID of the link.
	LinkId *string `type:"string"`

	// The provider of the link.
	Provider *string `type:"string"`

	// The ID of the site.
	SiteId *string `type:"string"`

	// The state of the link.
	State *string `type:"string" enum:"LinkState"`

	// The tags for the link.
	Tags []*Tag `type:"list"`

	// The type of the link.
	Type *string `type:"string"`
}

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

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

// SetBandwidth sets the Bandwidth field's value.
func (s *Link) SetBandwidth(v *Bandwidth) *Link {
	s.Bandwidth = v
	return s
}

// SetCreatedAt sets the CreatedAt field's value.
func (s *Link) SetCreatedAt(v time.Time) *Link {
	s.CreatedAt = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *Link) SetDescription(v string) *Link {
	s.Description = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *Link) SetGlobalNetworkId(v string) *Link {
	s.GlobalNetworkId = &v
	return s
}

// SetLinkArn sets the LinkArn field's value.
func (s *Link) SetLinkArn(v string) *Link {
	s.LinkArn = &v
	return s
}

// SetLinkId sets the LinkId field's value.
func (s *Link) SetLinkId(v string) *Link {
	s.LinkId = &v
	return s
}

// SetProvider sets the Provider field's value.
func (s *Link) SetProvider(v string) *Link {
	s.Provider = &v
	return s
}

// SetSiteId sets the SiteId field's value.
func (s *Link) SetSiteId(v string) *Link {
	s.SiteId = &v
	return s
}

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

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

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

// Describes the association between a device and a link.
type LinkAssociation struct {
	_ struct{} `type:"structure"`

	// The device ID for the link association.
	DeviceId *string `type:"string"`

	// The ID of the global network.
	GlobalNetworkId *string `type:"string"`

	// The state of the association.
	LinkAssociationState *string `type:"string" enum:"LinkAssociationState"`

	// The ID of the link.
	LinkId *string `type:"string"`
}

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

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

// SetDeviceId sets the DeviceId field's value.
func (s *LinkAssociation) SetDeviceId(v string) *LinkAssociation {
	s.DeviceId = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *LinkAssociation) SetGlobalNetworkId(v string) *LinkAssociation {
	s.GlobalNetworkId = &v
	return s
}

// SetLinkAssociationState sets the LinkAssociationState field's value.
func (s *LinkAssociation) SetLinkAssociationState(v string) *LinkAssociation {
	s.LinkAssociationState = &v
	return s
}

// SetLinkId sets the LinkId field's value.
func (s *LinkAssociation) SetLinkId(v string) *LinkAssociation {
	s.LinkId = &v
	return s
}

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

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

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

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

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

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

// 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 list of tags.
	TagList []*Tag `type:"list"`
}

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

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

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

// Describes a location.
type Location struct {
	_ struct{} `type:"structure"`

	// The physical address.
	Address *string `type:"string"`

	// The latitude.
	Latitude *string `type:"string"`

	// The longitude.
	Longitude *string `type:"string"`
}

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

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

// SetAddress sets the Address field's value.
func (s *Location) SetAddress(v string) *Location {
	s.Address = &v
	return s
}

// SetLatitude sets the Latitude field's value.
func (s *Location) SetLatitude(v string) *Location {
	s.Latitude = &v
	return s
}

// SetLongitude sets the Longitude field's value.
func (s *Location) SetLongitude(v string) *Location {
	s.Longitude = &v
	return s
}

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

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The Amazon Resource Name (ARN) of the transit gateway. For more information,
	// see Resources Defined by Amazon EC2 (https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonec2.html#amazonec2-resources-for-iam-policies).
	//
	// TransitGatewayArn is a required field
	TransitGatewayArn *string `type:"string" required:"true"`
}

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

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

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

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

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *RegisterTransitGatewayInput) SetGlobalNetworkId(v string) *RegisterTransitGatewayInput {
	s.GlobalNetworkId = &v
	return s
}

// SetTransitGatewayArn sets the TransitGatewayArn field's value.
func (s *RegisterTransitGatewayInput) SetTransitGatewayArn(v string) *RegisterTransitGatewayInput {
	s.TransitGatewayArn = &v
	return s
}

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

	// Information about the transit gateway registration.
	TransitGatewayRegistration *TransitGatewayRegistration `type:"structure"`
}

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

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

// SetTransitGatewayRegistration sets the TransitGatewayRegistration field's value.
func (s *RegisterTransitGatewayOutput) SetTransitGatewayRegistration(v *TransitGatewayRegistration) *RegisterTransitGatewayOutput {
	s.TransitGatewayRegistration = v
	return s
}

// The specified resource could not be found.
type ResourceNotFoundException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

	// The ID of the resource.
	//
	// ResourceId is a required field
	ResourceId *string `type:"string" required:"true"`

	// The resource type.
	//
	// ResourceType is a required field
	ResourceType *string `type:"string" required:"true"`
}

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

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

func newErrorResourceNotFoundException(v protocol.ResponseMetadata) error {
	return &ResourceNotFoundException{
		respMetadata: v,
	}
}

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

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

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

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

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

// RequestID returns the service's response RequestID for request.
func (s ResourceNotFoundException) RequestID() string {
	return s.respMetadata.RequestID
}

// A service limit was exceeded.
type ServiceQuotaExceededException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

	// The limit code.
	//
	// LimitCode is a required field
	LimitCode *string `type:"string" required:"true"`

	// The error message.
	Message_ *string `locationName:"Message" type:"string"`

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

	// The resource type.
	ResourceType *string `type:"string"`

	// The service code.
	//
	// ServiceCode is a required field
	ServiceCode *string `type:"string" required:"true"`
}

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

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

func newErrorServiceQuotaExceededException(v protocol.ResponseMetadata) error {
	return &ServiceQuotaExceededException{
		respMetadata: v,
	}
}

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

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

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

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

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

// RequestID returns the service's response RequestID for request.
func (s ServiceQuotaExceededException) RequestID() string {
	return s.respMetadata.RequestID
}

// Describes a site.
type Site struct {
	_ struct{} `type:"structure"`

	// The date and time that the site was created.
	CreatedAt *time.Time `type:"timestamp"`

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

	// The ID of the global network.
	GlobalNetworkId *string `type:"string"`

	// The location of the site.
	Location *Location `type:"structure"`

	// The Amazon Resource Name (ARN) of the site.
	SiteArn *string `type:"string"`

	// The ID of the site.
	SiteId *string `type:"string"`

	// The state of the site.
	State *string `type:"string" enum:"SiteState"`

	// The tags for the site.
	Tags []*Tag `type:"list"`
}

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

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

// SetCreatedAt sets the CreatedAt field's value.
func (s *Site) SetCreatedAt(v time.Time) *Site {
	s.CreatedAt = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *Site) SetDescription(v string) *Site {
	s.Description = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *Site) SetGlobalNetworkId(v string) *Site {
	s.GlobalNetworkId = &v
	return s
}

// SetLocation sets the Location field's value.
func (s *Site) SetLocation(v *Location) *Site {
	s.Location = v
	return s
}

// SetSiteArn sets the SiteArn field's value.
func (s *Site) SetSiteArn(v string) *Site {
	s.SiteArn = &v
	return s
}

// SetSiteId sets the SiteId field's value.
func (s *Site) SetSiteId(v string) *Site {
	s.SiteId = &v
	return s
}

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

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

// Describes a tag.
type Tag struct {
	_ struct{} `type:"structure"`

	// The tag key.
	//
	// Length Constraints: Maximum length of 128 characters.
	Key *string `type:"string"`

	// The tag value.
	//
	// Length Constraints: Maximum length of 256 characters.
	Value *string `type:"string"`
}

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

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

// 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.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`

	// The tags to apply to the specified resource.
	//
	// Tags is a required field
	Tags []*Tag `type:"list" required:"true"`
}

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

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

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

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

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

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

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

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

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

// The request was denied due to request throttling.
type ThrottlingException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

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

	// Indicates when to retry the request.
	RetryAfterSeconds *int64 `location:"header" locationName:"Retry-After" type:"integer"`
}

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

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

func newErrorThrottlingException(v protocol.ResponseMetadata) error {
	return &ThrottlingException{
		respMetadata: v,
	}
}

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

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

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

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

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

// RequestID returns the service's response RequestID for request.
func (s ThrottlingException) RequestID() string {
	return s.respMetadata.RequestID
}

// Describes the registration of a transit gateway to a global network.
type TransitGatewayRegistration struct {
	_ struct{} `type:"structure"`

	// The ID of the global network.
	GlobalNetworkId *string `type:"string"`

	// The state of the transit gateway registration.
	State *TransitGatewayRegistrationStateReason `type:"structure"`

	// The Amazon Resource Name (ARN) of the transit gateway.
	TransitGatewayArn *string `type:"string"`
}

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

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

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *TransitGatewayRegistration) SetGlobalNetworkId(v string) *TransitGatewayRegistration {
	s.GlobalNetworkId = &v
	return s
}

// SetState sets the State field's value.
func (s *TransitGatewayRegistration) SetState(v *TransitGatewayRegistrationStateReason) *TransitGatewayRegistration {
	s.State = v
	return s
}

// SetTransitGatewayArn sets the TransitGatewayArn field's value.
func (s *TransitGatewayRegistration) SetTransitGatewayArn(v string) *TransitGatewayRegistration {
	s.TransitGatewayArn = &v
	return s
}

// Describes the status of a transit gateway registration.
type TransitGatewayRegistrationStateReason struct {
	_ struct{} `type:"structure"`

	// The code for the state reason.
	Code *string `type:"string" enum:"TransitGatewayRegistrationState"`

	// The message for the state reason.
	Message *string `type:"string"`
}

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

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

// SetCode sets the Code field's value.
func (s *TransitGatewayRegistrationStateReason) SetCode(v string) *TransitGatewayRegistrationStateReason {
	s.Code = &v
	return s
}

// SetMessage sets the Message field's value.
func (s *TransitGatewayRegistrationStateReason) SetMessage(v string) *TransitGatewayRegistrationStateReason {
	s.Message = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the resource.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`

	// The tag keys to remove from the specified resource.
	//
	// TagKeys is a required field
	TagKeys []*string `location:"querystring" locationName:"tagKeys" type:"list" required:"true"`
}

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

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

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

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

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

// SetTagKeys sets the TagKeys field's value.
func (s *UntagResourceInput) SetTagKeys(v []*string) *UntagResourceInput {
	s.TagKeys = v
	return s
}

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

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

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

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

	// A description of the device.
	//
	// Length Constraints: Maximum length of 256 characters.
	Description *string `type:"string"`

	// The ID of the device.
	//
	// DeviceId is a required field
	DeviceId *string `location:"uri" locationName:"deviceId" type:"string" required:"true"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// Describes a location.
	Location *Location `type:"structure"`

	// The model of the device.
	//
	// Length Constraints: Maximum length of 128 characters.
	Model *string `type:"string"`

	// The serial number of the device.
	//
	// Length Constraints: Maximum length of 128 characters.
	SerialNumber *string `type:"string"`

	// The ID of the site.
	SiteId *string `type:"string"`

	// The type of the device.
	Type *string `type:"string"`

	// The vendor of the device.
	//
	// Length Constraints: Maximum length of 128 characters.
	Vendor *string `type:"string"`
}

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

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

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

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

// SetDescription sets the Description field's value.
func (s *UpdateDeviceInput) SetDescription(v string) *UpdateDeviceInput {
	s.Description = &v
	return s
}

// SetDeviceId sets the DeviceId field's value.
func (s *UpdateDeviceInput) SetDeviceId(v string) *UpdateDeviceInput {
	s.DeviceId = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *UpdateDeviceInput) SetGlobalNetworkId(v string) *UpdateDeviceInput {
	s.GlobalNetworkId = &v
	return s
}

// SetLocation sets the Location field's value.
func (s *UpdateDeviceInput) SetLocation(v *Location) *UpdateDeviceInput {
	s.Location = v
	return s
}

// SetModel sets the Model field's value.
func (s *UpdateDeviceInput) SetModel(v string) *UpdateDeviceInput {
	s.Model = &v
	return s
}

// SetSerialNumber sets the SerialNumber field's value.
func (s *UpdateDeviceInput) SetSerialNumber(v string) *UpdateDeviceInput {
	s.SerialNumber = &v
	return s
}

// SetSiteId sets the SiteId field's value.
func (s *UpdateDeviceInput) SetSiteId(v string) *UpdateDeviceInput {
	s.SiteId = &v
	return s
}

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

// SetVendor sets the Vendor field's value.
func (s *UpdateDeviceInput) SetVendor(v string) *UpdateDeviceInput {
	s.Vendor = &v
	return s
}

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

	// Information about the device.
	Device *Device `type:"structure"`
}

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

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

// SetDevice sets the Device field's value.
func (s *UpdateDeviceOutput) SetDevice(v *Device) *UpdateDeviceOutput {
	s.Device = v
	return s
}

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

	// A description of the global network.
	//
	// Length Constraints: Maximum length of 256 characters.
	Description *string `type:"string"`

	// The ID of your global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`
}

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

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

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

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

// SetDescription sets the Description field's value.
func (s *UpdateGlobalNetworkInput) SetDescription(v string) *UpdateGlobalNetworkInput {
	s.Description = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *UpdateGlobalNetworkInput) SetGlobalNetworkId(v string) *UpdateGlobalNetworkInput {
	s.GlobalNetworkId = &v
	return s
}

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

	// Information about the global network object.
	GlobalNetwork *GlobalNetwork `type:"structure"`
}

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

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

// SetGlobalNetwork sets the GlobalNetwork field's value.
func (s *UpdateGlobalNetworkOutput) SetGlobalNetwork(v *GlobalNetwork) *UpdateGlobalNetworkOutput {
	s.GlobalNetwork = v
	return s
}

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

	// The upload and download speed in Mbps.
	Bandwidth *Bandwidth `type:"structure"`

	// A description of the link.
	//
	// Length Constraints: Maximum length of 256 characters.
	Description *string `type:"string"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The ID of the link.
	//
	// LinkId is a required field
	LinkId *string `location:"uri" locationName:"linkId" type:"string" required:"true"`

	// The provider of the link.
	//
	// Length Constraints: Maximum length of 128 characters.
	Provider *string `type:"string"`

	// The type of the link.
	//
	// Length Constraints: Maximum length of 128 characters.
	Type *string `type:"string"`
}

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

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

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

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

// SetBandwidth sets the Bandwidth field's value.
func (s *UpdateLinkInput) SetBandwidth(v *Bandwidth) *UpdateLinkInput {
	s.Bandwidth = v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdateLinkInput) SetDescription(v string) *UpdateLinkInput {
	s.Description = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *UpdateLinkInput) SetGlobalNetworkId(v string) *UpdateLinkInput {
	s.GlobalNetworkId = &v
	return s
}

// SetLinkId sets the LinkId field's value.
func (s *UpdateLinkInput) SetLinkId(v string) *UpdateLinkInput {
	s.LinkId = &v
	return s
}

// SetProvider sets the Provider field's value.
func (s *UpdateLinkInput) SetProvider(v string) *UpdateLinkInput {
	s.Provider = &v
	return s
}

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

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

	// Information about the link.
	Link *Link `type:"structure"`
}

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

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

// SetLink sets the Link field's value.
func (s *UpdateLinkOutput) SetLink(v *Link) *UpdateLinkOutput {
	s.Link = v
	return s
}

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

	// A description of your site.
	//
	// Length Constraints: Maximum length of 256 characters.
	Description *string `type:"string"`

	// The ID of the global network.
	//
	// GlobalNetworkId is a required field
	GlobalNetworkId *string `location:"uri" locationName:"globalNetworkId" type:"string" required:"true"`

	// The site location:
	//
	//    * Address: The physical address of the site.
	//
	//    * Latitude: The latitude of the site.
	//
	//    * Longitude: The longitude of the site.
	Location *Location `type:"structure"`

	// The ID of your site.
	//
	// SiteId is a required field
	SiteId *string `location:"uri" locationName:"siteId" type:"string" required:"true"`
}

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

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

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

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

// SetDescription sets the Description field's value.
func (s *UpdateSiteInput) SetDescription(v string) *UpdateSiteInput {
	s.Description = &v
	return s
}

// SetGlobalNetworkId sets the GlobalNetworkId field's value.
func (s *UpdateSiteInput) SetGlobalNetworkId(v string) *UpdateSiteInput {
	s.GlobalNetworkId = &v
	return s
}

// SetLocation sets the Location field's value.
func (s *UpdateSiteInput) SetLocation(v *Location) *UpdateSiteInput {
	s.Location = v
	return s
}

// SetSiteId sets the SiteId field's value.
func (s *UpdateSiteInput) SetSiteId(v string) *UpdateSiteInput {
	s.SiteId = &v
	return s
}

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

	// Information about the site.
	Site *Site `type:"structure"`
}

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

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

// SetSite sets the Site field's value.
func (s *UpdateSiteOutput) SetSite(v *Site) *UpdateSiteOutput {
	s.Site = v
	return s
}

// The input fails to satisfy the constraints.
type ValidationException struct {
	_            struct{} `type:"structure"`
	respMetadata protocol.ResponseMetadata

	// The fields that caused the error, if applicable.
	Fields []*ValidationExceptionField `type:"list"`

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

	// The reason for the error.
	Reason *string `type:"string" enum:"ValidationExceptionReason"`
}

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

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

// Describes a validation exception for a field.
type ValidationExceptionField struct {
	_ struct{} `type:"structure"`

	// The message for the field.
	//
	// Message is a required field
	Message *string `type:"string" required:"true"`

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

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

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

// SetMessage sets the Message field's value.
func (s *ValidationExceptionField) SetMessage(v string) *ValidationExceptionField {
	s.Message = &v
	return s
}

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

const (
	// CustomerGatewayAssociationStatePending is a CustomerGatewayAssociationState enum value
	CustomerGatewayAssociationStatePending = "PENDING"

	// CustomerGatewayAssociationStateAvailable is a CustomerGatewayAssociationState enum value
	CustomerGatewayAssociationStateAvailable = "AVAILABLE"

	// CustomerGatewayAssociationStateDeleting is a CustomerGatewayAssociationState enum value
	CustomerGatewayAssociationStateDeleting = "DELETING"

	// CustomerGatewayAssociationStateDeleted is a CustomerGatewayAssociationState enum value
	CustomerGatewayAssociationStateDeleted = "DELETED"
)

const (
	// DeviceStatePending is a DeviceState enum value
	DeviceStatePending = "PENDING"

	// DeviceStateAvailable is a DeviceState enum value
	DeviceStateAvailable = "AVAILABLE"

	// DeviceStateDeleting is a DeviceState enum value
	DeviceStateDeleting = "DELETING"

	// DeviceStateUpdating is a DeviceState enum value
	DeviceStateUpdating = "UPDATING"
)

const (
	// GlobalNetworkStatePending is a GlobalNetworkState enum value
	GlobalNetworkStatePending = "PENDING"

	// GlobalNetworkStateAvailable is a GlobalNetworkState enum value
	GlobalNetworkStateAvailable = "AVAILABLE"

	// GlobalNetworkStateDeleting is a GlobalNetworkState enum value
	GlobalNetworkStateDeleting = "DELETING"

	// GlobalNetworkStateUpdating is a GlobalNetworkState enum value
	GlobalNetworkStateUpdating = "UPDATING"
)

const (
	// LinkAssociationStatePending is a LinkAssociationState enum value
	LinkAssociationStatePending = "PENDING"

	// LinkAssociationStateAvailable is a LinkAssociationState enum value
	LinkAssociationStateAvailable = "AVAILABLE"

	// LinkAssociationStateDeleting is a LinkAssociationState enum value
	LinkAssociationStateDeleting = "DELETING"

	// LinkAssociationStateDeleted is a LinkAssociationState enum value
	LinkAssociationStateDeleted = "DELETED"
)

const (
	// LinkStatePending is a LinkState enum value
	LinkStatePending = "PENDING"

	// LinkStateAvailable is a LinkState enum value
	LinkStateAvailable = "AVAILABLE"

	// LinkStateDeleting is a LinkState enum value
	LinkStateDeleting = "DELETING"

	// LinkStateUpdating is a LinkState enum value
	LinkStateUpdating = "UPDATING"
)

const (
	// SiteStatePending is a SiteState enum value
	SiteStatePending = "PENDING"

	// SiteStateAvailable is a SiteState enum value
	SiteStateAvailable = "AVAILABLE"

	// SiteStateDeleting is a SiteState enum value
	SiteStateDeleting = "DELETING"

	// SiteStateUpdating is a SiteState enum value
	SiteStateUpdating = "UPDATING"
)

const (
	// TransitGatewayRegistrationStatePending is a TransitGatewayRegistrationState enum value
	TransitGatewayRegistrationStatePending = "PENDING"

	// TransitGatewayRegistrationStateAvailable is a TransitGatewayRegistrationState enum value
	TransitGatewayRegistrationStateAvailable = "AVAILABLE"

	// TransitGatewayRegistrationStateDeleting is a TransitGatewayRegistrationState enum value
	TransitGatewayRegistrationStateDeleting = "DELETING"

	// TransitGatewayRegistrationStateDeleted is a TransitGatewayRegistrationState enum value
	TransitGatewayRegistrationStateDeleted = "DELETED"

	// TransitGatewayRegistrationStateFailed is a TransitGatewayRegistrationState enum value
	TransitGatewayRegistrationStateFailed = "FAILED"
)

const (
	// ValidationExceptionReasonUnknownOperation is a ValidationExceptionReason enum value
	ValidationExceptionReasonUnknownOperation = "UnknownOperation"

	// ValidationExceptionReasonCannotParse is a ValidationExceptionReason enum value
	ValidationExceptionReasonCannotParse = "CannotParse"

	// ValidationExceptionReasonFieldValidationFailed is a ValidationExceptionReason enum value
	ValidationExceptionReasonFieldValidationFailed = "FieldValidationFailed"

	// ValidationExceptionReasonOther is a ValidationExceptionReason enum value
	ValidationExceptionReasonOther = "Other"
)
