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

package transfer

import (
	"fmt"
	"time"

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

const opCreateAccess = "CreateAccess"

// CreateAccessRequest generates a "aws/request.Request" representing the
// client's request for the CreateAccess 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 CreateAccess for more information on using the CreateAccess
// 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 CreateAccessRequest method.
//	req, resp := client.CreateAccessRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateAccess
func (c *Transfer) CreateAccessRequest(input *CreateAccessInput) (req *request.Request, output *CreateAccessOutput) {
	op := &request.Operation{
		Name:       opCreateAccess,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateAccessInput{}
	}

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

// CreateAccess API operation for AWS Transfer Family.
//
// Used by administrators to choose which groups in the directory should have
// access to upload and download files over the enabled protocols using Transfer
// Family. For example, a Microsoft Active Directory might contain 50,000 users,
// but only a small fraction might need the ability to transfer files to the
// server. An administrator can use CreateAccess to limit the access to the
// correct set of users who need this ability.
//
// 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 Transfer Family's
// API operation CreateAccess for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - ResourceExistsException
//     The requested resource does not exist, or exists in a region other than the
//     one specified for the command.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateAccess
func (c *Transfer) CreateAccess(input *CreateAccessInput) (*CreateAccessOutput, error) {
	req, out := c.CreateAccessRequest(input)
	return out, req.Send()
}

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

const opCreateAgreement = "CreateAgreement"

// CreateAgreementRequest generates a "aws/request.Request" representing the
// client's request for the CreateAgreement 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 CreateAgreement for more information on using the CreateAgreement
// 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 CreateAgreementRequest method.
//	req, resp := client.CreateAgreementRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateAgreement
func (c *Transfer) CreateAgreementRequest(input *CreateAgreementInput) (req *request.Request, output *CreateAgreementOutput) {
	op := &request.Operation{
		Name:       opCreateAgreement,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateAgreementInput{}
	}

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

// CreateAgreement API operation for AWS Transfer Family.
//
// Creates an agreement. An agreement is a bilateral trading partner agreement,
// or partnership, between an Transfer Family server and an AS2 process. The
// agreement defines the file and message transfer relationship between the
// server and the AS2 process. To define an agreement, Transfer Family combines
// a server, local profile, partner profile, certificate, and other attributes.
//
// The partner is identified with the PartnerProfileId, and the AS2 process
// is identified with the LocalProfileId.
//
// 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 Transfer Family's
// API operation CreateAgreement for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - ResourceExistsException
//     The requested resource does not exist, or exists in a region other than the
//     one specified for the command.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateAgreement
func (c *Transfer) CreateAgreement(input *CreateAgreementInput) (*CreateAgreementOutput, error) {
	req, out := c.CreateAgreementRequest(input)
	return out, req.Send()
}

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

const opCreateConnector = "CreateConnector"

// CreateConnectorRequest generates a "aws/request.Request" representing the
// client's request for the CreateConnector 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 CreateConnector for more information on using the CreateConnector
// 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 CreateConnectorRequest method.
//	req, resp := client.CreateConnectorRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateConnector
func (c *Transfer) CreateConnectorRequest(input *CreateConnectorInput) (req *request.Request, output *CreateConnectorOutput) {
	op := &request.Operation{
		Name:       opCreateConnector,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateConnectorInput{}
	}

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

// CreateConnector API operation for AWS Transfer Family.
//
// Creates the connector, which captures the parameters for a connection for
// the AS2 or SFTP protocol. For AS2, the connector is required for sending
// files to an externally hosted AS2 server. For SFTP, the connector is required
// when sending files to an SFTP server or receiving files from an SFTP server.
// For more details about connectors, see Configure AS2 connectors (https://docs.aws.amazon.com/transfer/latest/userguide/configure-as2-connector.html)
// and Create SFTP connectors (https://docs.aws.amazon.com/transfer/latest/userguide/configure-sftp-connector.html).
//
// You must specify exactly one configuration object: either for AS2 (As2Config)
// or SFTP (SftpConfig).
//
// 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 Transfer Family's
// API operation CreateConnector for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - ResourceExistsException
//     The requested resource does not exist, or exists in a region other than the
//     one specified for the command.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateConnector
func (c *Transfer) CreateConnector(input *CreateConnectorInput) (*CreateConnectorOutput, error) {
	req, out := c.CreateConnectorRequest(input)
	return out, req.Send()
}

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

const opCreateProfile = "CreateProfile"

// CreateProfileRequest generates a "aws/request.Request" representing the
// client's request for the CreateProfile 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 CreateProfile for more information on using the CreateProfile
// 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 CreateProfileRequest method.
//	req, resp := client.CreateProfileRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateProfile
func (c *Transfer) CreateProfileRequest(input *CreateProfileInput) (req *request.Request, output *CreateProfileOutput) {
	op := &request.Operation{
		Name:       opCreateProfile,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateProfileInput{}
	}

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

// CreateProfile API operation for AWS Transfer Family.
//
// Creates the local or partner profile to use for AS2 transfers.
//
// 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 Transfer Family's
// API operation CreateProfile for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateProfile
func (c *Transfer) CreateProfile(input *CreateProfileInput) (*CreateProfileOutput, error) {
	req, out := c.CreateProfileRequest(input)
	return out, req.Send()
}

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

const opCreateServer = "CreateServer"

// CreateServerRequest generates a "aws/request.Request" representing the
// client's request for the CreateServer 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 CreateServer for more information on using the CreateServer
// 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 CreateServerRequest method.
//	req, resp := client.CreateServerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateServer
func (c *Transfer) CreateServerRequest(input *CreateServerInput) (req *request.Request, output *CreateServerOutput) {
	op := &request.Operation{
		Name:       opCreateServer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateServerInput{}
	}

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

// CreateServer API operation for AWS Transfer Family.
//
// Instantiates an auto-scaling virtual server based on the selected file transfer
// protocol in Amazon Web Services. When you make updates to your file transfer
// protocol-enabled server or when you work with users, use the service-generated
// ServerId property that is assigned to the newly created server.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Transfer Family's
// API operation CreateServer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - ResourceExistsException
//     The requested resource does not exist, or exists in a region other than the
//     one specified for the command.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateServer
func (c *Transfer) CreateServer(input *CreateServerInput) (*CreateServerOutput, error) {
	req, out := c.CreateServerRequest(input)
	return out, req.Send()
}

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

const opCreateUser = "CreateUser"

// CreateUserRequest generates a "aws/request.Request" representing the
// client's request for the CreateUser 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 CreateUser for more information on using the CreateUser
// 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 CreateUserRequest method.
//	req, resp := client.CreateUserRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateUser
func (c *Transfer) CreateUserRequest(input *CreateUserInput) (req *request.Request, output *CreateUserOutput) {
	op := &request.Operation{
		Name:       opCreateUser,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateUserInput{}
	}

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

// CreateUser API operation for AWS Transfer Family.
//
// Creates a user and associates them with an existing file transfer protocol-enabled
// server. You can only create and associate users with servers that have the
// IdentityProviderType set to SERVICE_MANAGED. Using parameters for CreateUser,
// you can specify the user name, set the home directory, store the user's public
// key, and assign the user's Identity and Access Management (IAM) role. You
// can also optionally add a session policy, and assign metadata with tags that
// can be used to group and search for users.
//
// 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 Transfer Family's
// API operation CreateUser for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - ResourceExistsException
//     The requested resource does not exist, or exists in a region other than the
//     one specified for the command.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateUser
func (c *Transfer) CreateUser(input *CreateUserInput) (*CreateUserOutput, error) {
	req, out := c.CreateUserRequest(input)
	return out, req.Send()
}

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

const opCreateWorkflow = "CreateWorkflow"

// CreateWorkflowRequest generates a "aws/request.Request" representing the
// client's request for the CreateWorkflow 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 CreateWorkflow for more information on using the CreateWorkflow
// 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 CreateWorkflowRequest method.
//	req, resp := client.CreateWorkflowRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateWorkflow
func (c *Transfer) CreateWorkflowRequest(input *CreateWorkflowInput) (req *request.Request, output *CreateWorkflowOutput) {
	op := &request.Operation{
		Name:       opCreateWorkflow,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateWorkflowInput{}
	}

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

// CreateWorkflow API operation for AWS Transfer Family.
//
// Allows you to create a workflow with specified steps and step details the
// workflow invokes after file transfer completes. After creating a workflow,
// you can associate the workflow created with any transfer servers by specifying
// the workflow-details field in CreateServer and UpdateServer operations.
//
// 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 Transfer Family's
// API operation CreateWorkflow for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - ResourceExistsException
//     The requested resource does not exist, or exists in a region other than the
//     one specified for the command.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/CreateWorkflow
func (c *Transfer) CreateWorkflow(input *CreateWorkflowInput) (*CreateWorkflowOutput, error) {
	req, out := c.CreateWorkflowRequest(input)
	return out, req.Send()
}

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

const opDeleteAccess = "DeleteAccess"

// DeleteAccessRequest generates a "aws/request.Request" representing the
// client's request for the DeleteAccess 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 DeleteAccess for more information on using the DeleteAccess
// 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 DeleteAccessRequest method.
//	req, resp := client.DeleteAccessRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteAccess
func (c *Transfer) DeleteAccessRequest(input *DeleteAccessInput) (req *request.Request, output *DeleteAccessOutput) {
	op := &request.Operation{
		Name:       opDeleteAccess,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteAccessInput{}
	}

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

// DeleteAccess API operation for AWS Transfer Family.
//
// Allows you to delete the access specified in the ServerID and ExternalID
// parameters.
//
// 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 Transfer Family's
// API operation DeleteAccess for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteAccess
func (c *Transfer) DeleteAccess(input *DeleteAccessInput) (*DeleteAccessOutput, error) {
	req, out := c.DeleteAccessRequest(input)
	return out, req.Send()
}

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

const opDeleteAgreement = "DeleteAgreement"

// DeleteAgreementRequest generates a "aws/request.Request" representing the
// client's request for the DeleteAgreement 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 DeleteAgreement for more information on using the DeleteAgreement
// 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 DeleteAgreementRequest method.
//	req, resp := client.DeleteAgreementRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteAgreement
func (c *Transfer) DeleteAgreementRequest(input *DeleteAgreementInput) (req *request.Request, output *DeleteAgreementOutput) {
	op := &request.Operation{
		Name:       opDeleteAgreement,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteAgreementInput{}
	}

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

// DeleteAgreement API operation for AWS Transfer Family.
//
// Delete the agreement that's specified in the provided AgreementId.
//
// 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 Transfer Family's
// API operation DeleteAgreement for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteAgreement
func (c *Transfer) DeleteAgreement(input *DeleteAgreementInput) (*DeleteAgreementOutput, error) {
	req, out := c.DeleteAgreementRequest(input)
	return out, req.Send()
}

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

const opDeleteCertificate = "DeleteCertificate"

// DeleteCertificateRequest generates a "aws/request.Request" representing the
// client's request for the DeleteCertificate 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 DeleteCertificate for more information on using the DeleteCertificate
// 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 DeleteCertificateRequest method.
//	req, resp := client.DeleteCertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteCertificate
func (c *Transfer) DeleteCertificateRequest(input *DeleteCertificateInput) (req *request.Request, output *DeleteCertificateOutput) {
	op := &request.Operation{
		Name:       opDeleteCertificate,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteCertificateInput{}
	}

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

// DeleteCertificate API operation for AWS Transfer Family.
//
// Deletes the certificate that's specified in the CertificateId parameter.
//
// 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 Transfer Family's
// API operation DeleteCertificate for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteCertificate
func (c *Transfer) DeleteCertificate(input *DeleteCertificateInput) (*DeleteCertificateOutput, error) {
	req, out := c.DeleteCertificateRequest(input)
	return out, req.Send()
}

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

const opDeleteConnector = "DeleteConnector"

// DeleteConnectorRequest generates a "aws/request.Request" representing the
// client's request for the DeleteConnector 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 DeleteConnector for more information on using the DeleteConnector
// 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 DeleteConnectorRequest method.
//	req, resp := client.DeleteConnectorRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteConnector
func (c *Transfer) DeleteConnectorRequest(input *DeleteConnectorInput) (req *request.Request, output *DeleteConnectorOutput) {
	op := &request.Operation{
		Name:       opDeleteConnector,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteConnectorInput{}
	}

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

// DeleteConnector API operation for AWS Transfer Family.
//
// Deletes the connector that's specified in the provided ConnectorId.
//
// 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 Transfer Family's
// API operation DeleteConnector for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteConnector
func (c *Transfer) DeleteConnector(input *DeleteConnectorInput) (*DeleteConnectorOutput, error) {
	req, out := c.DeleteConnectorRequest(input)
	return out, req.Send()
}

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

const opDeleteHostKey = "DeleteHostKey"

// DeleteHostKeyRequest generates a "aws/request.Request" representing the
// client's request for the DeleteHostKey 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 DeleteHostKey for more information on using the DeleteHostKey
// 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 DeleteHostKeyRequest method.
//	req, resp := client.DeleteHostKeyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteHostKey
func (c *Transfer) DeleteHostKeyRequest(input *DeleteHostKeyInput) (req *request.Request, output *DeleteHostKeyOutput) {
	op := &request.Operation{
		Name:       opDeleteHostKey,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteHostKeyInput{}
	}

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

// DeleteHostKey API operation for AWS Transfer Family.
//
// Deletes the host key that's specified in the HostKeyId parameter.
//
// 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 Transfer Family's
// API operation DeleteHostKey for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteHostKey
func (c *Transfer) DeleteHostKey(input *DeleteHostKeyInput) (*DeleteHostKeyOutput, error) {
	req, out := c.DeleteHostKeyRequest(input)
	return out, req.Send()
}

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

const opDeleteProfile = "DeleteProfile"

// DeleteProfileRequest generates a "aws/request.Request" representing the
// client's request for the DeleteProfile 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 DeleteProfile for more information on using the DeleteProfile
// 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 DeleteProfileRequest method.
//	req, resp := client.DeleteProfileRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteProfile
func (c *Transfer) DeleteProfileRequest(input *DeleteProfileInput) (req *request.Request, output *DeleteProfileOutput) {
	op := &request.Operation{
		Name:       opDeleteProfile,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteProfileInput{}
	}

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

// DeleteProfile API operation for AWS Transfer Family.
//
// Deletes the profile that's specified in the ProfileId parameter.
//
// 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 Transfer Family's
// API operation DeleteProfile for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteProfile
func (c *Transfer) DeleteProfile(input *DeleteProfileInput) (*DeleteProfileOutput, error) {
	req, out := c.DeleteProfileRequest(input)
	return out, req.Send()
}

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

const opDeleteServer = "DeleteServer"

// DeleteServerRequest generates a "aws/request.Request" representing the
// client's request for the DeleteServer 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 DeleteServer for more information on using the DeleteServer
// 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 DeleteServerRequest method.
//	req, resp := client.DeleteServerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteServer
func (c *Transfer) DeleteServerRequest(input *DeleteServerInput) (req *request.Request, output *DeleteServerOutput) {
	op := &request.Operation{
		Name:       opDeleteServer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteServerInput{}
	}

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

// DeleteServer API operation for AWS Transfer Family.
//
// Deletes the file transfer protocol-enabled server that you specify.
//
// No response returns from this operation.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Transfer Family's
// API operation DeleteServer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteServer
func (c *Transfer) DeleteServer(input *DeleteServerInput) (*DeleteServerOutput, error) {
	req, out := c.DeleteServerRequest(input)
	return out, req.Send()
}

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

const opDeleteSshPublicKey = "DeleteSshPublicKey"

// DeleteSshPublicKeyRequest generates a "aws/request.Request" representing the
// client's request for the DeleteSshPublicKey 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 DeleteSshPublicKey for more information on using the DeleteSshPublicKey
// 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 DeleteSshPublicKeyRequest method.
//	req, resp := client.DeleteSshPublicKeyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteSshPublicKey
func (c *Transfer) DeleteSshPublicKeyRequest(input *DeleteSshPublicKeyInput) (req *request.Request, output *DeleteSshPublicKeyOutput) {
	op := &request.Operation{
		Name:       opDeleteSshPublicKey,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteSshPublicKeyInput{}
	}

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

// DeleteSshPublicKey API operation for AWS Transfer Family.
//
// Deletes a user's Secure Shell (SSH) public key.
//
// 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 Transfer Family's
// API operation DeleteSshPublicKey for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteSshPublicKey
func (c *Transfer) DeleteSshPublicKey(input *DeleteSshPublicKeyInput) (*DeleteSshPublicKeyOutput, error) {
	req, out := c.DeleteSshPublicKeyRequest(input)
	return out, req.Send()
}

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

const opDeleteUser = "DeleteUser"

// DeleteUserRequest generates a "aws/request.Request" representing the
// client's request for the DeleteUser 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 DeleteUser for more information on using the DeleteUser
// 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 DeleteUserRequest method.
//	req, resp := client.DeleteUserRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteUser
func (c *Transfer) DeleteUserRequest(input *DeleteUserInput) (req *request.Request, output *DeleteUserOutput) {
	op := &request.Operation{
		Name:       opDeleteUser,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteUserInput{}
	}

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

// DeleteUser API operation for AWS Transfer Family.
//
// Deletes the user belonging to a file transfer protocol-enabled server you
// specify.
//
// No response returns from this operation.
//
// When you delete a user from a server, the user's information is lost.
//
// 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 Transfer Family's
// API operation DeleteUser for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteUser
func (c *Transfer) DeleteUser(input *DeleteUserInput) (*DeleteUserOutput, error) {
	req, out := c.DeleteUserRequest(input)
	return out, req.Send()
}

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

const opDeleteWorkflow = "DeleteWorkflow"

// DeleteWorkflowRequest generates a "aws/request.Request" representing the
// client's request for the DeleteWorkflow 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 DeleteWorkflow for more information on using the DeleteWorkflow
// 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 DeleteWorkflowRequest method.
//	req, resp := client.DeleteWorkflowRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteWorkflow
func (c *Transfer) DeleteWorkflowRequest(input *DeleteWorkflowInput) (req *request.Request, output *DeleteWorkflowOutput) {
	op := &request.Operation{
		Name:       opDeleteWorkflow,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteWorkflowInput{}
	}

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

// DeleteWorkflow API operation for AWS Transfer Family.
//
// Deletes the specified workflow.
//
// 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 Transfer Family's
// API operation DeleteWorkflow for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DeleteWorkflow
func (c *Transfer) DeleteWorkflow(input *DeleteWorkflowInput) (*DeleteWorkflowOutput, error) {
	req, out := c.DeleteWorkflowRequest(input)
	return out, req.Send()
}

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

const opDescribeAccess = "DescribeAccess"

// DescribeAccessRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAccess 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 DescribeAccess for more information on using the DescribeAccess
// 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 DescribeAccessRequest method.
//	req, resp := client.DescribeAccessRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeAccess
func (c *Transfer) DescribeAccessRequest(input *DescribeAccessInput) (req *request.Request, output *DescribeAccessOutput) {
	op := &request.Operation{
		Name:       opDescribeAccess,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeAccessInput{}
	}

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

// DescribeAccess API operation for AWS Transfer Family.
//
// Describes the access that is assigned to the specific file transfer protocol-enabled
// server, as identified by its ServerId property and its ExternalId.
//
// The response from this call returns the properties of the access that is
// associated with the ServerId value that was 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 Transfer Family's
// API operation DescribeAccess for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeAccess
func (c *Transfer) DescribeAccess(input *DescribeAccessInput) (*DescribeAccessOutput, error) {
	req, out := c.DescribeAccessRequest(input)
	return out, req.Send()
}

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

const opDescribeAgreement = "DescribeAgreement"

// DescribeAgreementRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAgreement 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 DescribeAgreement for more information on using the DescribeAgreement
// 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 DescribeAgreementRequest method.
//	req, resp := client.DescribeAgreementRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeAgreement
func (c *Transfer) DescribeAgreementRequest(input *DescribeAgreementInput) (req *request.Request, output *DescribeAgreementOutput) {
	op := &request.Operation{
		Name:       opDescribeAgreement,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeAgreementInput{}
	}

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

// DescribeAgreement API operation for AWS Transfer Family.
//
// Describes the agreement that's identified by the AgreementId.
//
// 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 Transfer Family's
// API operation DescribeAgreement for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeAgreement
func (c *Transfer) DescribeAgreement(input *DescribeAgreementInput) (*DescribeAgreementOutput, error) {
	req, out := c.DescribeAgreementRequest(input)
	return out, req.Send()
}

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

const opDescribeCertificate = "DescribeCertificate"

// DescribeCertificateRequest generates a "aws/request.Request" representing the
// client's request for the DescribeCertificate 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 DescribeCertificate for more information on using the DescribeCertificate
// 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 DescribeCertificateRequest method.
//	req, resp := client.DescribeCertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeCertificate
func (c *Transfer) DescribeCertificateRequest(input *DescribeCertificateInput) (req *request.Request, output *DescribeCertificateOutput) {
	op := &request.Operation{
		Name:       opDescribeCertificate,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeCertificateInput{}
	}

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

// DescribeCertificate API operation for AWS Transfer Family.
//
// Describes the certificate that's identified by the CertificateId.
//
// 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 Transfer Family's
// API operation DescribeCertificate for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeCertificate
func (c *Transfer) DescribeCertificate(input *DescribeCertificateInput) (*DescribeCertificateOutput, error) {
	req, out := c.DescribeCertificateRequest(input)
	return out, req.Send()
}

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

const opDescribeConnector = "DescribeConnector"

// DescribeConnectorRequest generates a "aws/request.Request" representing the
// client's request for the DescribeConnector 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 DescribeConnector for more information on using the DescribeConnector
// 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 DescribeConnectorRequest method.
//	req, resp := client.DescribeConnectorRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeConnector
func (c *Transfer) DescribeConnectorRequest(input *DescribeConnectorInput) (req *request.Request, output *DescribeConnectorOutput) {
	op := &request.Operation{
		Name:       opDescribeConnector,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeConnectorInput{}
	}

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

// DescribeConnector API operation for AWS Transfer Family.
//
// Describes the connector that's identified by the ConnectorId.
//
// 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 Transfer Family's
// API operation DescribeConnector for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeConnector
func (c *Transfer) DescribeConnector(input *DescribeConnectorInput) (*DescribeConnectorOutput, error) {
	req, out := c.DescribeConnectorRequest(input)
	return out, req.Send()
}

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

const opDescribeExecution = "DescribeExecution"

// DescribeExecutionRequest generates a "aws/request.Request" representing the
// client's request for the DescribeExecution 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 DescribeExecution for more information on using the DescribeExecution
// 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 DescribeExecutionRequest method.
//	req, resp := client.DescribeExecutionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeExecution
func (c *Transfer) DescribeExecutionRequest(input *DescribeExecutionInput) (req *request.Request, output *DescribeExecutionOutput) {
	op := &request.Operation{
		Name:       opDescribeExecution,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeExecutionInput{}
	}

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

// DescribeExecution API operation for AWS Transfer Family.
//
// You can use DescribeExecution to check the details of the execution of the
// specified workflow.
//
// This API call only returns details for in-progress workflows.
//
// If you provide an ID for an execution that is not in progress, or if the
// execution doesn't match the specified workflow ID, you receive a ResourceNotFound
// exception.
//
// 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 Transfer Family's
// API operation DescribeExecution for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeExecution
func (c *Transfer) DescribeExecution(input *DescribeExecutionInput) (*DescribeExecutionOutput, error) {
	req, out := c.DescribeExecutionRequest(input)
	return out, req.Send()
}

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

const opDescribeHostKey = "DescribeHostKey"

// DescribeHostKeyRequest generates a "aws/request.Request" representing the
// client's request for the DescribeHostKey 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 DescribeHostKey for more information on using the DescribeHostKey
// 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 DescribeHostKeyRequest method.
//	req, resp := client.DescribeHostKeyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeHostKey
func (c *Transfer) DescribeHostKeyRequest(input *DescribeHostKeyInput) (req *request.Request, output *DescribeHostKeyOutput) {
	op := &request.Operation{
		Name:       opDescribeHostKey,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeHostKeyInput{}
	}

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

// DescribeHostKey API operation for AWS Transfer Family.
//
// Returns the details of the host key that's specified by the HostKeyId and
// ServerId.
//
// 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 Transfer Family's
// API operation DescribeHostKey for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeHostKey
func (c *Transfer) DescribeHostKey(input *DescribeHostKeyInput) (*DescribeHostKeyOutput, error) {
	req, out := c.DescribeHostKeyRequest(input)
	return out, req.Send()
}

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

const opDescribeProfile = "DescribeProfile"

// DescribeProfileRequest generates a "aws/request.Request" representing the
// client's request for the DescribeProfile 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 DescribeProfile for more information on using the DescribeProfile
// 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 DescribeProfileRequest method.
//	req, resp := client.DescribeProfileRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeProfile
func (c *Transfer) DescribeProfileRequest(input *DescribeProfileInput) (req *request.Request, output *DescribeProfileOutput) {
	op := &request.Operation{
		Name:       opDescribeProfile,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeProfileInput{}
	}

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

// DescribeProfile API operation for AWS Transfer Family.
//
// Returns the details of the profile that's specified by the ProfileId.
//
// 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 Transfer Family's
// API operation DescribeProfile for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeProfile
func (c *Transfer) DescribeProfile(input *DescribeProfileInput) (*DescribeProfileOutput, error) {
	req, out := c.DescribeProfileRequest(input)
	return out, req.Send()
}

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

const opDescribeSecurityPolicy = "DescribeSecurityPolicy"

// DescribeSecurityPolicyRequest generates a "aws/request.Request" representing the
// client's request for the DescribeSecurityPolicy 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 DescribeSecurityPolicy for more information on using the DescribeSecurityPolicy
// 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 DescribeSecurityPolicyRequest method.
//	req, resp := client.DescribeSecurityPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeSecurityPolicy
func (c *Transfer) DescribeSecurityPolicyRequest(input *DescribeSecurityPolicyInput) (req *request.Request, output *DescribeSecurityPolicyOutput) {
	op := &request.Operation{
		Name:       opDescribeSecurityPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeSecurityPolicyInput{}
	}

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

// DescribeSecurityPolicy API operation for AWS Transfer Family.
//
// Describes the security policy that is attached to your server or SFTP connector.
// The response contains a description of the security policy's properties.
// For more information about security policies, see Working with security policies
// for servers (https://docs.aws.amazon.com/transfer/latest/userguide/security-policies.html)
// or Working with security policies for SFTP connectors (https://docs.aws.amazon.com/transfer/latest/userguide/security-policies-connectors.html).
//
// 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 Transfer Family's
// API operation DescribeSecurityPolicy for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeSecurityPolicy
func (c *Transfer) DescribeSecurityPolicy(input *DescribeSecurityPolicyInput) (*DescribeSecurityPolicyOutput, error) {
	req, out := c.DescribeSecurityPolicyRequest(input)
	return out, req.Send()
}

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

const opDescribeServer = "DescribeServer"

// DescribeServerRequest generates a "aws/request.Request" representing the
// client's request for the DescribeServer 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 DescribeServer for more information on using the DescribeServer
// 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 DescribeServerRequest method.
//	req, resp := client.DescribeServerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeServer
func (c *Transfer) DescribeServerRequest(input *DescribeServerInput) (req *request.Request, output *DescribeServerOutput) {
	op := &request.Operation{
		Name:       opDescribeServer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeServerInput{}
	}

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

// DescribeServer API operation for AWS Transfer Family.
//
// Describes a file transfer protocol-enabled server that you specify by passing
// the ServerId parameter.
//
// The response contains a description of a server's properties. When you set
// EndpointType to VPC, the response will contain the EndpointDetails.
//
// 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 Transfer Family's
// API operation DescribeServer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeServer
func (c *Transfer) DescribeServer(input *DescribeServerInput) (*DescribeServerOutput, error) {
	req, out := c.DescribeServerRequest(input)
	return out, req.Send()
}

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

const opDescribeUser = "DescribeUser"

// DescribeUserRequest generates a "aws/request.Request" representing the
// client's request for the DescribeUser 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 DescribeUser for more information on using the DescribeUser
// 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 DescribeUserRequest method.
//	req, resp := client.DescribeUserRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeUser
func (c *Transfer) DescribeUserRequest(input *DescribeUserInput) (req *request.Request, output *DescribeUserOutput) {
	op := &request.Operation{
		Name:       opDescribeUser,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeUserInput{}
	}

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

// DescribeUser API operation for AWS Transfer Family.
//
// Describes the user assigned to the specific file transfer protocol-enabled
// server, as identified by its ServerId property.
//
// The response from this call returns the properties of the user associated
// with the ServerId value that was 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 Transfer Family's
// API operation DescribeUser for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeUser
func (c *Transfer) DescribeUser(input *DescribeUserInput) (*DescribeUserOutput, error) {
	req, out := c.DescribeUserRequest(input)
	return out, req.Send()
}

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

const opDescribeWorkflow = "DescribeWorkflow"

// DescribeWorkflowRequest generates a "aws/request.Request" representing the
// client's request for the DescribeWorkflow 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 DescribeWorkflow for more information on using the DescribeWorkflow
// 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 DescribeWorkflowRequest method.
//	req, resp := client.DescribeWorkflowRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeWorkflow
func (c *Transfer) DescribeWorkflowRequest(input *DescribeWorkflowInput) (req *request.Request, output *DescribeWorkflowOutput) {
	op := &request.Operation{
		Name:       opDescribeWorkflow,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeWorkflowInput{}
	}

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

// DescribeWorkflow API operation for AWS Transfer Family.
//
// Describes the specified workflow.
//
// 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 Transfer Family's
// API operation DescribeWorkflow for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/DescribeWorkflow
func (c *Transfer) DescribeWorkflow(input *DescribeWorkflowInput) (*DescribeWorkflowOutput, error) {
	req, out := c.DescribeWorkflowRequest(input)
	return out, req.Send()
}

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

const opImportCertificate = "ImportCertificate"

// ImportCertificateRequest generates a "aws/request.Request" representing the
// client's request for the ImportCertificate 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 ImportCertificate for more information on using the ImportCertificate
// 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 ImportCertificateRequest method.
//	req, resp := client.ImportCertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ImportCertificate
func (c *Transfer) ImportCertificateRequest(input *ImportCertificateInput) (req *request.Request, output *ImportCertificateOutput) {
	op := &request.Operation{
		Name:       opImportCertificate,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ImportCertificateInput{}
	}

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

// ImportCertificate API operation for AWS Transfer Family.
//
// Imports the signing and encryption certificates that you need to create local
// (AS2) profiles and partner profiles.
//
// 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 Transfer Family's
// API operation ImportCertificate for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ImportCertificate
func (c *Transfer) ImportCertificate(input *ImportCertificateInput) (*ImportCertificateOutput, error) {
	req, out := c.ImportCertificateRequest(input)
	return out, req.Send()
}

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

const opImportHostKey = "ImportHostKey"

// ImportHostKeyRequest generates a "aws/request.Request" representing the
// client's request for the ImportHostKey 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 ImportHostKey for more information on using the ImportHostKey
// 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 ImportHostKeyRequest method.
//	req, resp := client.ImportHostKeyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ImportHostKey
func (c *Transfer) ImportHostKeyRequest(input *ImportHostKeyInput) (req *request.Request, output *ImportHostKeyOutput) {
	op := &request.Operation{
		Name:       opImportHostKey,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ImportHostKeyInput{}
	}

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

// ImportHostKey API operation for AWS Transfer Family.
//
// Adds a host key to the server that's specified by the ServerId parameter.
//
// 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 Transfer Family's
// API operation ImportHostKey for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - ResourceExistsException
//     The requested resource does not exist, or exists in a region other than the
//     one specified for the command.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ImportHostKey
func (c *Transfer) ImportHostKey(input *ImportHostKeyInput) (*ImportHostKeyOutput, error) {
	req, out := c.ImportHostKeyRequest(input)
	return out, req.Send()
}

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

const opImportSshPublicKey = "ImportSshPublicKey"

// ImportSshPublicKeyRequest generates a "aws/request.Request" representing the
// client's request for the ImportSshPublicKey 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 ImportSshPublicKey for more information on using the ImportSshPublicKey
// 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 ImportSshPublicKeyRequest method.
//	req, resp := client.ImportSshPublicKeyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ImportSshPublicKey
func (c *Transfer) ImportSshPublicKeyRequest(input *ImportSshPublicKeyInput) (req *request.Request, output *ImportSshPublicKeyOutput) {
	op := &request.Operation{
		Name:       opImportSshPublicKey,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ImportSshPublicKeyInput{}
	}

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

// ImportSshPublicKey API operation for AWS Transfer Family.
//
// Adds a Secure Shell (SSH) public key to a Transfer Family user identified
// by a UserName value assigned to the specific file transfer protocol-enabled
// server, identified by ServerId.
//
// The response returns the UserName value, the ServerId value, and the name
// of the SshPublicKeyId.
//
// 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 Transfer Family's
// API operation ImportSshPublicKey for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - ResourceExistsException
//     The requested resource does not exist, or exists in a region other than the
//     one specified for the command.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ImportSshPublicKey
func (c *Transfer) ImportSshPublicKey(input *ImportSshPublicKeyInput) (*ImportSshPublicKeyOutput, error) {
	req, out := c.ImportSshPublicKeyRequest(input)
	return out, req.Send()
}

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

const opListAccesses = "ListAccesses"

// ListAccessesRequest generates a "aws/request.Request" representing the
// client's request for the ListAccesses 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 ListAccesses for more information on using the ListAccesses
// 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 ListAccessesRequest method.
//	req, resp := client.ListAccessesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListAccesses
func (c *Transfer) ListAccessesRequest(input *ListAccessesInput) (req *request.Request, output *ListAccessesOutput) {
	op := &request.Operation{
		Name:       opListAccesses,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListAccessesInput{}
	}

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

// ListAccesses API operation for AWS Transfer Family.
//
// Lists the details for all the accesses you have on your server.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Transfer Family's
// API operation ListAccesses for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - InvalidNextTokenException
//     The NextToken parameter that was passed is invalid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListAccesses
func (c *Transfer) ListAccesses(input *ListAccessesInput) (*ListAccessesOutput, error) {
	req, out := c.ListAccessesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListAgreements = "ListAgreements"

// ListAgreementsRequest generates a "aws/request.Request" representing the
// client's request for the ListAgreements 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 ListAgreements for more information on using the ListAgreements
// 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 ListAgreementsRequest method.
//	req, resp := client.ListAgreementsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListAgreements
func (c *Transfer) ListAgreementsRequest(input *ListAgreementsInput) (req *request.Request, output *ListAgreementsOutput) {
	op := &request.Operation{
		Name:       opListAgreements,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListAgreementsInput{}
	}

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

// ListAgreements API operation for AWS Transfer Family.
//
// Returns a list of the agreements for the server that's identified by the
// ServerId that you supply. If you want to limit the results to a certain number,
// supply a value for the MaxResults parameter. If you ran the command previously
// and received a value for NextToken, you can supply that value to continue
// listing agreements from where you left off.
//
// 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 Transfer Family's
// API operation ListAgreements for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - InvalidNextTokenException
//     The NextToken parameter that was passed is invalid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListAgreements
func (c *Transfer) ListAgreements(input *ListAgreementsInput) (*ListAgreementsOutput, error) {
	req, out := c.ListAgreementsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListCertificates = "ListCertificates"

// ListCertificatesRequest generates a "aws/request.Request" representing the
// client's request for the ListCertificates 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 ListCertificates for more information on using the ListCertificates
// 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 ListCertificatesRequest method.
//	req, resp := client.ListCertificatesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListCertificates
func (c *Transfer) ListCertificatesRequest(input *ListCertificatesInput) (req *request.Request, output *ListCertificatesOutput) {
	op := &request.Operation{
		Name:       opListCertificates,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListCertificatesInput{}
	}

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

// ListCertificates API operation for AWS Transfer Family.
//
// Returns a list of the current certificates that have been imported into Transfer
// Family. If you want to limit the results to a certain number, supply a value
// for the MaxResults parameter. If you ran the command previously and received
// a value for the NextToken parameter, you can supply that value to continue
// listing certificates from where you left off.
//
// 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 Transfer Family's
// API operation ListCertificates for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - InvalidNextTokenException
//     The NextToken parameter that was passed is invalid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListCertificates
func (c *Transfer) ListCertificates(input *ListCertificatesInput) (*ListCertificatesOutput, error) {
	req, out := c.ListCertificatesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListConnectors = "ListConnectors"

// ListConnectorsRequest generates a "aws/request.Request" representing the
// client's request for the ListConnectors 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 ListConnectors for more information on using the ListConnectors
// 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 ListConnectorsRequest method.
//	req, resp := client.ListConnectorsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListConnectors
func (c *Transfer) ListConnectorsRequest(input *ListConnectorsInput) (req *request.Request, output *ListConnectorsOutput) {
	op := &request.Operation{
		Name:       opListConnectors,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListConnectorsInput{}
	}

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

// ListConnectors API operation for AWS Transfer Family.
//
// Lists the connectors for the specified Region.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Transfer Family's
// API operation ListConnectors for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - InvalidNextTokenException
//     The NextToken parameter that was passed is invalid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListConnectors
func (c *Transfer) ListConnectors(input *ListConnectorsInput) (*ListConnectorsOutput, error) {
	req, out := c.ListConnectorsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListExecutions = "ListExecutions"

// ListExecutionsRequest generates a "aws/request.Request" representing the
// client's request for the ListExecutions 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 ListExecutions for more information on using the ListExecutions
// 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 ListExecutionsRequest method.
//	req, resp := client.ListExecutionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListExecutions
func (c *Transfer) ListExecutionsRequest(input *ListExecutionsInput) (req *request.Request, output *ListExecutionsOutput) {
	op := &request.Operation{
		Name:       opListExecutions,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListExecutionsInput{}
	}

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

// ListExecutions API operation for AWS Transfer Family.
//
// Lists all in-progress executions for the specified workflow.
//
// If the specified workflow ID cannot be found, ListExecutions returns a ResourceNotFound
// exception.
//
// 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 Transfer Family's
// API operation ListExecutions for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - InvalidNextTokenException
//     The NextToken parameter that was passed is invalid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListExecutions
func (c *Transfer) ListExecutions(input *ListExecutionsInput) (*ListExecutionsOutput, error) {
	req, out := c.ListExecutionsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListHostKeys = "ListHostKeys"

// ListHostKeysRequest generates a "aws/request.Request" representing the
// client's request for the ListHostKeys 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 ListHostKeys for more information on using the ListHostKeys
// 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 ListHostKeysRequest method.
//	req, resp := client.ListHostKeysRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListHostKeys
func (c *Transfer) ListHostKeysRequest(input *ListHostKeysInput) (req *request.Request, output *ListHostKeysOutput) {
	op := &request.Operation{
		Name:       opListHostKeys,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListHostKeysInput{}
	}

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

// ListHostKeys API operation for AWS Transfer Family.
//
// Returns a list of host keys for the server that's specified by the ServerId
// parameter.
//
// 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 Transfer Family's
// API operation ListHostKeys for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - InvalidNextTokenException
//     The NextToken parameter that was passed is invalid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListHostKeys
func (c *Transfer) ListHostKeys(input *ListHostKeysInput) (*ListHostKeysOutput, error) {
	req, out := c.ListHostKeysRequest(input)
	return out, req.Send()
}

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

const opListProfiles = "ListProfiles"

// ListProfilesRequest generates a "aws/request.Request" representing the
// client's request for the ListProfiles 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 ListProfiles for more information on using the ListProfiles
// 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 ListProfilesRequest method.
//	req, resp := client.ListProfilesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListProfiles
func (c *Transfer) ListProfilesRequest(input *ListProfilesInput) (req *request.Request, output *ListProfilesOutput) {
	op := &request.Operation{
		Name:       opListProfiles,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListProfilesInput{}
	}

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

// ListProfiles API operation for AWS Transfer Family.
//
// Returns a list of the profiles for your system. If you want to limit the
// results to a certain number, supply a value for the MaxResults parameter.
// If you ran the command previously and received a value for NextToken, you
// can supply that value to continue listing profiles from where you left off.
//
// 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 Transfer Family's
// API operation ListProfiles for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - InvalidNextTokenException
//     The NextToken parameter that was passed is invalid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListProfiles
func (c *Transfer) ListProfiles(input *ListProfilesInput) (*ListProfilesOutput, error) {
	req, out := c.ListProfilesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListSecurityPolicies = "ListSecurityPolicies"

// ListSecurityPoliciesRequest generates a "aws/request.Request" representing the
// client's request for the ListSecurityPolicies 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 ListSecurityPolicies for more information on using the ListSecurityPolicies
// 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 ListSecurityPoliciesRequest method.
//	req, resp := client.ListSecurityPoliciesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListSecurityPolicies
func (c *Transfer) ListSecurityPoliciesRequest(input *ListSecurityPoliciesInput) (req *request.Request, output *ListSecurityPoliciesOutput) {
	op := &request.Operation{
		Name:       opListSecurityPolicies,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListSecurityPoliciesInput{}
	}

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

// ListSecurityPolicies API operation for AWS Transfer Family.
//
// Lists the security policies that are attached to your servers and SFTP connectors.
// For more information about security policies, see Working with security policies
// for servers (https://docs.aws.amazon.com/transfer/latest/userguide/security-policies.html)
// or Working with security policies for SFTP connectors (https://docs.aws.amazon.com/transfer/latest/userguide/security-policies-connectors.html).
//
// 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 Transfer Family's
// API operation ListSecurityPolicies for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - InvalidNextTokenException
//     The NextToken parameter that was passed is invalid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListSecurityPolicies
func (c *Transfer) ListSecurityPolicies(input *ListSecurityPoliciesInput) (*ListSecurityPoliciesOutput, error) {
	req, out := c.ListSecurityPoliciesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListServers = "ListServers"

// ListServersRequest generates a "aws/request.Request" representing the
// client's request for the ListServers 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 ListServers for more information on using the ListServers
// 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 ListServersRequest method.
//	req, resp := client.ListServersRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListServers
func (c *Transfer) ListServersRequest(input *ListServersInput) (req *request.Request, output *ListServersOutput) {
	op := &request.Operation{
		Name:       opListServers,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListServersInput{}
	}

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

// ListServers API operation for AWS Transfer Family.
//
// Lists the file transfer protocol-enabled servers that are associated with
// your Amazon Web Services account.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Transfer Family's
// API operation ListServers for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - InvalidNextTokenException
//     The NextToken parameter that was passed is invalid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListServers
func (c *Transfer) ListServers(input *ListServersInput) (*ListServersOutput, error) {
	req, out := c.ListServersRequest(input)
	return out, req.Send()
}

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

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

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

	for p.Next() {
		if !fn(p.Page().(*ListServersOutput), !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/transfer-2018-11-05/ListTagsForResource
func (c *Transfer) ListTagsForResourceRequest(input *ListTagsForResourceInput) (req *request.Request, output *ListTagsForResourceOutput) {
	op := &request.Operation{
		Name:       opListTagsForResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

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

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

// ListTagsForResource API operation for AWS Transfer Family.
//
// Lists all of the tags associated with the Amazon Resource Name (ARN) that
// you specify. The resource can be a user, server, or role.
//
// 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 Transfer Family's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - InvalidNextTokenException
//     The NextToken parameter that was passed is invalid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListTagsForResource
func (c *Transfer) 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 *Transfer) 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()
}

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

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

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

	return p.Err()
}

const opListUsers = "ListUsers"

// ListUsersRequest generates a "aws/request.Request" representing the
// client's request for the ListUsers 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 ListUsers for more information on using the ListUsers
// 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 ListUsersRequest method.
//	req, resp := client.ListUsersRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListUsers
func (c *Transfer) ListUsersRequest(input *ListUsersInput) (req *request.Request, output *ListUsersOutput) {
	op := &request.Operation{
		Name:       opListUsers,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListUsersInput{}
	}

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

// ListUsers API operation for AWS Transfer Family.
//
// Lists the users for a file transfer protocol-enabled server that you specify
// by passing the ServerId parameter.
//
// 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 Transfer Family's
// API operation ListUsers for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - InvalidNextTokenException
//     The NextToken parameter that was passed is invalid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListUsers
func (c *Transfer) ListUsers(input *ListUsersInput) (*ListUsersOutput, error) {
	req, out := c.ListUsersRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListWorkflows = "ListWorkflows"

// ListWorkflowsRequest generates a "aws/request.Request" representing the
// client's request for the ListWorkflows 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 ListWorkflows for more information on using the ListWorkflows
// 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 ListWorkflowsRequest method.
//	req, resp := client.ListWorkflowsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListWorkflows
func (c *Transfer) ListWorkflowsRequest(input *ListWorkflowsInput) (req *request.Request, output *ListWorkflowsOutput) {
	op := &request.Operation{
		Name:       opListWorkflows,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListWorkflowsInput{}
	}

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

// ListWorkflows API operation for AWS Transfer Family.
//
// Lists all workflows associated with your Amazon Web Services account for
// your current region.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Transfer Family's
// API operation ListWorkflows for usage and error information.
//
// Returned Error Types:
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - InvalidNextTokenException
//     The NextToken parameter that was passed is invalid.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/ListWorkflows
func (c *Transfer) ListWorkflows(input *ListWorkflowsInput) (*ListWorkflowsOutput, error) {
	req, out := c.ListWorkflowsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opSendWorkflowStepState = "SendWorkflowStepState"

// SendWorkflowStepStateRequest generates a "aws/request.Request" representing the
// client's request for the SendWorkflowStepState 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 SendWorkflowStepState for more information on using the SendWorkflowStepState
// 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 SendWorkflowStepStateRequest method.
//	req, resp := client.SendWorkflowStepStateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/SendWorkflowStepState
func (c *Transfer) SendWorkflowStepStateRequest(input *SendWorkflowStepStateInput) (req *request.Request, output *SendWorkflowStepStateOutput) {
	op := &request.Operation{
		Name:       opSendWorkflowStepState,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &SendWorkflowStepStateInput{}
	}

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

// SendWorkflowStepState API operation for AWS Transfer Family.
//
// Sends a callback for asynchronous custom steps.
//
// The ExecutionId, WorkflowId, and Token are passed to the target resource
// during execution of a custom step of a workflow. You must include those with
// their callback as well as providing a status.
//
// 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 Transfer Family's
// API operation SendWorkflowStepState for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/SendWorkflowStepState
func (c *Transfer) SendWorkflowStepState(input *SendWorkflowStepStateInput) (*SendWorkflowStepStateOutput, error) {
	req, out := c.SendWorkflowStepStateRequest(input)
	return out, req.Send()
}

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

const opStartDirectoryListing = "StartDirectoryListing"

// StartDirectoryListingRequest generates a "aws/request.Request" representing the
// client's request for the StartDirectoryListing 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 StartDirectoryListing for more information on using the StartDirectoryListing
// 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 StartDirectoryListingRequest method.
//	req, resp := client.StartDirectoryListingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/StartDirectoryListing
func (c *Transfer) StartDirectoryListingRequest(input *StartDirectoryListingInput) (req *request.Request, output *StartDirectoryListingOutput) {
	op := &request.Operation{
		Name:       opStartDirectoryListing,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StartDirectoryListingInput{}
	}

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

// StartDirectoryListing API operation for AWS Transfer Family.
//
// Retrieves a list of the contents of a directory from a remote SFTP server.
// You specify the connector ID, the output path, and the remote directory path.
// You can also specify the optional MaxItems value to control the maximum number
// of items that are listed from the remote directory. This API returns a list
// of all files and directories in the remote directory (up to the maximum value),
// but does not return files or folders in sub-directories. That is, it only
// returns a list of files and directories one-level deep.
//
// After you receive the listing file, you can provide the files that you want
// to transfer to the RetrieveFilePaths parameter of the StartFileTransfer API
// call.
//
// The naming convention for the output file is connector-ID-listing-ID.json.
// The output file contains the following information:
//
//   - filePath: the complete path of a remote file, relative to the directory
//     of the listing request for your SFTP connector on the remote server.
//
//   - modifiedTimestamp: the last time the file was modified, in UTC time
//     format. This field is optional. If the remote file attributes don't contain
//     a timestamp, it is omitted from the file listing.
//
//   - size: the size of the file, in bytes. This field is optional. If the
//     remote file attributes don't contain a file size, it is omitted from the
//     file listing.
//
//   - path: the complete path of a remote directory, relative to the directory
//     of the listing request for your SFTP connector on the remote server.
//
//   - truncated: a flag indicating whether the list output contains all of
//     the items contained in the remote directory or not. If your Truncated
//     output value is true, you can increase the value provided in the optional
//     max-items input attribute to be able to list more items (up to the maximum
//     allowed list size of 10,000 items).
//
// 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 Transfer Family's
// API operation StartDirectoryListing for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/StartDirectoryListing
func (c *Transfer) StartDirectoryListing(input *StartDirectoryListingInput) (*StartDirectoryListingOutput, error) {
	req, out := c.StartDirectoryListingRequest(input)
	return out, req.Send()
}

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

const opStartFileTransfer = "StartFileTransfer"

// StartFileTransferRequest generates a "aws/request.Request" representing the
// client's request for the StartFileTransfer 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 StartFileTransfer for more information on using the StartFileTransfer
// 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 StartFileTransferRequest method.
//	req, resp := client.StartFileTransferRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/StartFileTransfer
func (c *Transfer) StartFileTransferRequest(input *StartFileTransferInput) (req *request.Request, output *StartFileTransferOutput) {
	op := &request.Operation{
		Name:       opStartFileTransfer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StartFileTransferInput{}
	}

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

// StartFileTransfer API operation for AWS Transfer Family.
//
// Begins a file transfer between local Amazon Web Services storage and a remote
// AS2 or SFTP server.
//
//   - For an AS2 connector, you specify the ConnectorId and one or more SendFilePaths
//     to identify the files you want to transfer.
//
//   - For an SFTP connector, the file transfer can be either outbound or inbound.
//     In both cases, you specify the ConnectorId. Depending on the direction
//     of the transfer, you also specify the following items: If you are transferring
//     file from a partner's SFTP server to Amazon Web Services storage, you
//     specify one or more RetrieveFilePaths to identify the files you want to
//     transfer, and a LocalDirectoryPath to specify the destination folder.
//     If you are transferring file to a partner's SFTP server from Amazon Web
//     Services storage, you specify one or more SendFilePaths to identify the
//     files you want to transfer, and a RemoteDirectoryPath to specify the destination
//     folder.
//
// 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 Transfer Family's
// API operation StartFileTransfer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/StartFileTransfer
func (c *Transfer) StartFileTransfer(input *StartFileTransferInput) (*StartFileTransferOutput, error) {
	req, out := c.StartFileTransferRequest(input)
	return out, req.Send()
}

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

const opStartServer = "StartServer"

// StartServerRequest generates a "aws/request.Request" representing the
// client's request for the StartServer 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 StartServer for more information on using the StartServer
// 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 StartServerRequest method.
//	req, resp := client.StartServerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/StartServer
func (c *Transfer) StartServerRequest(input *StartServerInput) (req *request.Request, output *StartServerOutput) {
	op := &request.Operation{
		Name:       opStartServer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StartServerInput{}
	}

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

// StartServer API operation for AWS Transfer Family.
//
// Changes the state of a file transfer protocol-enabled server from OFFLINE
// to ONLINE. It has no impact on a server that is already ONLINE. An ONLINE
// server can accept and process file transfer jobs.
//
// The state of STARTING indicates that the server is in an intermediate state,
// either not fully able to respond, or not fully online. The values of START_FAILED
// can indicate an error condition.
//
// No response is returned from this call.
//
// 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 Transfer Family's
// API operation StartServer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/StartServer
func (c *Transfer) StartServer(input *StartServerInput) (*StartServerOutput, error) {
	req, out := c.StartServerRequest(input)
	return out, req.Send()
}

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

const opStopServer = "StopServer"

// StopServerRequest generates a "aws/request.Request" representing the
// client's request for the StopServer 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 StopServer for more information on using the StopServer
// 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 StopServerRequest method.
//	req, resp := client.StopServerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/StopServer
func (c *Transfer) StopServerRequest(input *StopServerInput) (req *request.Request, output *StopServerOutput) {
	op := &request.Operation{
		Name:       opStopServer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StopServerInput{}
	}

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

// StopServer API operation for AWS Transfer Family.
//
// Changes the state of a file transfer protocol-enabled server from ONLINE
// to OFFLINE. An OFFLINE server cannot accept and process file transfer jobs.
// Information tied to your server, such as server and user properties, are
// not affected by stopping your server.
//
// Stopping the server does not reduce or impact your file transfer protocol
// endpoint billing; you must delete the server to stop being billed.
//
// The state of STOPPING indicates that the server is in an intermediate state,
// either not fully able to respond, or not fully offline. The values of STOP_FAILED
// can indicate an error condition.
//
// No response is returned from this call.
//
// 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 Transfer Family's
// API operation StopServer for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/StopServer
func (c *Transfer) StopServer(input *StopServerInput) (*StopServerOutput, error) {
	req, out := c.StopServerRequest(input)
	return out, req.Send()
}

// StopServerWithContext is the same as StopServer with the addition of
// the ability to pass a context and additional request options.
//
// See StopServer 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 *Transfer) StopServerWithContext(ctx aws.Context, input *StopServerInput, opts ...request.Option) (*StopServerOutput, error) {
	req, out := c.StopServerRequest(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/transfer-2018-11-05/TagResource
func (c *Transfer) TagResourceRequest(input *TagResourceInput) (req *request.Request, output *TagResourceOutput) {
	op := &request.Operation{
		Name:       opTagResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

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

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

// TagResource API operation for AWS Transfer Family.
//
// Attaches a key-value pair to a resource, as identified by its Amazon Resource
// Name (ARN). Resources are users, servers, roles, and other entities.
//
// There is no response returned from this call.
//
// 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 Transfer Family's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/TagResource
func (c *Transfer) 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 *Transfer) 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 opTestConnection = "TestConnection"

// TestConnectionRequest generates a "aws/request.Request" representing the
// client's request for the TestConnection 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 TestConnection for more information on using the TestConnection
// 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 TestConnectionRequest method.
//	req, resp := client.TestConnectionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/TestConnection
func (c *Transfer) TestConnectionRequest(input *TestConnectionInput) (req *request.Request, output *TestConnectionOutput) {
	op := &request.Operation{
		Name:       opTestConnection,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &TestConnectionInput{}
	}

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

// TestConnection API operation for AWS Transfer Family.
//
// Tests whether your SFTP connector is set up successfully. We highly recommend
// that you call this operation to test your ability to transfer files between
// local Amazon Web Services storage and a trading partner's SFTP server.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Transfer Family's
// API operation TestConnection for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/TestConnection
func (c *Transfer) TestConnection(input *TestConnectionInput) (*TestConnectionOutput, error) {
	req, out := c.TestConnectionRequest(input)
	return out, req.Send()
}

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

const opTestIdentityProvider = "TestIdentityProvider"

// TestIdentityProviderRequest generates a "aws/request.Request" representing the
// client's request for the TestIdentityProvider 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 TestIdentityProvider for more information on using the TestIdentityProvider
// 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 TestIdentityProviderRequest method.
//	req, resp := client.TestIdentityProviderRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/TestIdentityProvider
func (c *Transfer) TestIdentityProviderRequest(input *TestIdentityProviderInput) (req *request.Request, output *TestIdentityProviderOutput) {
	op := &request.Operation{
		Name:       opTestIdentityProvider,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &TestIdentityProviderInput{}
	}

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

// TestIdentityProvider API operation for AWS Transfer Family.
//
// If the IdentityProviderType of a file transfer protocol-enabled server is
// AWS_DIRECTORY_SERVICE or API_Gateway, tests whether your identity provider
// is set up successfully. We highly recommend that you call this operation
// to test your authentication method as soon as you create your server. By
// doing so, you can troubleshoot issues with the identity provider integration
// to ensure that your users can successfully use the service.
//
// The ServerId and UserName parameters are required. The ServerProtocol, SourceIp,
// and UserPassword are all optional.
//
// Note the following:
//
//   - You cannot use TestIdentityProvider if the IdentityProviderType of your
//     server is SERVICE_MANAGED.
//
//   - TestIdentityProvider does not work with keys: it only accepts passwords.
//
//   - TestIdentityProvider can test the password operation for a custom Identity
//     Provider that handles keys and passwords.
//
//   - If you provide any incorrect values for any parameters, the Response
//     field is empty.
//
//   - If you provide a server ID for a server that uses service-managed users,
//     you get an error: An error occurred (InvalidRequestException) when calling
//     the TestIdentityProvider operation: s-server-ID not configured for external
//     auth
//
//   - If you enter a Server ID for the --server-id parameter that does not
//     identify an actual Transfer server, you receive the following error: An
//     error occurred (ResourceNotFoundException) when calling the TestIdentityProvider
//     operation: Unknown server. It is possible your sever is in a different
//     region. You can specify a region by adding the following: --region region-code,
//     such as --region us-east-2 to specify a server in US East (Ohio).
//
// 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 Transfer Family's
// API operation TestIdentityProvider for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/TestIdentityProvider
func (c *Transfer) TestIdentityProvider(input *TestIdentityProviderInput) (*TestIdentityProviderOutput, error) {
	req, out := c.TestIdentityProviderRequest(input)
	return out, req.Send()
}

// TestIdentityProviderWithContext is the same as TestIdentityProvider with the addition of
// the ability to pass a context and additional request options.
//
// See TestIdentityProvider 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 *Transfer) TestIdentityProviderWithContext(ctx aws.Context, input *TestIdentityProviderInput, opts ...request.Option) (*TestIdentityProviderOutput, error) {
	req, out := c.TestIdentityProviderRequest(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/transfer-2018-11-05/UntagResource
func (c *Transfer) UntagResourceRequest(input *UntagResourceInput) (req *request.Request, output *UntagResourceOutput) {
	op := &request.Operation{
		Name:       opUntagResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

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

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

// UntagResource API operation for AWS Transfer Family.
//
// Detaches a key-value pair from a resource, as identified by its Amazon Resource
// Name (ARN). Resources are users, servers, roles, and other entities.
//
// No response is returned from this call.
//
// 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 Transfer Family's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UntagResource
func (c *Transfer) 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 *Transfer) 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 opUpdateAccess = "UpdateAccess"

// UpdateAccessRequest generates a "aws/request.Request" representing the
// client's request for the UpdateAccess 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 UpdateAccess for more information on using the UpdateAccess
// 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 UpdateAccessRequest method.
//	req, resp := client.UpdateAccessRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateAccess
func (c *Transfer) UpdateAccessRequest(input *UpdateAccessInput) (req *request.Request, output *UpdateAccessOutput) {
	op := &request.Operation{
		Name:       opUpdateAccess,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateAccessInput{}
	}

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

// UpdateAccess API operation for AWS Transfer Family.
//
// Allows you to update parameters for the access specified in the ServerID
// and ExternalID parameters.
//
// 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 Transfer Family's
// API operation UpdateAccess for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - ResourceExistsException
//     The requested resource does not exist, or exists in a region other than the
//     one specified for the command.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateAccess
func (c *Transfer) UpdateAccess(input *UpdateAccessInput) (*UpdateAccessOutput, error) {
	req, out := c.UpdateAccessRequest(input)
	return out, req.Send()
}

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

const opUpdateAgreement = "UpdateAgreement"

// UpdateAgreementRequest generates a "aws/request.Request" representing the
// client's request for the UpdateAgreement 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 UpdateAgreement for more information on using the UpdateAgreement
// 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 UpdateAgreementRequest method.
//	req, resp := client.UpdateAgreementRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateAgreement
func (c *Transfer) UpdateAgreementRequest(input *UpdateAgreementInput) (req *request.Request, output *UpdateAgreementOutput) {
	op := &request.Operation{
		Name:       opUpdateAgreement,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateAgreementInput{}
	}

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

// UpdateAgreement API operation for AWS Transfer Family.
//
// Updates some of the parameters for an existing agreement. Provide the AgreementId
// and the ServerId for the agreement that you want to update, along with the
// new values for the parameters to update.
//
// 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 Transfer Family's
// API operation UpdateAgreement for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - ResourceExistsException
//     The requested resource does not exist, or exists in a region other than the
//     one specified for the command.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateAgreement
func (c *Transfer) UpdateAgreement(input *UpdateAgreementInput) (*UpdateAgreementOutput, error) {
	req, out := c.UpdateAgreementRequest(input)
	return out, req.Send()
}

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

const opUpdateCertificate = "UpdateCertificate"

// UpdateCertificateRequest generates a "aws/request.Request" representing the
// client's request for the UpdateCertificate 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 UpdateCertificate for more information on using the UpdateCertificate
// 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 UpdateCertificateRequest method.
//	req, resp := client.UpdateCertificateRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateCertificate
func (c *Transfer) UpdateCertificateRequest(input *UpdateCertificateInput) (req *request.Request, output *UpdateCertificateOutput) {
	op := &request.Operation{
		Name:       opUpdateCertificate,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateCertificateInput{}
	}

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

// UpdateCertificate API operation for AWS Transfer Family.
//
// Updates the active and inactive dates for a certificate.
//
// 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 Transfer Family's
// API operation UpdateCertificate for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateCertificate
func (c *Transfer) UpdateCertificate(input *UpdateCertificateInput) (*UpdateCertificateOutput, error) {
	req, out := c.UpdateCertificateRequest(input)
	return out, req.Send()
}

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

const opUpdateConnector = "UpdateConnector"

// UpdateConnectorRequest generates a "aws/request.Request" representing the
// client's request for the UpdateConnector 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 UpdateConnector for more information on using the UpdateConnector
// 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 UpdateConnectorRequest method.
//	req, resp := client.UpdateConnectorRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateConnector
func (c *Transfer) UpdateConnectorRequest(input *UpdateConnectorInput) (req *request.Request, output *UpdateConnectorOutput) {
	op := &request.Operation{
		Name:       opUpdateConnector,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateConnectorInput{}
	}

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

// UpdateConnector API operation for AWS Transfer Family.
//
// Updates some of the parameters for an existing connector. Provide the ConnectorId
// for the connector that you want to update, along with the new values for
// the parameters to update.
//
// 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 Transfer Family's
// API operation UpdateConnector for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - ResourceExistsException
//     The requested resource does not exist, or exists in a region other than the
//     one specified for the command.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateConnector
func (c *Transfer) UpdateConnector(input *UpdateConnectorInput) (*UpdateConnectorOutput, error) {
	req, out := c.UpdateConnectorRequest(input)
	return out, req.Send()
}

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

const opUpdateHostKey = "UpdateHostKey"

// UpdateHostKeyRequest generates a "aws/request.Request" representing the
// client's request for the UpdateHostKey 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 UpdateHostKey for more information on using the UpdateHostKey
// 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 UpdateHostKeyRequest method.
//	req, resp := client.UpdateHostKeyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateHostKey
func (c *Transfer) UpdateHostKeyRequest(input *UpdateHostKeyInput) (req *request.Request, output *UpdateHostKeyOutput) {
	op := &request.Operation{
		Name:       opUpdateHostKey,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateHostKeyInput{}
	}

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

// UpdateHostKey API operation for AWS Transfer Family.
//
// Updates the description for the host key that's specified by the ServerId
// and HostKeyId parameters.
//
// 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 Transfer Family's
// API operation UpdateHostKey for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateHostKey
func (c *Transfer) UpdateHostKey(input *UpdateHostKeyInput) (*UpdateHostKeyOutput, error) {
	req, out := c.UpdateHostKeyRequest(input)
	return out, req.Send()
}

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

const opUpdateProfile = "UpdateProfile"

// UpdateProfileRequest generates a "aws/request.Request" representing the
// client's request for the UpdateProfile 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 UpdateProfile for more information on using the UpdateProfile
// 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 UpdateProfileRequest method.
//	req, resp := client.UpdateProfileRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateProfile
func (c *Transfer) UpdateProfileRequest(input *UpdateProfileInput) (req *request.Request, output *UpdateProfileOutput) {
	op := &request.Operation{
		Name:       opUpdateProfile,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateProfileInput{}
	}

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

// UpdateProfile API operation for AWS Transfer Family.
//
// Updates some of the parameters for an existing profile. Provide the ProfileId
// for the profile that you want to update, along with the new values for the
// parameters to update.
//
// 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 Transfer Family's
// API operation UpdateProfile for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateProfile
func (c *Transfer) UpdateProfile(input *UpdateProfileInput) (*UpdateProfileOutput, error) {
	req, out := c.UpdateProfileRequest(input)
	return out, req.Send()
}

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

const opUpdateServer = "UpdateServer"

// UpdateServerRequest generates a "aws/request.Request" representing the
// client's request for the UpdateServer 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 UpdateServer for more information on using the UpdateServer
// 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 UpdateServerRequest method.
//	req, resp := client.UpdateServerRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateServer
func (c *Transfer) UpdateServerRequest(input *UpdateServerInput) (req *request.Request, output *UpdateServerOutput) {
	op := &request.Operation{
		Name:       opUpdateServer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateServerInput{}
	}

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

// UpdateServer API operation for AWS Transfer Family.
//
// Updates the file transfer protocol-enabled server's properties after that
// server has been created.
//
// The UpdateServer call returns the ServerId of the server you updated.
//
// 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 Transfer Family's
// API operation UpdateServer for usage and error information.
//
// Returned Error Types:
//
//   - ConflictException
//     This exception is thrown when the UpdateServer is called for a file transfer
//     protocol-enabled server that has VPC as the endpoint type and the server's
//     VpcEndpointID is not in the available state.
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
//   - ResourceExistsException
//     The requested resource does not exist, or exists in a region other than the
//     one specified for the command.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateServer
func (c *Transfer) UpdateServer(input *UpdateServerInput) (*UpdateServerOutput, error) {
	req, out := c.UpdateServerRequest(input)
	return out, req.Send()
}

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

const opUpdateUser = "UpdateUser"

// UpdateUserRequest generates a "aws/request.Request" representing the
// client's request for the UpdateUser 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 UpdateUser for more information on using the UpdateUser
// 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 UpdateUserRequest method.
//	req, resp := client.UpdateUserRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateUser
func (c *Transfer) UpdateUserRequest(input *UpdateUserInput) (req *request.Request, output *UpdateUserOutput) {
	op := &request.Operation{
		Name:       opUpdateUser,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateUserInput{}
	}

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

// UpdateUser API operation for AWS Transfer Family.
//
// Assigns new properties to a user. Parameters you pass modify any or all of
// the following: the home directory, role, and policy for the UserName and
// ServerId you specify.
//
// The response returns the ServerId and the UserName for the updated user.
//
// In the console, you can select Restricted when you create or update a user.
// This ensures that the user can't access anything outside of their home directory.
// The programmatic way to configure this behavior is to update the user. Set
// their HomeDirectoryType to LOGICAL, and specify HomeDirectoryMappings with
// Entry as root (/) and Target as their home directory.
//
// For example, if the user's home directory is /test/admin-user, the following
// command updates the user so that their configuration in the console shows
// the Restricted flag as selected.
//
// aws transfer update-user --server-id <server-id> --user-name admin-user --home-directory-type
// LOGICAL --home-directory-mappings "[{\"Entry\":\"/\", \"Target\":\"/test/admin-user\"}]"
//
// 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 Transfer Family's
// API operation UpdateUser for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
//     Family service.
//
//   - InvalidRequestException
//     This exception is thrown when the client submits a malformed request.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServiceError
//     This exception is thrown when an error occurs in the Transfer Family service.
//
//   - ServiceUnavailableException
//     The request has failed because the Amazon Web ServicesTransfer Family service
//     is not available.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/transfer-2018-11-05/UpdateUser
func (c *Transfer) UpdateUser(input *UpdateUserInput) (*UpdateUserOutput, error) {
	req, out := c.UpdateUserRequest(input)
	return out, req.Send()
}

// UpdateUserWithContext is the same as UpdateUser with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateUser 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 *Transfer) UpdateUserWithContext(ctx aws.Context, input *UpdateUserInput, opts ...request.Option) (*UpdateUserOutput, error) {
	req, out := c.UpdateUserRequest(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 `json:"-" xml:"-"`

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

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

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

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

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

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

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

func (s *AccessDeniedException) Error() string {
	return fmt.Sprintf("%s: %s", 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
}

// Contains the details for an AS2 connector object. The connector object is
// used for AS2 outbound processes, to connect the Transfer Family customer
// with the trading partner.
type As2ConnectorConfig struct {
	_ struct{} `type:"structure"`

	// Provides Basic authentication support to the AS2 Connectors API. To use Basic
	// authentication, you must provide the name or Amazon Resource Name (ARN) of
	// a secret in Secrets Manager.
	//
	// The default value for this parameter is null, which indicates that Basic
	// authentication is not enabled for the connector.
	//
	// If the connector should use Basic authentication, the secret needs to be
	// in the following format:
	//
	// { "Username": "user-name", "Password": "user-password" }
	//
	// Replace user-name and user-password with the credentials for the actual user
	// that is being authenticated.
	//
	// Note the following:
	//
	//    * You are storing these credentials in Secrets Manager, not passing them
	//    directly into this API.
	//
	//    * If you are using the API, SDKs, or CloudFormation to configure your
	//    connector, then you must create the secret before you can enable Basic
	//    authentication. However, if you are using the Amazon Web Services management
	//    console, you can have the system create the secret for you.
	//
	// If you have previously enabled Basic authentication for a connector, you
	// can disable it by using the UpdateConnector API call. For example, if you
	// are using the CLI, you can run the following command to remove Basic authentication:
	//
	// update-connector --connector-id my-connector-id --as2-config 'BasicAuthSecretId=""'
	BasicAuthSecretId *string `type:"string"`

	// Specifies whether the AS2 file is compressed.
	Compression *string `type:"string" enum:"CompressionEnum"`

	// The algorithm that is used to encrypt the file.
	//
	// Note the following:
	//
	//    * Do not use the DES_EDE3_CBC algorithm unless you must support a legacy
	//    client that requires it, as it is a weak encryption algorithm.
	//
	//    * You can only specify NONE if the URL for your connector uses HTTPS.
	//    Using HTTPS ensures that no traffic is sent in clear text.
	EncryptionAlgorithm *string `type:"string" enum:"EncryptionAlg"`

	// A unique identifier for the AS2 local profile.
	LocalProfileId *string `min:"19" type:"string"`

	// Used for outbound requests (from an Transfer Family server to a partner AS2
	// server) to determine whether the partner response for transfers is synchronous
	// or asynchronous. Specify either of the following values:
	//
	//    * SYNC: The system expects a synchronous MDN response, confirming that
	//    the file was transferred successfully (or not).
	//
	//    * NONE: Specifies that no MDN response is required.
	MdnResponse *string `type:"string" enum:"MdnResponse"`

	// The signing algorithm for the MDN response.
	//
	// If set to DEFAULT (or not set at all), the value for SigningAlgorithm is
	// used.
	MdnSigningAlgorithm *string `type:"string" enum:"MdnSigningAlg"`

	// Used as the Subject HTTP header attribute in AS2 messages that are being
	// sent with the connector.
	MessageSubject *string `min:"1" type:"string"`

	// A unique identifier for the partner profile for the connector.
	PartnerProfileId *string `min:"19" type:"string"`

	// The algorithm that is used to sign the AS2 messages sent with the connector.
	SigningAlgorithm *string `type:"string" enum:"SigningAlg"`
}

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

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

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

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

// SetBasicAuthSecretId sets the BasicAuthSecretId field's value.
func (s *As2ConnectorConfig) SetBasicAuthSecretId(v string) *As2ConnectorConfig {
	s.BasicAuthSecretId = &v
	return s
}

// SetCompression sets the Compression field's value.
func (s *As2ConnectorConfig) SetCompression(v string) *As2ConnectorConfig {
	s.Compression = &v
	return s
}

// SetEncryptionAlgorithm sets the EncryptionAlgorithm field's value.
func (s *As2ConnectorConfig) SetEncryptionAlgorithm(v string) *As2ConnectorConfig {
	s.EncryptionAlgorithm = &v
	return s
}

// SetLocalProfileId sets the LocalProfileId field's value.
func (s *As2ConnectorConfig) SetLocalProfileId(v string) *As2ConnectorConfig {
	s.LocalProfileId = &v
	return s
}

// SetMdnResponse sets the MdnResponse field's value.
func (s *As2ConnectorConfig) SetMdnResponse(v string) *As2ConnectorConfig {
	s.MdnResponse = &v
	return s
}

// SetMdnSigningAlgorithm sets the MdnSigningAlgorithm field's value.
func (s *As2ConnectorConfig) SetMdnSigningAlgorithm(v string) *As2ConnectorConfig {
	s.MdnSigningAlgorithm = &v
	return s
}

// SetMessageSubject sets the MessageSubject field's value.
func (s *As2ConnectorConfig) SetMessageSubject(v string) *As2ConnectorConfig {
	s.MessageSubject = &v
	return s
}

// SetPartnerProfileId sets the PartnerProfileId field's value.
func (s *As2ConnectorConfig) SetPartnerProfileId(v string) *As2ConnectorConfig {
	s.PartnerProfileId = &v
	return s
}

// SetSigningAlgorithm sets the SigningAlgorithm field's value.
func (s *As2ConnectorConfig) SetSigningAlgorithm(v string) *As2ConnectorConfig {
	s.SigningAlgorithm = &v
	return s
}

// This exception is thrown when the UpdateServer is called for a file transfer
// protocol-enabled server that has VPC as the endpoint type and the server's
// VpcEndpointID is not in the available state.
type ConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

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

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

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

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

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

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

// 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
}

// Each step type has its own StepDetails structure.
type CopyStepDetails struct {
	_ struct{} `type:"structure"`

	// Specifies the location for the file being copied. Use ${Transfer:UserName}
	// or ${Transfer:UploadDate} in this field to parametrize the destination prefix
	// by username or uploaded date.
	//
	//    * Set the value of DestinationFileLocation to ${Transfer:UserName} to
	//    copy uploaded files to an Amazon S3 bucket that is prefixed with the name
	//    of the Transfer Family user that uploaded the file.
	//
	//    * Set the value of DestinationFileLocation to ${Transfer:UploadDate} to
	//    copy uploaded files to an Amazon S3 bucket that is prefixed with the date
	//    of the upload. The system resolves UploadDate to a date format of YYYY-MM-DD,
	//    based on the date the file is uploaded in UTC.
	DestinationFileLocation *InputFileLocation `type:"structure"`

	// The name of the step, used as an identifier.
	Name *string `type:"string"`

	// A flag that indicates whether to overwrite an existing file of the same name.
	// The default is FALSE.
	//
	// If the workflow is processing a file that has the same name as an existing
	// file, the behavior is as follows:
	//
	//    * If OverwriteExisting is TRUE, the existing file is replaced with the
	//    file being processed.
	//
	//    * If OverwriteExisting is FALSE, nothing happens, and the workflow processing
	//    stops.
	OverwriteExisting *string `type:"string" enum:"OverwriteExisting"`

	// Specifies which file to use as input to the workflow step: either the output
	// from the previous step, or the originally uploaded file for the workflow.
	//
	//    * To use the previous file as the input, enter ${previous.file}. In this
	//    case, this workflow step uses the output file from the previous workflow
	//    step as input. This is the default value.
	//
	//    * To use the originally uploaded file location as input for this step,
	//    enter ${original.file}.
	SourceFileLocation *string `type:"string"`
}

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

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

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

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

// SetDestinationFileLocation sets the DestinationFileLocation field's value.
func (s *CopyStepDetails) SetDestinationFileLocation(v *InputFileLocation) *CopyStepDetails {
	s.DestinationFileLocation = v
	return s
}

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

// SetOverwriteExisting sets the OverwriteExisting field's value.
func (s *CopyStepDetails) SetOverwriteExisting(v string) *CopyStepDetails {
	s.OverwriteExisting = &v
	return s
}

// SetSourceFileLocation sets the SourceFileLocation field's value.
func (s *CopyStepDetails) SetSourceFileLocation(v string) *CopyStepDetails {
	s.SourceFileLocation = &v
	return s
}

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

	// A unique identifier that is required to identify specific groups within your
	// directory. The users of the group that you associate have access to your
	// Amazon S3 or Amazon EFS resources over the enabled protocols using Transfer
	// Family. If you know the group name, you can view the SID values by running
	// the following command using Windows PowerShell.
	//
	// Get-ADGroup -Filter {samAccountName -like "YourGroupName*"} -Properties *
	// | Select SamAccountName,ObjectSid
	//
	// In that command, replace YourGroupName with the name of your Active Directory
	// group.
	//
	// The regular expression used to validate this parameter is a string of characters
	// consisting of uppercase and lowercase alphanumeric characters with no spaces.
	// You can also include underscores or any of the following characters: =,.@:/-
	//
	// ExternalId is a required field
	ExternalId *string `min:"1" type:"string" required:"true"`

	// The landing directory (folder) for a user when they log in to the server
	// using the client.
	//
	// A HomeDirectory example is /bucket_name/home/mydirectory.
	//
	// The HomeDirectory parameter is only used if HomeDirectoryType is set to PATH.
	HomeDirectory *string `type:"string"`

	// Logical directory mappings that specify what Amazon S3 or Amazon EFS paths
	// and keys should be visible to your user and how you want to make them visible.
	// You must specify the Entry and Target pair, where Entry shows how the path
	// is made visible and Target is the actual Amazon S3 or Amazon EFS path. If
	// you only specify a target, it is displayed as is. You also must ensure that
	// your Identity and Access Management (IAM) role provides access to paths in
	// Target. This value can be set only when HomeDirectoryType is set to LOGICAL.
	//
	// The following is an Entry and Target pair example.
	//
	// [ { "Entry": "/directory1", "Target": "/bucket_name/home/mydirectory" } ]
	//
	// In most cases, you can use this value instead of the session policy to lock
	// down your user to the designated home directory ("chroot"). To do this, you
	// can set Entry to / and set Target to the HomeDirectory parameter value.
	//
	// The following is an Entry and Target pair example for chroot.
	//
	// [ { "Entry": "/", "Target": "/bucket_name/home/mydirectory" } ]
	HomeDirectoryMappings []*HomeDirectoryMapEntry `min:"1" type:"list"`

	// The type of landing directory (folder) that you want your users' home directory
	// to be when they log in to the server. If you set it to PATH, the user will
	// see the absolute Amazon S3 bucket or Amazon EFS path as is in their file
	// transfer protocol clients. If you set it to LOGICAL, you need to provide
	// mappings in the HomeDirectoryMappings for how you want to make Amazon S3
	// or Amazon EFS paths visible to your users.
	//
	// If HomeDirectoryType is LOGICAL, you must provide mappings, using the HomeDirectoryMappings
	// parameter. If, on the other hand, HomeDirectoryType is PATH, you provide
	// an absolute path using the HomeDirectory parameter. You cannot have both
	// HomeDirectory and HomeDirectoryMappings in your template.
	HomeDirectoryType *string `type:"string" enum:"HomeDirectoryType"`

	// A session policy for your user so that you can use the same Identity and
	// Access Management (IAM) role across multiple users. This policy scopes down
	// a user's access to portions of their Amazon S3 bucket. Variables that you
	// can use inside this policy include ${Transfer:UserName}, ${Transfer:HomeDirectory},
	// and ${Transfer:HomeBucket}.
	//
	// This policy applies only when the domain of ServerId is Amazon S3. Amazon
	// EFS does not use session policies.
	//
	// For session policies, Transfer Family stores the policy as a JSON blob, instead
	// of the Amazon Resource Name (ARN) of the policy. You save the policy as a
	// JSON blob and pass it in the Policy argument.
	//
	// For an example of a session policy, see Example session policy (https://docs.aws.amazon.com/transfer/latest/userguide/session-policy.html).
	//
	// For more information, see AssumeRole (https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)
	// in the Security Token Service API Reference.
	Policy *string `type:"string"`

	// The full POSIX identity, including user ID (Uid), group ID (Gid), and any
	// secondary groups IDs (SecondaryGids), that controls your users' access to
	// your Amazon EFS file systems. The POSIX permissions that are set on files
	// and directories in your file system determine the level of access your users
	// get when transferring files into and out of your Amazon EFS file systems.
	PosixProfile *PosixProfile `type:"structure"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that controls your users' access to your Amazon S3 bucket or Amazon
	// EFS file system. The policies attached to this role determine the level of
	// access that you want to provide your users when transferring files into and
	// out of your Amazon S3 bucket or Amazon EFS file system. The IAM role should
	// also contain a trust relationship that allows the server to access your resources
	// when servicing your users' transfer requests.
	//
	// Role is a required field
	Role *string `min:"20" type:"string" required:"true"`

	// A system-assigned unique identifier for a server instance. This is the specific
	// server that you added your user to.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetExternalId sets the ExternalId field's value.
func (s *CreateAccessInput) SetExternalId(v string) *CreateAccessInput {
	s.ExternalId = &v
	return s
}

// SetHomeDirectory sets the HomeDirectory field's value.
func (s *CreateAccessInput) SetHomeDirectory(v string) *CreateAccessInput {
	s.HomeDirectory = &v
	return s
}

// SetHomeDirectoryMappings sets the HomeDirectoryMappings field's value.
func (s *CreateAccessInput) SetHomeDirectoryMappings(v []*HomeDirectoryMapEntry) *CreateAccessInput {
	s.HomeDirectoryMappings = v
	return s
}

// SetHomeDirectoryType sets the HomeDirectoryType field's value.
func (s *CreateAccessInput) SetHomeDirectoryType(v string) *CreateAccessInput {
	s.HomeDirectoryType = &v
	return s
}

// SetPolicy sets the Policy field's value.
func (s *CreateAccessInput) SetPolicy(v string) *CreateAccessInput {
	s.Policy = &v
	return s
}

// SetPosixProfile sets the PosixProfile field's value.
func (s *CreateAccessInput) SetPosixProfile(v *PosixProfile) *CreateAccessInput {
	s.PosixProfile = v
	return s
}

// SetRole sets the Role field's value.
func (s *CreateAccessInput) SetRole(v string) *CreateAccessInput {
	s.Role = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *CreateAccessInput) SetServerId(v string) *CreateAccessInput {
	s.ServerId = &v
	return s
}

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

	// The external identifier of the group whose users have access to your Amazon
	// S3 or Amazon EFS resources over the enabled protocols using Transfer Family.
	//
	// ExternalId is a required field
	ExternalId *string `min:"1" type:"string" required:"true"`

	// The identifier of the server that the user is attached to.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

// SetExternalId sets the ExternalId field's value.
func (s *CreateAccessOutput) SetExternalId(v string) *CreateAccessOutput {
	s.ExternalId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *CreateAccessOutput) SetServerId(v string) *CreateAccessOutput {
	s.ServerId = &v
	return s
}

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

	// Connectors are used to send files using either the AS2 or SFTP protocol.
	// For the access role, provide the Amazon Resource Name (ARN) of the Identity
	// and Access Management role to use.
	//
	// For AS2 connectors
	//
	// With AS2, you can send files by calling StartFileTransfer and specifying
	// the file paths in the request parameter, SendFilePaths. We use the file’s
	// parent directory (for example, for --send-file-paths /bucket/dir/file.txt,
	// parent directory is /bucket/dir/) to temporarily store a processed AS2 message
	// file, store the MDN when we receive them from the partner, and write a final
	// JSON file containing relevant metadata of the transmission. So, the AccessRole
	// needs to provide read and write access to the parent directory of the file
	// location used in the StartFileTransfer request. Additionally, you need to
	// provide read and write access to the parent directory of the files that you
	// intend to send with StartFileTransfer.
	//
	// If you are using Basic authentication for your AS2 connector, the access
	// role requires the secretsmanager:GetSecretValue permission for the secret.
	// If the secret is encrypted using a customer-managed key instead of the Amazon
	// Web Services managed key in Secrets Manager, then the role also needs the
	// kms:Decrypt permission for that key.
	//
	// For SFTP connectors
	//
	// Make sure that the access role provides read and write access to the parent
	// directory of the file location that's used in the StartFileTransfer request.
	// Additionally, make sure that the role provides secretsmanager:GetSecretValue
	// permission to Secrets Manager.
	//
	// AccessRole is a required field
	AccessRole *string `min:"20" type:"string" required:"true"`

	// The landing directory (folder) for files transferred by using the AS2 protocol.
	//
	// A BaseDirectory example is /DOC-EXAMPLE-BUCKET/home/mydirectory.
	//
	// BaseDirectory is a required field
	BaseDirectory *string `type:"string" required:"true"`

	// A name or short description to identify the agreement.
	Description *string `min:"1" type:"string"`

	// A unique identifier for the AS2 local profile.
	//
	// LocalProfileId is a required field
	LocalProfileId *string `min:"19" type:"string" required:"true"`

	// A unique identifier for the partner profile used in the agreement.
	//
	// PartnerProfileId is a required field
	PartnerProfileId *string `min:"19" type:"string" required:"true"`

	// A system-assigned unique identifier for a server instance. This is the specific
	// server that the agreement uses.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// The status of the agreement. The agreement can be either ACTIVE or INACTIVE.
	Status *string `type:"string" enum:"AgreementStatusType"`

	// Key-value pairs that can be used to group and search for agreements.
	Tags []*Tag `min:"1" type:"list"`
}

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

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

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

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

// SetAccessRole sets the AccessRole field's value.
func (s *CreateAgreementInput) SetAccessRole(v string) *CreateAgreementInput {
	s.AccessRole = &v
	return s
}

// SetBaseDirectory sets the BaseDirectory field's value.
func (s *CreateAgreementInput) SetBaseDirectory(v string) *CreateAgreementInput {
	s.BaseDirectory = &v
	return s
}

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

// SetLocalProfileId sets the LocalProfileId field's value.
func (s *CreateAgreementInput) SetLocalProfileId(v string) *CreateAgreementInput {
	s.LocalProfileId = &v
	return s
}

// SetPartnerProfileId sets the PartnerProfileId field's value.
func (s *CreateAgreementInput) SetPartnerProfileId(v string) *CreateAgreementInput {
	s.PartnerProfileId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *CreateAgreementInput) SetServerId(v string) *CreateAgreementInput {
	s.ServerId = &v
	return s
}

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

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

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

	// The unique identifier for the agreement. Use this ID for deleting, or updating
	// an agreement, as well as in any other API calls that require that you specify
	// the agreement ID.
	//
	// AgreementId is a required field
	AgreementId *string `min:"19" type:"string" required:"true"`
}

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

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

// SetAgreementId sets the AgreementId field's value.
func (s *CreateAgreementOutput) SetAgreementId(v string) *CreateAgreementOutput {
	s.AgreementId = &v
	return s
}

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

	// Connectors are used to send files using either the AS2 or SFTP protocol.
	// For the access role, provide the Amazon Resource Name (ARN) of the Identity
	// and Access Management role to use.
	//
	// For AS2 connectors
	//
	// With AS2, you can send files by calling StartFileTransfer and specifying
	// the file paths in the request parameter, SendFilePaths. We use the file’s
	// parent directory (for example, for --send-file-paths /bucket/dir/file.txt,
	// parent directory is /bucket/dir/) to temporarily store a processed AS2 message
	// file, store the MDN when we receive them from the partner, and write a final
	// JSON file containing relevant metadata of the transmission. So, the AccessRole
	// needs to provide read and write access to the parent directory of the file
	// location used in the StartFileTransfer request. Additionally, you need to
	// provide read and write access to the parent directory of the files that you
	// intend to send with StartFileTransfer.
	//
	// If you are using Basic authentication for your AS2 connector, the access
	// role requires the secretsmanager:GetSecretValue permission for the secret.
	// If the secret is encrypted using a customer-managed key instead of the Amazon
	// Web Services managed key in Secrets Manager, then the role also needs the
	// kms:Decrypt permission for that key.
	//
	// For SFTP connectors
	//
	// Make sure that the access role provides read and write access to the parent
	// directory of the file location that's used in the StartFileTransfer request.
	// Additionally, make sure that the role provides secretsmanager:GetSecretValue
	// permission to Secrets Manager.
	//
	// AccessRole is a required field
	AccessRole *string `min:"20" type:"string" required:"true"`

	// A structure that contains the parameters for an AS2 connector object.
	As2Config *As2ConnectorConfig `type:"structure"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that allows a connector to turn on CloudWatch logging for Amazon S3
	// events. When set, you can view connector activity in your CloudWatch logs.
	LoggingRole *string `min:"20" type:"string"`

	// Specifies the name of the security policy for the connector.
	SecurityPolicyName *string `type:"string"`

	// A structure that contains the parameters for an SFTP connector object.
	SftpConfig *SftpConnectorConfig `type:"structure"`

	// Key-value pairs that can be used to group and search for connectors. Tags
	// are metadata attached to connectors for any purpose.
	Tags []*Tag `min:"1" type:"list"`

	// The URL of the partner's AS2 or SFTP endpoint.
	//
	// Url is a required field
	Url *string `type:"string" required:"true"`
}

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

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

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

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

// SetAccessRole sets the AccessRole field's value.
func (s *CreateConnectorInput) SetAccessRole(v string) *CreateConnectorInput {
	s.AccessRole = &v
	return s
}

// SetAs2Config sets the As2Config field's value.
func (s *CreateConnectorInput) SetAs2Config(v *As2ConnectorConfig) *CreateConnectorInput {
	s.As2Config = v
	return s
}

// SetLoggingRole sets the LoggingRole field's value.
func (s *CreateConnectorInput) SetLoggingRole(v string) *CreateConnectorInput {
	s.LoggingRole = &v
	return s
}

// SetSecurityPolicyName sets the SecurityPolicyName field's value.
func (s *CreateConnectorInput) SetSecurityPolicyName(v string) *CreateConnectorInput {
	s.SecurityPolicyName = &v
	return s
}

// SetSftpConfig sets the SftpConfig field's value.
func (s *CreateConnectorInput) SetSftpConfig(v *SftpConnectorConfig) *CreateConnectorInput {
	s.SftpConfig = v
	return s
}

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

// SetUrl sets the Url field's value.
func (s *CreateConnectorInput) SetUrl(v string) *CreateConnectorInput {
	s.Url = &v
	return s
}

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

	// The unique identifier for the connector, returned after the API call succeeds.
	//
	// ConnectorId is a required field
	ConnectorId *string `min:"19" type:"string" required:"true"`
}

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

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

// SetConnectorId sets the ConnectorId field's value.
func (s *CreateConnectorOutput) SetConnectorId(v string) *CreateConnectorOutput {
	s.ConnectorId = &v
	return s
}

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

	// The As2Id is the AS2-name, as defined in the RFC 4130 (https://datatracker.ietf.org/doc/html/rfc4130).
	// For inbound transfers, this is the AS2-From header for the AS2 messages sent
	// from the partner. For outbound connectors, this is the AS2-To header for
	// the AS2 messages sent to the partner using the StartFileTransfer API operation.
	// This ID cannot include spaces.
	//
	// As2Id is a required field
	As2Id *string `min:"1" type:"string" required:"true"`

	// An array of identifiers for the imported certificates. You use this identifier
	// for working with profiles and partner profiles.
	CertificateIds []*string `type:"list"`

	// Determines the type of profile to create:
	//
	//    * Specify LOCAL to create a local profile. A local profile represents
	//    the AS2-enabled Transfer Family server organization or party.
	//
	//    * Specify PARTNER to create a partner profile. A partner profile represents
	//    a remote organization, external to Transfer Family.
	//
	// ProfileType is a required field
	ProfileType *string `type:"string" required:"true" enum:"ProfileType"`

	// Key-value pairs that can be used to group and search for AS2 profiles.
	Tags []*Tag `min:"1" type:"list"`
}

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

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

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

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

// SetAs2Id sets the As2Id field's value.
func (s *CreateProfileInput) SetAs2Id(v string) *CreateProfileInput {
	s.As2Id = &v
	return s
}

// SetCertificateIds sets the CertificateIds field's value.
func (s *CreateProfileInput) SetCertificateIds(v []*string) *CreateProfileInput {
	s.CertificateIds = v
	return s
}

// SetProfileType sets the ProfileType field's value.
func (s *CreateProfileInput) SetProfileType(v string) *CreateProfileInput {
	s.ProfileType = &v
	return s
}

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

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

	// The unique identifier for the AS2 profile, returned after the API call succeeds.
	//
	// ProfileId is a required field
	ProfileId *string `min:"19" type:"string" required:"true"`
}

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

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

// SetProfileId sets the ProfileId field's value.
func (s *CreateProfileOutput) SetProfileId(v string) *CreateProfileOutput {
	s.ProfileId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the Certificate Manager (ACM) certificate.
	// Required when Protocols is set to FTPS.
	//
	// To request a new public certificate, see Request a public certificate (https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html)
	// in the Certificate Manager User Guide.
	//
	// To import an existing certificate into ACM, see Importing certificates into
	// ACM (https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)
	// in the Certificate Manager User Guide.
	//
	// To request a private certificate to use FTPS through private IP addresses,
	// see Request a private certificate (https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-private.html)
	// in the Certificate Manager User Guide.
	//
	// Certificates with the following cryptographic algorithms and key sizes are
	// supported:
	//
	//    * 2048-bit RSA (RSA_2048)
	//
	//    * 4096-bit RSA (RSA_4096)
	//
	//    * Elliptic Prime Curve 256 bit (EC_prime256v1)
	//
	//    * Elliptic Prime Curve 384 bit (EC_secp384r1)
	//
	//    * Elliptic Prime Curve 521 bit (EC_secp521r1)
	//
	// The certificate must be a valid SSL/TLS X.509 version 3 certificate with
	// FQDN or IP address specified and information about the issuer.
	Certificate *string `type:"string"`

	// The domain of the storage system that is used for file transfers. There are
	// two domains available: Amazon Simple Storage Service (Amazon S3) and Amazon
	// Elastic File System (Amazon EFS). The default value is S3.
	//
	// After the server is created, the domain cannot be changed.
	Domain *string `type:"string" enum:"Domain"`

	// The virtual private cloud (VPC) endpoint settings that are configured for
	// your server. When you host your endpoint within your VPC, you can make your
	// endpoint accessible only to resources within your VPC, or you can attach
	// Elastic IP addresses and make your endpoint accessible to clients over the
	// internet. Your VPC's default security groups are automatically assigned to
	// your endpoint.
	EndpointDetails *EndpointDetails `type:"structure"`

	// The type of endpoint that you want your server to use. You can choose to
	// make your server's endpoint publicly accessible (PUBLIC) or host it inside
	// your VPC. With an endpoint that is hosted in a VPC, you can restrict access
	// to your server and resources only within your VPC or choose to make it internet
	// facing by attaching Elastic IP addresses directly to it.
	//
	// After May 19, 2021, you won't be able to create a server using EndpointType=VPC_ENDPOINT
	// in your Amazon Web Services account if your account hasn't already done so
	// before May 19, 2021. If you have already created servers with EndpointType=VPC_ENDPOINT
	// in your Amazon Web Services account on or before May 19, 2021, you will not
	// be affected. After this date, use EndpointType=VPC.
	//
	// For more information, see https://docs.aws.amazon.com/transfer/latest/userguide/create-server-in-vpc.html#deprecate-vpc-endpoint.
	//
	// It is recommended that you use VPC as the EndpointType. With this endpoint
	// type, you have the option to directly associate up to three Elastic IPv4
	// addresses (BYO IP included) with your server's endpoint and use VPC security
	// groups to restrict traffic by the client's public IP address. This is not
	// possible with EndpointType set to VPC_ENDPOINT.
	EndpointType *string `type:"string" enum:"EndpointType"`

	// The RSA, ECDSA, or ED25519 private key to use for your SFTP-enabled server.
	// You can add multiple host keys, in case you want to rotate keys, or have
	// a set of active keys that use different algorithms.
	//
	// Use the following command to generate an RSA 2048 bit key with no passphrase:
	//
	// ssh-keygen -t rsa -b 2048 -N "" -m PEM -f my-new-server-key.
	//
	// Use a minimum value of 2048 for the -b option. You can create a stronger
	// key by using 3072 or 4096.
	//
	// Use the following command to generate an ECDSA 256 bit key with no passphrase:
	//
	// ssh-keygen -t ecdsa -b 256 -N "" -m PEM -f my-new-server-key.
	//
	// Valid values for the -b option for ECDSA are 256, 384, and 521.
	//
	// Use the following command to generate an ED25519 key with no passphrase:
	//
	// ssh-keygen -t ed25519 -N "" -f my-new-server-key.
	//
	// For all of these commands, you can replace my-new-server-key with a string
	// of your choice.
	//
	// If you aren't planning to migrate existing users from an existing SFTP-enabled
	// server to a new server, don't update the host key. Accidentally changing
	// a server's host key can be disruptive.
	//
	// For more information, see Manage host keys for your SFTP-enabled server (https://docs.aws.amazon.com/transfer/latest/userguide/edit-server-config.html#configuring-servers-change-host-key)
	// in the Transfer Family User Guide.
	//
	// HostKey is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateServerInput's
	// String and GoString methods.
	HostKey *string `type:"string" sensitive:"true"`

	// Required when IdentityProviderType is set to AWS_DIRECTORY_SERVICE, Amazon
	// Web Services_LAMBDA or API_GATEWAY. Accepts an array containing all of the
	// information required to use a directory in AWS_DIRECTORY_SERVICE or invoke
	// a customer-supplied authentication API, including the API Gateway URL. Not
	// required when IdentityProviderType is set to SERVICE_MANAGED.
	IdentityProviderDetails *IdentityProviderDetails `type:"structure"`

	// The mode of authentication for a server. The default value is SERVICE_MANAGED,
	// which allows you to store and access user credentials within the Transfer
	// Family service.
	//
	// Use AWS_DIRECTORY_SERVICE to provide access to Active Directory groups in
	// Directory Service for Microsoft Active Directory or Microsoft Active Directory
	// in your on-premises environment or in Amazon Web Services using AD Connector.
	// This option also requires you to provide a Directory ID by using the IdentityProviderDetails
	// parameter.
	//
	// Use the API_GATEWAY value to integrate with an identity provider of your
	// choosing. The API_GATEWAY setting requires you to provide an Amazon API Gateway
	// endpoint URL to call for authentication by using the IdentityProviderDetails
	// parameter.
	//
	// Use the AWS_LAMBDA value to directly use an Lambda function as your identity
	// provider. If you choose this value, you must specify the ARN for the Lambda
	// function in the Function parameter for the IdentityProviderDetails data type.
	IdentityProviderType *string `type:"string" enum:"IdentityProviderType"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that allows a server to turn on Amazon CloudWatch logging for Amazon
	// S3 or Amazon EFSevents. When set, you can view user activity in your CloudWatch
	// logs.
	LoggingRole *string `type:"string"`

	// Specifies a string to display when users connect to a server. This string
	// is displayed after the user authenticates.
	//
	// The SFTP protocol does not support post-authentication display banners.
	PostAuthenticationLoginBanner *string `type:"string"`

	// Specifies a string to display when users connect to a server. This string
	// is displayed before the user authenticates. For example, the following banner
	// displays details about using the system:
	//
	// This system is for the use of authorized users only. Individuals using this
	// computer system without authority, or in excess of their authority, are subject
	// to having all of their activities on this system monitored and recorded by
	// system personnel.
	PreAuthenticationLoginBanner *string `type:"string"`

	// The protocol settings that are configured for your server.
	//
	//    * To indicate passive mode (for FTP and FTPS protocols), use the PassiveIp
	//    parameter. Enter a single dotted-quad IPv4 address, such as the external
	//    IP address of a firewall, router, or load balancer.
	//
	//    * To ignore the error that is generated when the client attempts to use
	//    the SETSTAT command on a file that you are uploading to an Amazon S3 bucket,
	//    use the SetStatOption parameter. To have the Transfer Family server ignore
	//    the SETSTAT command and upload files without needing to make any changes
	//    to your SFTP client, set the value to ENABLE_NO_OP. If you set the SetStatOption
	//    parameter to ENABLE_NO_OP, Transfer Family generates a log entry to Amazon
	//    CloudWatch Logs, so that you can determine when the client is making a
	//    SETSTAT call.
	//
	//    * To determine whether your Transfer Family server resumes recent, negotiated
	//    sessions through a unique session ID, use the TlsSessionResumptionMode
	//    parameter.
	//
	//    * As2Transports indicates the transport method for the AS2 messages. Currently,
	//    only HTTP is supported.
	ProtocolDetails *ProtocolDetails `type:"structure"`

	// Specifies the file transfer protocol or protocols over which your file transfer
	// protocol client can connect to your server's endpoint. The available protocols
	// are:
	//
	//    * SFTP (Secure Shell (SSH) File Transfer Protocol): File transfer over
	//    SSH
	//
	//    * FTPS (File Transfer Protocol Secure): File transfer with TLS encryption
	//
	//    * FTP (File Transfer Protocol): Unencrypted file transfer
	//
	//    * AS2 (Applicability Statement 2): used for transporting structured business-to-business
	//    data
	//
	//    * If you select FTPS, you must choose a certificate stored in Certificate
	//    Manager (ACM) which is used to identify your server when clients connect
	//    to it over FTPS.
	//
	//    * If Protocol includes either FTP or FTPS, then the EndpointType must
	//    be VPC and the IdentityProviderType must be either AWS_DIRECTORY_SERVICE,
	//    AWS_LAMBDA, or API_GATEWAY.
	//
	//    * If Protocol includes FTP, then AddressAllocationIds cannot be associated.
	//
	//    * If Protocol is set only to SFTP, the EndpointType can be set to PUBLIC
	//    and the IdentityProviderType can be set any of the supported identity
	//    types: SERVICE_MANAGED, AWS_DIRECTORY_SERVICE, AWS_LAMBDA, or API_GATEWAY.
	//
	//    * If Protocol includes AS2, then the EndpointType must be VPC, and domain
	//    must be Amazon S3.
	Protocols []*string `min:"1" type:"list" enum:"Protocol"`

	// Specifies whether or not performance for your Amazon S3 directories is optimized.
	// This is disabled by default.
	//
	// By default, home directory mappings have a TYPE of DIRECTORY. If you enable
	// this option, you would then need to explicitly set the HomeDirectoryMapEntry
	// Type to FILE if you want a mapping to have a file target.
	S3StorageOptions *S3StorageOptions `type:"structure"`

	// Specifies the name of the security policy for the server.
	SecurityPolicyName *string `type:"string"`

	// Specifies the log groups to which your server logs are sent.
	//
	// To specify a log group, you must provide the ARN for an existing log group.
	// In this case, the format of the log group is as follows:
	//
	// arn:aws:logs:region-name:amazon-account-id:log-group:log-group-name:*
	//
	// For example, arn:aws:logs:us-east-1:111122223333:log-group:mytestgroup:*
	//
	// If you have previously specified a log group for a server, you can clear
	// it, and in effect turn off structured logging, by providing an empty value
	// for this parameter in an update-server call. For example:
	//
	// update-server --server-id s-1234567890abcdef0 --structured-log-destinations
	StructuredLogDestinations []*string `type:"list"`

	// Key-value pairs that can be used to group and search for servers.
	Tags []*Tag `min:"1" type:"list"`

	// Specifies the workflow ID for the workflow to assign and the execution role
	// that's used for executing the workflow.
	//
	// In addition to a workflow to execute when a file is uploaded completely,
	// WorkflowDetails can also contain a workflow ID (and execution role) for a
	// workflow to execute on partial upload. A partial upload occurs when the server
	// session disconnects while the file is still being uploaded.
	WorkflowDetails *WorkflowDetails `type:"structure"`
}

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

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

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

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

// SetCertificate sets the Certificate field's value.
func (s *CreateServerInput) SetCertificate(v string) *CreateServerInput {
	s.Certificate = &v
	return s
}

// SetDomain sets the Domain field's value.
func (s *CreateServerInput) SetDomain(v string) *CreateServerInput {
	s.Domain = &v
	return s
}

// SetEndpointDetails sets the EndpointDetails field's value.
func (s *CreateServerInput) SetEndpointDetails(v *EndpointDetails) *CreateServerInput {
	s.EndpointDetails = v
	return s
}

// SetEndpointType sets the EndpointType field's value.
func (s *CreateServerInput) SetEndpointType(v string) *CreateServerInput {
	s.EndpointType = &v
	return s
}

// SetHostKey sets the HostKey field's value.
func (s *CreateServerInput) SetHostKey(v string) *CreateServerInput {
	s.HostKey = &v
	return s
}

// SetIdentityProviderDetails sets the IdentityProviderDetails field's value.
func (s *CreateServerInput) SetIdentityProviderDetails(v *IdentityProviderDetails) *CreateServerInput {
	s.IdentityProviderDetails = v
	return s
}

// SetIdentityProviderType sets the IdentityProviderType field's value.
func (s *CreateServerInput) SetIdentityProviderType(v string) *CreateServerInput {
	s.IdentityProviderType = &v
	return s
}

// SetLoggingRole sets the LoggingRole field's value.
func (s *CreateServerInput) SetLoggingRole(v string) *CreateServerInput {
	s.LoggingRole = &v
	return s
}

// SetPostAuthenticationLoginBanner sets the PostAuthenticationLoginBanner field's value.
func (s *CreateServerInput) SetPostAuthenticationLoginBanner(v string) *CreateServerInput {
	s.PostAuthenticationLoginBanner = &v
	return s
}

// SetPreAuthenticationLoginBanner sets the PreAuthenticationLoginBanner field's value.
func (s *CreateServerInput) SetPreAuthenticationLoginBanner(v string) *CreateServerInput {
	s.PreAuthenticationLoginBanner = &v
	return s
}

// SetProtocolDetails sets the ProtocolDetails field's value.
func (s *CreateServerInput) SetProtocolDetails(v *ProtocolDetails) *CreateServerInput {
	s.ProtocolDetails = v
	return s
}

// SetProtocols sets the Protocols field's value.
func (s *CreateServerInput) SetProtocols(v []*string) *CreateServerInput {
	s.Protocols = v
	return s
}

// SetS3StorageOptions sets the S3StorageOptions field's value.
func (s *CreateServerInput) SetS3StorageOptions(v *S3StorageOptions) *CreateServerInput {
	s.S3StorageOptions = v
	return s
}

// SetSecurityPolicyName sets the SecurityPolicyName field's value.
func (s *CreateServerInput) SetSecurityPolicyName(v string) *CreateServerInput {
	s.SecurityPolicyName = &v
	return s
}

// SetStructuredLogDestinations sets the StructuredLogDestinations field's value.
func (s *CreateServerInput) SetStructuredLogDestinations(v []*string) *CreateServerInput {
	s.StructuredLogDestinations = v
	return s
}

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

// SetWorkflowDetails sets the WorkflowDetails field's value.
func (s *CreateServerInput) SetWorkflowDetails(v *WorkflowDetails) *CreateServerInput {
	s.WorkflowDetails = v
	return s
}

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

	// The service-assigned identifier of the server that is created.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

// SetServerId sets the ServerId field's value.
func (s *CreateServerOutput) SetServerId(v string) *CreateServerOutput {
	s.ServerId = &v
	return s
}

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

	// The landing directory (folder) for a user when they log in to the server
	// using the client.
	//
	// A HomeDirectory example is /bucket_name/home/mydirectory.
	//
	// The HomeDirectory parameter is only used if HomeDirectoryType is set to PATH.
	HomeDirectory *string `type:"string"`

	// Logical directory mappings that specify what Amazon S3 or Amazon EFS paths
	// and keys should be visible to your user and how you want to make them visible.
	// You must specify the Entry and Target pair, where Entry shows how the path
	// is made visible and Target is the actual Amazon S3 or Amazon EFS path. If
	// you only specify a target, it is displayed as is. You also must ensure that
	// your Identity and Access Management (IAM) role provides access to paths in
	// Target. This value can be set only when HomeDirectoryType is set to LOGICAL.
	//
	// The following is an Entry and Target pair example.
	//
	// [ { "Entry": "/directory1", "Target": "/bucket_name/home/mydirectory" } ]
	//
	// In most cases, you can use this value instead of the session policy to lock
	// your user down to the designated home directory ("chroot"). To do this, you
	// can set Entry to / and set Target to the value the user should see for their
	// home directory when they log in.
	//
	// The following is an Entry and Target pair example for chroot.
	//
	// [ { "Entry": "/", "Target": "/bucket_name/home/mydirectory" } ]
	HomeDirectoryMappings []*HomeDirectoryMapEntry `min:"1" type:"list"`

	// The type of landing directory (folder) that you want your users' home directory
	// to be when they log in to the server. If you set it to PATH, the user will
	// see the absolute Amazon S3 bucket or Amazon EFS path as is in their file
	// transfer protocol clients. If you set it to LOGICAL, you need to provide
	// mappings in the HomeDirectoryMappings for how you want to make Amazon S3
	// or Amazon EFS paths visible to your users.
	//
	// If HomeDirectoryType is LOGICAL, you must provide mappings, using the HomeDirectoryMappings
	// parameter. If, on the other hand, HomeDirectoryType is PATH, you provide
	// an absolute path using the HomeDirectory parameter. You cannot have both
	// HomeDirectory and HomeDirectoryMappings in your template.
	HomeDirectoryType *string `type:"string" enum:"HomeDirectoryType"`

	// A session policy for your user so that you can use the same Identity and
	// Access Management (IAM) role across multiple users. This policy scopes down
	// a user's access to portions of their Amazon S3 bucket. Variables that you
	// can use inside this policy include ${Transfer:UserName}, ${Transfer:HomeDirectory},
	// and ${Transfer:HomeBucket}.
	//
	// This policy applies only when the domain of ServerId is Amazon S3. Amazon
	// EFS does not use session policies.
	//
	// For session policies, Transfer Family stores the policy as a JSON blob, instead
	// of the Amazon Resource Name (ARN) of the policy. You save the policy as a
	// JSON blob and pass it in the Policy argument.
	//
	// For an example of a session policy, see Example session policy (https://docs.aws.amazon.com/transfer/latest/userguide/session-policy.html).
	//
	// For more information, see AssumeRole (https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)
	// in the Amazon Web Services Security Token Service API Reference.
	Policy *string `type:"string"`

	// Specifies the full POSIX identity, including user ID (Uid), group ID (Gid),
	// and any secondary groups IDs (SecondaryGids), that controls your users' access
	// to your Amazon EFS file systems. The POSIX permissions that are set on files
	// and directories in Amazon EFS determine the level of access your users get
	// when transferring files into and out of your Amazon EFS file systems.
	PosixProfile *PosixProfile `type:"structure"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that controls your users' access to your Amazon S3 bucket or Amazon
	// EFS file system. The policies attached to this role determine the level of
	// access that you want to provide your users when transferring files into and
	// out of your Amazon S3 bucket or Amazon EFS file system. The IAM role should
	// also contain a trust relationship that allows the server to access your resources
	// when servicing your users' transfer requests.
	//
	// Role is a required field
	Role *string `min:"20" type:"string" required:"true"`

	// A system-assigned unique identifier for a server instance. This is the specific
	// server that you added your user to.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// The public portion of the Secure Shell (SSH) key used to authenticate the
	// user to the server.
	//
	// The three standard SSH public key format elements are <key type>, <body base64>,
	// and an optional <comment>, with spaces between each element.
	//
	// Transfer Family accepts RSA, ECDSA, and ED25519 keys.
	//
	//    * For RSA keys, the key type is ssh-rsa.
	//
	//    * For ED25519 keys, the key type is ssh-ed25519.
	//
	//    * For ECDSA keys, the key type is either ecdsa-sha2-nistp256, ecdsa-sha2-nistp384,
	//    or ecdsa-sha2-nistp521, depending on the size of the key you generated.
	SshPublicKeyBody *string `type:"string"`

	// Key-value pairs that can be used to group and search for users. Tags are
	// metadata attached to users for any purpose.
	Tags []*Tag `min:"1" type:"list"`

	// A unique string that identifies a user and is associated with a ServerId.
	// This user name must be a minimum of 3 and a maximum of 100 characters long.
	// The following are valid characters: a-z, A-Z, 0-9, underscore '_', hyphen
	// '-', period '.', and at sign '@'. The user name can't start with a hyphen,
	// period, or at sign.
	//
	// UserName is a required field
	UserName *string `min:"3" type:"string" required:"true"`
}

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

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

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

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

// SetHomeDirectory sets the HomeDirectory field's value.
func (s *CreateUserInput) SetHomeDirectory(v string) *CreateUserInput {
	s.HomeDirectory = &v
	return s
}

// SetHomeDirectoryMappings sets the HomeDirectoryMappings field's value.
func (s *CreateUserInput) SetHomeDirectoryMappings(v []*HomeDirectoryMapEntry) *CreateUserInput {
	s.HomeDirectoryMappings = v
	return s
}

// SetHomeDirectoryType sets the HomeDirectoryType field's value.
func (s *CreateUserInput) SetHomeDirectoryType(v string) *CreateUserInput {
	s.HomeDirectoryType = &v
	return s
}

// SetPolicy sets the Policy field's value.
func (s *CreateUserInput) SetPolicy(v string) *CreateUserInput {
	s.Policy = &v
	return s
}

// SetPosixProfile sets the PosixProfile field's value.
func (s *CreateUserInput) SetPosixProfile(v *PosixProfile) *CreateUserInput {
	s.PosixProfile = v
	return s
}

// SetRole sets the Role field's value.
func (s *CreateUserInput) SetRole(v string) *CreateUserInput {
	s.Role = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *CreateUserInput) SetServerId(v string) *CreateUserInput {
	s.ServerId = &v
	return s
}

// SetSshPublicKeyBody sets the SshPublicKeyBody field's value.
func (s *CreateUserInput) SetSshPublicKeyBody(v string) *CreateUserInput {
	s.SshPublicKeyBody = &v
	return s
}

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

// SetUserName sets the UserName field's value.
func (s *CreateUserInput) SetUserName(v string) *CreateUserInput {
	s.UserName = &v
	return s
}

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

	// The identifier of the server that the user is attached to.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// A unique string that identifies a Transfer Family user.
	//
	// UserName is a required field
	UserName *string `min:"3" type:"string" required:"true"`
}

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

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

// SetServerId sets the ServerId field's value.
func (s *CreateUserOutput) SetServerId(v string) *CreateUserOutput {
	s.ServerId = &v
	return s
}

// SetUserName sets the UserName field's value.
func (s *CreateUserOutput) SetUserName(v string) *CreateUserOutput {
	s.UserName = &v
	return s
}

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

	// A textual description for the workflow.
	Description *string `type:"string"`

	// Specifies the steps (actions) to take if errors are encountered during execution
	// of the workflow.
	//
	// For custom steps, the Lambda function needs to send FAILURE to the call back
	// API to kick off the exception steps. Additionally, if the Lambda does not
	// send SUCCESS before it times out, the exception steps are executed.
	OnExceptionSteps []*WorkflowStep `type:"list"`

	// Specifies the details for the steps that are in the specified workflow.
	//
	// The TYPE specifies which of the following actions is being taken for this
	// step.
	//
	//    * COPY - Copy the file to another location.
	//
	//    * CUSTOM - Perform a custom step with an Lambda function target.
	//
	//    * DECRYPT - Decrypt a file that was encrypted before it was uploaded.
	//
	//    * DELETE - Delete the file.
	//
	//    * TAG - Add a tag to the file.
	//
	// Currently, copying and tagging are supported only on S3.
	//
	// For file location, you specify either the Amazon S3 bucket and key, or the
	// Amazon EFS file system ID and path.
	//
	// Steps is a required field
	Steps []*WorkflowStep `type:"list" required:"true"`

	// Key-value pairs that can be used to group and search for workflows. Tags
	// are metadata attached to workflows for any purpose.
	Tags []*Tag `min:"1" type:"list"`
}

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

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

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

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

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

// SetOnExceptionSteps sets the OnExceptionSteps field's value.
func (s *CreateWorkflowInput) SetOnExceptionSteps(v []*WorkflowStep) *CreateWorkflowInput {
	s.OnExceptionSteps = v
	return s
}

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

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

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

	// A unique identifier for the workflow.
	//
	// WorkflowId is a required field
	WorkflowId *string `min:"19" type:"string" required:"true"`
}

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

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

// SetWorkflowId sets the WorkflowId field's value.
func (s *CreateWorkflowOutput) SetWorkflowId(v string) *CreateWorkflowOutput {
	s.WorkflowId = &v
	return s
}

// Each step type has its own StepDetails structure.
type CustomStepDetails struct {
	_ struct{} `type:"structure"`

	// The name of the step, used as an identifier.
	Name *string `type:"string"`

	// Specifies which file to use as input to the workflow step: either the output
	// from the previous step, or the originally uploaded file for the workflow.
	//
	//    * To use the previous file as the input, enter ${previous.file}. In this
	//    case, this workflow step uses the output file from the previous workflow
	//    step as input. This is the default value.
	//
	//    * To use the originally uploaded file location as input for this step,
	//    enter ${original.file}.
	SourceFileLocation *string `type:"string"`

	// The ARN for the Lambda function that is being called.
	Target *string `type:"string"`

	// Timeout, in seconds, for the step.
	TimeoutSeconds *int64 `min:"1" type:"integer"`
}

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

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

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

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

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

// SetSourceFileLocation sets the SourceFileLocation field's value.
func (s *CustomStepDetails) SetSourceFileLocation(v string) *CustomStepDetails {
	s.SourceFileLocation = &v
	return s
}

// SetTarget sets the Target field's value.
func (s *CustomStepDetails) SetTarget(v string) *CustomStepDetails {
	s.Target = &v
	return s
}

// SetTimeoutSeconds sets the TimeoutSeconds field's value.
func (s *CustomStepDetails) SetTimeoutSeconds(v int64) *CustomStepDetails {
	s.TimeoutSeconds = &v
	return s
}

// Each step type has its own StepDetails structure.
type DecryptStepDetails struct {
	_ struct{} `type:"structure"`

	// Specifies the location for the file being decrypted. Use ${Transfer:UserName}
	// or ${Transfer:UploadDate} in this field to parametrize the destination prefix
	// by username or uploaded date.
	//
	//    * Set the value of DestinationFileLocation to ${Transfer:UserName} to
	//    decrypt uploaded files to an Amazon S3 bucket that is prefixed with the
	//    name of the Transfer Family user that uploaded the file.
	//
	//    * Set the value of DestinationFileLocation to ${Transfer:UploadDate} to
	//    decrypt uploaded files to an Amazon S3 bucket that is prefixed with the
	//    date of the upload. The system resolves UploadDate to a date format of
	//    YYYY-MM-DD, based on the date the file is uploaded in UTC.
	//
	// DestinationFileLocation is a required field
	DestinationFileLocation *InputFileLocation `type:"structure" required:"true"`

	// The name of the step, used as an identifier.
	Name *string `type:"string"`

	// A flag that indicates whether to overwrite an existing file of the same name.
	// The default is FALSE.
	//
	// If the workflow is processing a file that has the same name as an existing
	// file, the behavior is as follows:
	//
	//    * If OverwriteExisting is TRUE, the existing file is replaced with the
	//    file being processed.
	//
	//    * If OverwriteExisting is FALSE, nothing happens, and the workflow processing
	//    stops.
	OverwriteExisting *string `type:"string" enum:"OverwriteExisting"`

	// Specifies which file to use as input to the workflow step: either the output
	// from the previous step, or the originally uploaded file for the workflow.
	//
	//    * To use the previous file as the input, enter ${previous.file}. In this
	//    case, this workflow step uses the output file from the previous workflow
	//    step as input. This is the default value.
	//
	//    * To use the originally uploaded file location as input for this step,
	//    enter ${original.file}.
	SourceFileLocation *string `type:"string"`

	// The type of encryption used. Currently, this value must be PGP.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"EncryptionType"`
}

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

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

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

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

// SetDestinationFileLocation sets the DestinationFileLocation field's value.
func (s *DecryptStepDetails) SetDestinationFileLocation(v *InputFileLocation) *DecryptStepDetails {
	s.DestinationFileLocation = v
	return s
}

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

// SetOverwriteExisting sets the OverwriteExisting field's value.
func (s *DecryptStepDetails) SetOverwriteExisting(v string) *DecryptStepDetails {
	s.OverwriteExisting = &v
	return s
}

// SetSourceFileLocation sets the SourceFileLocation field's value.
func (s *DecryptStepDetails) SetSourceFileLocation(v string) *DecryptStepDetails {
	s.SourceFileLocation = &v
	return s
}

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

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

	// A unique identifier that is required to identify specific groups within your
	// directory. The users of the group that you associate have access to your
	// Amazon S3 or Amazon EFS resources over the enabled protocols using Transfer
	// Family. If you know the group name, you can view the SID values by running
	// the following command using Windows PowerShell.
	//
	// Get-ADGroup -Filter {samAccountName -like "YourGroupName*"} -Properties *
	// | Select SamAccountName,ObjectSid
	//
	// In that command, replace YourGroupName with the name of your Active Directory
	// group.
	//
	// The regular expression used to validate this parameter is a string of characters
	// consisting of uppercase and lowercase alphanumeric characters with no spaces.
	// You can also include underscores or any of the following characters: =,.@:/-
	//
	// ExternalId is a required field
	ExternalId *string `min:"1" type:"string" required:"true"`

	// A system-assigned unique identifier for a server that has this user assigned.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetExternalId sets the ExternalId field's value.
func (s *DeleteAccessInput) SetExternalId(v string) *DeleteAccessInput {
	s.ExternalId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *DeleteAccessInput) SetServerId(v string) *DeleteAccessInput {
	s.ServerId = &v
	return s
}

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

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

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

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

	// A unique identifier for the agreement. This identifier is returned when you
	// create an agreement.
	//
	// AgreementId is a required field
	AgreementId *string `min:"19" type:"string" required:"true"`

	// The server identifier associated with the agreement that you are deleting.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetAgreementId sets the AgreementId field's value.
func (s *DeleteAgreementInput) SetAgreementId(v string) *DeleteAgreementInput {
	s.AgreementId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *DeleteAgreementInput) SetServerId(v string) *DeleteAgreementInput {
	s.ServerId = &v
	return s
}

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

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

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

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

	// The identifier of the certificate object that you are deleting.
	//
	// CertificateId is a required field
	CertificateId *string `min:"22" type:"string" required:"true"`
}

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

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

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

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

// SetCertificateId sets the CertificateId field's value.
func (s *DeleteCertificateInput) SetCertificateId(v string) *DeleteCertificateInput {
	s.CertificateId = &v
	return s
}

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

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

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

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

	// The unique identifier for the connector.
	//
	// ConnectorId is a required field
	ConnectorId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetConnectorId sets the ConnectorId field's value.
func (s *DeleteConnectorInput) SetConnectorId(v string) *DeleteConnectorInput {
	s.ConnectorId = &v
	return s
}

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

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

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

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

	// The identifier of the host key that you are deleting.
	//
	// HostKeyId is a required field
	HostKeyId *string `min:"25" type:"string" required:"true"`

	// The identifier of the server that contains the host key that you are deleting.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetHostKeyId sets the HostKeyId field's value.
func (s *DeleteHostKeyInput) SetHostKeyId(v string) *DeleteHostKeyInput {
	s.HostKeyId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *DeleteHostKeyInput) SetServerId(v string) *DeleteHostKeyInput {
	s.ServerId = &v
	return s
}

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

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

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

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

	// The identifier of the profile that you are deleting.
	//
	// ProfileId is a required field
	ProfileId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetProfileId sets the ProfileId field's value.
func (s *DeleteProfileInput) SetProfileId(v string) *DeleteProfileInput {
	s.ProfileId = &v
	return s
}

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

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

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

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

	// A unique system-assigned identifier for a server instance.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetServerId sets the ServerId field's value.
func (s *DeleteServerInput) SetServerId(v string) *DeleteServerInput {
	s.ServerId = &v
	return s
}

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

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

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

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

	// A system-assigned unique identifier for a file transfer protocol-enabled
	// server instance that has the user assigned to it.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// A unique identifier used to reference your user's specific SSH key.
	//
	// SshPublicKeyId is a required field
	SshPublicKeyId *string `min:"21" type:"string" required:"true"`

	// A unique string that identifies a user whose public key is being deleted.
	//
	// UserName is a required field
	UserName *string `min:"3" type:"string" required:"true"`
}

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

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

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

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

// SetServerId sets the ServerId field's value.
func (s *DeleteSshPublicKeyInput) SetServerId(v string) *DeleteSshPublicKeyInput {
	s.ServerId = &v
	return s
}

// SetSshPublicKeyId sets the SshPublicKeyId field's value.
func (s *DeleteSshPublicKeyInput) SetSshPublicKeyId(v string) *DeleteSshPublicKeyInput {
	s.SshPublicKeyId = &v
	return s
}

// SetUserName sets the UserName field's value.
func (s *DeleteSshPublicKeyInput) SetUserName(v string) *DeleteSshPublicKeyInput {
	s.UserName = &v
	return s
}

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

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

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

// The name of the step, used to identify the delete step.
type DeleteStepDetails struct {
	_ struct{} `type:"structure"`

	// The name of the step, used as an identifier.
	Name *string `type:"string"`

	// Specifies which file to use as input to the workflow step: either the output
	// from the previous step, or the originally uploaded file for the workflow.
	//
	//    * To use the previous file as the input, enter ${previous.file}. In this
	//    case, this workflow step uses the output file from the previous workflow
	//    step as input. This is the default value.
	//
	//    * To use the originally uploaded file location as input for this step,
	//    enter ${original.file}.
	SourceFileLocation *string `type:"string"`
}

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

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

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

// SetSourceFileLocation sets the SourceFileLocation field's value.
func (s *DeleteStepDetails) SetSourceFileLocation(v string) *DeleteStepDetails {
	s.SourceFileLocation = &v
	return s
}

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

	// A system-assigned unique identifier for a server instance that has the user
	// assigned to it.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// A unique string that identifies a user that is being deleted from a server.
	//
	// UserName is a required field
	UserName *string `min:"3" type:"string" required:"true"`
}

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

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

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

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

// SetServerId sets the ServerId field's value.
func (s *DeleteUserInput) SetServerId(v string) *DeleteUserInput {
	s.ServerId = &v
	return s
}

// SetUserName sets the UserName field's value.
func (s *DeleteUserInput) SetUserName(v string) *DeleteUserInput {
	s.UserName = &v
	return s
}

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

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

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

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

	// A unique identifier for the workflow.
	//
	// WorkflowId is a required field
	WorkflowId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetWorkflowId sets the WorkflowId field's value.
func (s *DeleteWorkflowInput) SetWorkflowId(v string) *DeleteWorkflowInput {
	s.WorkflowId = &v
	return s
}

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

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

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

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

	// A unique identifier that is required to identify specific groups within your
	// directory. The users of the group that you associate have access to your
	// Amazon S3 or Amazon EFS resources over the enabled protocols using Transfer
	// Family. If you know the group name, you can view the SID values by running
	// the following command using Windows PowerShell.
	//
	// Get-ADGroup -Filter {samAccountName -like "YourGroupName*"} -Properties *
	// | Select SamAccountName,ObjectSid
	//
	// In that command, replace YourGroupName with the name of your Active Directory
	// group.
	//
	// The regular expression used to validate this parameter is a string of characters
	// consisting of uppercase and lowercase alphanumeric characters with no spaces.
	// You can also include underscores or any of the following characters: =,.@:/-
	//
	// ExternalId is a required field
	ExternalId *string `min:"1" type:"string" required:"true"`

	// A system-assigned unique identifier for a server that has this access assigned.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetExternalId sets the ExternalId field's value.
func (s *DescribeAccessInput) SetExternalId(v string) *DescribeAccessInput {
	s.ExternalId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *DescribeAccessInput) SetServerId(v string) *DescribeAccessInput {
	s.ServerId = &v
	return s
}

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

	// The external identifier of the server that the access is attached to.
	//
	// Access is a required field
	Access *DescribedAccess `type:"structure" required:"true"`

	// A system-assigned unique identifier for a server that has this access assigned.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

// SetAccess sets the Access field's value.
func (s *DescribeAccessOutput) SetAccess(v *DescribedAccess) *DescribeAccessOutput {
	s.Access = v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *DescribeAccessOutput) SetServerId(v string) *DescribeAccessOutput {
	s.ServerId = &v
	return s
}

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

	// A unique identifier for the agreement. This identifier is returned when you
	// create an agreement.
	//
	// AgreementId is a required field
	AgreementId *string `min:"19" type:"string" required:"true"`

	// The server identifier that's associated with the agreement.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetAgreementId sets the AgreementId field's value.
func (s *DescribeAgreementInput) SetAgreementId(v string) *DescribeAgreementInput {
	s.AgreementId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *DescribeAgreementInput) SetServerId(v string) *DescribeAgreementInput {
	s.ServerId = &v
	return s
}

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

	// The details for the specified agreement, returned as a DescribedAgreement
	// object.
	//
	// Agreement is a required field
	Agreement *DescribedAgreement `type:"structure" required:"true"`
}

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

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

// SetAgreement sets the Agreement field's value.
func (s *DescribeAgreementOutput) SetAgreement(v *DescribedAgreement) *DescribeAgreementOutput {
	s.Agreement = v
	return s
}

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

	// An array of identifiers for the imported certificates. You use this identifier
	// for working with profiles and partner profiles.
	//
	// CertificateId is a required field
	CertificateId *string `min:"22" type:"string" required:"true"`
}

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

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

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

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

// SetCertificateId sets the CertificateId field's value.
func (s *DescribeCertificateInput) SetCertificateId(v string) *DescribeCertificateInput {
	s.CertificateId = &v
	return s
}

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

	// The details for the specified certificate, returned as an object.
	//
	// Certificate is a required field
	Certificate *DescribedCertificate `type:"structure" required:"true"`
}

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

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

// SetCertificate sets the Certificate field's value.
func (s *DescribeCertificateOutput) SetCertificate(v *DescribedCertificate) *DescribeCertificateOutput {
	s.Certificate = v
	return s
}

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

	// The unique identifier for the connector.
	//
	// ConnectorId is a required field
	ConnectorId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetConnectorId sets the ConnectorId field's value.
func (s *DescribeConnectorInput) SetConnectorId(v string) *DescribeConnectorInput {
	s.ConnectorId = &v
	return s
}

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

	// The structure that contains the details of the connector.
	//
	// Connector is a required field
	Connector *DescribedConnector `type:"structure" required:"true"`
}

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

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

// SetConnector sets the Connector field's value.
func (s *DescribeConnectorOutput) SetConnector(v *DescribedConnector) *DescribeConnectorOutput {
	s.Connector = v
	return s
}

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

	// A unique identifier for the execution of a workflow.
	//
	// ExecutionId is a required field
	ExecutionId *string `min:"36" type:"string" required:"true"`

	// A unique identifier for the workflow.
	//
	// WorkflowId is a required field
	WorkflowId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetExecutionId sets the ExecutionId field's value.
func (s *DescribeExecutionInput) SetExecutionId(v string) *DescribeExecutionInput {
	s.ExecutionId = &v
	return s
}

// SetWorkflowId sets the WorkflowId field's value.
func (s *DescribeExecutionInput) SetWorkflowId(v string) *DescribeExecutionInput {
	s.WorkflowId = &v
	return s
}

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

	// The structure that contains the details of the workflow' execution.
	//
	// Execution is a required field
	Execution *DescribedExecution `type:"structure" required:"true"`

	// A unique identifier for the workflow.
	//
	// WorkflowId is a required field
	WorkflowId *string `min:"19" type:"string" required:"true"`
}

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

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

// SetExecution sets the Execution field's value.
func (s *DescribeExecutionOutput) SetExecution(v *DescribedExecution) *DescribeExecutionOutput {
	s.Execution = v
	return s
}

// SetWorkflowId sets the WorkflowId field's value.
func (s *DescribeExecutionOutput) SetWorkflowId(v string) *DescribeExecutionOutput {
	s.WorkflowId = &v
	return s
}

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

	// The identifier of the host key that you want described.
	//
	// HostKeyId is a required field
	HostKeyId *string `min:"25" type:"string" required:"true"`

	// The identifier of the server that contains the host key that you want described.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetHostKeyId sets the HostKeyId field's value.
func (s *DescribeHostKeyInput) SetHostKeyId(v string) *DescribeHostKeyInput {
	s.HostKeyId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *DescribeHostKeyInput) SetServerId(v string) *DescribeHostKeyInput {
	s.ServerId = &v
	return s
}

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

	// Returns the details for the specified host key.
	//
	// HostKey is a required field
	HostKey *DescribedHostKey `type:"structure" required:"true"`
}

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

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

// SetHostKey sets the HostKey field's value.
func (s *DescribeHostKeyOutput) SetHostKey(v *DescribedHostKey) *DescribeHostKeyOutput {
	s.HostKey = v
	return s
}

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

	// The identifier of the profile that you want described.
	//
	// ProfileId is a required field
	ProfileId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetProfileId sets the ProfileId field's value.
func (s *DescribeProfileInput) SetProfileId(v string) *DescribeProfileInput {
	s.ProfileId = &v
	return s
}

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

	// The details of the specified profile, returned as an object.
	//
	// Profile is a required field
	Profile *DescribedProfile `type:"structure" required:"true"`
}

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

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

// SetProfile sets the Profile field's value.
func (s *DescribeProfileOutput) SetProfile(v *DescribedProfile) *DescribeProfileOutput {
	s.Profile = v
	return s
}

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

	// Specify the text name of the security policy for which you want the details.
	//
	// SecurityPolicyName is a required field
	SecurityPolicyName *string `type:"string" required:"true"`
}

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

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

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

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

// SetSecurityPolicyName sets the SecurityPolicyName field's value.
func (s *DescribeSecurityPolicyInput) SetSecurityPolicyName(v string) *DescribeSecurityPolicyInput {
	s.SecurityPolicyName = &v
	return s
}

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

	// An array containing the properties of the security policy.
	//
	// SecurityPolicy is a required field
	SecurityPolicy *DescribedSecurityPolicy `type:"structure" required:"true"`
}

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

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

// SetSecurityPolicy sets the SecurityPolicy field's value.
func (s *DescribeSecurityPolicyOutput) SetSecurityPolicy(v *DescribedSecurityPolicy) *DescribeSecurityPolicyOutput {
	s.SecurityPolicy = v
	return s
}

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

	// A system-assigned unique identifier for a server.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetServerId sets the ServerId field's value.
func (s *DescribeServerInput) SetServerId(v string) *DescribeServerInput {
	s.ServerId = &v
	return s
}

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

	// An array containing the properties of a server with the ServerID you specified.
	//
	// Server is a required field
	Server *DescribedServer `type:"structure" required:"true"`
}

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

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

// SetServer sets the Server field's value.
func (s *DescribeServerOutput) SetServer(v *DescribedServer) *DescribeServerOutput {
	s.Server = v
	return s
}

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

	// A system-assigned unique identifier for a server that has this user assigned.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// The name of the user assigned to one or more servers. User names are part
	// of the sign-in credentials to use the Transfer Family service and perform
	// file transfer tasks.
	//
	// UserName is a required field
	UserName *string `min:"3" type:"string" required:"true"`
}

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

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

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

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

// SetServerId sets the ServerId field's value.
func (s *DescribeUserInput) SetServerId(v string) *DescribeUserInput {
	s.ServerId = &v
	return s
}

// SetUserName sets the UserName field's value.
func (s *DescribeUserInput) SetUserName(v string) *DescribeUserInput {
	s.UserName = &v
	return s
}

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

	// A system-assigned unique identifier for a server that has this user assigned.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// An array containing the properties of the Transfer Family user for the ServerID
	// value that you specified.
	//
	// User is a required field
	User *DescribedUser `type:"structure" required:"true"`
}

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

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

// SetServerId sets the ServerId field's value.
func (s *DescribeUserOutput) SetServerId(v string) *DescribeUserOutput {
	s.ServerId = &v
	return s
}

// SetUser sets the User field's value.
func (s *DescribeUserOutput) SetUser(v *DescribedUser) *DescribeUserOutput {
	s.User = v
	return s
}

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

	// A unique identifier for the workflow.
	//
	// WorkflowId is a required field
	WorkflowId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetWorkflowId sets the WorkflowId field's value.
func (s *DescribeWorkflowInput) SetWorkflowId(v string) *DescribeWorkflowInput {
	s.WorkflowId = &v
	return s
}

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

	// The structure that contains the details of the workflow.
	//
	// Workflow is a required field
	Workflow *DescribedWorkflow `type:"structure" required:"true"`
}

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

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

// SetWorkflow sets the Workflow field's value.
func (s *DescribeWorkflowOutput) SetWorkflow(v *DescribedWorkflow) *DescribeWorkflowOutput {
	s.Workflow = v
	return s
}

// Describes the properties of the access that was specified.
type DescribedAccess struct {
	_ struct{} `type:"structure"`

	// A unique identifier that is required to identify specific groups within your
	// directory. The users of the group that you associate have access to your
	// Amazon S3 or Amazon EFS resources over the enabled protocols using Transfer
	// Family. If you know the group name, you can view the SID values by running
	// the following command using Windows PowerShell.
	//
	// Get-ADGroup -Filter {samAccountName -like "YourGroupName*"} -Properties *
	// | Select SamAccountName,ObjectSid
	//
	// In that command, replace YourGroupName with the name of your Active Directory
	// group.
	//
	// The regular expression used to validate this parameter is a string of characters
	// consisting of uppercase and lowercase alphanumeric characters with no spaces.
	// You can also include underscores or any of the following characters: =,.@:/-
	ExternalId *string `min:"1" type:"string"`

	// The landing directory (folder) for a user when they log in to the server
	// using the client.
	//
	// A HomeDirectory example is /bucket_name/home/mydirectory.
	//
	// The HomeDirectory parameter is only used if HomeDirectoryType is set to PATH.
	HomeDirectory *string `type:"string"`

	// Logical directory mappings that specify what Amazon S3 or Amazon EFS paths
	// and keys should be visible to your user and how you want to make them visible.
	// You must specify the Entry and Target pair, where Entry shows how the path
	// is made visible and Target is the actual Amazon S3 or Amazon EFS path. If
	// you only specify a target, it is displayed as is. You also must ensure that
	// your Identity and Access Management (IAM) role provides access to paths in
	// Target. This value can be set only when HomeDirectoryType is set to LOGICAL.
	//
	// In most cases, you can use this value instead of the session policy to lock
	// down the associated access to the designated home directory ("chroot"). To
	// do this, you can set Entry to '/' and set Target to the HomeDirectory parameter
	// value.
	HomeDirectoryMappings []*HomeDirectoryMapEntry `min:"1" type:"list"`

	// The type of landing directory (folder) that you want your users' home directory
	// to be when they log in to the server. If you set it to PATH, the user will
	// see the absolute Amazon S3 bucket or Amazon EFS path as is in their file
	// transfer protocol clients. If you set it to LOGICAL, you need to provide
	// mappings in the HomeDirectoryMappings for how you want to make Amazon S3
	// or Amazon EFS paths visible to your users.
	//
	// If HomeDirectoryType is LOGICAL, you must provide mappings, using the HomeDirectoryMappings
	// parameter. If, on the other hand, HomeDirectoryType is PATH, you provide
	// an absolute path using the HomeDirectory parameter. You cannot have both
	// HomeDirectory and HomeDirectoryMappings in your template.
	HomeDirectoryType *string `type:"string" enum:"HomeDirectoryType"`

	// A session policy for your user so that you can use the same Identity and
	// Access Management (IAM) role across multiple users. This policy scopes down
	// a user's access to portions of their Amazon S3 bucket. Variables that you
	// can use inside this policy include ${Transfer:UserName}, ${Transfer:HomeDirectory},
	// and ${Transfer:HomeBucket}.
	Policy *string `type:"string"`

	// The full POSIX identity, including user ID (Uid), group ID (Gid), and any
	// secondary groups IDs (SecondaryGids), that controls your users' access to
	// your Amazon EFS file systems. The POSIX permissions that are set on files
	// and directories in your file system determine the level of access your users
	// get when transferring files into and out of your Amazon EFS file systems.
	PosixProfile *PosixProfile `type:"structure"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that controls your users' access to your Amazon S3 bucket or Amazon
	// EFS file system. The policies attached to this role determine the level of
	// access that you want to provide your users when transferring files into and
	// out of your Amazon S3 bucket or Amazon EFS file system. The IAM role should
	// also contain a trust relationship that allows the server to access your resources
	// when servicing your users' transfer requests.
	Role *string `min:"20" type:"string"`
}

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

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

// SetExternalId sets the ExternalId field's value.
func (s *DescribedAccess) SetExternalId(v string) *DescribedAccess {
	s.ExternalId = &v
	return s
}

// SetHomeDirectory sets the HomeDirectory field's value.
func (s *DescribedAccess) SetHomeDirectory(v string) *DescribedAccess {
	s.HomeDirectory = &v
	return s
}

// SetHomeDirectoryMappings sets the HomeDirectoryMappings field's value.
func (s *DescribedAccess) SetHomeDirectoryMappings(v []*HomeDirectoryMapEntry) *DescribedAccess {
	s.HomeDirectoryMappings = v
	return s
}

// SetHomeDirectoryType sets the HomeDirectoryType field's value.
func (s *DescribedAccess) SetHomeDirectoryType(v string) *DescribedAccess {
	s.HomeDirectoryType = &v
	return s
}

// SetPolicy sets the Policy field's value.
func (s *DescribedAccess) SetPolicy(v string) *DescribedAccess {
	s.Policy = &v
	return s
}

// SetPosixProfile sets the PosixProfile field's value.
func (s *DescribedAccess) SetPosixProfile(v *PosixProfile) *DescribedAccess {
	s.PosixProfile = v
	return s
}

// SetRole sets the Role field's value.
func (s *DescribedAccess) SetRole(v string) *DescribedAccess {
	s.Role = &v
	return s
}

// Describes the properties of an agreement.
type DescribedAgreement struct {
	_ struct{} `type:"structure"`

	// Connectors are used to send files using either the AS2 or SFTP protocol.
	// For the access role, provide the Amazon Resource Name (ARN) of the Identity
	// and Access Management role to use.
	//
	// For AS2 connectors
	//
	// With AS2, you can send files by calling StartFileTransfer and specifying
	// the file paths in the request parameter, SendFilePaths. We use the file’s
	// parent directory (for example, for --send-file-paths /bucket/dir/file.txt,
	// parent directory is /bucket/dir/) to temporarily store a processed AS2 message
	// file, store the MDN when we receive them from the partner, and write a final
	// JSON file containing relevant metadata of the transmission. So, the AccessRole
	// needs to provide read and write access to the parent directory of the file
	// location used in the StartFileTransfer request. Additionally, you need to
	// provide read and write access to the parent directory of the files that you
	// intend to send with StartFileTransfer.
	//
	// If you are using Basic authentication for your AS2 connector, the access
	// role requires the secretsmanager:GetSecretValue permission for the secret.
	// If the secret is encrypted using a customer-managed key instead of the Amazon
	// Web Services managed key in Secrets Manager, then the role also needs the
	// kms:Decrypt permission for that key.
	//
	// For SFTP connectors
	//
	// Make sure that the access role provides read and write access to the parent
	// directory of the file location that's used in the StartFileTransfer request.
	// Additionally, make sure that the role provides secretsmanager:GetSecretValue
	// permission to Secrets Manager.
	AccessRole *string `min:"20" type:"string"`

	// A unique identifier for the agreement. This identifier is returned when you
	// create an agreement.
	AgreementId *string `min:"19" type:"string"`

	// The unique Amazon Resource Name (ARN) for the agreement.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// The landing directory (folder) for files that are transferred by using the
	// AS2 protocol.
	BaseDirectory *string `type:"string"`

	// The name or short description that's used to identify the agreement.
	Description *string `min:"1" type:"string"`

	// A unique identifier for the AS2 local profile.
	LocalProfileId *string `min:"19" type:"string"`

	// A unique identifier for the partner profile used in the agreement.
	PartnerProfileId *string `min:"19" type:"string"`

	// A system-assigned unique identifier for a server instance. This identifier
	// indicates the specific server that the agreement uses.
	ServerId *string `min:"19" type:"string"`

	// The current status of the agreement, either ACTIVE or INACTIVE.
	Status *string `type:"string" enum:"AgreementStatusType"`

	// Key-value pairs that can be used to group and search for agreements.
	Tags []*Tag `min:"1" type:"list"`
}

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

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

// SetAccessRole sets the AccessRole field's value.
func (s *DescribedAgreement) SetAccessRole(v string) *DescribedAgreement {
	s.AccessRole = &v
	return s
}

// SetAgreementId sets the AgreementId field's value.
func (s *DescribedAgreement) SetAgreementId(v string) *DescribedAgreement {
	s.AgreementId = &v
	return s
}

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

// SetBaseDirectory sets the BaseDirectory field's value.
func (s *DescribedAgreement) SetBaseDirectory(v string) *DescribedAgreement {
	s.BaseDirectory = &v
	return s
}

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

// SetLocalProfileId sets the LocalProfileId field's value.
func (s *DescribedAgreement) SetLocalProfileId(v string) *DescribedAgreement {
	s.LocalProfileId = &v
	return s
}

// SetPartnerProfileId sets the PartnerProfileId field's value.
func (s *DescribedAgreement) SetPartnerProfileId(v string) *DescribedAgreement {
	s.PartnerProfileId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *DescribedAgreement) SetServerId(v string) *DescribedAgreement {
	s.ServerId = &v
	return s
}

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

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

// Describes the properties of a certificate.
type DescribedCertificate struct {
	_ struct{} `type:"structure"`

	// An optional date that specifies when the certificate becomes active.
	ActiveDate *time.Time `type:"timestamp"`

	// The unique Amazon Resource Name (ARN) for the certificate.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// The file name for the certificate.
	//
	// Certificate is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribedCertificate's
	// String and GoString methods.
	Certificate *string `min:"1" type:"string" sensitive:"true"`

	// The list of certificates that make up the chain for the certificate.
	//
	// CertificateChain is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribedCertificate's
	// String and GoString methods.
	CertificateChain *string `min:"1" type:"string" sensitive:"true"`

	// An array of identifiers for the imported certificates. You use this identifier
	// for working with profiles and partner profiles.
	CertificateId *string `min:"22" type:"string"`

	// The name or description that's used to identity the certificate.
	Description *string `min:"1" type:"string"`

	// An optional date that specifies when the certificate becomes inactive.
	InactiveDate *time.Time `type:"timestamp"`

	// The final date that the certificate is valid.
	NotAfterDate *time.Time `type:"timestamp"`

	// The earliest date that the certificate is valid.
	NotBeforeDate *time.Time `type:"timestamp"`

	// The serial number for the certificate.
	Serial *string `type:"string"`

	// The certificate can be either ACTIVE, PENDING_ROTATION, or INACTIVE. PENDING_ROTATION
	// means that this certificate will replace the current certificate when it
	// expires.
	Status *string `type:"string" enum:"CertificateStatusType"`

	// Key-value pairs that can be used to group and search for certificates.
	Tags []*Tag `min:"1" type:"list"`

	// If a private key has been specified for the certificate, its type is CERTIFICATE_WITH_PRIVATE_KEY.
	// If there is no private key, the type is CERTIFICATE.
	Type *string `type:"string" enum:"CertificateType"`

	// Specifies how this certificate is used. It can be used in the following ways:
	//
	//    * SIGNING: For signing AS2 messages
	//
	//    * ENCRYPTION: For encrypting AS2 messages
	//
	//    * TLS: For securing AS2 communications sent over HTTPS
	Usage *string `type:"string" enum:"CertificateUsageType"`
}

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

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

// SetActiveDate sets the ActiveDate field's value.
func (s *DescribedCertificate) SetActiveDate(v time.Time) *DescribedCertificate {
	s.ActiveDate = &v
	return s
}

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

// SetCertificate sets the Certificate field's value.
func (s *DescribedCertificate) SetCertificate(v string) *DescribedCertificate {
	s.Certificate = &v
	return s
}

// SetCertificateChain sets the CertificateChain field's value.
func (s *DescribedCertificate) SetCertificateChain(v string) *DescribedCertificate {
	s.CertificateChain = &v
	return s
}

// SetCertificateId sets the CertificateId field's value.
func (s *DescribedCertificate) SetCertificateId(v string) *DescribedCertificate {
	s.CertificateId = &v
	return s
}

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

// SetInactiveDate sets the InactiveDate field's value.
func (s *DescribedCertificate) SetInactiveDate(v time.Time) *DescribedCertificate {
	s.InactiveDate = &v
	return s
}

// SetNotAfterDate sets the NotAfterDate field's value.
func (s *DescribedCertificate) SetNotAfterDate(v time.Time) *DescribedCertificate {
	s.NotAfterDate = &v
	return s
}

// SetNotBeforeDate sets the NotBeforeDate field's value.
func (s *DescribedCertificate) SetNotBeforeDate(v time.Time) *DescribedCertificate {
	s.NotBeforeDate = &v
	return s
}

// SetSerial sets the Serial field's value.
func (s *DescribedCertificate) SetSerial(v string) *DescribedCertificate {
	s.Serial = &v
	return s
}

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

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

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

// SetUsage sets the Usage field's value.
func (s *DescribedCertificate) SetUsage(v string) *DescribedCertificate {
	s.Usage = &v
	return s
}

// Describes the parameters for the connector, as identified by the ConnectorId.
type DescribedConnector struct {
	_ struct{} `type:"structure"`

	// Connectors are used to send files using either the AS2 or SFTP protocol.
	// For the access role, provide the Amazon Resource Name (ARN) of the Identity
	// and Access Management role to use.
	//
	// For AS2 connectors
	//
	// With AS2, you can send files by calling StartFileTransfer and specifying
	// the file paths in the request parameter, SendFilePaths. We use the file’s
	// parent directory (for example, for --send-file-paths /bucket/dir/file.txt,
	// parent directory is /bucket/dir/) to temporarily store a processed AS2 message
	// file, store the MDN when we receive them from the partner, and write a final
	// JSON file containing relevant metadata of the transmission. So, the AccessRole
	// needs to provide read and write access to the parent directory of the file
	// location used in the StartFileTransfer request. Additionally, you need to
	// provide read and write access to the parent directory of the files that you
	// intend to send with StartFileTransfer.
	//
	// If you are using Basic authentication for your AS2 connector, the access
	// role requires the secretsmanager:GetSecretValue permission for the secret.
	// If the secret is encrypted using a customer-managed key instead of the Amazon
	// Web Services managed key in Secrets Manager, then the role also needs the
	// kms:Decrypt permission for that key.
	//
	// For SFTP connectors
	//
	// Make sure that the access role provides read and write access to the parent
	// directory of the file location that's used in the StartFileTransfer request.
	// Additionally, make sure that the role provides secretsmanager:GetSecretValue
	// permission to Secrets Manager.
	AccessRole *string `min:"20" type:"string"`

	// The unique Amazon Resource Name (ARN) for the connector.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// A structure that contains the parameters for an AS2 connector object.
	As2Config *As2ConnectorConfig `type:"structure"`

	// The unique identifier for the connector.
	ConnectorId *string `min:"19" type:"string"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that allows a connector to turn on CloudWatch logging for Amazon S3
	// events. When set, you can view connector activity in your CloudWatch logs.
	LoggingRole *string `min:"20" type:"string"`

	// The text name of the security policy for the specified connector.
	SecurityPolicyName *string `type:"string"`

	// The list of egress IP addresses of this connector. These IP addresses are
	// assigned automatically when you create the connector.
	ServiceManagedEgressIpAddresses []*string `type:"list"`

	// A structure that contains the parameters for an SFTP connector object.
	SftpConfig *SftpConnectorConfig `type:"structure"`

	// Key-value pairs that can be used to group and search for connectors.
	Tags []*Tag `min:"1" type:"list"`

	// The URL of the partner's AS2 or SFTP endpoint.
	Url *string `type:"string"`
}

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

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

// SetAccessRole sets the AccessRole field's value.
func (s *DescribedConnector) SetAccessRole(v string) *DescribedConnector {
	s.AccessRole = &v
	return s
}

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

// SetAs2Config sets the As2Config field's value.
func (s *DescribedConnector) SetAs2Config(v *As2ConnectorConfig) *DescribedConnector {
	s.As2Config = v
	return s
}

// SetConnectorId sets the ConnectorId field's value.
func (s *DescribedConnector) SetConnectorId(v string) *DescribedConnector {
	s.ConnectorId = &v
	return s
}

// SetLoggingRole sets the LoggingRole field's value.
func (s *DescribedConnector) SetLoggingRole(v string) *DescribedConnector {
	s.LoggingRole = &v
	return s
}

// SetSecurityPolicyName sets the SecurityPolicyName field's value.
func (s *DescribedConnector) SetSecurityPolicyName(v string) *DescribedConnector {
	s.SecurityPolicyName = &v
	return s
}

// SetServiceManagedEgressIpAddresses sets the ServiceManagedEgressIpAddresses field's value.
func (s *DescribedConnector) SetServiceManagedEgressIpAddresses(v []*string) *DescribedConnector {
	s.ServiceManagedEgressIpAddresses = v
	return s
}

// SetSftpConfig sets the SftpConfig field's value.
func (s *DescribedConnector) SetSftpConfig(v *SftpConnectorConfig) *DescribedConnector {
	s.SftpConfig = v
	return s
}

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

// SetUrl sets the Url field's value.
func (s *DescribedConnector) SetUrl(v string) *DescribedConnector {
	s.Url = &v
	return s
}

// The details for an execution object.
type DescribedExecution struct {
	_ struct{} `type:"structure"`

	// A unique identifier for the execution of a workflow.
	ExecutionId *string `min:"36" type:"string"`

	// The IAM role associated with the execution.
	ExecutionRole *string `min:"20" type:"string"`

	// A structure that describes the Amazon S3 or EFS file location. This is the
	// file location when the execution begins: if the file is being copied, this
	// is the initial (as opposed to destination) file location.
	InitialFileLocation *FileLocation `type:"structure"`

	// The IAM logging role associated with the execution.
	LoggingConfiguration *LoggingConfiguration `type:"structure"`

	// The full POSIX identity, including user ID (Uid), group ID (Gid), and any
	// secondary groups IDs (SecondaryGids), that controls your users' access to
	// your Amazon EFS file systems. The POSIX permissions that are set on files
	// and directories in your file system determine the level of access your users
	// get when transferring files into and out of your Amazon EFS file systems.
	PosixProfile *PosixProfile `type:"structure"`

	// A structure that describes the execution results. This includes a list of
	// the steps along with the details of each step, error type and message (if
	// any), and the OnExceptionSteps structure.
	Results *ExecutionResults `type:"structure"`

	// A container object for the session details that are associated with a workflow.
	ServiceMetadata *ServiceMetadata `type:"structure"`

	// The status is one of the execution. Can be in progress, completed, exception
	// encountered, or handling the exception.
	Status *string `type:"string" enum:"ExecutionStatus"`
}

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

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

// SetExecutionId sets the ExecutionId field's value.
func (s *DescribedExecution) SetExecutionId(v string) *DescribedExecution {
	s.ExecutionId = &v
	return s
}

// SetExecutionRole sets the ExecutionRole field's value.
func (s *DescribedExecution) SetExecutionRole(v string) *DescribedExecution {
	s.ExecutionRole = &v
	return s
}

// SetInitialFileLocation sets the InitialFileLocation field's value.
func (s *DescribedExecution) SetInitialFileLocation(v *FileLocation) *DescribedExecution {
	s.InitialFileLocation = v
	return s
}

// SetLoggingConfiguration sets the LoggingConfiguration field's value.
func (s *DescribedExecution) SetLoggingConfiguration(v *LoggingConfiguration) *DescribedExecution {
	s.LoggingConfiguration = v
	return s
}

// SetPosixProfile sets the PosixProfile field's value.
func (s *DescribedExecution) SetPosixProfile(v *PosixProfile) *DescribedExecution {
	s.PosixProfile = v
	return s
}

// SetResults sets the Results field's value.
func (s *DescribedExecution) SetResults(v *ExecutionResults) *DescribedExecution {
	s.Results = v
	return s
}

// SetServiceMetadata sets the ServiceMetadata field's value.
func (s *DescribedExecution) SetServiceMetadata(v *ServiceMetadata) *DescribedExecution {
	s.ServiceMetadata = v
	return s
}

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

// The details for a server host key.
type DescribedHostKey struct {
	_ struct{} `type:"structure"`

	// The unique Amazon Resource Name (ARN) for the host key.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// The date on which the host key was added to the server.
	DateImported *time.Time `type:"timestamp"`

	// The text description for this host key.
	Description *string `type:"string"`

	// The public key fingerprint, which is a short sequence of bytes used to identify
	// the longer public key.
	HostKeyFingerprint *string `type:"string"`

	// A unique identifier for the host key.
	HostKeyId *string `min:"25" type:"string"`

	// Key-value pairs that can be used to group and search for host keys.
	Tags []*Tag `min:"1" type:"list"`

	// The encryption algorithm that is used for the host key. The Type parameter
	// is specified by using one of the following values:
	//
	//    * ssh-rsa
	//
	//    * ssh-ed25519
	//
	//    * ecdsa-sha2-nistp256
	//
	//    * ecdsa-sha2-nistp384
	//
	//    * ecdsa-sha2-nistp521
	Type *string `type:"string"`
}

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

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

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

// SetDateImported sets the DateImported field's value.
func (s *DescribedHostKey) SetDateImported(v time.Time) *DescribedHostKey {
	s.DateImported = &v
	return s
}

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

// SetHostKeyFingerprint sets the HostKeyFingerprint field's value.
func (s *DescribedHostKey) SetHostKeyFingerprint(v string) *DescribedHostKey {
	s.HostKeyFingerprint = &v
	return s
}

// SetHostKeyId sets the HostKeyId field's value.
func (s *DescribedHostKey) SetHostKeyId(v string) *DescribedHostKey {
	s.HostKeyId = &v
	return s
}

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

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

// The details for a local or partner AS2 profile.
type DescribedProfile struct {
	_ struct{} `type:"structure"`

	// The unique Amazon Resource Name (ARN) for the profile.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// The As2Id is the AS2-name, as defined in the RFC 4130 (https://datatracker.ietf.org/doc/html/rfc4130).
	// For inbound transfers, this is the AS2-From header for the AS2 messages sent
	// from the partner. For outbound connectors, this is the AS2-To header for
	// the AS2 messages sent to the partner using the StartFileTransfer API operation.
	// This ID cannot include spaces.
	As2Id *string `min:"1" type:"string"`

	// An array of identifiers for the imported certificates. You use this identifier
	// for working with profiles and partner profiles.
	CertificateIds []*string `type:"list"`

	// A unique identifier for the local or partner AS2 profile.
	ProfileId *string `min:"19" type:"string"`

	// Indicates whether to list only LOCAL type profiles or only PARTNER type profiles.
	// If not supplied in the request, the command lists all types of profiles.
	ProfileType *string `type:"string" enum:"ProfileType"`

	// Key-value pairs that can be used to group and search for profiles.
	Tags []*Tag `min:"1" type:"list"`
}

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

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

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

// SetAs2Id sets the As2Id field's value.
func (s *DescribedProfile) SetAs2Id(v string) *DescribedProfile {
	s.As2Id = &v
	return s
}

// SetCertificateIds sets the CertificateIds field's value.
func (s *DescribedProfile) SetCertificateIds(v []*string) *DescribedProfile {
	s.CertificateIds = v
	return s
}

// SetProfileId sets the ProfileId field's value.
func (s *DescribedProfile) SetProfileId(v string) *DescribedProfile {
	s.ProfileId = &v
	return s
}

// SetProfileType sets the ProfileType field's value.
func (s *DescribedProfile) SetProfileType(v string) *DescribedProfile {
	s.ProfileType = &v
	return s
}

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

// Describes the properties of a security policy that you specify. For more
// information about security policies, see Working with security policies for
// servers (https://docs.aws.amazon.com/transfer/latest/userguide/security-policies.html)
// or Working with security policies for SFTP connectors (https://docs.aws.amazon.com/transfer/latest/userguide/security-policies-connectors.html).
type DescribedSecurityPolicy struct {
	_ struct{} `type:"structure"`

	// Specifies whether this policy enables Federal Information Processing Standards
	// (FIPS). This parameter applies to both server and connector security policies.
	Fips *bool `type:"boolean"`

	// Lists the file transfer protocols that the security policy applies to.
	Protocols []*string `min:"1" type:"list" enum:"SecurityPolicyProtocol"`

	// The text name of the specified security policy.
	//
	// SecurityPolicyName is a required field
	SecurityPolicyName *string `type:"string" required:"true"`

	// Lists the enabled Secure Shell (SSH) cipher encryption algorithms in the
	// security policy that is attached to the server or connector. This parameter
	// applies to both server and connector security policies.
	SshCiphers []*string `type:"list"`

	// Lists the host key algorithms for the security policy.
	//
	// This parameter only applies to security policies for connectors.
	SshHostKeyAlgorithms []*string `type:"list"`

	// Lists the enabled SSH key exchange (KEX) encryption algorithms in the security
	// policy that is attached to the server or connector. This parameter applies
	// to both server and connector security policies.
	SshKexs []*string `type:"list"`

	// Lists the enabled SSH message authentication code (MAC) encryption algorithms
	// in the security policy that is attached to the server or connector. This
	// parameter applies to both server and connector security policies.
	SshMacs []*string `type:"list"`

	// Lists the enabled Transport Layer Security (TLS) cipher encryption algorithms
	// in the security policy that is attached to the server.
	//
	// This parameter only applies to security policies for servers.
	TlsCiphers []*string `type:"list"`

	// The resource type to which the security policy applies, either server or
	// connector.
	Type *string `type:"string" enum:"SecurityPolicyResourceType"`
}

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

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

// SetFips sets the Fips field's value.
func (s *DescribedSecurityPolicy) SetFips(v bool) *DescribedSecurityPolicy {
	s.Fips = &v
	return s
}

// SetProtocols sets the Protocols field's value.
func (s *DescribedSecurityPolicy) SetProtocols(v []*string) *DescribedSecurityPolicy {
	s.Protocols = v
	return s
}

// SetSecurityPolicyName sets the SecurityPolicyName field's value.
func (s *DescribedSecurityPolicy) SetSecurityPolicyName(v string) *DescribedSecurityPolicy {
	s.SecurityPolicyName = &v
	return s
}

// SetSshCiphers sets the SshCiphers field's value.
func (s *DescribedSecurityPolicy) SetSshCiphers(v []*string) *DescribedSecurityPolicy {
	s.SshCiphers = v
	return s
}

// SetSshHostKeyAlgorithms sets the SshHostKeyAlgorithms field's value.
func (s *DescribedSecurityPolicy) SetSshHostKeyAlgorithms(v []*string) *DescribedSecurityPolicy {
	s.SshHostKeyAlgorithms = v
	return s
}

// SetSshKexs sets the SshKexs field's value.
func (s *DescribedSecurityPolicy) SetSshKexs(v []*string) *DescribedSecurityPolicy {
	s.SshKexs = v
	return s
}

// SetSshMacs sets the SshMacs field's value.
func (s *DescribedSecurityPolicy) SetSshMacs(v []*string) *DescribedSecurityPolicy {
	s.SshMacs = v
	return s
}

// SetTlsCiphers sets the TlsCiphers field's value.
func (s *DescribedSecurityPolicy) SetTlsCiphers(v []*string) *DescribedSecurityPolicy {
	s.TlsCiphers = v
	return s
}

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

// Describes the properties of a file transfer protocol-enabled server that
// was specified.
type DescribedServer struct {
	_ struct{} `type:"structure"`

	// Specifies the unique Amazon Resource Name (ARN) of the server.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// The list of egress IP addresses of this server. These IP addresses are only
	// relevant for servers that use the AS2 protocol. They are used for sending
	// asynchronous MDNs.
	//
	// These IP addresses are assigned automatically when you create an AS2 server.
	// Additionally, if you update an existing server and add the AS2 protocol,
	// static IP addresses are assigned as well.
	As2ServiceManagedEgressIpAddresses []*string `type:"list"`

	// Specifies the ARN of the Amazon Web ServicesCertificate Manager (ACM) certificate.
	// Required when Protocols is set to FTPS.
	Certificate *string `type:"string"`

	// Specifies the domain of the storage system that is used for file transfers.
	// There are two domains available: Amazon Simple Storage Service (Amazon S3)
	// and Amazon Elastic File System (Amazon EFS). The default value is S3.
	Domain *string `type:"string" enum:"Domain"`

	// The virtual private cloud (VPC) endpoint settings that are configured for
	// your server. When you host your endpoint within your VPC, you can make your
	// endpoint accessible only to resources within your VPC, or you can attach
	// Elastic IP addresses and make your endpoint accessible to clients over the
	// internet. Your VPC's default security groups are automatically assigned to
	// your endpoint.
	EndpointDetails *EndpointDetails `type:"structure"`

	// Defines the type of endpoint that your server is connected to. If your server
	// is connected to a VPC endpoint, your server isn't accessible over the public
	// internet.
	EndpointType *string `type:"string" enum:"EndpointType"`

	// Specifies the Base64-encoded SHA256 fingerprint of the server's host key.
	// This value is equivalent to the output of the ssh-keygen -l -f my-new-server-key
	// command.
	HostKeyFingerprint *string `type:"string"`

	// Specifies information to call a customer-supplied authentication API. This
	// field is not populated when the IdentityProviderType of a server is AWS_DIRECTORY_SERVICE
	// or SERVICE_MANAGED.
	IdentityProviderDetails *IdentityProviderDetails `type:"structure"`

	// The mode of authentication for a server. The default value is SERVICE_MANAGED,
	// which allows you to store and access user credentials within the Transfer
	// Family service.
	//
	// Use AWS_DIRECTORY_SERVICE to provide access to Active Directory groups in
	// Directory Service for Microsoft Active Directory or Microsoft Active Directory
	// in your on-premises environment or in Amazon Web Services using AD Connector.
	// This option also requires you to provide a Directory ID by using the IdentityProviderDetails
	// parameter.
	//
	// Use the API_GATEWAY value to integrate with an identity provider of your
	// choosing. The API_GATEWAY setting requires you to provide an Amazon API Gateway
	// endpoint URL to call for authentication by using the IdentityProviderDetails
	// parameter.
	//
	// Use the AWS_LAMBDA value to directly use an Lambda function as your identity
	// provider. If you choose this value, you must specify the ARN for the Lambda
	// function in the Function parameter for the IdentityProviderDetails data type.
	IdentityProviderType *string `type:"string" enum:"IdentityProviderType"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that allows a server to turn on Amazon CloudWatch logging for Amazon
	// S3 or Amazon EFSevents. When set, you can view user activity in your CloudWatch
	// logs.
	LoggingRole *string `type:"string"`

	// Specifies a string to display when users connect to a server. This string
	// is displayed after the user authenticates.
	//
	// The SFTP protocol does not support post-authentication display banners.
	PostAuthenticationLoginBanner *string `type:"string"`

	// Specifies a string to display when users connect to a server. This string
	// is displayed before the user authenticates. For example, the following banner
	// displays details about using the system:
	//
	// This system is for the use of authorized users only. Individuals using this
	// computer system without authority, or in excess of their authority, are subject
	// to having all of their activities on this system monitored and recorded by
	// system personnel.
	PreAuthenticationLoginBanner *string `type:"string"`

	// The protocol settings that are configured for your server.
	//
	//    * To indicate passive mode (for FTP and FTPS protocols), use the PassiveIp
	//    parameter. Enter a single dotted-quad IPv4 address, such as the external
	//    IP address of a firewall, router, or load balancer.
	//
	//    * To ignore the error that is generated when the client attempts to use
	//    the SETSTAT command on a file that you are uploading to an Amazon S3 bucket,
	//    use the SetStatOption parameter. To have the Transfer Family server ignore
	//    the SETSTAT command and upload files without needing to make any changes
	//    to your SFTP client, set the value to ENABLE_NO_OP. If you set the SetStatOption
	//    parameter to ENABLE_NO_OP, Transfer Family generates a log entry to Amazon
	//    CloudWatch Logs, so that you can determine when the client is making a
	//    SETSTAT call.
	//
	//    * To determine whether your Transfer Family server resumes recent, negotiated
	//    sessions through a unique session ID, use the TlsSessionResumptionMode
	//    parameter.
	//
	//    * As2Transports indicates the transport method for the AS2 messages. Currently,
	//    only HTTP is supported.
	ProtocolDetails *ProtocolDetails `type:"structure"`

	// Specifies the file transfer protocol or protocols over which your file transfer
	// protocol client can connect to your server's endpoint. The available protocols
	// are:
	//
	//    * SFTP (Secure Shell (SSH) File Transfer Protocol): File transfer over
	//    SSH
	//
	//    * FTPS (File Transfer Protocol Secure): File transfer with TLS encryption
	//
	//    * FTP (File Transfer Protocol): Unencrypted file transfer
	//
	//    * AS2 (Applicability Statement 2): used for transporting structured business-to-business
	//    data
	//
	//    * If you select FTPS, you must choose a certificate stored in Certificate
	//    Manager (ACM) which is used to identify your server when clients connect
	//    to it over FTPS.
	//
	//    * If Protocol includes either FTP or FTPS, then the EndpointType must
	//    be VPC and the IdentityProviderType must be either AWS_DIRECTORY_SERVICE,
	//    AWS_LAMBDA, or API_GATEWAY.
	//
	//    * If Protocol includes FTP, then AddressAllocationIds cannot be associated.
	//
	//    * If Protocol is set only to SFTP, the EndpointType can be set to PUBLIC
	//    and the IdentityProviderType can be set any of the supported identity
	//    types: SERVICE_MANAGED, AWS_DIRECTORY_SERVICE, AWS_LAMBDA, or API_GATEWAY.
	//
	//    * If Protocol includes AS2, then the EndpointType must be VPC, and domain
	//    must be Amazon S3.
	Protocols []*string `min:"1" type:"list" enum:"Protocol"`

	// Specifies whether or not performance for your Amazon S3 directories is optimized.
	// This is disabled by default.
	//
	// By default, home directory mappings have a TYPE of DIRECTORY. If you enable
	// this option, you would then need to explicitly set the HomeDirectoryMapEntry
	// Type to FILE if you want a mapping to have a file target.
	S3StorageOptions *S3StorageOptions `type:"structure"`

	// Specifies the name of the security policy for the server.
	SecurityPolicyName *string `type:"string"`

	// Specifies the unique system-assigned identifier for a server that you instantiate.
	ServerId *string `min:"19" type:"string"`

	// The condition of the server that was described. A value of ONLINE indicates
	// that the server can accept jobs and transfer files. A State value of OFFLINE
	// means that the server cannot perform file transfer operations.
	//
	// The states of STARTING and STOPPING indicate that the server is in an intermediate
	// state, either not fully able to respond, or not fully offline. The values
	// of START_FAILED or STOP_FAILED can indicate an error condition.
	State *string `type:"string" enum:"State"`

	// Specifies the log groups to which your server logs are sent.
	//
	// To specify a log group, you must provide the ARN for an existing log group.
	// In this case, the format of the log group is as follows:
	//
	// arn:aws:logs:region-name:amazon-account-id:log-group:log-group-name:*
	//
	// For example, arn:aws:logs:us-east-1:111122223333:log-group:mytestgroup:*
	//
	// If you have previously specified a log group for a server, you can clear
	// it, and in effect turn off structured logging, by providing an empty value
	// for this parameter in an update-server call. For example:
	//
	// update-server --server-id s-1234567890abcdef0 --structured-log-destinations
	StructuredLogDestinations []*string `type:"list"`

	// Specifies the key-value pairs that you can use to search for and group servers
	// that were assigned to the server that was described.
	Tags []*Tag `min:"1" type:"list"`

	// Specifies the number of users that are assigned to a server you specified
	// with the ServerId.
	UserCount *int64 `type:"integer"`

	// Specifies the workflow ID for the workflow to assign and the execution role
	// that's used for executing the workflow.
	//
	// In addition to a workflow to execute when a file is uploaded completely,
	// WorkflowDetails can also contain a workflow ID (and execution role) for a
	// workflow to execute on partial upload. A partial upload occurs when the server
	// session disconnects while the file is still being uploaded.
	WorkflowDetails *WorkflowDetails `type:"structure"`
}

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

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

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

// SetAs2ServiceManagedEgressIpAddresses sets the As2ServiceManagedEgressIpAddresses field's value.
func (s *DescribedServer) SetAs2ServiceManagedEgressIpAddresses(v []*string) *DescribedServer {
	s.As2ServiceManagedEgressIpAddresses = v
	return s
}

// SetCertificate sets the Certificate field's value.
func (s *DescribedServer) SetCertificate(v string) *DescribedServer {
	s.Certificate = &v
	return s
}

// SetDomain sets the Domain field's value.
func (s *DescribedServer) SetDomain(v string) *DescribedServer {
	s.Domain = &v
	return s
}

// SetEndpointDetails sets the EndpointDetails field's value.
func (s *DescribedServer) SetEndpointDetails(v *EndpointDetails) *DescribedServer {
	s.EndpointDetails = v
	return s
}

// SetEndpointType sets the EndpointType field's value.
func (s *DescribedServer) SetEndpointType(v string) *DescribedServer {
	s.EndpointType = &v
	return s
}

// SetHostKeyFingerprint sets the HostKeyFingerprint field's value.
func (s *DescribedServer) SetHostKeyFingerprint(v string) *DescribedServer {
	s.HostKeyFingerprint = &v
	return s
}

// SetIdentityProviderDetails sets the IdentityProviderDetails field's value.
func (s *DescribedServer) SetIdentityProviderDetails(v *IdentityProviderDetails) *DescribedServer {
	s.IdentityProviderDetails = v
	return s
}

// SetIdentityProviderType sets the IdentityProviderType field's value.
func (s *DescribedServer) SetIdentityProviderType(v string) *DescribedServer {
	s.IdentityProviderType = &v
	return s
}

// SetLoggingRole sets the LoggingRole field's value.
func (s *DescribedServer) SetLoggingRole(v string) *DescribedServer {
	s.LoggingRole = &v
	return s
}

// SetPostAuthenticationLoginBanner sets the PostAuthenticationLoginBanner field's value.
func (s *DescribedServer) SetPostAuthenticationLoginBanner(v string) *DescribedServer {
	s.PostAuthenticationLoginBanner = &v
	return s
}

// SetPreAuthenticationLoginBanner sets the PreAuthenticationLoginBanner field's value.
func (s *DescribedServer) SetPreAuthenticationLoginBanner(v string) *DescribedServer {
	s.PreAuthenticationLoginBanner = &v
	return s
}

// SetProtocolDetails sets the ProtocolDetails field's value.
func (s *DescribedServer) SetProtocolDetails(v *ProtocolDetails) *DescribedServer {
	s.ProtocolDetails = v
	return s
}

// SetProtocols sets the Protocols field's value.
func (s *DescribedServer) SetProtocols(v []*string) *DescribedServer {
	s.Protocols = v
	return s
}

// SetS3StorageOptions sets the S3StorageOptions field's value.
func (s *DescribedServer) SetS3StorageOptions(v *S3StorageOptions) *DescribedServer {
	s.S3StorageOptions = v
	return s
}

// SetSecurityPolicyName sets the SecurityPolicyName field's value.
func (s *DescribedServer) SetSecurityPolicyName(v string) *DescribedServer {
	s.SecurityPolicyName = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *DescribedServer) SetServerId(v string) *DescribedServer {
	s.ServerId = &v
	return s
}

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

// SetStructuredLogDestinations sets the StructuredLogDestinations field's value.
func (s *DescribedServer) SetStructuredLogDestinations(v []*string) *DescribedServer {
	s.StructuredLogDestinations = v
	return s
}

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

// SetUserCount sets the UserCount field's value.
func (s *DescribedServer) SetUserCount(v int64) *DescribedServer {
	s.UserCount = &v
	return s
}

// SetWorkflowDetails sets the WorkflowDetails field's value.
func (s *DescribedServer) SetWorkflowDetails(v *WorkflowDetails) *DescribedServer {
	s.WorkflowDetails = v
	return s
}

// Describes the properties of a user that was specified.
type DescribedUser struct {
	_ struct{} `type:"structure"`

	// Specifies the unique Amazon Resource Name (ARN) for the user that was requested
	// to be described.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// The landing directory (folder) for a user when they log in to the server
	// using the client.
	//
	// A HomeDirectory example is /bucket_name/home/mydirectory.
	//
	// The HomeDirectory parameter is only used if HomeDirectoryType is set to PATH.
	HomeDirectory *string `type:"string"`

	// Logical directory mappings that specify what Amazon S3 or Amazon EFS paths
	// and keys should be visible to your user and how you want to make them visible.
	// You must specify the Entry and Target pair, where Entry shows how the path
	// is made visible and Target is the actual Amazon S3 or Amazon EFS path. If
	// you only specify a target, it is displayed as is. You also must ensure that
	// your Identity and Access Management (IAM) role provides access to paths in
	// Target. This value can be set only when HomeDirectoryType is set to LOGICAL.
	//
	// In most cases, you can use this value instead of the session policy to lock
	// your user down to the designated home directory ("chroot"). To do this, you
	// can set Entry to '/' and set Target to the HomeDirectory parameter value.
	HomeDirectoryMappings []*HomeDirectoryMapEntry `min:"1" type:"list"`

	// The type of landing directory (folder) that you want your users' home directory
	// to be when they log in to the server. If you set it to PATH, the user will
	// see the absolute Amazon S3 bucket or Amazon EFS path as is in their file
	// transfer protocol clients. If you set it to LOGICAL, you need to provide
	// mappings in the HomeDirectoryMappings for how you want to make Amazon S3
	// or Amazon EFS paths visible to your users.
	//
	// If HomeDirectoryType is LOGICAL, you must provide mappings, using the HomeDirectoryMappings
	// parameter. If, on the other hand, HomeDirectoryType is PATH, you provide
	// an absolute path using the HomeDirectory parameter. You cannot have both
	// HomeDirectory and HomeDirectoryMappings in your template.
	HomeDirectoryType *string `type:"string" enum:"HomeDirectoryType"`

	// A session policy for your user so that you can use the same Identity and
	// Access Management (IAM) role across multiple users. This policy scopes down
	// a user's access to portions of their Amazon S3 bucket. Variables that you
	// can use inside this policy include ${Transfer:UserName}, ${Transfer:HomeDirectory},
	// and ${Transfer:HomeBucket}.
	Policy *string `type:"string"`

	// Specifies the full POSIX identity, including user ID (Uid), group ID (Gid),
	// and any secondary groups IDs (SecondaryGids), that controls your users' access
	// to your Amazon Elastic File System (Amazon EFS) file systems. The POSIX permissions
	// that are set on files and directories in your file system determine the level
	// of access your users get when transferring files into and out of your Amazon
	// EFS file systems.
	PosixProfile *PosixProfile `type:"structure"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that controls your users' access to your Amazon S3 bucket or Amazon
	// EFS file system. The policies attached to this role determine the level of
	// access that you want to provide your users when transferring files into and
	// out of your Amazon S3 bucket or Amazon EFS file system. The IAM role should
	// also contain a trust relationship that allows the server to access your resources
	// when servicing your users' transfer requests.
	Role *string `min:"20" type:"string"`

	// Specifies the public key portion of the Secure Shell (SSH) keys stored for
	// the described user.
	SshPublicKeys []*SshPublicKey `type:"list"`

	// Specifies the key-value pairs for the user requested. Tag can be used to
	// search for and group users for a variety of purposes.
	Tags []*Tag `min:"1" type:"list"`

	// Specifies the name of the user that was requested to be described. User names
	// are used for authentication purposes. This is the string that will be used
	// by your user when they log in to your server.
	UserName *string `min:"3" type:"string"`
}

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

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

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

// SetHomeDirectory sets the HomeDirectory field's value.
func (s *DescribedUser) SetHomeDirectory(v string) *DescribedUser {
	s.HomeDirectory = &v
	return s
}

// SetHomeDirectoryMappings sets the HomeDirectoryMappings field's value.
func (s *DescribedUser) SetHomeDirectoryMappings(v []*HomeDirectoryMapEntry) *DescribedUser {
	s.HomeDirectoryMappings = v
	return s
}

// SetHomeDirectoryType sets the HomeDirectoryType field's value.
func (s *DescribedUser) SetHomeDirectoryType(v string) *DescribedUser {
	s.HomeDirectoryType = &v
	return s
}

// SetPolicy sets the Policy field's value.
func (s *DescribedUser) SetPolicy(v string) *DescribedUser {
	s.Policy = &v
	return s
}

// SetPosixProfile sets the PosixProfile field's value.
func (s *DescribedUser) SetPosixProfile(v *PosixProfile) *DescribedUser {
	s.PosixProfile = v
	return s
}

// SetRole sets the Role field's value.
func (s *DescribedUser) SetRole(v string) *DescribedUser {
	s.Role = &v
	return s
}

// SetSshPublicKeys sets the SshPublicKeys field's value.
func (s *DescribedUser) SetSshPublicKeys(v []*SshPublicKey) *DescribedUser {
	s.SshPublicKeys = v
	return s
}

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

// SetUserName sets the UserName field's value.
func (s *DescribedUser) SetUserName(v string) *DescribedUser {
	s.UserName = &v
	return s
}

// Describes the properties of the specified workflow
type DescribedWorkflow struct {
	_ struct{} `type:"structure"`

	// Specifies the unique Amazon Resource Name (ARN) for the workflow.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// Specifies the text description for the workflow.
	Description *string `type:"string"`

	// Specifies the steps (actions) to take if errors are encountered during execution
	// of the workflow.
	OnExceptionSteps []*WorkflowStep `type:"list"`

	// Specifies the details for the steps that are in the specified workflow.
	Steps []*WorkflowStep `type:"list"`

	// Key-value pairs that can be used to group and search for workflows. Tags
	// are metadata attached to workflows for any purpose.
	Tags []*Tag `min:"1" type:"list"`

	// A unique identifier for the workflow.
	WorkflowId *string `min:"19" type:"string"`
}

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

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

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

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

// SetOnExceptionSteps sets the OnExceptionSteps field's value.
func (s *DescribedWorkflow) SetOnExceptionSteps(v []*WorkflowStep) *DescribedWorkflow {
	s.OnExceptionSteps = v
	return s
}

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

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

// SetWorkflowId sets the WorkflowId field's value.
func (s *DescribedWorkflow) SetWorkflowId(v string) *DescribedWorkflow {
	s.WorkflowId = &v
	return s
}

// Specifies the details for the file location for the file that's being used
// in the workflow. Only applicable if you are using Amazon Elastic File Systems
// (Amazon EFS) for storage.
type EfsFileLocation struct {
	_ struct{} `type:"structure"`

	// The identifier of the file system, assigned by Amazon EFS.
	FileSystemId *string `type:"string"`

	// The pathname for the folder being used by a workflow.
	Path *string `min:"1" type:"string"`
}

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

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

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

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

// SetFileSystemId sets the FileSystemId field's value.
func (s *EfsFileLocation) SetFileSystemId(v string) *EfsFileLocation {
	s.FileSystemId = &v
	return s
}

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

// The virtual private cloud (VPC) endpoint settings that are configured for
// your file transfer protocol-enabled server. With a VPC endpoint, you can
// restrict access to your server and resources only within your VPC. To control
// incoming internet traffic, invoke the UpdateServer API and attach an Elastic
// IP address to your server's endpoint.
//
// After May 19, 2021, you won't be able to create a server using EndpointType=VPC_ENDPOINT
// in your Amazon Web Servicesaccount if your account hasn't already done so
// before May 19, 2021. If you have already created servers with EndpointType=VPC_ENDPOINT
// in your Amazon Web Servicesaccount on or before May 19, 2021, you will not
// be affected. After this date, use EndpointType=VPC.
//
// For more information, see https://docs.aws.amazon.com/transfer/latest/userguide/create-server-in-vpc.html#deprecate-vpc-endpoint.
type EndpointDetails struct {
	_ struct{} `type:"structure"`

	// A list of address allocation IDs that are required to attach an Elastic IP
	// address to your server's endpoint.
	//
	// An address allocation ID corresponds to the allocation ID of an Elastic IP
	// address. This value can be retrieved from the allocationId field from the
	// Amazon EC2 Address (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_Address.html)
	// data type. One way to retrieve this value is by calling the EC2 DescribeAddresses
	// (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAddresses.html)
	// API.
	//
	// This parameter is optional. Set this parameter if you want to make your VPC
	// endpoint public-facing. For details, see Create an internet-facing endpoint
	// for your server (https://docs.aws.amazon.com/transfer/latest/userguide/create-server-in-vpc.html#create-internet-facing-endpoint).
	//
	// This property can only be set as follows:
	//
	//    * EndpointType must be set to VPC
	//
	//    * The Transfer Family server must be offline.
	//
	//    * You cannot set this parameter for Transfer Family servers that use the
	//    FTP protocol.
	//
	//    * The server must already have SubnetIds populated (SubnetIds and AddressAllocationIds
	//    cannot be updated simultaneously).
	//
	//    * AddressAllocationIds can't contain duplicates, and must be equal in
	//    length to SubnetIds. For example, if you have three subnet IDs, you must
	//    also specify three address allocation IDs.
	//
	//    * Call the UpdateServer API to set or change this parameter.
	AddressAllocationIds []*string `type:"list"`

	// A list of security groups IDs that are available to attach to your server's
	// endpoint.
	//
	// This property can only be set when EndpointType is set to VPC.
	//
	// You can edit the SecurityGroupIds property in the UpdateServer (https://docs.aws.amazon.com/transfer/latest/userguide/API_UpdateServer.html)
	// API only if you are changing the EndpointType from PUBLIC or VPC_ENDPOINT
	// to VPC. To change security groups associated with your server's VPC endpoint
	// after creation, use the Amazon EC2 ModifyVpcEndpoint (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyVpcEndpoint.html)
	// API.
	SecurityGroupIds []*string `type:"list"`

	// A list of subnet IDs that are required to host your server endpoint in your
	// VPC.
	//
	// This property can only be set when EndpointType is set to VPC.
	SubnetIds []*string `type:"list"`

	// The identifier of the VPC endpoint.
	//
	// This property can only be set when EndpointType is set to VPC_ENDPOINT.
	//
	// For more information, see https://docs.aws.amazon.com/transfer/latest/userguide/create-server-in-vpc.html#deprecate-vpc-endpoint.
	VpcEndpointId *string `min:"22" type:"string"`

	// The VPC identifier of the VPC in which a server's endpoint will be hosted.
	//
	// This property can only be set when EndpointType is set to VPC.
	VpcId *string `type:"string"`
}

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

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

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

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

// SetAddressAllocationIds sets the AddressAllocationIds field's value.
func (s *EndpointDetails) SetAddressAllocationIds(v []*string) *EndpointDetails {
	s.AddressAllocationIds = v
	return s
}

// SetSecurityGroupIds sets the SecurityGroupIds field's value.
func (s *EndpointDetails) SetSecurityGroupIds(v []*string) *EndpointDetails {
	s.SecurityGroupIds = v
	return s
}

// SetSubnetIds sets the SubnetIds field's value.
func (s *EndpointDetails) SetSubnetIds(v []*string) *EndpointDetails {
	s.SubnetIds = v
	return s
}

// SetVpcEndpointId sets the VpcEndpointId field's value.
func (s *EndpointDetails) SetVpcEndpointId(v string) *EndpointDetails {
	s.VpcEndpointId = &v
	return s
}

// SetVpcId sets the VpcId field's value.
func (s *EndpointDetails) SetVpcId(v string) *EndpointDetails {
	s.VpcId = &v
	return s
}

// Specifies the error message and type, for an error that occurs during the
// execution of the workflow.
type ExecutionError struct {
	_ struct{} `type:"structure"`

	// Specifies the descriptive message that corresponds to the ErrorType.
	//
	// Message is a required field
	Message *string `type:"string" required:"true"`

	// Specifies the error type.
	//
	//    * ALREADY_EXISTS: occurs for a copy step, if the overwrite option is not
	//    selected and a file with the same name already exists in the target location.
	//
	//    * BAD_REQUEST: a general bad request: for example, a step that attempts
	//    to tag an EFS file returns BAD_REQUEST, as only S3 files can be tagged.
	//
	//    * CUSTOM_STEP_FAILED: occurs when the custom step provided a callback
	//    that indicates failure.
	//
	//    * INTERNAL_SERVER_ERROR: a catch-all error that can occur for a variety
	//    of reasons.
	//
	//    * NOT_FOUND: occurs when a requested entity, for example a source file
	//    for a copy step, does not exist.
	//
	//    * PERMISSION_DENIED: occurs if your policy does not contain the correct
	//    permissions to complete one or more of the steps in the workflow.
	//
	//    * TIMEOUT: occurs when the execution times out. You can set the TimeoutSeconds
	//    for a custom step, anywhere from 1 second to 1800 seconds (30 minutes).
	//
	//    * THROTTLED: occurs if you exceed the new execution refill rate of one
	//    workflow per second.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"ExecutionErrorType"`
}

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

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

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

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

// Specifies the steps in the workflow, as well as the steps to execute in case
// of any errors during workflow execution.
type ExecutionResults struct {
	_ struct{} `type:"structure"`

	// Specifies the steps (actions) to take if errors are encountered during execution
	// of the workflow.
	OnExceptionSteps []*ExecutionStepResult `min:"1" type:"list"`

	// Specifies the details for the steps that are in the specified workflow.
	Steps []*ExecutionStepResult `min:"1" type:"list"`
}

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

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

// SetOnExceptionSteps sets the OnExceptionSteps field's value.
func (s *ExecutionResults) SetOnExceptionSteps(v []*ExecutionStepResult) *ExecutionResults {
	s.OnExceptionSteps = v
	return s
}

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

// Specifies the following details for the step: error (if any), outputs (if
// any), and the step type.
type ExecutionStepResult struct {
	_ struct{} `type:"structure"`

	// Specifies the details for an error, if it occurred during execution of the
	// specified workflow step.
	Error *ExecutionError `type:"structure"`

	// The values for the key/value pair applied as a tag to the file. Only applicable
	// if the step type is TAG.
	Outputs *string `type:"string"`

	// One of the available step types.
	//
	//    * COPY - Copy the file to another location.
	//
	//    * CUSTOM - Perform a custom step with an Lambda function target.
	//
	//    * DECRYPT - Decrypt a file that was encrypted before it was uploaded.
	//
	//    * DELETE - Delete the file.
	//
	//    * TAG - Add a tag to the file.
	StepType *string `type:"string" enum:"WorkflowStepType"`
}

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

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

// SetError sets the Error field's value.
func (s *ExecutionStepResult) SetError(v *ExecutionError) *ExecutionStepResult {
	s.Error = v
	return s
}

// SetOutputs sets the Outputs field's value.
func (s *ExecutionStepResult) SetOutputs(v string) *ExecutionStepResult {
	s.Outputs = &v
	return s
}

// SetStepType sets the StepType field's value.
func (s *ExecutionStepResult) SetStepType(v string) *ExecutionStepResult {
	s.StepType = &v
	return s
}

// Specifies the Amazon S3 or EFS file details to be used in the step.
type FileLocation struct {
	_ struct{} `type:"structure"`

	// Specifies the Amazon EFS identifier and the path for the file being used.
	EfsFileLocation *EfsFileLocation `type:"structure"`

	// Specifies the S3 details for the file being used, such as bucket, ETag, and
	// so forth.
	S3FileLocation *S3FileLocation `type:"structure"`
}

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

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

// SetEfsFileLocation sets the EfsFileLocation field's value.
func (s *FileLocation) SetEfsFileLocation(v *EfsFileLocation) *FileLocation {
	s.EfsFileLocation = v
	return s
}

// SetS3FileLocation sets the S3FileLocation field's value.
func (s *FileLocation) SetS3FileLocation(v *S3FileLocation) *FileLocation {
	s.S3FileLocation = v
	return s
}

// Represents an object that contains entries and targets for HomeDirectoryMappings.
//
// The following is an Entry and Target pair example for chroot.
//
// [ { "Entry": "/", "Target": "/bucket_name/home/mydirectory" } ]
type HomeDirectoryMapEntry struct {
	_ struct{} `type:"structure"`

	// Represents an entry for HomeDirectoryMappings.
	//
	// Entry is a required field
	Entry *string `type:"string" required:"true"`

	// Represents the map target that is used in a HomeDirectoryMapEntry.
	//
	// Target is a required field
	Target *string `type:"string" required:"true"`

	// Specifies the type of mapping. Set the type to FILE if you want the mapping
	// to point to a file, or DIRECTORY for the directory to point to a directory.
	//
	// By default, home directory mappings have a Type of DIRECTORY when you create
	// a Transfer Family server. You would need to explicitly set Type to FILE if
	// you want a mapping to have a file target.
	Type *string `type:"string" enum:"MapType"`
}

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

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

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

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

// SetEntry sets the Entry field's value.
func (s *HomeDirectoryMapEntry) SetEntry(v string) *HomeDirectoryMapEntry {
	s.Entry = &v
	return s
}

// SetTarget sets the Target field's value.
func (s *HomeDirectoryMapEntry) SetTarget(v string) *HomeDirectoryMapEntry {
	s.Target = &v
	return s
}

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

// Returns information related to the type of user authentication that is in
// use for a file transfer protocol-enabled server's users. A server can have
// only one method of authentication.
type IdentityProviderDetails struct {
	_ struct{} `type:"structure"`

	// The identifier of the Directory Service directory that you want to use as
	// your identity provider.
	DirectoryId *string `min:"12" type:"string"`

	// The ARN for a Lambda function to use for the Identity provider.
	Function *string `min:"1" type:"string"`

	// This parameter is only applicable if your IdentityProviderType is API_GATEWAY.
	// Provides the type of InvocationRole used to authenticate the user account.
	InvocationRole *string `min:"20" type:"string"`

	// For SFTP-enabled servers, and for custom identity providers only, you can
	// specify whether to authenticate using a password, SSH key pair, or both.
	//
	//    * PASSWORD - users must provide their password to connect.
	//
	//    * PUBLIC_KEY - users must provide their private key to connect.
	//
	//    * PUBLIC_KEY_OR_PASSWORD - users can authenticate with either their password
	//    or their key. This is the default value.
	//
	//    * PUBLIC_KEY_AND_PASSWORD - users must provide both their private key
	//    and their password to connect. The server checks the key first, and then
	//    if the key is valid, the system prompts for a password. If the private
	//    key provided does not match the public key that is stored, authentication
	//    fails.
	SftpAuthenticationMethods *string `type:"string" enum:"SftpAuthenticationMethods"`

	// Provides the location of the service endpoint used to authenticate users.
	Url *string `type:"string"`
}

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

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

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

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

// SetDirectoryId sets the DirectoryId field's value.
func (s *IdentityProviderDetails) SetDirectoryId(v string) *IdentityProviderDetails {
	s.DirectoryId = &v
	return s
}

// SetFunction sets the Function field's value.
func (s *IdentityProviderDetails) SetFunction(v string) *IdentityProviderDetails {
	s.Function = &v
	return s
}

// SetInvocationRole sets the InvocationRole field's value.
func (s *IdentityProviderDetails) SetInvocationRole(v string) *IdentityProviderDetails {
	s.InvocationRole = &v
	return s
}

// SetSftpAuthenticationMethods sets the SftpAuthenticationMethods field's value.
func (s *IdentityProviderDetails) SetSftpAuthenticationMethods(v string) *IdentityProviderDetails {
	s.SftpAuthenticationMethods = &v
	return s
}

// SetUrl sets the Url field's value.
func (s *IdentityProviderDetails) SetUrl(v string) *IdentityProviderDetails {
	s.Url = &v
	return s
}

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

	// An optional date that specifies when the certificate becomes active.
	ActiveDate *time.Time `type:"timestamp"`

	//    * For the CLI, provide a file path for a certificate in URI format. For
	//    example, --certificate file://encryption-cert.pem. Alternatively, you
	//    can provide the raw content.
	//
	//    * For the SDK, specify the raw content of a certificate file. For example,
	//    --certificate "`cat encryption-cert.pem`".
	//
	// Certificate is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ImportCertificateInput's
	// String and GoString methods.
	//
	// Certificate is a required field
	Certificate *string `min:"1" type:"string" required:"true" sensitive:"true"`

	// An optional list of certificates that make up the chain for the certificate
	// that's being imported.
	//
	// CertificateChain is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ImportCertificateInput's
	// String and GoString methods.
	CertificateChain *string `min:"1" type:"string" sensitive:"true"`

	// A short description that helps identify the certificate.
	Description *string `min:"1" type:"string"`

	// An optional date that specifies when the certificate becomes inactive.
	InactiveDate *time.Time `type:"timestamp"`

	//    * For the CLI, provide a file path for a private key in URI format.For
	//    example, --private-key file://encryption-key.pem. Alternatively, you can
	//    provide the raw content of the private key file.
	//
	//    * For the SDK, specify the raw content of a private key file. For example,
	//    --private-key "`cat encryption-key.pem`"
	//
	// PrivateKey is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ImportCertificateInput's
	// String and GoString methods.
	PrivateKey *string `min:"1" type:"string" sensitive:"true"`

	// Key-value pairs that can be used to group and search for certificates.
	Tags []*Tag `min:"1" type:"list"`

	// Specifies how this certificate is used. It can be used in the following ways:
	//
	//    * SIGNING: For signing AS2 messages
	//
	//    * ENCRYPTION: For encrypting AS2 messages
	//
	//    * TLS: For securing AS2 communications sent over HTTPS
	//
	// Usage is a required field
	Usage *string `type:"string" required:"true" enum:"CertificateUsageType"`
}

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

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

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

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

// SetActiveDate sets the ActiveDate field's value.
func (s *ImportCertificateInput) SetActiveDate(v time.Time) *ImportCertificateInput {
	s.ActiveDate = &v
	return s
}

// SetCertificate sets the Certificate field's value.
func (s *ImportCertificateInput) SetCertificate(v string) *ImportCertificateInput {
	s.Certificate = &v
	return s
}

// SetCertificateChain sets the CertificateChain field's value.
func (s *ImportCertificateInput) SetCertificateChain(v string) *ImportCertificateInput {
	s.CertificateChain = &v
	return s
}

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

// SetInactiveDate sets the InactiveDate field's value.
func (s *ImportCertificateInput) SetInactiveDate(v time.Time) *ImportCertificateInput {
	s.InactiveDate = &v
	return s
}

// SetPrivateKey sets the PrivateKey field's value.
func (s *ImportCertificateInput) SetPrivateKey(v string) *ImportCertificateInput {
	s.PrivateKey = &v
	return s
}

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

// SetUsage sets the Usage field's value.
func (s *ImportCertificateInput) SetUsage(v string) *ImportCertificateInput {
	s.Usage = &v
	return s
}

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

	// An array of identifiers for the imported certificates. You use this identifier
	// for working with profiles and partner profiles.
	//
	// CertificateId is a required field
	CertificateId *string `min:"22" type:"string" required:"true"`
}

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

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

// SetCertificateId sets the CertificateId field's value.
func (s *ImportCertificateOutput) SetCertificateId(v string) *ImportCertificateOutput {
	s.CertificateId = &v
	return s
}

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

	// The text description that identifies this host key.
	Description *string `type:"string"`

	// The private key portion of an SSH key pair.
	//
	// Transfer Family accepts RSA, ECDSA, and ED25519 keys.
	//
	// HostKeyBody is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ImportHostKeyInput's
	// String and GoString methods.
	//
	// HostKeyBody is a required field
	HostKeyBody *string `type:"string" required:"true" sensitive:"true"`

	// The identifier of the server that contains the host key that you are importing.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// Key-value pairs that can be used to group and search for host keys.
	Tags []*Tag `min:"1" type:"list"`
}

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

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

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

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

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

// SetHostKeyBody sets the HostKeyBody field's value.
func (s *ImportHostKeyInput) SetHostKeyBody(v string) *ImportHostKeyInput {
	s.HostKeyBody = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *ImportHostKeyInput) SetServerId(v string) *ImportHostKeyInput {
	s.ServerId = &v
	return s
}

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

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

	// Returns the host key identifier for the imported key.
	//
	// HostKeyId is a required field
	HostKeyId *string `min:"25" type:"string" required:"true"`

	// Returns the server identifier that contains the imported key.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

// SetHostKeyId sets the HostKeyId field's value.
func (s *ImportHostKeyOutput) SetHostKeyId(v string) *ImportHostKeyOutput {
	s.HostKeyId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *ImportHostKeyOutput) SetServerId(v string) *ImportHostKeyOutput {
	s.ServerId = &v
	return s
}

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

	// A system-assigned unique identifier for a server.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// The public key portion of an SSH key pair.
	//
	// Transfer Family accepts RSA, ECDSA, and ED25519 keys.
	//
	// SshPublicKeyBody is a required field
	SshPublicKeyBody *string `type:"string" required:"true"`

	// The name of the Transfer Family user that is assigned to one or more servers.
	//
	// UserName is a required field
	UserName *string `min:"3" type:"string" required:"true"`
}

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

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

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

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

// SetServerId sets the ServerId field's value.
func (s *ImportSshPublicKeyInput) SetServerId(v string) *ImportSshPublicKeyInput {
	s.ServerId = &v
	return s
}

// SetSshPublicKeyBody sets the SshPublicKeyBody field's value.
func (s *ImportSshPublicKeyInput) SetSshPublicKeyBody(v string) *ImportSshPublicKeyInput {
	s.SshPublicKeyBody = &v
	return s
}

// SetUserName sets the UserName field's value.
func (s *ImportSshPublicKeyInput) SetUserName(v string) *ImportSshPublicKeyInput {
	s.UserName = &v
	return s
}

// Identifies the user, the server they belong to, and the identifier of the
// SSH public key associated with that user. A user can have more than one key
// on each server that they are associated with.
type ImportSshPublicKeyOutput struct {
	_ struct{} `type:"structure"`

	// A system-assigned unique identifier for a server.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// The name given to a public key by the system that was imported.
	//
	// SshPublicKeyId is a required field
	SshPublicKeyId *string `min:"21" type:"string" required:"true"`

	// A user name assigned to the ServerID value that you specified.
	//
	// UserName is a required field
	UserName *string `min:"3" type:"string" required:"true"`
}

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

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

// SetServerId sets the ServerId field's value.
func (s *ImportSshPublicKeyOutput) SetServerId(v string) *ImportSshPublicKeyOutput {
	s.ServerId = &v
	return s
}

// SetSshPublicKeyId sets the SshPublicKeyId field's value.
func (s *ImportSshPublicKeyOutput) SetSshPublicKeyId(v string) *ImportSshPublicKeyOutput {
	s.SshPublicKeyId = &v
	return s
}

// SetUserName sets the UserName field's value.
func (s *ImportSshPublicKeyOutput) SetUserName(v string) *ImportSshPublicKeyOutput {
	s.UserName = &v
	return s
}

// Specifies the location for the file that's being processed.
type InputFileLocation struct {
	_ struct{} `type:"structure"`

	// Specifies the details for the Amazon Elastic File System (Amazon EFS) file
	// that's being decrypted.
	EfsFileLocation *EfsFileLocation `type:"structure"`

	// Specifies the details for the Amazon S3 file that's being copied or decrypted.
	S3FileLocation *S3InputFileLocation `type:"structure"`
}

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

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

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

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

// SetEfsFileLocation sets the EfsFileLocation field's value.
func (s *InputFileLocation) SetEfsFileLocation(v *EfsFileLocation) *InputFileLocation {
	s.EfsFileLocation = v
	return s
}

// SetS3FileLocation sets the S3FileLocation field's value.
func (s *InputFileLocation) SetS3FileLocation(v *S3InputFileLocation) *InputFileLocation {
	s.S3FileLocation = v
	return s
}

// This exception is thrown when an error occurs in the Transfer Family service.
type InternalServiceError struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

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

func newErrorInternalServiceError(v protocol.ResponseMetadata) error {
	return &InternalServiceError{
		RespMetadata: v,
	}
}

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

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

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

func (s *InternalServiceError) 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 *InternalServiceError) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The NextToken parameter that was passed is invalid.
type InvalidNextTokenException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

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

func newErrorInvalidNextTokenException(v protocol.ResponseMetadata) error {
	return &InvalidNextTokenException{
		RespMetadata: v,
	}
}

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

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

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

func (s *InvalidNextTokenException) 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 *InvalidNextTokenException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// This exception is thrown when the client submits a malformed request.
type InvalidRequestException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

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

func newErrorInvalidRequestException(v protocol.ResponseMetadata) error {
	return &InvalidRequestException{
		RespMetadata: v,
	}
}

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

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

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

func (s *InvalidRequestException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

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

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

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

	// Specifies the maximum number of access SIDs to return.
	MaxResults *int64 `min:"1" type:"integer"`

	// When you can get additional results from the ListAccesses call, a NextToken
	// parameter is returned in the output. You can then pass in a subsequent command
	// to the NextToken parameter to continue listing additional accesses.
	NextToken *string `min:"1" type:"string"`

	// A system-assigned unique identifier for a server that has users assigned
	// to it.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

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

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

// SetServerId sets the ServerId field's value.
func (s *ListAccessesInput) SetServerId(v string) *ListAccessesInput {
	s.ServerId = &v
	return s
}

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

	// Returns the accesses and their properties for the ServerId value that you
	// specify.
	//
	// Accesses is a required field
	Accesses []*ListedAccess `type:"list" required:"true"`

	// When you can get additional results from the ListAccesses call, a NextToken
	// parameter is returned in the output. You can then pass in a subsequent command
	// to the NextToken parameter to continue listing additional accesses.
	NextToken *string `min:"1" type:"string"`

	// A system-assigned unique identifier for a server that has users assigned
	// to it.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

// SetAccesses sets the Accesses field's value.
func (s *ListAccessesOutput) SetAccesses(v []*ListedAccess) *ListAccessesOutput {
	s.Accesses = v
	return s
}

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

// SetServerId sets the ServerId field's value.
func (s *ListAccessesOutput) SetServerId(v string) *ListAccessesOutput {
	s.ServerId = &v
	return s
}

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

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

	// When you can get additional results from the ListAgreements call, a NextToken
	// parameter is returned in the output. You can then pass in a subsequent command
	// to the NextToken parameter to continue listing additional agreements.
	NextToken *string `min:"1" type:"string"`

	// The identifier of the server for which you want a list of agreements.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

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

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

// SetServerId sets the ServerId field's value.
func (s *ListAgreementsInput) SetServerId(v string) *ListAgreementsInput {
	s.ServerId = &v
	return s
}

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

	// Returns an array, where each item contains the details of an agreement.
	//
	// Agreements is a required field
	Agreements []*ListedAgreement `type:"list" required:"true"`

	// Returns a token that you can use to call ListAgreements again and receive
	// additional results, if there are any.
	NextToken *string `min:"1" type:"string"`
}

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

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

// SetAgreements sets the Agreements field's value.
func (s *ListAgreementsOutput) SetAgreements(v []*ListedAgreement) *ListAgreementsOutput {
	s.Agreements = v
	return s
}

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

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

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

	// When you can get additional results from the ListCertificates call, a NextToken
	// parameter is returned in the output. You can then pass in a subsequent command
	// to the NextToken parameter to continue listing additional certificates.
	NextToken *string `min:"1" type:"string"`
}

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

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

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

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

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

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

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

	// Returns an array of the certificates that are specified in the ListCertificates
	// call.
	//
	// Certificates is a required field
	Certificates []*ListedCertificate `type:"list" required:"true"`

	// Returns the next token, which you can use to list the next certificate.
	NextToken *string `min:"1" type:"string"`
}

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

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

// SetCertificates sets the Certificates field's value.
func (s *ListCertificatesOutput) SetCertificates(v []*ListedCertificate) *ListCertificatesOutput {
	s.Certificates = v
	return s
}

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

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

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

	// When you can get additional results from the ListConnectors call, a NextToken
	// parameter is returned in the output. You can then pass in a subsequent command
	// to the NextToken parameter to continue listing additional connectors.
	NextToken *string `min:"1" type:"string"`
}

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

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

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

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

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

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

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

	// Returns an array, where each item contains the details of a connector.
	//
	// Connectors is a required field
	Connectors []*ListedConnector `type:"list" required:"true"`

	// Returns a token that you can use to call ListConnectors again and receive
	// additional results, if there are any.
	NextToken *string `min:"1" type:"string"`
}

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

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

// SetConnectors sets the Connectors field's value.
func (s *ListConnectorsOutput) SetConnectors(v []*ListedConnector) *ListConnectorsOutput {
	s.Connectors = v
	return s
}

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

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

	// Specifies the maximum number of executions to return.
	MaxResults *int64 `min:"1" type:"integer"`

	// ListExecutions returns the NextToken parameter in the output. You can then
	// pass the NextToken parameter in a subsequent command to continue listing
	// additional executions.
	//
	// This is useful for pagination, for instance. If you have 100 executions for
	// a workflow, you might only want to list first 10. If so, call the API by
	// specifying the max-results:
	//
	// aws transfer list-executions --max-results 10
	//
	// This returns details for the first 10 executions, as well as the pointer
	// (NextToken) to the eleventh execution. You can now call the API again, supplying
	// the NextToken value you received:
	//
	// aws transfer list-executions --max-results 10 --next-token $somePointerReturnedFromPreviousListResult
	//
	// This call returns the next 10 executions, the 11th through the 20th. You
	// can then repeat the call until the details for all 100 executions have been
	// returned.
	NextToken *string `min:"1" type:"string"`

	// A unique identifier for the workflow.
	//
	// WorkflowId is a required field
	WorkflowId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

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

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

// SetWorkflowId sets the WorkflowId field's value.
func (s *ListExecutionsInput) SetWorkflowId(v string) *ListExecutionsInput {
	s.WorkflowId = &v
	return s
}

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

	// Returns the details for each execution, in a ListedExecution array.
	//
	// Executions is a required field
	Executions []*ListedExecution `type:"list" required:"true"`

	// ListExecutions returns the NextToken parameter in the output. You can then
	// pass the NextToken parameter in a subsequent command to continue listing
	// additional executions.
	NextToken *string `min:"1" type:"string"`

	// A unique identifier for the workflow.
	//
	// WorkflowId is a required field
	WorkflowId *string `min:"19" type:"string" required:"true"`
}

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

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

// SetExecutions sets the Executions field's value.
func (s *ListExecutionsOutput) SetExecutions(v []*ListedExecution) *ListExecutionsOutput {
	s.Executions = v
	return s
}

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

// SetWorkflowId sets the WorkflowId field's value.
func (s *ListExecutionsOutput) SetWorkflowId(v string) *ListExecutionsOutput {
	s.WorkflowId = &v
	return s
}

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

	// The maximum number of host keys to return.
	MaxResults *int64 `min:"1" type:"integer"`

	// When there are additional results that were not returned, a NextToken parameter
	// is returned. You can use that value for a subsequent call to ListHostKeys
	// to continue listing results.
	NextToken *string `min:"1" type:"string"`

	// The identifier of the server that contains the host keys that you want to
	// view.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

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

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

// SetServerId sets the ServerId field's value.
func (s *ListHostKeysInput) SetServerId(v string) *ListHostKeysInput {
	s.ServerId = &v
	return s
}

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

	// Returns an array, where each item contains the details of a host key.
	//
	// HostKeys is a required field
	HostKeys []*ListedHostKey `type:"list" required:"true"`

	// Returns a token that you can use to call ListHostKeys again and receive additional
	// results, if there are any.
	NextToken *string `min:"1" type:"string"`

	// Returns the server identifier that contains the listed host keys.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

// SetHostKeys sets the HostKeys field's value.
func (s *ListHostKeysOutput) SetHostKeys(v []*ListedHostKey) *ListHostKeysOutput {
	s.HostKeys = v
	return s
}

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

// SetServerId sets the ServerId field's value.
func (s *ListHostKeysOutput) SetServerId(v string) *ListHostKeysOutput {
	s.ServerId = &v
	return s
}

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

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

	// When there are additional results that were not returned, a NextToken parameter
	// is returned. You can use that value for a subsequent call to ListProfiles
	// to continue listing results.
	NextToken *string `min:"1" type:"string"`

	// Indicates whether to list only LOCAL type profiles or only PARTNER type profiles.
	// If not supplied in the request, the command lists all types of profiles.
	ProfileType *string `type:"string" enum:"ProfileType"`
}

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

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

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

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

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

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

// SetProfileType sets the ProfileType field's value.
func (s *ListProfilesInput) SetProfileType(v string) *ListProfilesInput {
	s.ProfileType = &v
	return s
}

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

	// Returns a token that you can use to call ListProfiles again and receive additional
	// results, if there are any.
	NextToken *string `min:"1" type:"string"`

	// Returns an array, where each item contains the details of a profile.
	//
	// Profiles is a required field
	Profiles []*ListedProfile `type:"list" required:"true"`
}

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

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

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

// SetProfiles sets the Profiles field's value.
func (s *ListProfilesOutput) SetProfiles(v []*ListedProfile) *ListProfilesOutput {
	s.Profiles = v
	return s
}

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

	// Specifies the number of security policies to return as a response to the
	// ListSecurityPolicies query.
	MaxResults *int64 `min:"1" type:"integer"`

	// When additional results are obtained from the ListSecurityPolicies command,
	// a NextToken parameter is returned in the output. You can then pass the NextToken
	// parameter in a subsequent command to continue listing additional security
	// policies.
	NextToken *string `min:"1" type:"string"`
}

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

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

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

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

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

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

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

	// When you can get additional results from the ListSecurityPolicies operation,
	// a NextToken parameter is returned in the output. In a following command,
	// you can pass in the NextToken parameter to continue listing security policies.
	NextToken *string `min:"1" type:"string"`

	// An array of security policies that were listed.
	//
	// SecurityPolicyNames is a required field
	SecurityPolicyNames []*string `type:"list" required:"true"`
}

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

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

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

// SetSecurityPolicyNames sets the SecurityPolicyNames field's value.
func (s *ListSecurityPoliciesOutput) SetSecurityPolicyNames(v []*string) *ListSecurityPoliciesOutput {
	s.SecurityPolicyNames = v
	return s
}

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

	// Specifies the number of servers to return as a response to the ListServers
	// query.
	MaxResults *int64 `min:"1" type:"integer"`

	// When additional results are obtained from the ListServers command, a NextToken
	// parameter is returned in the output. You can then pass the NextToken parameter
	// in a subsequent command to continue listing additional servers.
	NextToken *string `min:"1" type:"string"`
}

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

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

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

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

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

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

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

	// When you can get additional results from the ListServers operation, a NextToken
	// parameter is returned in the output. In a following command, you can pass
	// in the NextToken parameter to continue listing additional servers.
	NextToken *string `min:"1" type:"string"`

	// An array of servers that were listed.
	//
	// Servers is a required field
	Servers []*ListedServer `type:"list" required:"true"`
}

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

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

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

// SetServers sets the Servers field's value.
func (s *ListServersOutput) SetServers(v []*ListedServer) *ListServersOutput {
	s.Servers = v
	return s
}

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

	// Requests the tags associated with a particular Amazon Resource Name (ARN).
	// An ARN is an identifier for a specific Amazon Web Services resource, such
	// as a server, user, or role.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// Specifies the number of tags to return as a response to the ListTagsForResource
	// request.
	MaxResults *int64 `min:"1" type:"integer"`

	// When you request additional results from the ListTagsForResource operation,
	// a NextToken parameter is returned in the input. You can then pass in a subsequent
	// command to the NextToken parameter to continue listing additional tags.
	NextToken *string `min:"1" type:"string"`
}

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

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

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

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

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

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

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

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

	// The ARN you specified to list the tags of.
	Arn *string `min:"20" type:"string"`

	// When you can get additional results from the ListTagsForResource call, a
	// NextToken parameter is returned in the output. You can then pass in a subsequent
	// command to the NextToken parameter to continue listing additional tags.
	NextToken *string `min:"1" type:"string"`

	// Key-value pairs that are assigned to a resource, usually for the purpose
	// of grouping and searching for items. Tags are metadata that you define.
	Tags []*Tag `min:"1" type:"list"`
}

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

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

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

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

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

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

	// Specifies the number of users to return as a response to the ListUsers request.
	MaxResults *int64 `min:"1" type:"integer"`

	// If there are additional results from the ListUsers call, a NextToken parameter
	// is returned in the output. You can then pass the NextToken to a subsequent
	// ListUsers command, to continue listing additional users.
	NextToken *string `min:"1" type:"string"`

	// A system-assigned unique identifier for a server that has users assigned
	// to it.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

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

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

// SetServerId sets the ServerId field's value.
func (s *ListUsersInput) SetServerId(v string) *ListUsersInput {
	s.ServerId = &v
	return s
}

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

	// When you can get additional results from the ListUsers call, a NextToken
	// parameter is returned in the output. You can then pass in a subsequent command
	// to the NextToken parameter to continue listing additional users.
	NextToken *string `min:"1" type:"string"`

	// A system-assigned unique identifier for a server that the users are assigned
	// to.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// Returns the Transfer Family users and their properties for the ServerId value
	// that you specify.
	//
	// Users is a required field
	Users []*ListedUser `type:"list" required:"true"`
}

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

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

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

// SetServerId sets the ServerId field's value.
func (s *ListUsersOutput) SetServerId(v string) *ListUsersOutput {
	s.ServerId = &v
	return s
}

// SetUsers sets the Users field's value.
func (s *ListUsersOutput) SetUsers(v []*ListedUser) *ListUsersOutput {
	s.Users = v
	return s
}

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

	// Specifies the maximum number of workflows to return.
	MaxResults *int64 `min:"1" type:"integer"`

	// ListWorkflows returns the NextToken parameter in the output. You can then
	// pass the NextToken parameter in a subsequent command to continue listing
	// additional workflows.
	NextToken *string `min:"1" type:"string"`
}

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

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

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

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

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

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

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

	// ListWorkflows returns the NextToken parameter in the output. You can then
	// pass the NextToken parameter in a subsequent command to continue listing
	// additional workflows.
	NextToken *string `min:"1" type:"string"`

	// Returns the Arn, WorkflowId, and Description for each workflow.
	//
	// Workflows is a required field
	Workflows []*ListedWorkflow `type:"list" required:"true"`
}

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

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

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

// SetWorkflows sets the Workflows field's value.
func (s *ListWorkflowsOutput) SetWorkflows(v []*ListedWorkflow) *ListWorkflowsOutput {
	s.Workflows = v
	return s
}

// Lists the properties for one or more specified associated accesses.
type ListedAccess struct {
	_ struct{} `type:"structure"`

	// A unique identifier that is required to identify specific groups within your
	// directory. The users of the group that you associate have access to your
	// Amazon S3 or Amazon EFS resources over the enabled protocols using Transfer
	// Family. If you know the group name, you can view the SID values by running
	// the following command using Windows PowerShell.
	//
	// Get-ADGroup -Filter {samAccountName -like "YourGroupName*"} -Properties *
	// | Select SamAccountName,ObjectSid
	//
	// In that command, replace YourGroupName with the name of your Active Directory
	// group.
	//
	// The regular expression used to validate this parameter is a string of characters
	// consisting of uppercase and lowercase alphanumeric characters with no spaces.
	// You can also include underscores or any of the following characters: =,.@:/-
	ExternalId *string `min:"1" type:"string"`

	// The landing directory (folder) for a user when they log in to the server
	// using the client.
	//
	// A HomeDirectory example is /bucket_name/home/mydirectory.
	//
	// The HomeDirectory parameter is only used if HomeDirectoryType is set to PATH.
	HomeDirectory *string `type:"string"`

	// The type of landing directory (folder) that you want your users' home directory
	// to be when they log in to the server. If you set it to PATH, the user will
	// see the absolute Amazon S3 bucket or Amazon EFS path as is in their file
	// transfer protocol clients. If you set it to LOGICAL, you need to provide
	// mappings in the HomeDirectoryMappings for how you want to make Amazon S3
	// or Amazon EFS paths visible to your users.
	//
	// If HomeDirectoryType is LOGICAL, you must provide mappings, using the HomeDirectoryMappings
	// parameter. If, on the other hand, HomeDirectoryType is PATH, you provide
	// an absolute path using the HomeDirectory parameter. You cannot have both
	// HomeDirectory and HomeDirectoryMappings in your template.
	HomeDirectoryType *string `type:"string" enum:"HomeDirectoryType"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that controls your users' access to your Amazon S3 bucket or Amazon
	// EFS file system. The policies attached to this role determine the level of
	// access that you want to provide your users when transferring files into and
	// out of your Amazon S3 bucket or Amazon EFS file system. The IAM role should
	// also contain a trust relationship that allows the server to access your resources
	// when servicing your users' transfer requests.
	Role *string `min:"20" type:"string"`
}

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

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

// SetExternalId sets the ExternalId field's value.
func (s *ListedAccess) SetExternalId(v string) *ListedAccess {
	s.ExternalId = &v
	return s
}

// SetHomeDirectory sets the HomeDirectory field's value.
func (s *ListedAccess) SetHomeDirectory(v string) *ListedAccess {
	s.HomeDirectory = &v
	return s
}

// SetHomeDirectoryType sets the HomeDirectoryType field's value.
func (s *ListedAccess) SetHomeDirectoryType(v string) *ListedAccess {
	s.HomeDirectoryType = &v
	return s
}

// SetRole sets the Role field's value.
func (s *ListedAccess) SetRole(v string) *ListedAccess {
	s.Role = &v
	return s
}

// Describes the properties of an agreement.
type ListedAgreement struct {
	_ struct{} `type:"structure"`

	// A unique identifier for the agreement. This identifier is returned when you
	// create an agreement.
	AgreementId *string `min:"19" type:"string"`

	// The Amazon Resource Name (ARN) of the specified agreement.
	Arn *string `min:"20" type:"string"`

	// The current description for the agreement. You can change it by calling the
	// UpdateAgreement operation and providing a new description.
	Description *string `min:"1" type:"string"`

	// A unique identifier for the AS2 local profile.
	LocalProfileId *string `min:"19" type:"string"`

	// A unique identifier for the partner profile.
	PartnerProfileId *string `min:"19" type:"string"`

	// The unique identifier for the agreement.
	ServerId *string `min:"19" type:"string"`

	// The agreement can be either ACTIVE or INACTIVE.
	Status *string `type:"string" enum:"AgreementStatusType"`
}

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

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

// SetAgreementId sets the AgreementId field's value.
func (s *ListedAgreement) SetAgreementId(v string) *ListedAgreement {
	s.AgreementId = &v
	return s
}

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

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

// SetLocalProfileId sets the LocalProfileId field's value.
func (s *ListedAgreement) SetLocalProfileId(v string) *ListedAgreement {
	s.LocalProfileId = &v
	return s
}

// SetPartnerProfileId sets the PartnerProfileId field's value.
func (s *ListedAgreement) SetPartnerProfileId(v string) *ListedAgreement {
	s.PartnerProfileId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *ListedAgreement) SetServerId(v string) *ListedAgreement {
	s.ServerId = &v
	return s
}

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

// Describes the properties of a certificate.
type ListedCertificate struct {
	_ struct{} `type:"structure"`

	// An optional date that specifies when the certificate becomes active.
	ActiveDate *time.Time `type:"timestamp"`

	// The Amazon Resource Name (ARN) of the specified certificate.
	Arn *string `min:"20" type:"string"`

	// An array of identifiers for the imported certificates. You use this identifier
	// for working with profiles and partner profiles.
	CertificateId *string `min:"22" type:"string"`

	// The name or short description that's used to identify the certificate.
	Description *string `min:"1" type:"string"`

	// An optional date that specifies when the certificate becomes inactive.
	InactiveDate *time.Time `type:"timestamp"`

	// The certificate can be either ACTIVE, PENDING_ROTATION, or INACTIVE. PENDING_ROTATION
	// means that this certificate will replace the current certificate when it
	// expires.
	Status *string `type:"string" enum:"CertificateStatusType"`

	// The type for the certificate. If a private key has been specified for the
	// certificate, its type is CERTIFICATE_WITH_PRIVATE_KEY. If there is no private
	// key, the type is CERTIFICATE.
	Type *string `type:"string" enum:"CertificateType"`

	// Specifies how this certificate is used. It can be used in the following ways:
	//
	//    * SIGNING: For signing AS2 messages
	//
	//    * ENCRYPTION: For encrypting AS2 messages
	//
	//    * TLS: For securing AS2 communications sent over HTTPS
	Usage *string `type:"string" enum:"CertificateUsageType"`
}

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

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

// SetActiveDate sets the ActiveDate field's value.
func (s *ListedCertificate) SetActiveDate(v time.Time) *ListedCertificate {
	s.ActiveDate = &v
	return s
}

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

// SetCertificateId sets the CertificateId field's value.
func (s *ListedCertificate) SetCertificateId(v string) *ListedCertificate {
	s.CertificateId = &v
	return s
}

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

// SetInactiveDate sets the InactiveDate field's value.
func (s *ListedCertificate) SetInactiveDate(v time.Time) *ListedCertificate {
	s.InactiveDate = &v
	return s
}

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

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

// SetUsage sets the Usage field's value.
func (s *ListedCertificate) SetUsage(v string) *ListedCertificate {
	s.Usage = &v
	return s
}

// Returns details of the connector that is specified.
type ListedConnector struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the specified connector.
	Arn *string `min:"20" type:"string"`

	// The unique identifier for the connector.
	ConnectorId *string `min:"19" type:"string"`

	// The URL of the partner's AS2 or SFTP endpoint.
	Url *string `type:"string"`
}

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

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

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

// SetConnectorId sets the ConnectorId field's value.
func (s *ListedConnector) SetConnectorId(v string) *ListedConnector {
	s.ConnectorId = &v
	return s
}

// SetUrl sets the Url field's value.
func (s *ListedConnector) SetUrl(v string) *ListedConnector {
	s.Url = &v
	return s
}

// Returns properties of the execution that is specified.
type ListedExecution struct {
	_ struct{} `type:"structure"`

	// A unique identifier for the execution of a workflow.
	ExecutionId *string `min:"36" type:"string"`

	// A structure that describes the Amazon S3 or EFS file location. This is the
	// file location when the execution begins: if the file is being copied, this
	// is the initial (as opposed to destination) file location.
	InitialFileLocation *FileLocation `type:"structure"`

	// A container object for the session details that are associated with a workflow.
	ServiceMetadata *ServiceMetadata `type:"structure"`

	// The status is one of the execution. Can be in progress, completed, exception
	// encountered, or handling the exception.
	Status *string `type:"string" enum:"ExecutionStatus"`
}

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

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

// SetExecutionId sets the ExecutionId field's value.
func (s *ListedExecution) SetExecutionId(v string) *ListedExecution {
	s.ExecutionId = &v
	return s
}

// SetInitialFileLocation sets the InitialFileLocation field's value.
func (s *ListedExecution) SetInitialFileLocation(v *FileLocation) *ListedExecution {
	s.InitialFileLocation = v
	return s
}

// SetServiceMetadata sets the ServiceMetadata field's value.
func (s *ListedExecution) SetServiceMetadata(v *ServiceMetadata) *ListedExecution {
	s.ServiceMetadata = v
	return s
}

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

// Returns properties of the host key that's specified.
type ListedHostKey struct {
	_ struct{} `type:"structure"`

	// The unique Amazon Resource Name (ARN) of the host key.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// The date on which the host key was added to the server.
	DateImported *time.Time `type:"timestamp"`

	// The current description for the host key. You can change it by calling the
	// UpdateHostKey operation and providing a new description.
	Description *string `type:"string"`

	// The public key fingerprint, which is a short sequence of bytes used to identify
	// the longer public key.
	Fingerprint *string `type:"string"`

	// A unique identifier for the host key.
	HostKeyId *string `min:"25" type:"string"`

	// The encryption algorithm that is used for the host key. The Type parameter
	// is specified by using one of the following values:
	//
	//    * ssh-rsa
	//
	//    * ssh-ed25519
	//
	//    * ecdsa-sha2-nistp256
	//
	//    * ecdsa-sha2-nistp384
	//
	//    * ecdsa-sha2-nistp521
	Type *string `type:"string"`
}

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

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

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

// SetDateImported sets the DateImported field's value.
func (s *ListedHostKey) SetDateImported(v time.Time) *ListedHostKey {
	s.DateImported = &v
	return s
}

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

// SetFingerprint sets the Fingerprint field's value.
func (s *ListedHostKey) SetFingerprint(v string) *ListedHostKey {
	s.Fingerprint = &v
	return s
}

// SetHostKeyId sets the HostKeyId field's value.
func (s *ListedHostKey) SetHostKeyId(v string) *ListedHostKey {
	s.HostKeyId = &v
	return s
}

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

// Returns the properties of the profile that was specified.
type ListedProfile struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the specified profile.
	Arn *string `min:"20" type:"string"`

	// The As2Id is the AS2-name, as defined in the RFC 4130 (https://datatracker.ietf.org/doc/html/rfc4130).
	// For inbound transfers, this is the AS2-From header for the AS2 messages sent
	// from the partner. For outbound connectors, this is the AS2-To header for
	// the AS2 messages sent to the partner using the StartFileTransfer API operation.
	// This ID cannot include spaces.
	As2Id *string `min:"1" type:"string"`

	// A unique identifier for the local or partner AS2 profile.
	ProfileId *string `min:"19" type:"string"`

	// Indicates whether to list only LOCAL type profiles or only PARTNER type profiles.
	// If not supplied in the request, the command lists all types of profiles.
	ProfileType *string `type:"string" enum:"ProfileType"`
}

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

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

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

// SetAs2Id sets the As2Id field's value.
func (s *ListedProfile) SetAs2Id(v string) *ListedProfile {
	s.As2Id = &v
	return s
}

// SetProfileId sets the ProfileId field's value.
func (s *ListedProfile) SetProfileId(v string) *ListedProfile {
	s.ProfileId = &v
	return s
}

// SetProfileType sets the ProfileType field's value.
func (s *ListedProfile) SetProfileType(v string) *ListedProfile {
	s.ProfileType = &v
	return s
}

// Returns properties of a file transfer protocol-enabled server that was specified.
type ListedServer struct {
	_ struct{} `type:"structure"`

	// Specifies the unique Amazon Resource Name (ARN) for a server to be listed.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// Specifies the domain of the storage system that is used for file transfers.
	// There are two domains available: Amazon Simple Storage Service (Amazon S3)
	// and Amazon Elastic File System (Amazon EFS). The default value is S3.
	Domain *string `type:"string" enum:"Domain"`

	// Specifies the type of VPC endpoint that your server is connected to. If your
	// server is connected to a VPC endpoint, your server isn't accessible over
	// the public internet.
	EndpointType *string `type:"string" enum:"EndpointType"`

	// The mode of authentication for a server. The default value is SERVICE_MANAGED,
	// which allows you to store and access user credentials within the Transfer
	// Family service.
	//
	// Use AWS_DIRECTORY_SERVICE to provide access to Active Directory groups in
	// Directory Service for Microsoft Active Directory or Microsoft Active Directory
	// in your on-premises environment or in Amazon Web Services using AD Connector.
	// This option also requires you to provide a Directory ID by using the IdentityProviderDetails
	// parameter.
	//
	// Use the API_GATEWAY value to integrate with an identity provider of your
	// choosing. The API_GATEWAY setting requires you to provide an Amazon API Gateway
	// endpoint URL to call for authentication by using the IdentityProviderDetails
	// parameter.
	//
	// Use the AWS_LAMBDA value to directly use an Lambda function as your identity
	// provider. If you choose this value, you must specify the ARN for the Lambda
	// function in the Function parameter for the IdentityProviderDetails data type.
	IdentityProviderType *string `type:"string" enum:"IdentityProviderType"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that allows a server to turn on Amazon CloudWatch logging for Amazon
	// S3 or Amazon EFSevents. When set, you can view user activity in your CloudWatch
	// logs.
	LoggingRole *string `min:"20" type:"string"`

	// Specifies the unique system assigned identifier for the servers that were
	// listed.
	ServerId *string `min:"19" type:"string"`

	// The condition of the server that was described. A value of ONLINE indicates
	// that the server can accept jobs and transfer files. A State value of OFFLINE
	// means that the server cannot perform file transfer operations.
	//
	// The states of STARTING and STOPPING indicate that the server is in an intermediate
	// state, either not fully able to respond, or not fully offline. The values
	// of START_FAILED or STOP_FAILED can indicate an error condition.
	State *string `type:"string" enum:"State"`

	// Specifies the number of users that are assigned to a server you specified
	// with the ServerId.
	UserCount *int64 `type:"integer"`
}

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

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

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

// SetDomain sets the Domain field's value.
func (s *ListedServer) SetDomain(v string) *ListedServer {
	s.Domain = &v
	return s
}

// SetEndpointType sets the EndpointType field's value.
func (s *ListedServer) SetEndpointType(v string) *ListedServer {
	s.EndpointType = &v
	return s
}

// SetIdentityProviderType sets the IdentityProviderType field's value.
func (s *ListedServer) SetIdentityProviderType(v string) *ListedServer {
	s.IdentityProviderType = &v
	return s
}

// SetLoggingRole sets the LoggingRole field's value.
func (s *ListedServer) SetLoggingRole(v string) *ListedServer {
	s.LoggingRole = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *ListedServer) SetServerId(v string) *ListedServer {
	s.ServerId = &v
	return s
}

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

// SetUserCount sets the UserCount field's value.
func (s *ListedServer) SetUserCount(v int64) *ListedServer {
	s.UserCount = &v
	return s
}

// Returns properties of the user that you specify.
type ListedUser struct {
	_ struct{} `type:"structure"`

	// Provides the unique Amazon Resource Name (ARN) for the user that you want
	// to learn about.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// The landing directory (folder) for a user when they log in to the server
	// using the client.
	//
	// A HomeDirectory example is /bucket_name/home/mydirectory.
	//
	// The HomeDirectory parameter is only used if HomeDirectoryType is set to PATH.
	HomeDirectory *string `type:"string"`

	// The type of landing directory (folder) that you want your users' home directory
	// to be when they log in to the server. If you set it to PATH, the user will
	// see the absolute Amazon S3 bucket or Amazon EFS path as is in their file
	// transfer protocol clients. If you set it to LOGICAL, you need to provide
	// mappings in the HomeDirectoryMappings for how you want to make Amazon S3
	// or Amazon EFS paths visible to your users.
	//
	// If HomeDirectoryType is LOGICAL, you must provide mappings, using the HomeDirectoryMappings
	// parameter. If, on the other hand, HomeDirectoryType is PATH, you provide
	// an absolute path using the HomeDirectory parameter. You cannot have both
	// HomeDirectory and HomeDirectoryMappings in your template.
	HomeDirectoryType *string `type:"string" enum:"HomeDirectoryType"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that controls your users' access to your Amazon S3 bucket or Amazon
	// EFS file system. The policies attached to this role determine the level of
	// access that you want to provide your users when transferring files into and
	// out of your Amazon S3 bucket or Amazon EFS file system. The IAM role should
	// also contain a trust relationship that allows the server to access your resources
	// when servicing your users' transfer requests.
	//
	// The IAM role that controls your users' access to your Amazon S3 bucket for
	// servers with Domain=S3, or your EFS file system for servers with Domain=EFS.
	//
	// The policies attached to this role determine the level of access you want
	// to provide your users when transferring files into and out of your S3 buckets
	// or EFS file systems.
	Role *string `min:"20" type:"string"`

	// Specifies the number of SSH public keys stored for the user you specified.
	SshPublicKeyCount *int64 `type:"integer"`

	// Specifies the name of the user whose ARN was specified. User names are used
	// for authentication purposes.
	UserName *string `min:"3" type:"string"`
}

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

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

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

// SetHomeDirectory sets the HomeDirectory field's value.
func (s *ListedUser) SetHomeDirectory(v string) *ListedUser {
	s.HomeDirectory = &v
	return s
}

// SetHomeDirectoryType sets the HomeDirectoryType field's value.
func (s *ListedUser) SetHomeDirectoryType(v string) *ListedUser {
	s.HomeDirectoryType = &v
	return s
}

// SetRole sets the Role field's value.
func (s *ListedUser) SetRole(v string) *ListedUser {
	s.Role = &v
	return s
}

// SetSshPublicKeyCount sets the SshPublicKeyCount field's value.
func (s *ListedUser) SetSshPublicKeyCount(v int64) *ListedUser {
	s.SshPublicKeyCount = &v
	return s
}

// SetUserName sets the UserName field's value.
func (s *ListedUser) SetUserName(v string) *ListedUser {
	s.UserName = &v
	return s
}

// Contains the identifier, text description, and Amazon Resource Name (ARN)
// for the workflow.
type ListedWorkflow struct {
	_ struct{} `type:"structure"`

	// Specifies the unique Amazon Resource Name (ARN) for the workflow.
	Arn *string `min:"20" type:"string"`

	// Specifies the text description for the workflow.
	Description *string `type:"string"`

	// A unique identifier for the workflow.
	WorkflowId *string `min:"19" type:"string"`
}

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

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

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

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

// SetWorkflowId sets the WorkflowId field's value.
func (s *ListedWorkflow) SetWorkflowId(v string) *ListedWorkflow {
	s.WorkflowId = &v
	return s
}

// Consists of the logging role and the log group name.
type LoggingConfiguration struct {
	_ struct{} `type:"structure"`

	// The name of the CloudWatch logging group for the Transfer Family server to
	// which this workflow belongs.
	LogGroupName *string `min:"1" type:"string"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that allows a server to turn on Amazon CloudWatch logging for Amazon
	// S3 or Amazon EFSevents. When set, you can view user activity in your CloudWatch
	// logs.
	LoggingRole *string `min:"20" type:"string"`
}

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

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

// SetLogGroupName sets the LogGroupName field's value.
func (s *LoggingConfiguration) SetLogGroupName(v string) *LoggingConfiguration {
	s.LogGroupName = &v
	return s
}

// SetLoggingRole sets the LoggingRole field's value.
func (s *LoggingConfiguration) SetLoggingRole(v string) *LoggingConfiguration {
	s.LoggingRole = &v
	return s
}

// The full POSIX identity, including user ID (Uid), group ID (Gid), and any
// secondary groups IDs (SecondaryGids), that controls your users' access to
// your Amazon EFS file systems. The POSIX permissions that are set on files
// and directories in your file system determine the level of access your users
// get when transferring files into and out of your Amazon EFS file systems.
type PosixProfile struct {
	_ struct{} `type:"structure"`

	// The POSIX group ID used for all EFS operations by this user.
	//
	// Gid is a required field
	Gid *int64 `type:"long" required:"true"`

	// The secondary POSIX group IDs used for all EFS operations by this user.
	SecondaryGids []*int64 `type:"list"`

	// The POSIX user ID used for all EFS operations by this user.
	//
	// Uid is a required field
	Uid *int64 `type:"long" required:"true"`
}

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

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

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

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

// SetGid sets the Gid field's value.
func (s *PosixProfile) SetGid(v int64) *PosixProfile {
	s.Gid = &v
	return s
}

// SetSecondaryGids sets the SecondaryGids field's value.
func (s *PosixProfile) SetSecondaryGids(v []*int64) *PosixProfile {
	s.SecondaryGids = v
	return s
}

// SetUid sets the Uid field's value.
func (s *PosixProfile) SetUid(v int64) *PosixProfile {
	s.Uid = &v
	return s
}

// The protocol settings that are configured for your server.
type ProtocolDetails struct {
	_ struct{} `type:"structure"`

	// Indicates the transport method for the AS2 messages. Currently, only HTTP
	// is supported.
	As2Transports []*string `min:"1" type:"list" enum:"As2Transport"`

	// Indicates passive mode, for FTP and FTPS protocols. Enter a single IPv4 address,
	// such as the public IP address of a firewall, router, or load balancer. For
	// example:
	//
	// aws transfer update-server --protocol-details PassiveIp=0.0.0.0
	//
	// Replace 0.0.0.0 in the example above with the actual IP address you want
	// to use.
	//
	// If you change the PassiveIp value, you must stop and then restart your Transfer
	// Family server for the change to take effect. For details on using passive
	// mode (PASV) in a NAT environment, see Configuring your FTPS server behind
	// a firewall or NAT with Transfer Family (http://aws.amazon.com/blogs/storage/configuring-your-ftps-server-behind-a-firewall-or-nat-with-aws-transfer-family/).
	//
	// Special values
	//
	// The AUTO and 0.0.0.0 are special values for the PassiveIp parameter. The
	// value PassiveIp=AUTO is assigned by default to FTP and FTPS type servers.
	// In this case, the server automatically responds with one of the endpoint
	// IPs within the PASV response. PassiveIp=0.0.0.0 has a more unique application
	// for its usage. For example, if you have a High Availability (HA) Network
	// Load Balancer (NLB) environment, where you have 3 subnets, you can only specify
	// a single IP address using the PassiveIp parameter. This reduces the effectiveness
	// of having High Availability. In this case, you can specify PassiveIp=0.0.0.0.
	// This tells the client to use the same IP address as the Control connection
	// and utilize all AZs for their connections. Note, however, that not all FTP
	// clients support the PassiveIp=0.0.0.0 response. FileZilla and WinSCP do support
	// it. If you are using other clients, check to see if your client supports
	// the PassiveIp=0.0.0.0 response.
	PassiveIp *string `type:"string"`

	// Use the SetStatOption to ignore the error that is generated when the client
	// attempts to use SETSTAT on a file you are uploading to an S3 bucket.
	//
	// Some SFTP file transfer clients can attempt to change the attributes of remote
	// files, including timestamp and permissions, using commands, such as SETSTAT
	// when uploading the file. However, these commands are not compatible with
	// object storage systems, such as Amazon S3. Due to this incompatibility, file
	// uploads from these clients can result in errors even when the file is otherwise
	// successfully uploaded.
	//
	// Set the value to ENABLE_NO_OP to have the Transfer Family server ignore the
	// SETSTAT command, and upload files without needing to make any changes to
	// your SFTP client. While the SetStatOption ENABLE_NO_OP setting ignores the
	// error, it does generate a log entry in Amazon CloudWatch Logs, so you can
	// determine when the client is making a SETSTAT call.
	//
	// If you want to preserve the original timestamp for your file, and modify
	// other file attributes using SETSTAT, you can use Amazon EFS as backend storage
	// with Transfer Family.
	SetStatOption *string `type:"string" enum:"SetStatOption"`

	// A property used with Transfer Family servers that use the FTPS protocol.
	// TLS Session Resumption provides a mechanism to resume or share a negotiated
	// secret key between the control and data connection for an FTPS session. TlsSessionResumptionMode
	// determines whether or not the server resumes recent, negotiated sessions
	// through a unique session ID. This property is available during CreateServer
	// and UpdateServer calls. If a TlsSessionResumptionMode value is not specified
	// during CreateServer, it is set to ENFORCED by default.
	//
	//    * DISABLED: the server does not process TLS session resumption client
	//    requests and creates a new TLS session for each request.
	//
	//    * ENABLED: the server processes and accepts clients that are performing
	//    TLS session resumption. The server doesn't reject client data connections
	//    that do not perform the TLS session resumption client processing.
	//
	//    * ENFORCED: the server processes and accepts clients that are performing
	//    TLS session resumption. The server rejects client data connections that
	//    do not perform the TLS session resumption client processing. Before you
	//    set the value to ENFORCED, test your clients. Not all FTPS clients perform
	//    TLS session resumption. So, if you choose to enforce TLS session resumption,
	//    you prevent any connections from FTPS clients that don't perform the protocol
	//    negotiation. To determine whether or not you can use the ENFORCED value,
	//    you need to test your clients.
	TlsSessionResumptionMode *string `type:"string" enum:"TlsSessionResumptionMode"`
}

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

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

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

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

// SetAs2Transports sets the As2Transports field's value.
func (s *ProtocolDetails) SetAs2Transports(v []*string) *ProtocolDetails {
	s.As2Transports = v
	return s
}

// SetPassiveIp sets the PassiveIp field's value.
func (s *ProtocolDetails) SetPassiveIp(v string) *ProtocolDetails {
	s.PassiveIp = &v
	return s
}

// SetSetStatOption sets the SetStatOption field's value.
func (s *ProtocolDetails) SetSetStatOption(v string) *ProtocolDetails {
	s.SetStatOption = &v
	return s
}

// SetTlsSessionResumptionMode sets the TlsSessionResumptionMode field's value.
func (s *ProtocolDetails) SetTlsSessionResumptionMode(v string) *ProtocolDetails {
	s.TlsSessionResumptionMode = &v
	return s
}

// The requested resource does not exist, or exists in a region other than the
// one specified for the command.
type ResourceExistsException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

	// Resource is a required field
	Resource *string `type:"string" required:"true"`

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

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

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

func newErrorResourceExistsException(v protocol.ResponseMetadata) error {
	return &ResourceExistsException{
		RespMetadata: v,
	}
}

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

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

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

func (s *ResourceExistsException) 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 *ResourceExistsException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// This exception is thrown when a resource is not found by the Amazon Web ServicesTransfer
// Family service.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

	// Resource is a required field
	Resource *string `type:"string" required:"true"`

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

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

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

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

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

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

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

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

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

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

// Specifies the details for the file location for the file that's being used
// in the workflow. Only applicable if you are using S3 storage.
type S3FileLocation struct {
	_ struct{} `type:"structure"`

	// Specifies the S3 bucket that contains the file being used.
	Bucket *string `min:"3" type:"string"`

	// The entity tag is a hash of the object. The ETag reflects changes only to
	// the contents of an object, not its metadata.
	Etag *string `min:"1" type:"string"`

	// The name assigned to the file when it was created in Amazon S3. You use the
	// object key to retrieve the object.
	Key *string `type:"string"`

	// Specifies the file version.
	VersionId *string `min:"1" type:"string"`
}

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

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

// SetBucket sets the Bucket field's value.
func (s *S3FileLocation) SetBucket(v string) *S3FileLocation {
	s.Bucket = &v
	return s
}

// SetEtag sets the Etag field's value.
func (s *S3FileLocation) SetEtag(v string) *S3FileLocation {
	s.Etag = &v
	return s
}

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

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

// Specifies the customer input Amazon S3 file location. If it is used inside
// copyStepDetails.DestinationFileLocation, it should be the S3 copy destination.
//
// You need to provide the bucket and key. The key can represent either a path
// or a file. This is determined by whether or not you end the key value with
// the forward slash (/) character. If the final character is "/", then your
// file is copied to the folder, and its name does not change. If, rather, the
// final character is alphanumeric, your uploaded file is renamed to the path
// value. In this case, if a file with that name already exists, it is overwritten.
//
// For example, if your path is shared-files/bob/, your uploaded files are copied
// to the shared-files/bob/, folder. If your path is shared-files/today, each
// uploaded file is copied to the shared-files folder and named today: each
// upload overwrites the previous version of the bob file.
type S3InputFileLocation struct {
	_ struct{} `type:"structure"`

	// Specifies the S3 bucket for the customer input file.
	Bucket *string `min:"3" type:"string"`

	// The name assigned to the file when it was created in Amazon S3. You use the
	// object key to retrieve the object.
	Key *string `type:"string"`
}

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

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

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

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

// SetBucket sets the Bucket field's value.
func (s *S3InputFileLocation) SetBucket(v string) *S3InputFileLocation {
	s.Bucket = &v
	return s
}

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

// The Amazon S3 storage options that are configured for your server.
type S3StorageOptions struct {
	_ struct{} `type:"structure"`

	// Specifies whether or not performance for your Amazon S3 directories is optimized.
	// This is disabled by default.
	//
	// By default, home directory mappings have a TYPE of DIRECTORY. If you enable
	// this option, you would then need to explicitly set the HomeDirectoryMapEntry
	// Type to FILE if you want a mapping to have a file target.
	DirectoryListingOptimization *string `type:"string" enum:"DirectoryListingOptimization"`
}

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

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

// SetDirectoryListingOptimization sets the DirectoryListingOptimization field's value.
func (s *S3StorageOptions) SetDirectoryListingOptimization(v string) *S3StorageOptions {
	s.DirectoryListingOptimization = &v
	return s
}

// Specifies the key-value pair that are assigned to a file during the execution
// of a Tagging step.
type S3Tag struct {
	_ struct{} `type:"structure"`

	// The name assigned to the tag that you create.
	//
	// Key is a required field
	Key *string `min:"1" type:"string" required:"true"`

	// The value that corresponds to the key.
	//
	// Value is a required field
	Value *string `type:"string" required:"true"`
}

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

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

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

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

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

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

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

	// A unique identifier for the execution of a workflow.
	//
	// ExecutionId is a required field
	ExecutionId *string `min:"36" type:"string" required:"true"`

	// Indicates whether the specified step succeeded or failed.
	//
	// Status is a required field
	Status *string `type:"string" required:"true" enum:"CustomStepStatus"`

	// Used to distinguish between multiple callbacks for multiple Lambda steps
	// within the same execution.
	//
	// Token is a required field
	Token *string `min:"1" type:"string" required:"true"`

	// A unique identifier for the workflow.
	//
	// WorkflowId is a required field
	WorkflowId *string `min:"19" type:"string" required:"true"`
}

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

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

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

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

// SetExecutionId sets the ExecutionId field's value.
func (s *SendWorkflowStepStateInput) SetExecutionId(v string) *SendWorkflowStepStateInput {
	s.ExecutionId = &v
	return s
}

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

// SetToken sets the Token field's value.
func (s *SendWorkflowStepStateInput) SetToken(v string) *SendWorkflowStepStateInput {
	s.Token = &v
	return s
}

// SetWorkflowId sets the WorkflowId field's value.
func (s *SendWorkflowStepStateInput) SetWorkflowId(v string) *SendWorkflowStepStateInput {
	s.WorkflowId = &v
	return s
}

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

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

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

// A container object for the session details that are associated with a workflow.
type ServiceMetadata struct {
	_ struct{} `type:"structure"`

	// The Server ID (ServerId), Session ID (SessionId) and user (UserName) make
	// up the UserDetails.
	//
	// UserDetails is a required field
	UserDetails *UserDetails `type:"structure" required:"true"`
}

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

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

// SetUserDetails sets the UserDetails field's value.
func (s *ServiceMetadata) SetUserDetails(v *UserDetails) *ServiceMetadata {
	s.UserDetails = v
	return s
}

// The request has failed because the Amazon Web ServicesTransfer Family service
// is not available.
type ServiceUnavailableException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

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

func newErrorServiceUnavailableException(v protocol.ResponseMetadata) error {
	return &ServiceUnavailableException{
		RespMetadata: v,
	}
}

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

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

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

func (s *ServiceUnavailableException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

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

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

// Contains the details for an SFTP connector object. The connector object is
// used for transferring files to and from a partner's SFTP server.
//
// Because the SftpConnectorConfig data type is used for both creating and updating
// SFTP connectors, its parameters, TrustedHostKeys and UserSecretId are marked
// as not required. This is a bit misleading, as they are not required when
// you are updating an existing SFTP connector, but are required when you are
// creating a new SFTP connector.
type SftpConnectorConfig struct {
	_ struct{} `type:"structure"`

	// The public portion of the host key, or keys, that are used to identify the
	// external server to which you are connecting. You can use the ssh-keyscan
	// command against the SFTP server to retrieve the necessary key.
	//
	// The three standard SSH public key format elements are <key type>, <body base64>,
	// and an optional <comment>, with spaces between each element. Specify only
	// the <key type> and <body base64>: do not enter the <comment> portion of the
	// key.
	//
	// For the trusted host key, Transfer Family accepts RSA and ECDSA keys.
	//
	//    * For RSA keys, the <key type> string is ssh-rsa.
	//
	//    * For ECDSA keys, the <key type> string is either ecdsa-sha2-nistp256,
	//    ecdsa-sha2-nistp384, or ecdsa-sha2-nistp521, depending on the size of
	//    the key you generated.
	//
	// Run this command to retrieve the SFTP server host key, where your SFTP server
	// name is ftp.host.com.
	//
	// ssh-keyscan ftp.host.com
	//
	// This prints the public host key to standard output.
	//
	// ftp.host.com ssh-rsa AAAAB3Nza...<long-string-for-public-key
	//
	// Copy and paste this string into the TrustedHostKeys field for the create-connector
	// command or into the Trusted host keys field in the console.
	TrustedHostKeys []*string `min:"1" type:"list"`

	// The identifier for the secret (in Amazon Web Services Secrets Manager) that
	// contains the SFTP user's private key, password, or both. The identifier must
	// be the Amazon Resource Name (ARN) of the secret.
	UserSecretId *string `min:"1" type:"string"`
}

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

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

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

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTrustedHostKeys sets the TrustedHostKeys field's value.
func (s *SftpConnectorConfig) SetTrustedHostKeys(v []*string) *SftpConnectorConfig {
	s.TrustedHostKeys = v
	return s
}

// SetUserSecretId sets the UserSecretId field's value.
func (s *SftpConnectorConfig) SetUserSecretId(v string) *SftpConnectorConfig {
	s.UserSecretId = &v
	return s
}

// Provides information about the public Secure Shell (SSH) key that is associated
// with a Transfer Family user for the specific file transfer protocol-enabled
// server (as identified by ServerId). The information returned includes the
// date the key was imported, the public key contents, and the public key ID.
// A user can store more than one SSH public key associated with their user
// name on a specific server.
type SshPublicKey struct {
	_ struct{} `type:"structure"`

	// Specifies the date that the public key was added to the Transfer Family user.
	//
	// DateImported is a required field
	DateImported *time.Time `type:"timestamp" required:"true"`

	// Specifies the content of the SSH public key as specified by the PublicKeyId.
	//
	// Transfer Family accepts RSA, ECDSA, and ED25519 keys.
	//
	// SshPublicKeyBody is a required field
	SshPublicKeyBody *string `type:"string" required:"true"`

	// Specifies the SshPublicKeyId parameter contains the identifier of the public
	// key.
	//
	// SshPublicKeyId is a required field
	SshPublicKeyId *string `min:"21" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SshPublicKey) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SshPublicKey) GoString() string {
	return s.String()
}

// SetDateImported sets the DateImported field's value.
func (s *SshPublicKey) SetDateImported(v time.Time) *SshPublicKey {
	s.DateImported = &v
	return s
}

// SetSshPublicKeyBody sets the SshPublicKeyBody field's value.
func (s *SshPublicKey) SetSshPublicKeyBody(v string) *SshPublicKey {
	s.SshPublicKeyBody = &v
	return s
}

// SetSshPublicKeyId sets the SshPublicKeyId field's value.
func (s *SshPublicKey) SetSshPublicKeyId(v string) *SshPublicKey {
	s.SshPublicKeyId = &v
	return s
}

type StartDirectoryListingInput struct {
	_ struct{} `type:"structure"`

	// The unique identifier for the connector.
	//
	// ConnectorId is a required field
	ConnectorId *string `min:"19" type:"string" required:"true"`

	// An optional parameter where you can specify the maximum number of file/directory
	// names to retrieve. The default value is 1,000.
	MaxItems *int64 `min:"1" type:"integer"`

	// Specifies the path (bucket and prefix) in Amazon S3 storage to store the
	// results of the directory listing.
	//
	// OutputDirectoryPath is a required field
	OutputDirectoryPath *string `min:"1" type:"string" required:"true"`

	// Specifies the directory on the remote SFTP server for which you want to list
	// its contents.
	//
	// RemoteDirectoryPath is a required field
	RemoteDirectoryPath *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartDirectoryListingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartDirectoryListingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StartDirectoryListingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StartDirectoryListingInput"}
	if s.ConnectorId == nil {
		invalidParams.Add(request.NewErrParamRequired("ConnectorId"))
	}
	if s.ConnectorId != nil && len(*s.ConnectorId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("ConnectorId", 19))
	}
	if s.MaxItems != nil && *s.MaxItems < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxItems", 1))
	}
	if s.OutputDirectoryPath == nil {
		invalidParams.Add(request.NewErrParamRequired("OutputDirectoryPath"))
	}
	if s.OutputDirectoryPath != nil && len(*s.OutputDirectoryPath) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("OutputDirectoryPath", 1))
	}
	if s.RemoteDirectoryPath == nil {
		invalidParams.Add(request.NewErrParamRequired("RemoteDirectoryPath"))
	}
	if s.RemoteDirectoryPath != nil && len(*s.RemoteDirectoryPath) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RemoteDirectoryPath", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetConnectorId sets the ConnectorId field's value.
func (s *StartDirectoryListingInput) SetConnectorId(v string) *StartDirectoryListingInput {
	s.ConnectorId = &v
	return s
}

// SetMaxItems sets the MaxItems field's value.
func (s *StartDirectoryListingInput) SetMaxItems(v int64) *StartDirectoryListingInput {
	s.MaxItems = &v
	return s
}

// SetOutputDirectoryPath sets the OutputDirectoryPath field's value.
func (s *StartDirectoryListingInput) SetOutputDirectoryPath(v string) *StartDirectoryListingInput {
	s.OutputDirectoryPath = &v
	return s
}

// SetRemoteDirectoryPath sets the RemoteDirectoryPath field's value.
func (s *StartDirectoryListingInput) SetRemoteDirectoryPath(v string) *StartDirectoryListingInput {
	s.RemoteDirectoryPath = &v
	return s
}

type StartDirectoryListingOutput struct {
	_ struct{} `type:"structure"`

	// Returns a unique identifier for the directory listing call.
	//
	// ListingId is a required field
	ListingId *string `min:"1" type:"string" required:"true"`

	// Returns the file name where the results are stored. This is a combination
	// of the connector ID and the listing ID: <connector-id>-<listing-id>.json.
	//
	// OutputFileName is a required field
	OutputFileName *string `min:"26" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartDirectoryListingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartDirectoryListingOutput) GoString() string {
	return s.String()
}

// SetListingId sets the ListingId field's value.
func (s *StartDirectoryListingOutput) SetListingId(v string) *StartDirectoryListingOutput {
	s.ListingId = &v
	return s
}

// SetOutputFileName sets the OutputFileName field's value.
func (s *StartDirectoryListingOutput) SetOutputFileName(v string) *StartDirectoryListingOutput {
	s.OutputFileName = &v
	return s
}

type StartFileTransferInput struct {
	_ struct{} `type:"structure"`

	// The unique identifier for the connector.
	//
	// ConnectorId is a required field
	ConnectorId *string `min:"19" type:"string" required:"true"`

	// For an inbound transfer, the LocaDirectoryPath specifies the destination
	// for one or more files that are transferred from the partner's SFTP server.
	LocalDirectoryPath *string `min:"1" type:"string"`

	// For an outbound transfer, the RemoteDirectoryPath specifies the destination
	// for one or more files that are transferred to the partner's SFTP server.
	// If you don't specify a RemoteDirectoryPath, the destination for transferred
	// files is the SFTP user's home directory.
	RemoteDirectoryPath *string `min:"1" type:"string"`

	// One or more source paths for the partner's SFTP server. Each string represents
	// a source file path for one inbound file transfer.
	RetrieveFilePaths []*string `min:"1" type:"list"`

	// One or more source paths for the Amazon S3 storage. Each string represents
	// a source file path for one outbound file transfer. For example, DOC-EXAMPLE-BUCKET/myfile.txt .
	//
	// Replace DOC-EXAMPLE-BUCKET with one of your actual buckets.
	SendFilePaths []*string `min:"1" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartFileTransferInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartFileTransferInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StartFileTransferInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StartFileTransferInput"}
	if s.ConnectorId == nil {
		invalidParams.Add(request.NewErrParamRequired("ConnectorId"))
	}
	if s.ConnectorId != nil && len(*s.ConnectorId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("ConnectorId", 19))
	}
	if s.LocalDirectoryPath != nil && len(*s.LocalDirectoryPath) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("LocalDirectoryPath", 1))
	}
	if s.RemoteDirectoryPath != nil && len(*s.RemoteDirectoryPath) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RemoteDirectoryPath", 1))
	}
	if s.RetrieveFilePaths != nil && len(s.RetrieveFilePaths) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("RetrieveFilePaths", 1))
	}
	if s.SendFilePaths != nil && len(s.SendFilePaths) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SendFilePaths", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetConnectorId sets the ConnectorId field's value.
func (s *StartFileTransferInput) SetConnectorId(v string) *StartFileTransferInput {
	s.ConnectorId = &v
	return s
}

// SetLocalDirectoryPath sets the LocalDirectoryPath field's value.
func (s *StartFileTransferInput) SetLocalDirectoryPath(v string) *StartFileTransferInput {
	s.LocalDirectoryPath = &v
	return s
}

// SetRemoteDirectoryPath sets the RemoteDirectoryPath field's value.
func (s *StartFileTransferInput) SetRemoteDirectoryPath(v string) *StartFileTransferInput {
	s.RemoteDirectoryPath = &v
	return s
}

// SetRetrieveFilePaths sets the RetrieveFilePaths field's value.
func (s *StartFileTransferInput) SetRetrieveFilePaths(v []*string) *StartFileTransferInput {
	s.RetrieveFilePaths = v
	return s
}

// SetSendFilePaths sets the SendFilePaths field's value.
func (s *StartFileTransferInput) SetSendFilePaths(v []*string) *StartFileTransferInput {
	s.SendFilePaths = v
	return s
}

type StartFileTransferOutput struct {
	_ struct{} `type:"structure"`

	// Returns the unique identifier for the file transfer.
	//
	// TransferId is a required field
	TransferId *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartFileTransferOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartFileTransferOutput) GoString() string {
	return s.String()
}

// SetTransferId sets the TransferId field's value.
func (s *StartFileTransferOutput) SetTransferId(v string) *StartFileTransferOutput {
	s.TransferId = &v
	return s
}

type StartServerInput struct {
	_ struct{} `type:"structure"`

	// A system-assigned unique identifier for a server that you start.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartServerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartServerInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StartServerInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StartServerInput"}
	if s.ServerId == nil {
		invalidParams.Add(request.NewErrParamRequired("ServerId"))
	}
	if s.ServerId != nil && len(*s.ServerId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("ServerId", 19))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetServerId sets the ServerId field's value.
func (s *StartServerInput) SetServerId(v string) *StartServerInput {
	s.ServerId = &v
	return s
}

type StartServerOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartServerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartServerOutput) GoString() string {
	return s.String()
}

type StopServerInput struct {
	_ struct{} `type:"structure"`

	// A system-assigned unique identifier for a server that you stopped.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopServerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopServerInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StopServerInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StopServerInput"}
	if s.ServerId == nil {
		invalidParams.Add(request.NewErrParamRequired("ServerId"))
	}
	if s.ServerId != nil && len(*s.ServerId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("ServerId", 19))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetServerId sets the ServerId field's value.
func (s *StopServerInput) SetServerId(v string) *StopServerInput {
	s.ServerId = &v
	return s
}

type StopServerOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopServerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopServerOutput) GoString() string {
	return s.String()
}

// Creates a key-value pair for a specific resource. Tags are metadata that
// you can use to search for and group a resource for various purposes. You
// can apply tags to servers, users, and roles. A tag key can take more than
// one value. For example, to group servers for accounting purposes, you might
// create a tag called Group and assign the values Research and Accounting to
// that group.
type Tag struct {
	_ struct{} `type:"structure"`

	// The name assigned to the tag that you create.
	//
	// Key is a required field
	Key *string `type:"string" required:"true"`

	// Contains one or more values that you assigned to the key name you create.
	//
	// Value is a required field
	Value *string `type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tag) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tag) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Tag) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Tag"}
	if s.Key == nil {
		invalidParams.Add(request.NewErrParamRequired("Key"))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetKey sets the Key field's value.
func (s *Tag) SetKey(v string) *Tag {
	s.Key = &v
	return s
}

// SetValue sets the Value field's value.
func (s *Tag) SetValue(v string) *Tag {
	s.Value = &v
	return s
}

type TagResourceInput struct {
	_ struct{} `type:"structure"`

	// An Amazon Resource Name (ARN) for a specific Amazon Web Services resource,
	// such as a server, user, or role.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// Key-value pairs assigned to ARNs that you can use to group and search for
	// resources by type. You can attach this metadata to resources (servers, users,
	// workflows, and so on) for any purpose.
	//
	// Tags is a required field
	Tags []*Tag `min:"1" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TagResourceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TagResourceInput"}
	if s.Arn == nil {
		invalidParams.Add(request.NewErrParamRequired("Arn"))
	}
	if s.Arn != nil && len(*s.Arn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("Arn", 20))
	}
	if s.Tags == nil {
		invalidParams.Add(request.NewErrParamRequired("Tags"))
	}
	if s.Tags != nil && len(s.Tags) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Tags", 1))
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetArn sets the Arn field's value.
func (s *TagResourceInput) SetArn(v string) *TagResourceInput {
	s.Arn = &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.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceOutput) GoString() string {
	return s.String()
}

// Each step type has its own StepDetails structure.
//
// The key/value pairs used to tag a file during the execution of a workflow
// step.
type TagStepDetails struct {
	_ struct{} `type:"structure"`

	// The name of the step, used as an identifier.
	Name *string `type:"string"`

	// Specifies which file to use as input to the workflow step: either the output
	// from the previous step, or the originally uploaded file for the workflow.
	//
	//    * To use the previous file as the input, enter ${previous.file}. In this
	//    case, this workflow step uses the output file from the previous workflow
	//    step as input. This is the default value.
	//
	//    * To use the originally uploaded file location as input for this step,
	//    enter ${original.file}.
	SourceFileLocation *string `type:"string"`

	// Array that contains from 1 to 10 key/value pairs.
	Tags []*S3Tag `min:"1" type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagStepDetails) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagStepDetails) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TagStepDetails) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TagStepDetails"}
	if s.Tags != nil && len(s.Tags) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Tags", 1))
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetName sets the Name field's value.
func (s *TagStepDetails) SetName(v string) *TagStepDetails {
	s.Name = &v
	return s
}

// SetSourceFileLocation sets the SourceFileLocation field's value.
func (s *TagStepDetails) SetSourceFileLocation(v string) *TagStepDetails {
	s.SourceFileLocation = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *TagStepDetails) SetTags(v []*S3Tag) *TagStepDetails {
	s.Tags = v
	return s
}

type TestConnectionInput struct {
	_ struct{} `type:"structure"`

	// The unique identifier for the connector.
	//
	// ConnectorId is a required field
	ConnectorId *string `min:"19" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestConnectionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestConnectionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TestConnectionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TestConnectionInput"}
	if s.ConnectorId == nil {
		invalidParams.Add(request.NewErrParamRequired("ConnectorId"))
	}
	if s.ConnectorId != nil && len(*s.ConnectorId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("ConnectorId", 19))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetConnectorId sets the ConnectorId field's value.
func (s *TestConnectionInput) SetConnectorId(v string) *TestConnectionInput {
	s.ConnectorId = &v
	return s
}

type TestConnectionOutput struct {
	_ struct{} `type:"structure"`

	// Returns the identifier of the connector object that you are testing.
	ConnectorId *string `min:"19" type:"string"`

	// Returns OK for successful test, or ERROR if the test fails.
	Status *string `type:"string"`

	// Returns Connection succeeded if the test is successful. Or, returns a descriptive
	// error message if the test fails. The following list provides troubleshooting
	// details, depending on the error message that you receive.
	//
	//    * Verify that your secret name aligns with the one in Transfer Role permissions.
	//
	//    * Verify the server URL in the connector configuration , and verify that
	//    the login credentials work successfully outside of the connector.
	//
	//    * Verify that the secret exists and is formatted correctly.
	//
	//    * Verify that the trusted host key in the connector configuration matches
	//    the ssh-keyscan output.
	StatusMessage *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestConnectionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestConnectionOutput) GoString() string {
	return s.String()
}

// SetConnectorId sets the ConnectorId field's value.
func (s *TestConnectionOutput) SetConnectorId(v string) *TestConnectionOutput {
	s.ConnectorId = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *TestConnectionOutput) SetStatus(v string) *TestConnectionOutput {
	s.Status = &v
	return s
}

// SetStatusMessage sets the StatusMessage field's value.
func (s *TestConnectionOutput) SetStatusMessage(v string) *TestConnectionOutput {
	s.StatusMessage = &v
	return s
}

type TestIdentityProviderInput struct {
	_ struct{} `type:"structure"`

	// A system-assigned identifier for a specific server. That server's user authentication
	// method is tested with a user name and password.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// The type of file transfer protocol to be tested.
	//
	// The available protocols are:
	//
	//    * Secure Shell (SSH) File Transfer Protocol (SFTP)
	//
	//    * File Transfer Protocol Secure (FTPS)
	//
	//    * File Transfer Protocol (FTP)
	//
	//    * Applicability Statement 2 (AS2)
	ServerProtocol *string `type:"string" enum:"Protocol"`

	// The source IP address of the account to be tested.
	SourceIp *string `type:"string"`

	// The name of the account to be tested.
	//
	// UserName is a required field
	UserName *string `min:"3" type:"string" required:"true"`

	// The password of the account to be tested.
	//
	// UserPassword is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by TestIdentityProviderInput's
	// String and GoString methods.
	UserPassword *string `type:"string" sensitive:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestIdentityProviderInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestIdentityProviderInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TestIdentityProviderInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TestIdentityProviderInput"}
	if s.ServerId == nil {
		invalidParams.Add(request.NewErrParamRequired("ServerId"))
	}
	if s.ServerId != nil && len(*s.ServerId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("ServerId", 19))
	}
	if s.UserName == nil {
		invalidParams.Add(request.NewErrParamRequired("UserName"))
	}
	if s.UserName != nil && len(*s.UserName) < 3 {
		invalidParams.Add(request.NewErrParamMinLen("UserName", 3))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetServerId sets the ServerId field's value.
func (s *TestIdentityProviderInput) SetServerId(v string) *TestIdentityProviderInput {
	s.ServerId = &v
	return s
}

// SetServerProtocol sets the ServerProtocol field's value.
func (s *TestIdentityProviderInput) SetServerProtocol(v string) *TestIdentityProviderInput {
	s.ServerProtocol = &v
	return s
}

// SetSourceIp sets the SourceIp field's value.
func (s *TestIdentityProviderInput) SetSourceIp(v string) *TestIdentityProviderInput {
	s.SourceIp = &v
	return s
}

// SetUserName sets the UserName field's value.
func (s *TestIdentityProviderInput) SetUserName(v string) *TestIdentityProviderInput {
	s.UserName = &v
	return s
}

// SetUserPassword sets the UserPassword field's value.
func (s *TestIdentityProviderInput) SetUserPassword(v string) *TestIdentityProviderInput {
	s.UserPassword = &v
	return s
}

type TestIdentityProviderOutput struct {
	_ struct{} `type:"structure"`

	// A message that indicates whether the test was successful or not.
	//
	// If an empty string is returned, the most likely cause is that the authentication
	// failed due to an incorrect username or password.
	Message *string `type:"string"`

	// The response that is returned from your API Gateway or your Lambda function.
	Response *string `type:"string"`

	// The HTTP status code that is the response from your API Gateway or your Lambda
	// function.
	//
	// StatusCode is a required field
	StatusCode *int64 `type:"integer" required:"true"`

	// The endpoint of the service used to authenticate a user.
	//
	// Url is a required field
	Url *string `type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestIdentityProviderOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestIdentityProviderOutput) GoString() string {
	return s.String()
}

// SetMessage sets the Message field's value.
func (s *TestIdentityProviderOutput) SetMessage(v string) *TestIdentityProviderOutput {
	s.Message = &v
	return s
}

// SetResponse sets the Response field's value.
func (s *TestIdentityProviderOutput) SetResponse(v string) *TestIdentityProviderOutput {
	s.Response = &v
	return s
}

// SetStatusCode sets the StatusCode field's value.
func (s *TestIdentityProviderOutput) SetStatusCode(v int64) *TestIdentityProviderOutput {
	s.StatusCode = &v
	return s
}

// SetUrl sets the Url field's value.
func (s *TestIdentityProviderOutput) SetUrl(v string) *TestIdentityProviderOutput {
	s.Url = &v
	return s
}

// The request was denied due to request throttling.
type ThrottlingException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`

	RetryAfterSeconds *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThrottlingException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThrottlingException) GoString() string {
	return s.String()
}

func newErrorThrottlingException(v protocol.ResponseMetadata) error {
	return &ThrottlingException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ThrottlingException) Code() string {
	return "ThrottlingException"
}

// Message returns the exception's message.
func (s *ThrottlingException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ThrottlingException) OrigErr() error {
	return nil
}

func (s *ThrottlingException) Error() string {
	return fmt.Sprintf("%s: %s\n%s", s.Code(), s.Message(), s.String())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ThrottlingException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ThrottlingException) RequestID() string {
	return s.RespMetadata.RequestID
}

type UntagResourceInput struct {
	_ struct{} `type:"structure"`

	// The value of the resource that will have the tag removed. An Amazon Resource
	// Name (ARN) is an identifier for a specific Amazon Web Services resource,
	// such as a server, user, or role.
	//
	// Arn is a required field
	Arn *string `min:"20" type:"string" required:"true"`

	// TagKeys are key-value pairs assigned to ARNs that can be used to group and
	// search for resources by type. This metadata can be attached to resources
	// for any purpose.
	//
	// TagKeys is a required field
	TagKeys []*string `min:"1" type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UntagResourceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UntagResourceInput"}
	if s.Arn == nil {
		invalidParams.Add(request.NewErrParamRequired("Arn"))
	}
	if s.Arn != nil && len(*s.Arn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("Arn", 20))
	}
	if s.TagKeys == nil {
		invalidParams.Add(request.NewErrParamRequired("TagKeys"))
	}
	if s.TagKeys != nil && len(s.TagKeys) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TagKeys", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetArn sets the Arn field's value.
func (s *UntagResourceInput) SetArn(v string) *UntagResourceInput {
	s.Arn = &v
	return s
}

// SetTagKeys sets the TagKeys field's value.
func (s *UntagResourceInput) SetTagKeys(v []*string) *UntagResourceInput {
	s.TagKeys = v
	return s
}

type UntagResourceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceOutput) GoString() string {
	return s.String()
}

type UpdateAccessInput struct {
	_ struct{} `type:"structure"`

	// A unique identifier that is required to identify specific groups within your
	// directory. The users of the group that you associate have access to your
	// Amazon S3 or Amazon EFS resources over the enabled protocols using Transfer
	// Family. If you know the group name, you can view the SID values by running
	// the following command using Windows PowerShell.
	//
	// Get-ADGroup -Filter {samAccountName -like "YourGroupName*"} -Properties *
	// | Select SamAccountName,ObjectSid
	//
	// In that command, replace YourGroupName with the name of your Active Directory
	// group.
	//
	// The regular expression used to validate this parameter is a string of characters
	// consisting of uppercase and lowercase alphanumeric characters with no spaces.
	// You can also include underscores or any of the following characters: =,.@:/-
	//
	// ExternalId is a required field
	ExternalId *string `min:"1" type:"string" required:"true"`

	// The landing directory (folder) for a user when they log in to the server
	// using the client.
	//
	// A HomeDirectory example is /bucket_name/home/mydirectory.
	//
	// The HomeDirectory parameter is only used if HomeDirectoryType is set to PATH.
	HomeDirectory *string `type:"string"`

	// Logical directory mappings that specify what Amazon S3 or Amazon EFS paths
	// and keys should be visible to your user and how you want to make them visible.
	// You must specify the Entry and Target pair, where Entry shows how the path
	// is made visible and Target is the actual Amazon S3 or Amazon EFS path. If
	// you only specify a target, it is displayed as is. You also must ensure that
	// your Identity and Access Management (IAM) role provides access to paths in
	// Target. This value can be set only when HomeDirectoryType is set to LOGICAL.
	//
	// The following is an Entry and Target pair example.
	//
	// [ { "Entry": "/directory1", "Target": "/bucket_name/home/mydirectory" } ]
	//
	// In most cases, you can use this value instead of the session policy to lock
	// down your user to the designated home directory ("chroot"). To do this, you
	// can set Entry to / and set Target to the HomeDirectory parameter value.
	//
	// The following is an Entry and Target pair example for chroot.
	//
	// [ { "Entry": "/", "Target": "/bucket_name/home/mydirectory" } ]
	HomeDirectoryMappings []*HomeDirectoryMapEntry `min:"1" type:"list"`

	// The type of landing directory (folder) that you want your users' home directory
	// to be when they log in to the server. If you set it to PATH, the user will
	// see the absolute Amazon S3 bucket or Amazon EFS path as is in their file
	// transfer protocol clients. If you set it to LOGICAL, you need to provide
	// mappings in the HomeDirectoryMappings for how you want to make Amazon S3
	// or Amazon EFS paths visible to your users.
	//
	// If HomeDirectoryType is LOGICAL, you must provide mappings, using the HomeDirectoryMappings
	// parameter. If, on the other hand, HomeDirectoryType is PATH, you provide
	// an absolute path using the HomeDirectory parameter. You cannot have both
	// HomeDirectory and HomeDirectoryMappings in your template.
	HomeDirectoryType *string `type:"string" enum:"HomeDirectoryType"`

	// A session policy for your user so that you can use the same Identity and
	// Access Management (IAM) role across multiple users. This policy scopes down
	// a user's access to portions of their Amazon S3 bucket. Variables that you
	// can use inside this policy include ${Transfer:UserName}, ${Transfer:HomeDirectory},
	// and ${Transfer:HomeBucket}.
	//
	// This policy applies only when the domain of ServerId is Amazon S3. Amazon
	// EFS does not use session policies.
	//
	// For session policies, Transfer Family stores the policy as a JSON blob, instead
	// of the Amazon Resource Name (ARN) of the policy. You save the policy as a
	// JSON blob and pass it in the Policy argument.
	//
	// For an example of a session policy, see Example session policy (https://docs.aws.amazon.com/transfer/latest/userguide/session-policy.html).
	//
	// For more information, see AssumeRole (https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)
	// in the Amazon Web ServicesSecurity Token Service API Reference.
	Policy *string `type:"string"`

	// The full POSIX identity, including user ID (Uid), group ID (Gid), and any
	// secondary groups IDs (SecondaryGids), that controls your users' access to
	// your Amazon EFS file systems. The POSIX permissions that are set on files
	// and directories in your file system determine the level of access your users
	// get when transferring files into and out of your Amazon EFS file systems.
	PosixProfile *PosixProfile `type:"structure"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that controls your users' access to your Amazon S3 bucket or Amazon
	// EFS file system. The policies attached to this role determine the level of
	// access that you want to provide your users when transferring files into and
	// out of your Amazon S3 bucket or Amazon EFS file system. The IAM role should
	// also contain a trust relationship that allows the server to access your resources
	// when servicing your users' transfer requests.
	Role *string `min:"20" type:"string"`

	// A system-assigned unique identifier for a server instance. This is the specific
	// server that you added your user to.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAccessInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAccessInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateAccessInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateAccessInput"}
	if s.ExternalId == nil {
		invalidParams.Add(request.NewErrParamRequired("ExternalId"))
	}
	if s.ExternalId != nil && len(*s.ExternalId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ExternalId", 1))
	}
	if s.HomeDirectoryMappings != nil && len(s.HomeDirectoryMappings) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("HomeDirectoryMappings", 1))
	}
	if s.Role != nil && len(*s.Role) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("Role", 20))
	}
	if s.ServerId == nil {
		invalidParams.Add(request.NewErrParamRequired("ServerId"))
	}
	if s.ServerId != nil && len(*s.ServerId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("ServerId", 19))
	}
	if s.HomeDirectoryMappings != nil {
		for i, v := range s.HomeDirectoryMappings {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "HomeDirectoryMappings", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.PosixProfile != nil {
		if err := s.PosixProfile.Validate(); err != nil {
			invalidParams.AddNested("PosixProfile", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExternalId sets the ExternalId field's value.
func (s *UpdateAccessInput) SetExternalId(v string) *UpdateAccessInput {
	s.ExternalId = &v
	return s
}

// SetHomeDirectory sets the HomeDirectory field's value.
func (s *UpdateAccessInput) SetHomeDirectory(v string) *UpdateAccessInput {
	s.HomeDirectory = &v
	return s
}

// SetHomeDirectoryMappings sets the HomeDirectoryMappings field's value.
func (s *UpdateAccessInput) SetHomeDirectoryMappings(v []*HomeDirectoryMapEntry) *UpdateAccessInput {
	s.HomeDirectoryMappings = v
	return s
}

// SetHomeDirectoryType sets the HomeDirectoryType field's value.
func (s *UpdateAccessInput) SetHomeDirectoryType(v string) *UpdateAccessInput {
	s.HomeDirectoryType = &v
	return s
}

// SetPolicy sets the Policy field's value.
func (s *UpdateAccessInput) SetPolicy(v string) *UpdateAccessInput {
	s.Policy = &v
	return s
}

// SetPosixProfile sets the PosixProfile field's value.
func (s *UpdateAccessInput) SetPosixProfile(v *PosixProfile) *UpdateAccessInput {
	s.PosixProfile = v
	return s
}

// SetRole sets the Role field's value.
func (s *UpdateAccessInput) SetRole(v string) *UpdateAccessInput {
	s.Role = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *UpdateAccessInput) SetServerId(v string) *UpdateAccessInput {
	s.ServerId = &v
	return s
}

type UpdateAccessOutput struct {
	_ struct{} `type:"structure"`

	// The external identifier of the group whose users have access to your Amazon
	// S3 or Amazon EFS resources over the enabled protocols using Amazon Web ServicesTransfer
	// Family.
	//
	// ExternalId is a required field
	ExternalId *string `min:"1" type:"string" required:"true"`

	// The identifier of the server that the user is attached to.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAccessOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAccessOutput) GoString() string {
	return s.String()
}

// SetExternalId sets the ExternalId field's value.
func (s *UpdateAccessOutput) SetExternalId(v string) *UpdateAccessOutput {
	s.ExternalId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *UpdateAccessOutput) SetServerId(v string) *UpdateAccessOutput {
	s.ServerId = &v
	return s
}

type UpdateAgreementInput struct {
	_ struct{} `type:"structure"`

	// Connectors are used to send files using either the AS2 or SFTP protocol.
	// For the access role, provide the Amazon Resource Name (ARN) of the Identity
	// and Access Management role to use.
	//
	// For AS2 connectors
	//
	// With AS2, you can send files by calling StartFileTransfer and specifying
	// the file paths in the request parameter, SendFilePaths. We use the file’s
	// parent directory (for example, for --send-file-paths /bucket/dir/file.txt,
	// parent directory is /bucket/dir/) to temporarily store a processed AS2 message
	// file, store the MDN when we receive them from the partner, and write a final
	// JSON file containing relevant metadata of the transmission. So, the AccessRole
	// needs to provide read and write access to the parent directory of the file
	// location used in the StartFileTransfer request. Additionally, you need to
	// provide read and write access to the parent directory of the files that you
	// intend to send with StartFileTransfer.
	//
	// If you are using Basic authentication for your AS2 connector, the access
	// role requires the secretsmanager:GetSecretValue permission for the secret.
	// If the secret is encrypted using a customer-managed key instead of the Amazon
	// Web Services managed key in Secrets Manager, then the role also needs the
	// kms:Decrypt permission for that key.
	//
	// For SFTP connectors
	//
	// Make sure that the access role provides read and write access to the parent
	// directory of the file location that's used in the StartFileTransfer request.
	// Additionally, make sure that the role provides secretsmanager:GetSecretValue
	// permission to Secrets Manager.
	AccessRole *string `min:"20" type:"string"`

	// A unique identifier for the agreement. This identifier is returned when you
	// create an agreement.
	//
	// AgreementId is a required field
	AgreementId *string `min:"19" type:"string" required:"true"`

	// To change the landing directory (folder) for files that are transferred,
	// provide the bucket folder that you want to use; for example, /DOC-EXAMPLE-BUCKET/home/mydirectory .
	BaseDirectory *string `type:"string"`

	// To replace the existing description, provide a short description for the
	// agreement.
	Description *string `min:"1" type:"string"`

	// A unique identifier for the AS2 local profile.
	//
	// To change the local profile identifier, provide a new value here.
	LocalProfileId *string `min:"19" type:"string"`

	// A unique identifier for the partner profile. To change the partner profile
	// identifier, provide a new value here.
	PartnerProfileId *string `min:"19" type:"string"`

	// A system-assigned unique identifier for a server instance. This is the specific
	// server that the agreement uses.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// You can update the status for the agreement, either activating an inactive
	// agreement or the reverse.
	Status *string `type:"string" enum:"AgreementStatusType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAgreementInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAgreementInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateAgreementInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateAgreementInput"}
	if s.AccessRole != nil && len(*s.AccessRole) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("AccessRole", 20))
	}
	if s.AgreementId == nil {
		invalidParams.Add(request.NewErrParamRequired("AgreementId"))
	}
	if s.AgreementId != nil && len(*s.AgreementId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("AgreementId", 19))
	}
	if s.Description != nil && len(*s.Description) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Description", 1))
	}
	if s.LocalProfileId != nil && len(*s.LocalProfileId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("LocalProfileId", 19))
	}
	if s.PartnerProfileId != nil && len(*s.PartnerProfileId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("PartnerProfileId", 19))
	}
	if s.ServerId == nil {
		invalidParams.Add(request.NewErrParamRequired("ServerId"))
	}
	if s.ServerId != nil && len(*s.ServerId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("ServerId", 19))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAccessRole sets the AccessRole field's value.
func (s *UpdateAgreementInput) SetAccessRole(v string) *UpdateAgreementInput {
	s.AccessRole = &v
	return s
}

// SetAgreementId sets the AgreementId field's value.
func (s *UpdateAgreementInput) SetAgreementId(v string) *UpdateAgreementInput {
	s.AgreementId = &v
	return s
}

// SetBaseDirectory sets the BaseDirectory field's value.
func (s *UpdateAgreementInput) SetBaseDirectory(v string) *UpdateAgreementInput {
	s.BaseDirectory = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdateAgreementInput) SetDescription(v string) *UpdateAgreementInput {
	s.Description = &v
	return s
}

// SetLocalProfileId sets the LocalProfileId field's value.
func (s *UpdateAgreementInput) SetLocalProfileId(v string) *UpdateAgreementInput {
	s.LocalProfileId = &v
	return s
}

// SetPartnerProfileId sets the PartnerProfileId field's value.
func (s *UpdateAgreementInput) SetPartnerProfileId(v string) *UpdateAgreementInput {
	s.PartnerProfileId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *UpdateAgreementInput) SetServerId(v string) *UpdateAgreementInput {
	s.ServerId = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *UpdateAgreementInput) SetStatus(v string) *UpdateAgreementInput {
	s.Status = &v
	return s
}

type UpdateAgreementOutput struct {
	_ struct{} `type:"structure"`

	// A unique identifier for the agreement. This identifier is returned when you
	// create an agreement.
	//
	// AgreementId is a required field
	AgreementId *string `min:"19" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAgreementOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAgreementOutput) GoString() string {
	return s.String()
}

// SetAgreementId sets the AgreementId field's value.
func (s *UpdateAgreementOutput) SetAgreementId(v string) *UpdateAgreementOutput {
	s.AgreementId = &v
	return s
}

type UpdateCertificateInput struct {
	_ struct{} `type:"structure"`

	// An optional date that specifies when the certificate becomes active.
	ActiveDate *time.Time `type:"timestamp"`

	// The identifier of the certificate object that you are updating.
	//
	// CertificateId is a required field
	CertificateId *string `min:"22" type:"string" required:"true"`

	// A short description to help identify the certificate.
	Description *string `min:"1" type:"string"`

	// An optional date that specifies when the certificate becomes inactive.
	InactiveDate *time.Time `type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCertificateInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCertificateInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateCertificateInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateCertificateInput"}
	if s.CertificateId == nil {
		invalidParams.Add(request.NewErrParamRequired("CertificateId"))
	}
	if s.CertificateId != nil && len(*s.CertificateId) < 22 {
		invalidParams.Add(request.NewErrParamMinLen("CertificateId", 22))
	}
	if s.Description != nil && len(*s.Description) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Description", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetActiveDate sets the ActiveDate field's value.
func (s *UpdateCertificateInput) SetActiveDate(v time.Time) *UpdateCertificateInput {
	s.ActiveDate = &v
	return s
}

// SetCertificateId sets the CertificateId field's value.
func (s *UpdateCertificateInput) SetCertificateId(v string) *UpdateCertificateInput {
	s.CertificateId = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdateCertificateInput) SetDescription(v string) *UpdateCertificateInput {
	s.Description = &v
	return s
}

// SetInactiveDate sets the InactiveDate field's value.
func (s *UpdateCertificateInput) SetInactiveDate(v time.Time) *UpdateCertificateInput {
	s.InactiveDate = &v
	return s
}

type UpdateCertificateOutput struct {
	_ struct{} `type:"structure"`

	// Returns the identifier of the certificate object that you are updating.
	//
	// CertificateId is a required field
	CertificateId *string `min:"22" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCertificateOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateCertificateOutput) GoString() string {
	return s.String()
}

// SetCertificateId sets the CertificateId field's value.
func (s *UpdateCertificateOutput) SetCertificateId(v string) *UpdateCertificateOutput {
	s.CertificateId = &v
	return s
}

type UpdateConnectorInput struct {
	_ struct{} `type:"structure"`

	// Connectors are used to send files using either the AS2 or SFTP protocol.
	// For the access role, provide the Amazon Resource Name (ARN) of the Identity
	// and Access Management role to use.
	//
	// For AS2 connectors
	//
	// With AS2, you can send files by calling StartFileTransfer and specifying
	// the file paths in the request parameter, SendFilePaths. We use the file’s
	// parent directory (for example, for --send-file-paths /bucket/dir/file.txt,
	// parent directory is /bucket/dir/) to temporarily store a processed AS2 message
	// file, store the MDN when we receive them from the partner, and write a final
	// JSON file containing relevant metadata of the transmission. So, the AccessRole
	// needs to provide read and write access to the parent directory of the file
	// location used in the StartFileTransfer request. Additionally, you need to
	// provide read and write access to the parent directory of the files that you
	// intend to send with StartFileTransfer.
	//
	// If you are using Basic authentication for your AS2 connector, the access
	// role requires the secretsmanager:GetSecretValue permission for the secret.
	// If the secret is encrypted using a customer-managed key instead of the Amazon
	// Web Services managed key in Secrets Manager, then the role also needs the
	// kms:Decrypt permission for that key.
	//
	// For SFTP connectors
	//
	// Make sure that the access role provides read and write access to the parent
	// directory of the file location that's used in the StartFileTransfer request.
	// Additionally, make sure that the role provides secretsmanager:GetSecretValue
	// permission to Secrets Manager.
	AccessRole *string `min:"20" type:"string"`

	// A structure that contains the parameters for an AS2 connector object.
	As2Config *As2ConnectorConfig `type:"structure"`

	// The unique identifier for the connector.
	//
	// ConnectorId is a required field
	ConnectorId *string `min:"19" type:"string" required:"true"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that allows a connector to turn on CloudWatch logging for Amazon S3
	// events. When set, you can view connector activity in your CloudWatch logs.
	LoggingRole *string `min:"20" type:"string"`

	// Specifies the name of the security policy for the connector.
	SecurityPolicyName *string `type:"string"`

	// A structure that contains the parameters for an SFTP connector object.
	SftpConfig *SftpConnectorConfig `type:"structure"`

	// The URL of the partner's AS2 or SFTP endpoint.
	Url *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateConnectorInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateConnectorInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateConnectorInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateConnectorInput"}
	if s.AccessRole != nil && len(*s.AccessRole) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("AccessRole", 20))
	}
	if s.ConnectorId == nil {
		invalidParams.Add(request.NewErrParamRequired("ConnectorId"))
	}
	if s.ConnectorId != nil && len(*s.ConnectorId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("ConnectorId", 19))
	}
	if s.LoggingRole != nil && len(*s.LoggingRole) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("LoggingRole", 20))
	}
	if s.As2Config != nil {
		if err := s.As2Config.Validate(); err != nil {
			invalidParams.AddNested("As2Config", err.(request.ErrInvalidParams))
		}
	}
	if s.SftpConfig != nil {
		if err := s.SftpConfig.Validate(); err != nil {
			invalidParams.AddNested("SftpConfig", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAccessRole sets the AccessRole field's value.
func (s *UpdateConnectorInput) SetAccessRole(v string) *UpdateConnectorInput {
	s.AccessRole = &v
	return s
}

// SetAs2Config sets the As2Config field's value.
func (s *UpdateConnectorInput) SetAs2Config(v *As2ConnectorConfig) *UpdateConnectorInput {
	s.As2Config = v
	return s
}

// SetConnectorId sets the ConnectorId field's value.
func (s *UpdateConnectorInput) SetConnectorId(v string) *UpdateConnectorInput {
	s.ConnectorId = &v
	return s
}

// SetLoggingRole sets the LoggingRole field's value.
func (s *UpdateConnectorInput) SetLoggingRole(v string) *UpdateConnectorInput {
	s.LoggingRole = &v
	return s
}

// SetSecurityPolicyName sets the SecurityPolicyName field's value.
func (s *UpdateConnectorInput) SetSecurityPolicyName(v string) *UpdateConnectorInput {
	s.SecurityPolicyName = &v
	return s
}

// SetSftpConfig sets the SftpConfig field's value.
func (s *UpdateConnectorInput) SetSftpConfig(v *SftpConnectorConfig) *UpdateConnectorInput {
	s.SftpConfig = v
	return s
}

// SetUrl sets the Url field's value.
func (s *UpdateConnectorInput) SetUrl(v string) *UpdateConnectorInput {
	s.Url = &v
	return s
}

type UpdateConnectorOutput struct {
	_ struct{} `type:"structure"`

	// Returns the identifier of the connector object that you are updating.
	//
	// ConnectorId is a required field
	ConnectorId *string `min:"19" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateConnectorOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateConnectorOutput) GoString() string {
	return s.String()
}

// SetConnectorId sets the ConnectorId field's value.
func (s *UpdateConnectorOutput) SetConnectorId(v string) *UpdateConnectorOutput {
	s.ConnectorId = &v
	return s
}

type UpdateHostKeyInput struct {
	_ struct{} `type:"structure"`

	// An updated description for the host key.
	//
	// Description is a required field
	Description *string `type:"string" required:"true"`

	// The identifier of the host key that you are updating.
	//
	// HostKeyId is a required field
	HostKeyId *string `min:"25" type:"string" required:"true"`

	// The identifier of the server that contains the host key that you are updating.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateHostKeyInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateHostKeyInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateHostKeyInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateHostKeyInput"}
	if s.Description == nil {
		invalidParams.Add(request.NewErrParamRequired("Description"))
	}
	if s.HostKeyId == nil {
		invalidParams.Add(request.NewErrParamRequired("HostKeyId"))
	}
	if s.HostKeyId != nil && len(*s.HostKeyId) < 25 {
		invalidParams.Add(request.NewErrParamMinLen("HostKeyId", 25))
	}
	if s.ServerId == nil {
		invalidParams.Add(request.NewErrParamRequired("ServerId"))
	}
	if s.ServerId != nil && len(*s.ServerId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("ServerId", 19))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDescription sets the Description field's value.
func (s *UpdateHostKeyInput) SetDescription(v string) *UpdateHostKeyInput {
	s.Description = &v
	return s
}

// SetHostKeyId sets the HostKeyId field's value.
func (s *UpdateHostKeyInput) SetHostKeyId(v string) *UpdateHostKeyInput {
	s.HostKeyId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *UpdateHostKeyInput) SetServerId(v string) *UpdateHostKeyInput {
	s.ServerId = &v
	return s
}

type UpdateHostKeyOutput struct {
	_ struct{} `type:"structure"`

	// Returns the host key identifier for the updated host key.
	//
	// HostKeyId is a required field
	HostKeyId *string `min:"25" type:"string" required:"true"`

	// Returns the server identifier for the server that contains the updated host
	// key.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateHostKeyOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateHostKeyOutput) GoString() string {
	return s.String()
}

// SetHostKeyId sets the HostKeyId field's value.
func (s *UpdateHostKeyOutput) SetHostKeyId(v string) *UpdateHostKeyOutput {
	s.HostKeyId = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *UpdateHostKeyOutput) SetServerId(v string) *UpdateHostKeyOutput {
	s.ServerId = &v
	return s
}

type UpdateProfileInput struct {
	_ struct{} `type:"structure"`

	// An array of identifiers for the imported certificates. You use this identifier
	// for working with profiles and partner profiles.
	CertificateIds []*string `type:"list"`

	// The identifier of the profile object that you are updating.
	//
	// ProfileId is a required field
	ProfileId *string `min:"19" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateProfileInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateProfileInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateProfileInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateProfileInput"}
	if s.ProfileId == nil {
		invalidParams.Add(request.NewErrParamRequired("ProfileId"))
	}
	if s.ProfileId != nil && len(*s.ProfileId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("ProfileId", 19))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCertificateIds sets the CertificateIds field's value.
func (s *UpdateProfileInput) SetCertificateIds(v []*string) *UpdateProfileInput {
	s.CertificateIds = v
	return s
}

// SetProfileId sets the ProfileId field's value.
func (s *UpdateProfileInput) SetProfileId(v string) *UpdateProfileInput {
	s.ProfileId = &v
	return s
}

type UpdateProfileOutput struct {
	_ struct{} `type:"structure"`

	// Returns the identifier for the profile that's being updated.
	//
	// ProfileId is a required field
	ProfileId *string `min:"19" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateProfileOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateProfileOutput) GoString() string {
	return s.String()
}

// SetProfileId sets the ProfileId field's value.
func (s *UpdateProfileOutput) SetProfileId(v string) *UpdateProfileOutput {
	s.ProfileId = &v
	return s
}

type UpdateServerInput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the Amazon Web ServicesCertificate Manager
	// (ACM) certificate. Required when Protocols is set to FTPS.
	//
	// To request a new public certificate, see Request a public certificate (https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html)
	// in the Amazon Web ServicesCertificate Manager User Guide.
	//
	// To import an existing certificate into ACM, see Importing certificates into
	// ACM (https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)
	// in the Amazon Web ServicesCertificate Manager User Guide.
	//
	// To request a private certificate to use FTPS through private IP addresses,
	// see Request a private certificate (https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-private.html)
	// in the Amazon Web ServicesCertificate Manager User Guide.
	//
	// Certificates with the following cryptographic algorithms and key sizes are
	// supported:
	//
	//    * 2048-bit RSA (RSA_2048)
	//
	//    * 4096-bit RSA (RSA_4096)
	//
	//    * Elliptic Prime Curve 256 bit (EC_prime256v1)
	//
	//    * Elliptic Prime Curve 384 bit (EC_secp384r1)
	//
	//    * Elliptic Prime Curve 521 bit (EC_secp521r1)
	//
	// The certificate must be a valid SSL/TLS X.509 version 3 certificate with
	// FQDN or IP address specified and information about the issuer.
	Certificate *string `type:"string"`

	// The virtual private cloud (VPC) endpoint settings that are configured for
	// your server. When you host your endpoint within your VPC, you can make your
	// endpoint accessible only to resources within your VPC, or you can attach
	// Elastic IP addresses and make your endpoint accessible to clients over the
	// internet. Your VPC's default security groups are automatically assigned to
	// your endpoint.
	EndpointDetails *EndpointDetails `type:"structure"`

	// The type of endpoint that you want your server to use. You can choose to
	// make your server's endpoint publicly accessible (PUBLIC) or host it inside
	// your VPC. With an endpoint that is hosted in a VPC, you can restrict access
	// to your server and resources only within your VPC or choose to make it internet
	// facing by attaching Elastic IP addresses directly to it.
	//
	// After May 19, 2021, you won't be able to create a server using EndpointType=VPC_ENDPOINT
	// in your Amazon Web Servicesaccount if your account hasn't already done so
	// before May 19, 2021. If you have already created servers with EndpointType=VPC_ENDPOINT
	// in your Amazon Web Servicesaccount on or before May 19, 2021, you will not
	// be affected. After this date, use EndpointType=VPC.
	//
	// For more information, see https://docs.aws.amazon.com/transfer/latest/userguide/create-server-in-vpc.html#deprecate-vpc-endpoint.
	//
	// It is recommended that you use VPC as the EndpointType. With this endpoint
	// type, you have the option to directly associate up to three Elastic IPv4
	// addresses (BYO IP included) with your server's endpoint and use VPC security
	// groups to restrict traffic by the client's public IP address. This is not
	// possible with EndpointType set to VPC_ENDPOINT.
	EndpointType *string `type:"string" enum:"EndpointType"`

	// The RSA, ECDSA, or ED25519 private key to use for your SFTP-enabled server.
	// You can add multiple host keys, in case you want to rotate keys, or have
	// a set of active keys that use different algorithms.
	//
	// Use the following command to generate an RSA 2048 bit key with no passphrase:
	//
	// ssh-keygen -t rsa -b 2048 -N "" -m PEM -f my-new-server-key.
	//
	// Use a minimum value of 2048 for the -b option. You can create a stronger
	// key by using 3072 or 4096.
	//
	// Use the following command to generate an ECDSA 256 bit key with no passphrase:
	//
	// ssh-keygen -t ecdsa -b 256 -N "" -m PEM -f my-new-server-key.
	//
	// Valid values for the -b option for ECDSA are 256, 384, and 521.
	//
	// Use the following command to generate an ED25519 key with no passphrase:
	//
	// ssh-keygen -t ed25519 -N "" -f my-new-server-key.
	//
	// For all of these commands, you can replace my-new-server-key with a string
	// of your choice.
	//
	// If you aren't planning to migrate existing users from an existing SFTP-enabled
	// server to a new server, don't update the host key. Accidentally changing
	// a server's host key can be disruptive.
	//
	// For more information, see Manage host keys for your SFTP-enabled server (https://docs.aws.amazon.com/transfer/latest/userguide/edit-server-config.html#configuring-servers-change-host-key)
	// in the Transfer Family User Guide.
	//
	// HostKey is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateServerInput's
	// String and GoString methods.
	HostKey *string `type:"string" sensitive:"true"`

	// An array containing all of the information required to call a customer's
	// authentication API method.
	IdentityProviderDetails *IdentityProviderDetails `type:"structure"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that allows a server to turn on Amazon CloudWatch logging for Amazon
	// S3 or Amazon EFSevents. When set, you can view user activity in your CloudWatch
	// logs.
	LoggingRole *string `type:"string"`

	// Specifies a string to display when users connect to a server. This string
	// is displayed after the user authenticates.
	//
	// The SFTP protocol does not support post-authentication display banners.
	PostAuthenticationLoginBanner *string `type:"string"`

	// Specifies a string to display when users connect to a server. This string
	// is displayed before the user authenticates. For example, the following banner
	// displays details about using the system:
	//
	// This system is for the use of authorized users only. Individuals using this
	// computer system without authority, or in excess of their authority, are subject
	// to having all of their activities on this system monitored and recorded by
	// system personnel.
	PreAuthenticationLoginBanner *string `type:"string"`

	// The protocol settings that are configured for your server.
	//
	//    * To indicate passive mode (for FTP and FTPS protocols), use the PassiveIp
	//    parameter. Enter a single dotted-quad IPv4 address, such as the external
	//    IP address of a firewall, router, or load balancer.
	//
	//    * To ignore the error that is generated when the client attempts to use
	//    the SETSTAT command on a file that you are uploading to an Amazon S3 bucket,
	//    use the SetStatOption parameter. To have the Transfer Family server ignore
	//    the SETSTAT command and upload files without needing to make any changes
	//    to your SFTP client, set the value to ENABLE_NO_OP. If you set the SetStatOption
	//    parameter to ENABLE_NO_OP, Transfer Family generates a log entry to Amazon
	//    CloudWatch Logs, so that you can determine when the client is making a
	//    SETSTAT call.
	//
	//    * To determine whether your Transfer Family server resumes recent, negotiated
	//    sessions through a unique session ID, use the TlsSessionResumptionMode
	//    parameter.
	//
	//    * As2Transports indicates the transport method for the AS2 messages. Currently,
	//    only HTTP is supported.
	ProtocolDetails *ProtocolDetails `type:"structure"`

	// Specifies the file transfer protocol or protocols over which your file transfer
	// protocol client can connect to your server's endpoint. The available protocols
	// are:
	//
	//    * SFTP (Secure Shell (SSH) File Transfer Protocol): File transfer over
	//    SSH
	//
	//    * FTPS (File Transfer Protocol Secure): File transfer with TLS encryption
	//
	//    * FTP (File Transfer Protocol): Unencrypted file transfer
	//
	//    * AS2 (Applicability Statement 2): used for transporting structured business-to-business
	//    data
	//
	//    * If you select FTPS, you must choose a certificate stored in Certificate
	//    Manager (ACM) which is used to identify your server when clients connect
	//    to it over FTPS.
	//
	//    * If Protocol includes either FTP or FTPS, then the EndpointType must
	//    be VPC and the IdentityProviderType must be either AWS_DIRECTORY_SERVICE,
	//    AWS_LAMBDA, or API_GATEWAY.
	//
	//    * If Protocol includes FTP, then AddressAllocationIds cannot be associated.
	//
	//    * If Protocol is set only to SFTP, the EndpointType can be set to PUBLIC
	//    and the IdentityProviderType can be set any of the supported identity
	//    types: SERVICE_MANAGED, AWS_DIRECTORY_SERVICE, AWS_LAMBDA, or API_GATEWAY.
	//
	//    * If Protocol includes AS2, then the EndpointType must be VPC, and domain
	//    must be Amazon S3.
	Protocols []*string `min:"1" type:"list" enum:"Protocol"`

	// Specifies whether or not performance for your Amazon S3 directories is optimized.
	// This is disabled by default.
	//
	// By default, home directory mappings have a TYPE of DIRECTORY. If you enable
	// this option, you would then need to explicitly set the HomeDirectoryMapEntry
	// Type to FILE if you want a mapping to have a file target.
	S3StorageOptions *S3StorageOptions `type:"structure"`

	// Specifies the name of the security policy for the server.
	SecurityPolicyName *string `type:"string"`

	// A system-assigned unique identifier for a server instance that the Transfer
	// Family user is assigned to.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// Specifies the log groups to which your server logs are sent.
	//
	// To specify a log group, you must provide the ARN for an existing log group.
	// In this case, the format of the log group is as follows:
	//
	// arn:aws:logs:region-name:amazon-account-id:log-group:log-group-name:*
	//
	// For example, arn:aws:logs:us-east-1:111122223333:log-group:mytestgroup:*
	//
	// If you have previously specified a log group for a server, you can clear
	// it, and in effect turn off structured logging, by providing an empty value
	// for this parameter in an update-server call. For example:
	//
	// update-server --server-id s-1234567890abcdef0 --structured-log-destinations
	StructuredLogDestinations []*string `type:"list"`

	// Specifies the workflow ID for the workflow to assign and the execution role
	// that's used for executing the workflow.
	//
	// In addition to a workflow to execute when a file is uploaded completely,
	// WorkflowDetails can also contain a workflow ID (and execution role) for a
	// workflow to execute on partial upload. A partial upload occurs when the server
	// session disconnects while the file is still being uploaded.
	//
	// To remove an associated workflow from a server, you can provide an empty
	// OnUpload object, as in the following example.
	//
	// aws transfer update-server --server-id s-01234567890abcdef --workflow-details
	// '{"OnUpload":[]}'
	WorkflowDetails *WorkflowDetails `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateServerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateServerInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateServerInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateServerInput"}
	if s.Protocols != nil && len(s.Protocols) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Protocols", 1))
	}
	if s.ServerId == nil {
		invalidParams.Add(request.NewErrParamRequired("ServerId"))
	}
	if s.ServerId != nil && len(*s.ServerId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("ServerId", 19))
	}
	if s.EndpointDetails != nil {
		if err := s.EndpointDetails.Validate(); err != nil {
			invalidParams.AddNested("EndpointDetails", err.(request.ErrInvalidParams))
		}
	}
	if s.IdentityProviderDetails != nil {
		if err := s.IdentityProviderDetails.Validate(); err != nil {
			invalidParams.AddNested("IdentityProviderDetails", err.(request.ErrInvalidParams))
		}
	}
	if s.ProtocolDetails != nil {
		if err := s.ProtocolDetails.Validate(); err != nil {
			invalidParams.AddNested("ProtocolDetails", err.(request.ErrInvalidParams))
		}
	}
	if s.WorkflowDetails != nil {
		if err := s.WorkflowDetails.Validate(); err != nil {
			invalidParams.AddNested("WorkflowDetails", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCertificate sets the Certificate field's value.
func (s *UpdateServerInput) SetCertificate(v string) *UpdateServerInput {
	s.Certificate = &v
	return s
}

// SetEndpointDetails sets the EndpointDetails field's value.
func (s *UpdateServerInput) SetEndpointDetails(v *EndpointDetails) *UpdateServerInput {
	s.EndpointDetails = v
	return s
}

// SetEndpointType sets the EndpointType field's value.
func (s *UpdateServerInput) SetEndpointType(v string) *UpdateServerInput {
	s.EndpointType = &v
	return s
}

// SetHostKey sets the HostKey field's value.
func (s *UpdateServerInput) SetHostKey(v string) *UpdateServerInput {
	s.HostKey = &v
	return s
}

// SetIdentityProviderDetails sets the IdentityProviderDetails field's value.
func (s *UpdateServerInput) SetIdentityProviderDetails(v *IdentityProviderDetails) *UpdateServerInput {
	s.IdentityProviderDetails = v
	return s
}

// SetLoggingRole sets the LoggingRole field's value.
func (s *UpdateServerInput) SetLoggingRole(v string) *UpdateServerInput {
	s.LoggingRole = &v
	return s
}

// SetPostAuthenticationLoginBanner sets the PostAuthenticationLoginBanner field's value.
func (s *UpdateServerInput) SetPostAuthenticationLoginBanner(v string) *UpdateServerInput {
	s.PostAuthenticationLoginBanner = &v
	return s
}

// SetPreAuthenticationLoginBanner sets the PreAuthenticationLoginBanner field's value.
func (s *UpdateServerInput) SetPreAuthenticationLoginBanner(v string) *UpdateServerInput {
	s.PreAuthenticationLoginBanner = &v
	return s
}

// SetProtocolDetails sets the ProtocolDetails field's value.
func (s *UpdateServerInput) SetProtocolDetails(v *ProtocolDetails) *UpdateServerInput {
	s.ProtocolDetails = v
	return s
}

// SetProtocols sets the Protocols field's value.
func (s *UpdateServerInput) SetProtocols(v []*string) *UpdateServerInput {
	s.Protocols = v
	return s
}

// SetS3StorageOptions sets the S3StorageOptions field's value.
func (s *UpdateServerInput) SetS3StorageOptions(v *S3StorageOptions) *UpdateServerInput {
	s.S3StorageOptions = v
	return s
}

// SetSecurityPolicyName sets the SecurityPolicyName field's value.
func (s *UpdateServerInput) SetSecurityPolicyName(v string) *UpdateServerInput {
	s.SecurityPolicyName = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *UpdateServerInput) SetServerId(v string) *UpdateServerInput {
	s.ServerId = &v
	return s
}

// SetStructuredLogDestinations sets the StructuredLogDestinations field's value.
func (s *UpdateServerInput) SetStructuredLogDestinations(v []*string) *UpdateServerInput {
	s.StructuredLogDestinations = v
	return s
}

// SetWorkflowDetails sets the WorkflowDetails field's value.
func (s *UpdateServerInput) SetWorkflowDetails(v *WorkflowDetails) *UpdateServerInput {
	s.WorkflowDetails = v
	return s
}

type UpdateServerOutput struct {
	_ struct{} `type:"structure"`

	// A system-assigned unique identifier for a server that the Transfer Family
	// user is assigned to.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateServerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateServerOutput) GoString() string {
	return s.String()
}

// SetServerId sets the ServerId field's value.
func (s *UpdateServerOutput) SetServerId(v string) *UpdateServerOutput {
	s.ServerId = &v
	return s
}

type UpdateUserInput struct {
	_ struct{} `type:"structure"`

	// The landing directory (folder) for a user when they log in to the server
	// using the client.
	//
	// A HomeDirectory example is /bucket_name/home/mydirectory.
	//
	// The HomeDirectory parameter is only used if HomeDirectoryType is set to PATH.
	HomeDirectory *string `type:"string"`

	// Logical directory mappings that specify what Amazon S3 or Amazon EFS paths
	// and keys should be visible to your user and how you want to make them visible.
	// You must specify the Entry and Target pair, where Entry shows how the path
	// is made visible and Target is the actual Amazon S3 or Amazon EFS path. If
	// you only specify a target, it is displayed as is. You also must ensure that
	// your Identity and Access Management (IAM) role provides access to paths in
	// Target. This value can be set only when HomeDirectoryType is set to LOGICAL.
	//
	// The following is an Entry and Target pair example.
	//
	// [ { "Entry": "/directory1", "Target": "/bucket_name/home/mydirectory" } ]
	//
	// In most cases, you can use this value instead of the session policy to lock
	// down your user to the designated home directory ("chroot"). To do this, you
	// can set Entry to '/' and set Target to the HomeDirectory parameter value.
	//
	// The following is an Entry and Target pair example for chroot.
	//
	// [ { "Entry": "/", "Target": "/bucket_name/home/mydirectory" } ]
	HomeDirectoryMappings []*HomeDirectoryMapEntry `min:"1" type:"list"`

	// The type of landing directory (folder) that you want your users' home directory
	// to be when they log in to the server. If you set it to PATH, the user will
	// see the absolute Amazon S3 bucket or Amazon EFS path as is in their file
	// transfer protocol clients. If you set it to LOGICAL, you need to provide
	// mappings in the HomeDirectoryMappings for how you want to make Amazon S3
	// or Amazon EFS paths visible to your users.
	//
	// If HomeDirectoryType is LOGICAL, you must provide mappings, using the HomeDirectoryMappings
	// parameter. If, on the other hand, HomeDirectoryType is PATH, you provide
	// an absolute path using the HomeDirectory parameter. You cannot have both
	// HomeDirectory and HomeDirectoryMappings in your template.
	HomeDirectoryType *string `type:"string" enum:"HomeDirectoryType"`

	// A session policy for your user so that you can use the same Identity and
	// Access Management (IAM) role across multiple users. This policy scopes down
	// a user's access to portions of their Amazon S3 bucket. Variables that you
	// can use inside this policy include ${Transfer:UserName}, ${Transfer:HomeDirectory},
	// and ${Transfer:HomeBucket}.
	//
	// This policy applies only when the domain of ServerId is Amazon S3. Amazon
	// EFS does not use session policies.
	//
	// For session policies, Transfer Family stores the policy as a JSON blob, instead
	// of the Amazon Resource Name (ARN) of the policy. You save the policy as a
	// JSON blob and pass it in the Policy argument.
	//
	// For an example of a session policy, see Creating a session policy (https://docs.aws.amazon.com/transfer/latest/userguide/session-policy).
	//
	// For more information, see AssumeRole (https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)
	// in the Amazon Web Services Security Token Service API Reference.
	Policy *string `type:"string"`

	// Specifies the full POSIX identity, including user ID (Uid), group ID (Gid),
	// and any secondary groups IDs (SecondaryGids), that controls your users' access
	// to your Amazon Elastic File Systems (Amazon EFS). The POSIX permissions that
	// are set on files and directories in your file system determines the level
	// of access your users get when transferring files into and out of your Amazon
	// EFS file systems.
	PosixProfile *PosixProfile `type:"structure"`

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM)
	// role that controls your users' access to your Amazon S3 bucket or Amazon
	// EFS file system. The policies attached to this role determine the level of
	// access that you want to provide your users when transferring files into and
	// out of your Amazon S3 bucket or Amazon EFS file system. The IAM role should
	// also contain a trust relationship that allows the server to access your resources
	// when servicing your users' transfer requests.
	Role *string `min:"20" type:"string"`

	// A system-assigned unique identifier for a Transfer Family server instance
	// that the user is assigned to.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// A unique string that identifies a user and is associated with a server as
	// specified by the ServerId. This user name must be a minimum of 3 and a maximum
	// of 100 characters long. The following are valid characters: a-z, A-Z, 0-9,
	// underscore '_', hyphen '-', period '.', and at sign '@'. The user name can't
	// start with a hyphen, period, or at sign.
	//
	// UserName is a required field
	UserName *string `min:"3" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateUserInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateUserInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateUserInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateUserInput"}
	if s.HomeDirectoryMappings != nil && len(s.HomeDirectoryMappings) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("HomeDirectoryMappings", 1))
	}
	if s.Role != nil && len(*s.Role) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("Role", 20))
	}
	if s.ServerId == nil {
		invalidParams.Add(request.NewErrParamRequired("ServerId"))
	}
	if s.ServerId != nil && len(*s.ServerId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("ServerId", 19))
	}
	if s.UserName == nil {
		invalidParams.Add(request.NewErrParamRequired("UserName"))
	}
	if s.UserName != nil && len(*s.UserName) < 3 {
		invalidParams.Add(request.NewErrParamMinLen("UserName", 3))
	}
	if s.HomeDirectoryMappings != nil {
		for i, v := range s.HomeDirectoryMappings {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "HomeDirectoryMappings", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.PosixProfile != nil {
		if err := s.PosixProfile.Validate(); err != nil {
			invalidParams.AddNested("PosixProfile", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetHomeDirectory sets the HomeDirectory field's value.
func (s *UpdateUserInput) SetHomeDirectory(v string) *UpdateUserInput {
	s.HomeDirectory = &v
	return s
}

// SetHomeDirectoryMappings sets the HomeDirectoryMappings field's value.
func (s *UpdateUserInput) SetHomeDirectoryMappings(v []*HomeDirectoryMapEntry) *UpdateUserInput {
	s.HomeDirectoryMappings = v
	return s
}

// SetHomeDirectoryType sets the HomeDirectoryType field's value.
func (s *UpdateUserInput) SetHomeDirectoryType(v string) *UpdateUserInput {
	s.HomeDirectoryType = &v
	return s
}

// SetPolicy sets the Policy field's value.
func (s *UpdateUserInput) SetPolicy(v string) *UpdateUserInput {
	s.Policy = &v
	return s
}

// SetPosixProfile sets the PosixProfile field's value.
func (s *UpdateUserInput) SetPosixProfile(v *PosixProfile) *UpdateUserInput {
	s.PosixProfile = v
	return s
}

// SetRole sets the Role field's value.
func (s *UpdateUserInput) SetRole(v string) *UpdateUserInput {
	s.Role = &v
	return s
}

// SetServerId sets the ServerId field's value.
func (s *UpdateUserInput) SetServerId(v string) *UpdateUserInput {
	s.ServerId = &v
	return s
}

// SetUserName sets the UserName field's value.
func (s *UpdateUserInput) SetUserName(v string) *UpdateUserInput {
	s.UserName = &v
	return s
}

// UpdateUserResponse returns the user name and identifier for the request to
// update a user's properties.
type UpdateUserOutput struct {
	_ struct{} `type:"structure"`

	// A system-assigned unique identifier for a Transfer Family server instance
	// that the account is assigned to.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// The unique identifier for a user that is assigned to a server instance that
	// was specified in the request.
	//
	// UserName is a required field
	UserName *string `min:"3" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateUserOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateUserOutput) GoString() string {
	return s.String()
}

// SetServerId sets the ServerId field's value.
func (s *UpdateUserOutput) SetServerId(v string) *UpdateUserOutput {
	s.ServerId = &v
	return s
}

// SetUserName sets the UserName field's value.
func (s *UpdateUserOutput) SetUserName(v string) *UpdateUserOutput {
	s.UserName = &v
	return s
}

// Specifies the user name, server ID, and session ID for a workflow.
type UserDetails struct {
	_ struct{} `type:"structure"`

	// The system-assigned unique identifier for a Transfer server instance.
	//
	// ServerId is a required field
	ServerId *string `min:"19" type:"string" required:"true"`

	// The system-assigned unique identifier for a session that corresponds to the
	// workflow.
	SessionId *string `min:"3" type:"string"`

	// A unique string that identifies a Transfer Family user associated with a
	// server.
	//
	// UserName is a required field
	UserName *string `min:"3" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UserDetails) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UserDetails) GoString() string {
	return s.String()
}

// SetServerId sets the ServerId field's value.
func (s *UserDetails) SetServerId(v string) *UserDetails {
	s.ServerId = &v
	return s
}

// SetSessionId sets the SessionId field's value.
func (s *UserDetails) SetSessionId(v string) *UserDetails {
	s.SessionId = &v
	return s
}

// SetUserName sets the UserName field's value.
func (s *UserDetails) SetUserName(v string) *UserDetails {
	s.UserName = &v
	return s
}

// Specifies the workflow ID for the workflow to assign and the execution role
// that's used for executing the workflow.
//
// In addition to a workflow to execute when a file is uploaded completely,
// WorkflowDetails can also contain a workflow ID (and execution role) for a
// workflow to execute on partial upload. A partial upload occurs when the server
// session disconnects while the file is still being uploaded.
type WorkflowDetail struct {
	_ struct{} `type:"structure"`

	// Includes the necessary permissions for S3, EFS, and Lambda operations that
	// Transfer can assume, so that all workflow steps can operate on the required
	// resources
	//
	// ExecutionRole is a required field
	ExecutionRole *string `min:"20" type:"string" required:"true"`

	// A unique identifier for the workflow.
	//
	// WorkflowId is a required field
	WorkflowId *string `min:"19" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s WorkflowDetail) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s WorkflowDetail) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *WorkflowDetail) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "WorkflowDetail"}
	if s.ExecutionRole == nil {
		invalidParams.Add(request.NewErrParamRequired("ExecutionRole"))
	}
	if s.ExecutionRole != nil && len(*s.ExecutionRole) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("ExecutionRole", 20))
	}
	if s.WorkflowId == nil {
		invalidParams.Add(request.NewErrParamRequired("WorkflowId"))
	}
	if s.WorkflowId != nil && len(*s.WorkflowId) < 19 {
		invalidParams.Add(request.NewErrParamMinLen("WorkflowId", 19))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetExecutionRole sets the ExecutionRole field's value.
func (s *WorkflowDetail) SetExecutionRole(v string) *WorkflowDetail {
	s.ExecutionRole = &v
	return s
}

// SetWorkflowId sets the WorkflowId field's value.
func (s *WorkflowDetail) SetWorkflowId(v string) *WorkflowDetail {
	s.WorkflowId = &v
	return s
}

// Container for the WorkflowDetail data type. It is used by actions that trigger
// a workflow to begin execution.
type WorkflowDetails struct {
	_ struct{} `type:"structure"`

	// A trigger that starts a workflow if a file is only partially uploaded. You
	// can attach a workflow to a server that executes whenever there is a partial
	// upload.
	//
	// A partial upload occurs when a file is open when the session disconnects.
	OnPartialUpload []*WorkflowDetail `type:"list"`

	// A trigger that starts a workflow: the workflow begins to execute after a
	// file is uploaded.
	//
	// To remove an associated workflow from a server, you can provide an empty
	// OnUpload object, as in the following example.
	//
	// aws transfer update-server --server-id s-01234567890abcdef --workflow-details
	// '{"OnUpload":[]}'
	OnUpload []*WorkflowDetail `type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s WorkflowDetails) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s WorkflowDetails) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *WorkflowDetails) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "WorkflowDetails"}
	if s.OnPartialUpload != nil {
		for i, v := range s.OnPartialUpload {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "OnPartialUpload", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.OnUpload != nil {
		for i, v := range s.OnUpload {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "OnUpload", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetOnPartialUpload sets the OnPartialUpload field's value.
func (s *WorkflowDetails) SetOnPartialUpload(v []*WorkflowDetail) *WorkflowDetails {
	s.OnPartialUpload = v
	return s
}

// SetOnUpload sets the OnUpload field's value.
func (s *WorkflowDetails) SetOnUpload(v []*WorkflowDetail) *WorkflowDetails {
	s.OnUpload = v
	return s
}

// The basic building block of a workflow.
type WorkflowStep struct {
	_ struct{} `type:"structure"`

	// Details for a step that performs a file copy.
	//
	// Consists of the following values:
	//
	//    * A description
	//
	//    * An Amazon S3 location for the destination of the file copy.
	//
	//    * A flag that indicates whether to overwrite an existing file of the same
	//    name. The default is FALSE.
	CopyStepDetails *CopyStepDetails `type:"structure"`

	// Details for a step that invokes an Lambda function.
	//
	// Consists of the Lambda function's name, target, and timeout (in seconds).
	CustomStepDetails *CustomStepDetails `type:"structure"`

	// Details for a step that decrypts an encrypted file.
	//
	// Consists of the following values:
	//
	//    * A descriptive name
	//
	//    * An Amazon S3 or Amazon Elastic File System (Amazon EFS) location for
	//    the source file to decrypt.
	//
	//    * An S3 or Amazon EFS location for the destination of the file decryption.
	//
	//    * A flag that indicates whether to overwrite an existing file of the same
	//    name. The default is FALSE.
	//
	//    * The type of encryption that's used. Currently, only PGP encryption is
	//    supported.
	DecryptStepDetails *DecryptStepDetails `type:"structure"`

	// Details for a step that deletes the file.
	DeleteStepDetails *DeleteStepDetails `type:"structure"`

	// Details for a step that creates one or more tags.
	//
	// You specify one or more tags. Each tag contains a key-value pair.
	TagStepDetails *TagStepDetails `type:"structure"`

	// Currently, the following step types are supported.
	//
	//    * COPY - Copy the file to another location.
	//
	//    * CUSTOM - Perform a custom step with an Lambda function target.
	//
	//    * DECRYPT - Decrypt a file that was encrypted before it was uploaded.
	//
	//    * DELETE - Delete the file.
	//
	//    * TAG - Add a tag to the file.
	Type *string `type:"string" enum:"WorkflowStepType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s WorkflowStep) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s WorkflowStep) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *WorkflowStep) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "WorkflowStep"}
	if s.CopyStepDetails != nil {
		if err := s.CopyStepDetails.Validate(); err != nil {
			invalidParams.AddNested("CopyStepDetails", err.(request.ErrInvalidParams))
		}
	}
	if s.CustomStepDetails != nil {
		if err := s.CustomStepDetails.Validate(); err != nil {
			invalidParams.AddNested("CustomStepDetails", err.(request.ErrInvalidParams))
		}
	}
	if s.DecryptStepDetails != nil {
		if err := s.DecryptStepDetails.Validate(); err != nil {
			invalidParams.AddNested("DecryptStepDetails", err.(request.ErrInvalidParams))
		}
	}
	if s.TagStepDetails != nil {
		if err := s.TagStepDetails.Validate(); err != nil {
			invalidParams.AddNested("TagStepDetails", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCopyStepDetails sets the CopyStepDetails field's value.
func (s *WorkflowStep) SetCopyStepDetails(v *CopyStepDetails) *WorkflowStep {
	s.CopyStepDetails = v
	return s
}

// SetCustomStepDetails sets the CustomStepDetails field's value.
func (s *WorkflowStep) SetCustomStepDetails(v *CustomStepDetails) *WorkflowStep {
	s.CustomStepDetails = v
	return s
}

// SetDecryptStepDetails sets the DecryptStepDetails field's value.
func (s *WorkflowStep) SetDecryptStepDetails(v *DecryptStepDetails) *WorkflowStep {
	s.DecryptStepDetails = v
	return s
}

// SetDeleteStepDetails sets the DeleteStepDetails field's value.
func (s *WorkflowStep) SetDeleteStepDetails(v *DeleteStepDetails) *WorkflowStep {
	s.DeleteStepDetails = v
	return s
}

// SetTagStepDetails sets the TagStepDetails field's value.
func (s *WorkflowStep) SetTagStepDetails(v *TagStepDetails) *WorkflowStep {
	s.TagStepDetails = v
	return s
}

// SetType sets the Type field's value.
func (s *WorkflowStep) SetType(v string) *WorkflowStep {
	s.Type = &v
	return s
}

const (
	// AgreementStatusTypeActive is a AgreementStatusType enum value
	AgreementStatusTypeActive = "ACTIVE"

	// AgreementStatusTypeInactive is a AgreementStatusType enum value
	AgreementStatusTypeInactive = "INACTIVE"
)

// AgreementStatusType_Values returns all elements of the AgreementStatusType enum
func AgreementStatusType_Values() []string {
	return []string{
		AgreementStatusTypeActive,
		AgreementStatusTypeInactive,
	}
}

const (
	// As2TransportHttp is a As2Transport enum value
	As2TransportHttp = "HTTP"
)

// As2Transport_Values returns all elements of the As2Transport enum
func As2Transport_Values() []string {
	return []string{
		As2TransportHttp,
	}
}

const (
	// CertificateStatusTypeActive is a CertificateStatusType enum value
	CertificateStatusTypeActive = "ACTIVE"

	// CertificateStatusTypePendingRotation is a CertificateStatusType enum value
	CertificateStatusTypePendingRotation = "PENDING_ROTATION"

	// CertificateStatusTypeInactive is a CertificateStatusType enum value
	CertificateStatusTypeInactive = "INACTIVE"
)

// CertificateStatusType_Values returns all elements of the CertificateStatusType enum
func CertificateStatusType_Values() []string {
	return []string{
		CertificateStatusTypeActive,
		CertificateStatusTypePendingRotation,
		CertificateStatusTypeInactive,
	}
}

const (
	// CertificateTypeCertificate is a CertificateType enum value
	CertificateTypeCertificate = "CERTIFICATE"

	// CertificateTypeCertificateWithPrivateKey is a CertificateType enum value
	CertificateTypeCertificateWithPrivateKey = "CERTIFICATE_WITH_PRIVATE_KEY"
)

// CertificateType_Values returns all elements of the CertificateType enum
func CertificateType_Values() []string {
	return []string{
		CertificateTypeCertificate,
		CertificateTypeCertificateWithPrivateKey,
	}
}

const (
	// CertificateUsageTypeSigning is a CertificateUsageType enum value
	CertificateUsageTypeSigning = "SIGNING"

	// CertificateUsageTypeEncryption is a CertificateUsageType enum value
	CertificateUsageTypeEncryption = "ENCRYPTION"

	// CertificateUsageTypeTls is a CertificateUsageType enum value
	CertificateUsageTypeTls = "TLS"
)

// CertificateUsageType_Values returns all elements of the CertificateUsageType enum
func CertificateUsageType_Values() []string {
	return []string{
		CertificateUsageTypeSigning,
		CertificateUsageTypeEncryption,
		CertificateUsageTypeTls,
	}
}

const (
	// CompressionEnumZlib is a CompressionEnum enum value
	CompressionEnumZlib = "ZLIB"

	// CompressionEnumDisabled is a CompressionEnum enum value
	CompressionEnumDisabled = "DISABLED"
)

// CompressionEnum_Values returns all elements of the CompressionEnum enum
func CompressionEnum_Values() []string {
	return []string{
		CompressionEnumZlib,
		CompressionEnumDisabled,
	}
}

const (
	// CustomStepStatusSuccess is a CustomStepStatus enum value
	CustomStepStatusSuccess = "SUCCESS"

	// CustomStepStatusFailure is a CustomStepStatus enum value
	CustomStepStatusFailure = "FAILURE"
)

// CustomStepStatus_Values returns all elements of the CustomStepStatus enum
func CustomStepStatus_Values() []string {
	return []string{
		CustomStepStatusSuccess,
		CustomStepStatusFailure,
	}
}

// Indicates whether optimization to directory listing on S3 servers is used.
// Disabled by default for compatibility.
const (
	// DirectoryListingOptimizationEnabled is a DirectoryListingOptimization enum value
	DirectoryListingOptimizationEnabled = "ENABLED"

	// DirectoryListingOptimizationDisabled is a DirectoryListingOptimization enum value
	DirectoryListingOptimizationDisabled = "DISABLED"
)

// DirectoryListingOptimization_Values returns all elements of the DirectoryListingOptimization enum
func DirectoryListingOptimization_Values() []string {
	return []string{
		DirectoryListingOptimizationEnabled,
		DirectoryListingOptimizationDisabled,
	}
}

const (
	// DomainS3 is a Domain enum value
	DomainS3 = "S3"

	// DomainEfs is a Domain enum value
	DomainEfs = "EFS"
)

// Domain_Values returns all elements of the Domain enum
func Domain_Values() []string {
	return []string{
		DomainS3,
		DomainEfs,
	}
}

const (
	// EncryptionAlgAes128Cbc is a EncryptionAlg enum value
	EncryptionAlgAes128Cbc = "AES128_CBC"

	// EncryptionAlgAes192Cbc is a EncryptionAlg enum value
	EncryptionAlgAes192Cbc = "AES192_CBC"

	// EncryptionAlgAes256Cbc is a EncryptionAlg enum value
	EncryptionAlgAes256Cbc = "AES256_CBC"

	// EncryptionAlgDesEde3Cbc is a EncryptionAlg enum value
	EncryptionAlgDesEde3Cbc = "DES_EDE3_CBC"

	// EncryptionAlgNone is a EncryptionAlg enum value
	EncryptionAlgNone = "NONE"
)

// EncryptionAlg_Values returns all elements of the EncryptionAlg enum
func EncryptionAlg_Values() []string {
	return []string{
		EncryptionAlgAes128Cbc,
		EncryptionAlgAes192Cbc,
		EncryptionAlgAes256Cbc,
		EncryptionAlgDesEde3Cbc,
		EncryptionAlgNone,
	}
}

const (
	// EncryptionTypePgp is a EncryptionType enum value
	EncryptionTypePgp = "PGP"
)

// EncryptionType_Values returns all elements of the EncryptionType enum
func EncryptionType_Values() []string {
	return []string{
		EncryptionTypePgp,
	}
}

const (
	// EndpointTypePublic is a EndpointType enum value
	EndpointTypePublic = "PUBLIC"

	// EndpointTypeVpc is a EndpointType enum value
	EndpointTypeVpc = "VPC"

	// EndpointTypeVpcEndpoint is a EndpointType enum value
	EndpointTypeVpcEndpoint = "VPC_ENDPOINT"
)

// EndpointType_Values returns all elements of the EndpointType enum
func EndpointType_Values() []string {
	return []string{
		EndpointTypePublic,
		EndpointTypeVpc,
		EndpointTypeVpcEndpoint,
	}
}

const (
	// ExecutionErrorTypePermissionDenied is a ExecutionErrorType enum value
	ExecutionErrorTypePermissionDenied = "PERMISSION_DENIED"

	// ExecutionErrorTypeCustomStepFailed is a ExecutionErrorType enum value
	ExecutionErrorTypeCustomStepFailed = "CUSTOM_STEP_FAILED"

	// ExecutionErrorTypeThrottled is a ExecutionErrorType enum value
	ExecutionErrorTypeThrottled = "THROTTLED"

	// ExecutionErrorTypeAlreadyExists is a ExecutionErrorType enum value
	ExecutionErrorTypeAlreadyExists = "ALREADY_EXISTS"

	// ExecutionErrorTypeNotFound is a ExecutionErrorType enum value
	ExecutionErrorTypeNotFound = "NOT_FOUND"

	// ExecutionErrorTypeBadRequest is a ExecutionErrorType enum value
	ExecutionErrorTypeBadRequest = "BAD_REQUEST"

	// ExecutionErrorTypeTimeout is a ExecutionErrorType enum value
	ExecutionErrorTypeTimeout = "TIMEOUT"

	// ExecutionErrorTypeInternalServerError is a ExecutionErrorType enum value
	ExecutionErrorTypeInternalServerError = "INTERNAL_SERVER_ERROR"
)

// ExecutionErrorType_Values returns all elements of the ExecutionErrorType enum
func ExecutionErrorType_Values() []string {
	return []string{
		ExecutionErrorTypePermissionDenied,
		ExecutionErrorTypeCustomStepFailed,
		ExecutionErrorTypeThrottled,
		ExecutionErrorTypeAlreadyExists,
		ExecutionErrorTypeNotFound,
		ExecutionErrorTypeBadRequest,
		ExecutionErrorTypeTimeout,
		ExecutionErrorTypeInternalServerError,
	}
}

const (
	// ExecutionStatusInProgress is a ExecutionStatus enum value
	ExecutionStatusInProgress = "IN_PROGRESS"

	// ExecutionStatusCompleted is a ExecutionStatus enum value
	ExecutionStatusCompleted = "COMPLETED"

	// ExecutionStatusException is a ExecutionStatus enum value
	ExecutionStatusException = "EXCEPTION"

	// ExecutionStatusHandlingException is a ExecutionStatus enum value
	ExecutionStatusHandlingException = "HANDLING_EXCEPTION"
)

// ExecutionStatus_Values returns all elements of the ExecutionStatus enum
func ExecutionStatus_Values() []string {
	return []string{
		ExecutionStatusInProgress,
		ExecutionStatusCompleted,
		ExecutionStatusException,
		ExecutionStatusHandlingException,
	}
}

const (
	// HomeDirectoryTypePath is a HomeDirectoryType enum value
	HomeDirectoryTypePath = "PATH"

	// HomeDirectoryTypeLogical is a HomeDirectoryType enum value
	HomeDirectoryTypeLogical = "LOGICAL"
)

// HomeDirectoryType_Values returns all elements of the HomeDirectoryType enum
func HomeDirectoryType_Values() []string {
	return []string{
		HomeDirectoryTypePath,
		HomeDirectoryTypeLogical,
	}
}

// The mode of authentication for a server. The default value is SERVICE_MANAGED,
// which allows you to store and access user credentials within the Transfer
// Family service.
//
// Use AWS_DIRECTORY_SERVICE to provide access to Active Directory groups in
// Directory Service for Microsoft Active Directory or Microsoft Active Directory
// in your on-premises environment or in Amazon Web Services using AD Connector.
// This option also requires you to provide a Directory ID by using the IdentityProviderDetails
// parameter.
//
// Use the API_GATEWAY value to integrate with an identity provider of your
// choosing. The API_GATEWAY setting requires you to provide an Amazon API Gateway
// endpoint URL to call for authentication by using the IdentityProviderDetails
// parameter.
//
// Use the AWS_LAMBDA value to directly use an Lambda function as your identity
// provider. If you choose this value, you must specify the ARN for the Lambda
// function in the Function parameter for the IdentityProviderDetails data type.
const (
	// IdentityProviderTypeServiceManaged is a IdentityProviderType enum value
	IdentityProviderTypeServiceManaged = "SERVICE_MANAGED"

	// IdentityProviderTypeApiGateway is a IdentityProviderType enum value
	IdentityProviderTypeApiGateway = "API_GATEWAY"

	// IdentityProviderTypeAwsDirectoryService is a IdentityProviderType enum value
	IdentityProviderTypeAwsDirectoryService = "AWS_DIRECTORY_SERVICE"

	// IdentityProviderTypeAwsLambda is a IdentityProviderType enum value
	IdentityProviderTypeAwsLambda = "AWS_LAMBDA"
)

// IdentityProviderType_Values returns all elements of the IdentityProviderType enum
func IdentityProviderType_Values() []string {
	return []string{
		IdentityProviderTypeServiceManaged,
		IdentityProviderTypeApiGateway,
		IdentityProviderTypeAwsDirectoryService,
		IdentityProviderTypeAwsLambda,
	}
}

const (
	// MapTypeFile is a MapType enum value
	MapTypeFile = "FILE"

	// MapTypeDirectory is a MapType enum value
	MapTypeDirectory = "DIRECTORY"
)

// MapType_Values returns all elements of the MapType enum
func MapType_Values() []string {
	return []string{
		MapTypeFile,
		MapTypeDirectory,
	}
}

const (
	// MdnResponseSync is a MdnResponse enum value
	MdnResponseSync = "SYNC"

	// MdnResponseNone is a MdnResponse enum value
	MdnResponseNone = "NONE"
)

// MdnResponse_Values returns all elements of the MdnResponse enum
func MdnResponse_Values() []string {
	return []string{
		MdnResponseSync,
		MdnResponseNone,
	}
}

const (
	// MdnSigningAlgSha256 is a MdnSigningAlg enum value
	MdnSigningAlgSha256 = "SHA256"

	// MdnSigningAlgSha384 is a MdnSigningAlg enum value
	MdnSigningAlgSha384 = "SHA384"

	// MdnSigningAlgSha512 is a MdnSigningAlg enum value
	MdnSigningAlgSha512 = "SHA512"

	// MdnSigningAlgSha1 is a MdnSigningAlg enum value
	MdnSigningAlgSha1 = "SHA1"

	// MdnSigningAlgNone is a MdnSigningAlg enum value
	MdnSigningAlgNone = "NONE"

	// MdnSigningAlgDefault is a MdnSigningAlg enum value
	MdnSigningAlgDefault = "DEFAULT"
)

// MdnSigningAlg_Values returns all elements of the MdnSigningAlg enum
func MdnSigningAlg_Values() []string {
	return []string{
		MdnSigningAlgSha256,
		MdnSigningAlgSha384,
		MdnSigningAlgSha512,
		MdnSigningAlgSha1,
		MdnSigningAlgNone,
		MdnSigningAlgDefault,
	}
}

const (
	// OverwriteExistingTrue is a OverwriteExisting enum value
	OverwriteExistingTrue = "TRUE"

	// OverwriteExistingFalse is a OverwriteExisting enum value
	OverwriteExistingFalse = "FALSE"
)

// OverwriteExisting_Values returns all elements of the OverwriteExisting enum
func OverwriteExisting_Values() []string {
	return []string{
		OverwriteExistingTrue,
		OverwriteExistingFalse,
	}
}

const (
	// ProfileTypeLocal is a ProfileType enum value
	ProfileTypeLocal = "LOCAL"

	// ProfileTypePartner is a ProfileType enum value
	ProfileTypePartner = "PARTNER"
)

// ProfileType_Values returns all elements of the ProfileType enum
func ProfileType_Values() []string {
	return []string{
		ProfileTypeLocal,
		ProfileTypePartner,
	}
}

const (
	// ProtocolSftp is a Protocol enum value
	ProtocolSftp = "SFTP"

	// ProtocolFtp is a Protocol enum value
	ProtocolFtp = "FTP"

	// ProtocolFtps is a Protocol enum value
	ProtocolFtps = "FTPS"

	// ProtocolAs2 is a Protocol enum value
	ProtocolAs2 = "AS2"
)

// Protocol_Values returns all elements of the Protocol enum
func Protocol_Values() []string {
	return []string{
		ProtocolSftp,
		ProtocolFtp,
		ProtocolFtps,
		ProtocolAs2,
	}
}

const (
	// SecurityPolicyProtocolSftp is a SecurityPolicyProtocol enum value
	SecurityPolicyProtocolSftp = "SFTP"

	// SecurityPolicyProtocolFtps is a SecurityPolicyProtocol enum value
	SecurityPolicyProtocolFtps = "FTPS"
)

// SecurityPolicyProtocol_Values returns all elements of the SecurityPolicyProtocol enum
func SecurityPolicyProtocol_Values() []string {
	return []string{
		SecurityPolicyProtocolSftp,
		SecurityPolicyProtocolFtps,
	}
}

const (
	// SecurityPolicyResourceTypeServer is a SecurityPolicyResourceType enum value
	SecurityPolicyResourceTypeServer = "SERVER"

	// SecurityPolicyResourceTypeConnector is a SecurityPolicyResourceType enum value
	SecurityPolicyResourceTypeConnector = "CONNECTOR"
)

// SecurityPolicyResourceType_Values returns all elements of the SecurityPolicyResourceType enum
func SecurityPolicyResourceType_Values() []string {
	return []string{
		SecurityPolicyResourceTypeServer,
		SecurityPolicyResourceTypeConnector,
	}
}

const (
	// SetStatOptionDefault is a SetStatOption enum value
	SetStatOptionDefault = "DEFAULT"

	// SetStatOptionEnableNoOp is a SetStatOption enum value
	SetStatOptionEnableNoOp = "ENABLE_NO_OP"
)

// SetStatOption_Values returns all elements of the SetStatOption enum
func SetStatOption_Values() []string {
	return []string{
		SetStatOptionDefault,
		SetStatOptionEnableNoOp,
	}
}

const (
	// SftpAuthenticationMethodsPassword is a SftpAuthenticationMethods enum value
	SftpAuthenticationMethodsPassword = "PASSWORD"

	// SftpAuthenticationMethodsPublicKey is a SftpAuthenticationMethods enum value
	SftpAuthenticationMethodsPublicKey = "PUBLIC_KEY"

	// SftpAuthenticationMethodsPublicKeyOrPassword is a SftpAuthenticationMethods enum value
	SftpAuthenticationMethodsPublicKeyOrPassword = "PUBLIC_KEY_OR_PASSWORD"

	// SftpAuthenticationMethodsPublicKeyAndPassword is a SftpAuthenticationMethods enum value
	SftpAuthenticationMethodsPublicKeyAndPassword = "PUBLIC_KEY_AND_PASSWORD"
)

// SftpAuthenticationMethods_Values returns all elements of the SftpAuthenticationMethods enum
func SftpAuthenticationMethods_Values() []string {
	return []string{
		SftpAuthenticationMethodsPassword,
		SftpAuthenticationMethodsPublicKey,
		SftpAuthenticationMethodsPublicKeyOrPassword,
		SftpAuthenticationMethodsPublicKeyAndPassword,
	}
}

const (
	// SigningAlgSha256 is a SigningAlg enum value
	SigningAlgSha256 = "SHA256"

	// SigningAlgSha384 is a SigningAlg enum value
	SigningAlgSha384 = "SHA384"

	// SigningAlgSha512 is a SigningAlg enum value
	SigningAlgSha512 = "SHA512"

	// SigningAlgSha1 is a SigningAlg enum value
	SigningAlgSha1 = "SHA1"

	// SigningAlgNone is a SigningAlg enum value
	SigningAlgNone = "NONE"
)

// SigningAlg_Values returns all elements of the SigningAlg enum
func SigningAlg_Values() []string {
	return []string{
		SigningAlgSha256,
		SigningAlgSha384,
		SigningAlgSha512,
		SigningAlgSha1,
		SigningAlgNone,
	}
}

// Describes the condition of a file transfer protocol-enabled server with respect
// to its ability to perform file operations. There are six possible states:
// OFFLINE, ONLINE, STARTING, STOPPING, START_FAILED, and STOP_FAILED.
//
// OFFLINE indicates that the server exists, but that it is not available for
// file operations. ONLINE indicates that the server is available to perform
// file operations. STARTING indicates that the server's was instantiated, but
// the server is not yet available to perform file operations. Under normal
// conditions, it can take a couple of minutes for the server to be completely
// operational. Both START_FAILED and STOP_FAILED are error conditions.
const (
	// StateOffline is a State enum value
	StateOffline = "OFFLINE"

	// StateOnline is a State enum value
	StateOnline = "ONLINE"

	// StateStarting is a State enum value
	StateStarting = "STARTING"

	// StateStopping is a State enum value
	StateStopping = "STOPPING"

	// StateStartFailed is a State enum value
	StateStartFailed = "START_FAILED"

	// StateStopFailed is a State enum value
	StateStopFailed = "STOP_FAILED"
)

// State_Values returns all elements of the State enum
func State_Values() []string {
	return []string{
		StateOffline,
		StateOnline,
		StateStarting,
		StateStopping,
		StateStartFailed,
		StateStopFailed,
	}
}

const (
	// TlsSessionResumptionModeDisabled is a TlsSessionResumptionMode enum value
	TlsSessionResumptionModeDisabled = "DISABLED"

	// TlsSessionResumptionModeEnabled is a TlsSessionResumptionMode enum value
	TlsSessionResumptionModeEnabled = "ENABLED"

	// TlsSessionResumptionModeEnforced is a TlsSessionResumptionMode enum value
	TlsSessionResumptionModeEnforced = "ENFORCED"
)

// TlsSessionResumptionMode_Values returns all elements of the TlsSessionResumptionMode enum
func TlsSessionResumptionMode_Values() []string {
	return []string{
		TlsSessionResumptionModeDisabled,
		TlsSessionResumptionModeEnabled,
		TlsSessionResumptionModeEnforced,
	}
}

const (
	// WorkflowStepTypeCopy is a WorkflowStepType enum value
	WorkflowStepTypeCopy = "COPY"

	// WorkflowStepTypeCustom is a WorkflowStepType enum value
	WorkflowStepTypeCustom = "CUSTOM"

	// WorkflowStepTypeTag is a WorkflowStepType enum value
	WorkflowStepTypeTag = "TAG"

	// WorkflowStepTypeDelete is a WorkflowStepType enum value
	WorkflowStepTypeDelete = "DELETE"

	// WorkflowStepTypeDecrypt is a WorkflowStepType enum value
	WorkflowStepTypeDecrypt = "DECRYPT"
)

// WorkflowStepType_Values returns all elements of the WorkflowStepType enum
func WorkflowStepType_Values() []string {
	return []string{
		WorkflowStepTypeCopy,
		WorkflowStepTypeCustom,
		WorkflowStepTypeTag,
		WorkflowStepTypeDelete,
		WorkflowStepTypeDecrypt,
	}
}
