404 Not Found


nginx
beegazpacho.com - GrazzMean
Uname: Linux in-mum-web1557.main-hosting.eu 5.14.0-611.42.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 24 05:30:20 EDT 2026 x86_64
Software: LiteSpeed
PHP version: 8.2.30 [ PHP INFO ] PHP os: Linux
Server Ip: 88.222.243.12
Your Ip: 216.73.216.168
User: u848900432 (848900432) | Group: o51372345 (1051372345)
Safe Mode: OFF
Disable Function:
NONE

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

package workmail

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 opAssociateDelegateToResource = "AssociateDelegateToResource"

// AssociateDelegateToResourceRequest generates a "aws/request.Request" representing the
// client's request for the AssociateDelegateToResource 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 AssociateDelegateToResource for more information on using the AssociateDelegateToResource
// 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 AssociateDelegateToResourceRequest method.
//	req, resp := client.AssociateDelegateToResourceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/AssociateDelegateToResource
func (c *WorkMail) AssociateDelegateToResourceRequest(input *AssociateDelegateToResourceInput) (req *request.Request, output *AssociateDelegateToResourceOutput) {
	op := &request.Operation{
		Name:       opAssociateDelegateToResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AssociateDelegateToResourceInput{}
	}

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

// AssociateDelegateToResource API operation for Amazon WorkMail.
//
// Adds a member (user or group) to the resource's set of delegates.
//
// 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 Amazon WorkMail's
// API operation AssociateDelegateToResource for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/AssociateDelegateToResource
func (c *WorkMail) AssociateDelegateToResource(input *AssociateDelegateToResourceInput) (*AssociateDelegateToResourceOutput, error) {
	req, out := c.AssociateDelegateToResourceRequest(input)
	return out, req.Send()
}

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

const opAssociateMemberToGroup = "AssociateMemberToGroup"

// AssociateMemberToGroupRequest generates a "aws/request.Request" representing the
// client's request for the AssociateMemberToGroup 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 AssociateMemberToGroup for more information on using the AssociateMemberToGroup
// 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 AssociateMemberToGroupRequest method.
//	req, resp := client.AssociateMemberToGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/AssociateMemberToGroup
func (c *WorkMail) AssociateMemberToGroupRequest(input *AssociateMemberToGroupInput) (req *request.Request, output *AssociateMemberToGroupOutput) {
	op := &request.Operation{
		Name:       opAssociateMemberToGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AssociateMemberToGroupInput{}
	}

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

// AssociateMemberToGroup API operation for Amazon WorkMail.
//
// Adds a member (user or group) to the group's set.
//
// 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 Amazon WorkMail's
// API operation AssociateMemberToGroup for usage and error information.
//
// Returned Error Types:
//
//   - DirectoryServiceAuthenticationFailedException
//     The directory service doesn't recognize the credentials supplied by WorkMail.
//
//   - DirectoryUnavailableException
//     The directory is unavailable. It might be located in another Region or deleted.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/AssociateMemberToGroup
func (c *WorkMail) AssociateMemberToGroup(input *AssociateMemberToGroupInput) (*AssociateMemberToGroupOutput, error) {
	req, out := c.AssociateMemberToGroupRequest(input)
	return out, req.Send()
}

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

const opAssumeImpersonationRole = "AssumeImpersonationRole"

// AssumeImpersonationRoleRequest generates a "aws/request.Request" representing the
// client's request for the AssumeImpersonationRole 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 AssumeImpersonationRole for more information on using the AssumeImpersonationRole
// 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 AssumeImpersonationRoleRequest method.
//	req, resp := client.AssumeImpersonationRoleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/AssumeImpersonationRole
func (c *WorkMail) AssumeImpersonationRoleRequest(input *AssumeImpersonationRoleInput) (req *request.Request, output *AssumeImpersonationRoleOutput) {
	op := &request.Operation{
		Name:       opAssumeImpersonationRole,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AssumeImpersonationRoleInput{}
	}

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

// AssumeImpersonationRole API operation for Amazon WorkMail.
//
// Assumes an impersonation role for the given WorkMail organization. This method
// returns an authentication token you can use to make impersonated calls.
//
// 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 Amazon WorkMail's
// API operation AssumeImpersonationRole for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - ResourceNotFoundException
//     The resource cannot be found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/AssumeImpersonationRole
func (c *WorkMail) AssumeImpersonationRole(input *AssumeImpersonationRoleInput) (*AssumeImpersonationRoleOutput, error) {
	req, out := c.AssumeImpersonationRoleRequest(input)
	return out, req.Send()
}

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

const opCancelMailboxExportJob = "CancelMailboxExportJob"

// CancelMailboxExportJobRequest generates a "aws/request.Request" representing the
// client's request for the CancelMailboxExportJob 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 CancelMailboxExportJob for more information on using the CancelMailboxExportJob
// 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 CancelMailboxExportJobRequest method.
//	req, resp := client.CancelMailboxExportJobRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CancelMailboxExportJob
func (c *WorkMail) CancelMailboxExportJobRequest(input *CancelMailboxExportJobInput) (req *request.Request, output *CancelMailboxExportJobOutput) {
	op := &request.Operation{
		Name:       opCancelMailboxExportJob,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CancelMailboxExportJobInput{}
	}

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

// CancelMailboxExportJob API operation for Amazon WorkMail.
//
// Cancels a mailbox export job.
//
// If the mailbox export job is near completion, it might not be possible to
// cancel it.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkMail's
// API operation CancelMailboxExportJob for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CancelMailboxExportJob
func (c *WorkMail) CancelMailboxExportJob(input *CancelMailboxExportJobInput) (*CancelMailboxExportJobOutput, error) {
	req, out := c.CancelMailboxExportJobRequest(input)
	return out, req.Send()
}

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

const opCreateAlias = "CreateAlias"

// CreateAliasRequest generates a "aws/request.Request" representing the
// client's request for the CreateAlias 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 CreateAlias for more information on using the CreateAlias
// 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 CreateAliasRequest method.
//	req, resp := client.CreateAliasRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateAlias
func (c *WorkMail) CreateAliasRequest(input *CreateAliasInput) (req *request.Request, output *CreateAliasOutput) {
	op := &request.Operation{
		Name:       opCreateAlias,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateAliasInput{}
	}

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

// CreateAlias API operation for Amazon WorkMail.
//
// Adds an alias to the set of a given member (user or group) of WorkMail.
//
// 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 Amazon WorkMail's
// API operation CreateAlias for usage and error information.
//
// Returned Error Types:
//
//   - EmailAddressInUseException
//     The email address that you're trying to assign is already created for a different
//     user, group, or resource.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - MailDomainNotFoundException
//     The domain specified is not found in your organization.
//
//   - MailDomainStateException
//     After a domain has been added to the organization, it must be verified. The
//     domain is not yet verified.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - LimitExceededException
//     The request exceeds the limit of the resource.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateAlias
func (c *WorkMail) CreateAlias(input *CreateAliasInput) (*CreateAliasOutput, error) {
	req, out := c.CreateAliasRequest(input)
	return out, req.Send()
}

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

const opCreateAvailabilityConfiguration = "CreateAvailabilityConfiguration"

// CreateAvailabilityConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the CreateAvailabilityConfiguration 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 CreateAvailabilityConfiguration for more information on using the CreateAvailabilityConfiguration
// 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 CreateAvailabilityConfigurationRequest method.
//	req, resp := client.CreateAvailabilityConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateAvailabilityConfiguration
func (c *WorkMail) CreateAvailabilityConfigurationRequest(input *CreateAvailabilityConfigurationInput) (req *request.Request, output *CreateAvailabilityConfigurationOutput) {
	op := &request.Operation{
		Name:       opCreateAvailabilityConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateAvailabilityConfigurationInput{}
	}

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

// CreateAvailabilityConfiguration API operation for Amazon WorkMail.
//
// Creates an AvailabilityConfiguration for the given WorkMail organization
// and domain.
//
// 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 Amazon WorkMail's
// API operation CreateAvailabilityConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - NameAvailabilityException
//     The user, group, or resource name isn't unique in WorkMail.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - LimitExceededException
//     The request exceeds the limit of the resource.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateAvailabilityConfiguration
func (c *WorkMail) CreateAvailabilityConfiguration(input *CreateAvailabilityConfigurationInput) (*CreateAvailabilityConfigurationOutput, error) {
	req, out := c.CreateAvailabilityConfigurationRequest(input)
	return out, req.Send()
}

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

const opCreateGroup = "CreateGroup"

// CreateGroupRequest generates a "aws/request.Request" representing the
// client's request for the CreateGroup 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 CreateGroup for more information on using the CreateGroup
// 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 CreateGroupRequest method.
//	req, resp := client.CreateGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateGroup
func (c *WorkMail) CreateGroupRequest(input *CreateGroupInput) (req *request.Request, output *CreateGroupOutput) {
	op := &request.Operation{
		Name:       opCreateGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateGroupInput{}
	}

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

// CreateGroup API operation for Amazon WorkMail.
//
// Creates a group that can be used in WorkMail by calling the RegisterToWorkMail
// 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 Amazon WorkMail's
// API operation CreateGroup for usage and error information.
//
// Returned Error Types:
//
//   - DirectoryServiceAuthenticationFailedException
//     The directory service doesn't recognize the credentials supplied by WorkMail.
//
//   - DirectoryUnavailableException
//     The directory is unavailable. It might be located in another Region or deleted.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - NameAvailabilityException
//     The user, group, or resource name isn't unique in WorkMail.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - ReservedNameException
//     This user, group, or resource name is not allowed in WorkMail.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateGroup
func (c *WorkMail) CreateGroup(input *CreateGroupInput) (*CreateGroupOutput, error) {
	req, out := c.CreateGroupRequest(input)
	return out, req.Send()
}

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

const opCreateImpersonationRole = "CreateImpersonationRole"

// CreateImpersonationRoleRequest generates a "aws/request.Request" representing the
// client's request for the CreateImpersonationRole 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 CreateImpersonationRole for more information on using the CreateImpersonationRole
// 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 CreateImpersonationRoleRequest method.
//	req, resp := client.CreateImpersonationRoleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateImpersonationRole
func (c *WorkMail) CreateImpersonationRoleRequest(input *CreateImpersonationRoleInput) (req *request.Request, output *CreateImpersonationRoleOutput) {
	op := &request.Operation{
		Name:       opCreateImpersonationRole,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateImpersonationRoleInput{}
	}

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

// CreateImpersonationRole API operation for Amazon WorkMail.
//
// Creates an impersonation role for the given WorkMail organization.
//
// Idempotency ensures that an API request completes no more than one time.
// With an idempotent request, if the original request completes successfully,
// any subsequent retries also complete successfully without performing any
// further actions.
//
// 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 Amazon WorkMail's
// API operation CreateImpersonationRole for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - LimitExceededException
//     The request exceeds the limit of the resource.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateImpersonationRole
func (c *WorkMail) CreateImpersonationRole(input *CreateImpersonationRoleInput) (*CreateImpersonationRoleOutput, error) {
	req, out := c.CreateImpersonationRoleRequest(input)
	return out, req.Send()
}

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

const opCreateMobileDeviceAccessRule = "CreateMobileDeviceAccessRule"

// CreateMobileDeviceAccessRuleRequest generates a "aws/request.Request" representing the
// client's request for the CreateMobileDeviceAccessRule 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 CreateMobileDeviceAccessRule for more information on using the CreateMobileDeviceAccessRule
// 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 CreateMobileDeviceAccessRuleRequest method.
//	req, resp := client.CreateMobileDeviceAccessRuleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateMobileDeviceAccessRule
func (c *WorkMail) CreateMobileDeviceAccessRuleRequest(input *CreateMobileDeviceAccessRuleInput) (req *request.Request, output *CreateMobileDeviceAccessRuleOutput) {
	op := &request.Operation{
		Name:       opCreateMobileDeviceAccessRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateMobileDeviceAccessRuleInput{}
	}

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

// CreateMobileDeviceAccessRule API operation for Amazon WorkMail.
//
// Creates a new mobile device access rule for the specified WorkMail organization.
//
// 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 Amazon WorkMail's
// API operation CreateMobileDeviceAccessRule for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - LimitExceededException
//     The request exceeds the limit of the resource.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateMobileDeviceAccessRule
func (c *WorkMail) CreateMobileDeviceAccessRule(input *CreateMobileDeviceAccessRuleInput) (*CreateMobileDeviceAccessRuleOutput, error) {
	req, out := c.CreateMobileDeviceAccessRuleRequest(input)
	return out, req.Send()
}

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

const opCreateOrganization = "CreateOrganization"

// CreateOrganizationRequest generates a "aws/request.Request" representing the
// client's request for the CreateOrganization 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 CreateOrganization for more information on using the CreateOrganization
// 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 CreateOrganizationRequest method.
//	req, resp := client.CreateOrganizationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateOrganization
func (c *WorkMail) CreateOrganizationRequest(input *CreateOrganizationInput) (req *request.Request, output *CreateOrganizationOutput) {
	op := &request.Operation{
		Name:       opCreateOrganization,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateOrganizationInput{}
	}

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

// CreateOrganization API operation for Amazon WorkMail.
//
// Creates a new WorkMail organization. Optionally, you can choose to associate
// an existing AWS Directory Service directory with your organization. If an
// AWS Directory Service directory ID is specified, the organization alias must
// match the directory alias. If you choose not to associate an existing directory
// with your organization, then we create a new WorkMail directory for you.
// For more information, see Adding an organization (https://docs.aws.amazon.com/workmail/latest/adminguide/add_new_organization.html)
// in the WorkMail Administrator Guide.
//
// You can associate multiple email domains with an organization, then choose
// your default email domain from the WorkMail console. You can also associate
// a domain that is managed in an Amazon Route 53 public hosted zone. For more
// information, see Adding a domain (https://docs.aws.amazon.com/workmail/latest/adminguide/add_domain.html)
// and Choosing the default domain (https://docs.aws.amazon.com/workmail/latest/adminguide/default_domain.html)
// in the WorkMail Administrator Guide.
//
// Optionally, you can use a customer managed key from AWS Key Management Service
// (AWS KMS) to encrypt email for your organization. If you don't associate
// an AWS KMS key, WorkMail creates a default, AWS managed key for you.
//
// 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 Amazon WorkMail's
// API operation CreateOrganization for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - DirectoryInUseException
//     The directory is already in use by another WorkMail organization in the same
//     account and Region.
//
//   - DirectoryUnavailableException
//     The directory is unavailable. It might be located in another Region or deleted.
//
//   - LimitExceededException
//     The request exceeds the limit of the resource.
//
//   - NameAvailabilityException
//     The user, group, or resource name isn't unique in WorkMail.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateOrganization
func (c *WorkMail) CreateOrganization(input *CreateOrganizationInput) (*CreateOrganizationOutput, error) {
	req, out := c.CreateOrganizationRequest(input)
	return out, req.Send()
}

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

const opCreateResource = "CreateResource"

// CreateResourceRequest generates a "aws/request.Request" representing the
// client's request for the CreateResource 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 CreateResource for more information on using the CreateResource
// 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 CreateResourceRequest method.
//	req, resp := client.CreateResourceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateResource
func (c *WorkMail) CreateResourceRequest(input *CreateResourceInput) (req *request.Request, output *CreateResourceOutput) {
	op := &request.Operation{
		Name:       opCreateResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateResourceInput{}
	}

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

// CreateResource API operation for Amazon WorkMail.
//
// Creates a new WorkMail resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkMail's
// API operation CreateResource for usage and error information.
//
// Returned Error Types:
//
//   - DirectoryServiceAuthenticationFailedException
//     The directory service doesn't recognize the credentials supplied by WorkMail.
//
//   - DirectoryUnavailableException
//     The directory is unavailable. It might be located in another Region or deleted.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - NameAvailabilityException
//     The user, group, or resource name isn't unique in WorkMail.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - ReservedNameException
//     This user, group, or resource name is not allowed in WorkMail.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateResource
func (c *WorkMail) CreateResource(input *CreateResourceInput) (*CreateResourceOutput, error) {
	req, out := c.CreateResourceRequest(input)
	return out, req.Send()
}

// CreateResourceWithContext is the same as CreateResource with the addition of
// the ability to pass a context and additional request options.
//
// See CreateResource 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 *WorkMail) CreateResourceWithContext(ctx aws.Context, input *CreateResourceInput, opts ...request.Option) (*CreateResourceOutput, error) {
	req, out := c.CreateResourceRequest(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/workmail-2017-10-01/CreateUser
func (c *WorkMail) 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 Amazon WorkMail.
//
// Creates a user who can be used in WorkMail by calling the RegisterToWorkMail
// 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 Amazon WorkMail's
// API operation CreateUser for usage and error information.
//
// Returned Error Types:
//
//   - DirectoryServiceAuthenticationFailedException
//     The directory service doesn't recognize the credentials supplied by WorkMail.
//
//   - DirectoryUnavailableException
//     The directory is unavailable. It might be located in another Region or deleted.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - InvalidPasswordException
//     The supplied password doesn't match the minimum security constraints, such
//     as length or use of special characters.
//
//   - NameAvailabilityException
//     The user, group, or resource name isn't unique in WorkMail.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - ReservedNameException
//     This user, group, or resource name is not allowed in WorkMail.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/CreateUser
func (c *WorkMail) 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 *WorkMail) 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 opDeleteAccessControlRule = "DeleteAccessControlRule"

// DeleteAccessControlRuleRequest generates a "aws/request.Request" representing the
// client's request for the DeleteAccessControlRule 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 DeleteAccessControlRule for more information on using the DeleteAccessControlRule
// 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 DeleteAccessControlRuleRequest method.
//	req, resp := client.DeleteAccessControlRuleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteAccessControlRule
func (c *WorkMail) DeleteAccessControlRuleRequest(input *DeleteAccessControlRuleInput) (req *request.Request, output *DeleteAccessControlRuleOutput) {
	op := &request.Operation{
		Name:       opDeleteAccessControlRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteAccessControlRuleInput{}
	}

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

// DeleteAccessControlRule API operation for Amazon WorkMail.
//
// Deletes an access control rule for the specified WorkMail organization.
//
// Deleting already deleted and non-existing rules does not produce an error.
// In those cases, the service sends back an HTTP 200 response with an empty
// HTTP body.
//
// 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 Amazon WorkMail's
// API operation DeleteAccessControlRule for usage and error information.
//
// Returned Error Types:
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteAccessControlRule
func (c *WorkMail) DeleteAccessControlRule(input *DeleteAccessControlRuleInput) (*DeleteAccessControlRuleOutput, error) {
	req, out := c.DeleteAccessControlRuleRequest(input)
	return out, req.Send()
}

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

const opDeleteAlias = "DeleteAlias"

// DeleteAliasRequest generates a "aws/request.Request" representing the
// client's request for the DeleteAlias 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 DeleteAlias for more information on using the DeleteAlias
// 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 DeleteAliasRequest method.
//	req, resp := client.DeleteAliasRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteAlias
func (c *WorkMail) DeleteAliasRequest(input *DeleteAliasInput) (req *request.Request, output *DeleteAliasOutput) {
	op := &request.Operation{
		Name:       opDeleteAlias,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteAliasInput{}
	}

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

// DeleteAlias API operation for Amazon WorkMail.
//
// Remove one or more specified aliases from a set of aliases for a given 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 Amazon WorkMail's
// API operation DeleteAlias for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteAlias
func (c *WorkMail) DeleteAlias(input *DeleteAliasInput) (*DeleteAliasOutput, error) {
	req, out := c.DeleteAliasRequest(input)
	return out, req.Send()
}

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

const opDeleteAvailabilityConfiguration = "DeleteAvailabilityConfiguration"

// DeleteAvailabilityConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the DeleteAvailabilityConfiguration 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 DeleteAvailabilityConfiguration for more information on using the DeleteAvailabilityConfiguration
// 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 DeleteAvailabilityConfigurationRequest method.
//	req, resp := client.DeleteAvailabilityConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteAvailabilityConfiguration
func (c *WorkMail) DeleteAvailabilityConfigurationRequest(input *DeleteAvailabilityConfigurationInput) (req *request.Request, output *DeleteAvailabilityConfigurationOutput) {
	op := &request.Operation{
		Name:       opDeleteAvailabilityConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteAvailabilityConfigurationInput{}
	}

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

// DeleteAvailabilityConfiguration API operation for Amazon WorkMail.
//
// Deletes the AvailabilityConfiguration for the given WorkMail organization
// and domain.
//
// 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 Amazon WorkMail's
// API operation DeleteAvailabilityConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteAvailabilityConfiguration
func (c *WorkMail) DeleteAvailabilityConfiguration(input *DeleteAvailabilityConfigurationInput) (*DeleteAvailabilityConfigurationOutput, error) {
	req, out := c.DeleteAvailabilityConfigurationRequest(input)
	return out, req.Send()
}

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

const opDeleteEmailMonitoringConfiguration = "DeleteEmailMonitoringConfiguration"

// DeleteEmailMonitoringConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the DeleteEmailMonitoringConfiguration 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 DeleteEmailMonitoringConfiguration for more information on using the DeleteEmailMonitoringConfiguration
// 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 DeleteEmailMonitoringConfigurationRequest method.
//	req, resp := client.DeleteEmailMonitoringConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteEmailMonitoringConfiguration
func (c *WorkMail) DeleteEmailMonitoringConfigurationRequest(input *DeleteEmailMonitoringConfigurationInput) (req *request.Request, output *DeleteEmailMonitoringConfigurationOutput) {
	op := &request.Operation{
		Name:       opDeleteEmailMonitoringConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteEmailMonitoringConfigurationInput{}
	}

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

// DeleteEmailMonitoringConfiguration API operation for Amazon WorkMail.
//
// Deletes the email monitoring configuration for a specified organization.
//
// 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 Amazon WorkMail's
// API operation DeleteEmailMonitoringConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteEmailMonitoringConfiguration
func (c *WorkMail) DeleteEmailMonitoringConfiguration(input *DeleteEmailMonitoringConfigurationInput) (*DeleteEmailMonitoringConfigurationOutput, error) {
	req, out := c.DeleteEmailMonitoringConfigurationRequest(input)
	return out, req.Send()
}

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

const opDeleteGroup = "DeleteGroup"

// DeleteGroupRequest generates a "aws/request.Request" representing the
// client's request for the DeleteGroup 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 DeleteGroup for more information on using the DeleteGroup
// 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 DeleteGroupRequest method.
//	req, resp := client.DeleteGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteGroup
func (c *WorkMail) DeleteGroupRequest(input *DeleteGroupInput) (req *request.Request, output *DeleteGroupOutput) {
	op := &request.Operation{
		Name:       opDeleteGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteGroupInput{}
	}

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

// DeleteGroup API operation for Amazon WorkMail.
//
// Deletes a group from WorkMail.
//
// 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 Amazon WorkMail's
// API operation DeleteGroup for usage and error information.
//
// Returned Error Types:
//
//   - DirectoryServiceAuthenticationFailedException
//     The directory service doesn't recognize the credentials supplied by WorkMail.
//
//   - DirectoryUnavailableException
//     The directory is unavailable. It might be located in another Region or deleted.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteGroup
func (c *WorkMail) DeleteGroup(input *DeleteGroupInput) (*DeleteGroupOutput, error) {
	req, out := c.DeleteGroupRequest(input)
	return out, req.Send()
}

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

const opDeleteImpersonationRole = "DeleteImpersonationRole"

// DeleteImpersonationRoleRequest generates a "aws/request.Request" representing the
// client's request for the DeleteImpersonationRole 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 DeleteImpersonationRole for more information on using the DeleteImpersonationRole
// 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 DeleteImpersonationRoleRequest method.
//	req, resp := client.DeleteImpersonationRoleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteImpersonationRole
func (c *WorkMail) DeleteImpersonationRoleRequest(input *DeleteImpersonationRoleInput) (req *request.Request, output *DeleteImpersonationRoleOutput) {
	op := &request.Operation{
		Name:       opDeleteImpersonationRole,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteImpersonationRoleInput{}
	}

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

// DeleteImpersonationRole API operation for Amazon WorkMail.
//
// Deletes an impersonation role for the given WorkMail organization.
//
// 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 Amazon WorkMail's
// API operation DeleteImpersonationRole for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteImpersonationRole
func (c *WorkMail) DeleteImpersonationRole(input *DeleteImpersonationRoleInput) (*DeleteImpersonationRoleOutput, error) {
	req, out := c.DeleteImpersonationRoleRequest(input)
	return out, req.Send()
}

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

const opDeleteMailboxPermissions = "DeleteMailboxPermissions"

// DeleteMailboxPermissionsRequest generates a "aws/request.Request" representing the
// client's request for the DeleteMailboxPermissions 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 DeleteMailboxPermissions for more information on using the DeleteMailboxPermissions
// 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 DeleteMailboxPermissionsRequest method.
//	req, resp := client.DeleteMailboxPermissionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteMailboxPermissions
func (c *WorkMail) DeleteMailboxPermissionsRequest(input *DeleteMailboxPermissionsInput) (req *request.Request, output *DeleteMailboxPermissionsOutput) {
	op := &request.Operation{
		Name:       opDeleteMailboxPermissions,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteMailboxPermissionsInput{}
	}

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

// DeleteMailboxPermissions API operation for Amazon WorkMail.
//
// Deletes permissions granted to a member (user or group).
//
// 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 Amazon WorkMail's
// API operation DeleteMailboxPermissions for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteMailboxPermissions
func (c *WorkMail) DeleteMailboxPermissions(input *DeleteMailboxPermissionsInput) (*DeleteMailboxPermissionsOutput, error) {
	req, out := c.DeleteMailboxPermissionsRequest(input)
	return out, req.Send()
}

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

const opDeleteMobileDeviceAccessOverride = "DeleteMobileDeviceAccessOverride"

// DeleteMobileDeviceAccessOverrideRequest generates a "aws/request.Request" representing the
// client's request for the DeleteMobileDeviceAccessOverride 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 DeleteMobileDeviceAccessOverride for more information on using the DeleteMobileDeviceAccessOverride
// 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 DeleteMobileDeviceAccessOverrideRequest method.
//	req, resp := client.DeleteMobileDeviceAccessOverrideRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteMobileDeviceAccessOverride
func (c *WorkMail) DeleteMobileDeviceAccessOverrideRequest(input *DeleteMobileDeviceAccessOverrideInput) (req *request.Request, output *DeleteMobileDeviceAccessOverrideOutput) {
	op := &request.Operation{
		Name:       opDeleteMobileDeviceAccessOverride,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteMobileDeviceAccessOverrideInput{}
	}

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

// DeleteMobileDeviceAccessOverride API operation for Amazon WorkMail.
//
// Deletes the mobile device access override for the given WorkMail organization,
// user, and device.
//
// Deleting already deleted and non-existing overrides does not produce an error.
// In those cases, the service sends back an HTTP 200 response with an empty
// HTTP body.
//
// 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 Amazon WorkMail's
// API operation DeleteMobileDeviceAccessOverride for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteMobileDeviceAccessOverride
func (c *WorkMail) DeleteMobileDeviceAccessOverride(input *DeleteMobileDeviceAccessOverrideInput) (*DeleteMobileDeviceAccessOverrideOutput, error) {
	req, out := c.DeleteMobileDeviceAccessOverrideRequest(input)
	return out, req.Send()
}

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

const opDeleteMobileDeviceAccessRule = "DeleteMobileDeviceAccessRule"

// DeleteMobileDeviceAccessRuleRequest generates a "aws/request.Request" representing the
// client's request for the DeleteMobileDeviceAccessRule 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 DeleteMobileDeviceAccessRule for more information on using the DeleteMobileDeviceAccessRule
// 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 DeleteMobileDeviceAccessRuleRequest method.
//	req, resp := client.DeleteMobileDeviceAccessRuleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteMobileDeviceAccessRule
func (c *WorkMail) DeleteMobileDeviceAccessRuleRequest(input *DeleteMobileDeviceAccessRuleInput) (req *request.Request, output *DeleteMobileDeviceAccessRuleOutput) {
	op := &request.Operation{
		Name:       opDeleteMobileDeviceAccessRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteMobileDeviceAccessRuleInput{}
	}

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

// DeleteMobileDeviceAccessRule API operation for Amazon WorkMail.
//
// Deletes a mobile device access rule for the specified WorkMail organization.
//
// Deleting already deleted and non-existing rules does not produce an error.
// In those cases, the service sends back an HTTP 200 response with an empty
// HTTP body.
//
// 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 Amazon WorkMail's
// API operation DeleteMobileDeviceAccessRule for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteMobileDeviceAccessRule
func (c *WorkMail) DeleteMobileDeviceAccessRule(input *DeleteMobileDeviceAccessRuleInput) (*DeleteMobileDeviceAccessRuleOutput, error) {
	req, out := c.DeleteMobileDeviceAccessRuleRequest(input)
	return out, req.Send()
}

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

const opDeleteOrganization = "DeleteOrganization"

// DeleteOrganizationRequest generates a "aws/request.Request" representing the
// client's request for the DeleteOrganization 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 DeleteOrganization for more information on using the DeleteOrganization
// 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 DeleteOrganizationRequest method.
//	req, resp := client.DeleteOrganizationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteOrganization
func (c *WorkMail) DeleteOrganizationRequest(input *DeleteOrganizationInput) (req *request.Request, output *DeleteOrganizationOutput) {
	op := &request.Operation{
		Name:       opDeleteOrganization,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteOrganizationInput{}
	}

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

// DeleteOrganization API operation for Amazon WorkMail.
//
// Deletes an WorkMail organization and all underlying AWS resources managed
// by WorkMail as part of the organization. You can choose whether to delete
// the associated directory. For more information, see Removing an organization
// (https://docs.aws.amazon.com/workmail/latest/adminguide/remove_organization.html)
// in the WorkMail Administrator Guide.
//
// 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 Amazon WorkMail's
// API operation DeleteOrganization for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteOrganization
func (c *WorkMail) DeleteOrganization(input *DeleteOrganizationInput) (*DeleteOrganizationOutput, error) {
	req, out := c.DeleteOrganizationRequest(input)
	return out, req.Send()
}

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

const opDeleteResource = "DeleteResource"

// DeleteResourceRequest generates a "aws/request.Request" representing the
// client's request for the DeleteResource 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 DeleteResource for more information on using the DeleteResource
// 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 DeleteResourceRequest method.
//	req, resp := client.DeleteResourceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteResource
func (c *WorkMail) DeleteResourceRequest(input *DeleteResourceInput) (req *request.Request, output *DeleteResourceOutput) {
	op := &request.Operation{
		Name:       opDeleteResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteResourceInput{}
	}

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

// DeleteResource API operation for Amazon WorkMail.
//
// Deletes the specified resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkMail's
// API operation DeleteResource for usage and error information.
//
// Returned Error Types:
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteResource
func (c *WorkMail) DeleteResource(input *DeleteResourceInput) (*DeleteResourceOutput, error) {
	req, out := c.DeleteResourceRequest(input)
	return out, req.Send()
}

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

const opDeleteRetentionPolicy = "DeleteRetentionPolicy"

// DeleteRetentionPolicyRequest generates a "aws/request.Request" representing the
// client's request for the DeleteRetentionPolicy 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 DeleteRetentionPolicy for more information on using the DeleteRetentionPolicy
// 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 DeleteRetentionPolicyRequest method.
//	req, resp := client.DeleteRetentionPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteRetentionPolicy
func (c *WorkMail) DeleteRetentionPolicyRequest(input *DeleteRetentionPolicyInput) (req *request.Request, output *DeleteRetentionPolicyOutput) {
	op := &request.Operation{
		Name:       opDeleteRetentionPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteRetentionPolicyInput{}
	}

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

// DeleteRetentionPolicy API operation for Amazon WorkMail.
//
// Deletes the specified retention policy from the specified organization.
//
// 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 Amazon WorkMail's
// API operation DeleteRetentionPolicy for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteRetentionPolicy
func (c *WorkMail) DeleteRetentionPolicy(input *DeleteRetentionPolicyInput) (*DeleteRetentionPolicyOutput, error) {
	req, out := c.DeleteRetentionPolicyRequest(input)
	return out, req.Send()
}

// DeleteRetentionPolicyWithContext is the same as DeleteRetentionPolicy with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteRetentionPolicy 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 *WorkMail) DeleteRetentionPolicyWithContext(ctx aws.Context, input *DeleteRetentionPolicyInput, opts ...request.Option) (*DeleteRetentionPolicyOutput, error) {
	req, out := c.DeleteRetentionPolicyRequest(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/workmail-2017-10-01/DeleteUser
func (c *WorkMail) 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 Amazon WorkMail.
//
// Deletes a user from WorkMail and all subsequent systems. Before you can delete
// a user, the user state must be DISABLED. Use the DescribeUser action to confirm
// the user state.
//
// Deleting a user is permanent and cannot be undone. WorkMail archives user
// mailboxes for 30 days before they are permanently removed.
//
// 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 Amazon WorkMail's
// API operation DeleteUser for usage and error information.
//
// Returned Error Types:
//
//   - DirectoryServiceAuthenticationFailedException
//     The directory service doesn't recognize the credentials supplied by WorkMail.
//
//   - DirectoryUnavailableException
//     The directory is unavailable. It might be located in another Region or deleted.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeleteUser
func (c *WorkMail) 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 *WorkMail) 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 opDeregisterFromWorkMail = "DeregisterFromWorkMail"

// DeregisterFromWorkMailRequest generates a "aws/request.Request" representing the
// client's request for the DeregisterFromWorkMail 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 DeregisterFromWorkMail for more information on using the DeregisterFromWorkMail
// 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 DeregisterFromWorkMailRequest method.
//	req, resp := client.DeregisterFromWorkMailRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeregisterFromWorkMail
func (c *WorkMail) DeregisterFromWorkMailRequest(input *DeregisterFromWorkMailInput) (req *request.Request, output *DeregisterFromWorkMailOutput) {
	op := &request.Operation{
		Name:       opDeregisterFromWorkMail,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeregisterFromWorkMailInput{}
	}

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

// DeregisterFromWorkMail API operation for Amazon WorkMail.
//
// Mark a user, group, or resource as no longer used in WorkMail. This action
// disassociates the mailbox and schedules it for clean-up. WorkMail keeps mailboxes
// for 30 days before they are permanently removed. The functionality in the
// console is Disable.
//
// 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 Amazon WorkMail's
// API operation DeregisterFromWorkMail for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeregisterFromWorkMail
func (c *WorkMail) DeregisterFromWorkMail(input *DeregisterFromWorkMailInput) (*DeregisterFromWorkMailOutput, error) {
	req, out := c.DeregisterFromWorkMailRequest(input)
	return out, req.Send()
}

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

const opDeregisterMailDomain = "DeregisterMailDomain"

// DeregisterMailDomainRequest generates a "aws/request.Request" representing the
// client's request for the DeregisterMailDomain 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 DeregisterMailDomain for more information on using the DeregisterMailDomain
// 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 DeregisterMailDomainRequest method.
//	req, resp := client.DeregisterMailDomainRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeregisterMailDomain
func (c *WorkMail) DeregisterMailDomainRequest(input *DeregisterMailDomainInput) (req *request.Request, output *DeregisterMailDomainOutput) {
	op := &request.Operation{
		Name:       opDeregisterMailDomain,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeregisterMailDomainInput{}
	}

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

// DeregisterMailDomain API operation for Amazon WorkMail.
//
// Removes a domain from WorkMail, stops email routing to WorkMail, and removes
// the authorization allowing WorkMail use. SES keeps the domain because other
// applications may use it. You must first remove any email address used by
// WorkMail entities before you remove the domain.
//
// 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 Amazon WorkMail's
// API operation DeregisterMailDomain for usage and error information.
//
// Returned Error Types:
//
//   - MailDomainInUseException
//     The domain you're trying to change is in use by another user or organization
//     in your account. See the error message for details.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - InvalidCustomSesConfigurationException
//     You SES configuration has customizations that WorkMail cannot save. The error
//     message lists the invalid setting. For examples of invalid settings, refer
//     to CreateReceiptRule (https://docs.aws.amazon.com/ses/latest/APIReference/API_CreateReceiptRule.html).
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DeregisterMailDomain
func (c *WorkMail) DeregisterMailDomain(input *DeregisterMailDomainInput) (*DeregisterMailDomainOutput, error) {
	req, out := c.DeregisterMailDomainRequest(input)
	return out, req.Send()
}

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

const opDescribeEmailMonitoringConfiguration = "DescribeEmailMonitoringConfiguration"

// DescribeEmailMonitoringConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the DescribeEmailMonitoringConfiguration 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 DescribeEmailMonitoringConfiguration for more information on using the DescribeEmailMonitoringConfiguration
// 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 DescribeEmailMonitoringConfigurationRequest method.
//	req, resp := client.DescribeEmailMonitoringConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeEmailMonitoringConfiguration
func (c *WorkMail) DescribeEmailMonitoringConfigurationRequest(input *DescribeEmailMonitoringConfigurationInput) (req *request.Request, output *DescribeEmailMonitoringConfigurationOutput) {
	op := &request.Operation{
		Name:       opDescribeEmailMonitoringConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeEmailMonitoringConfigurationInput{}
	}

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

// DescribeEmailMonitoringConfiguration API operation for Amazon WorkMail.
//
// Describes the current email monitoring configuration for a specified organization.
//
// 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 Amazon WorkMail's
// API operation DescribeEmailMonitoringConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The resource cannot be found.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeEmailMonitoringConfiguration
func (c *WorkMail) DescribeEmailMonitoringConfiguration(input *DescribeEmailMonitoringConfigurationInput) (*DescribeEmailMonitoringConfigurationOutput, error) {
	req, out := c.DescribeEmailMonitoringConfigurationRequest(input)
	return out, req.Send()
}

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

const opDescribeEntity = "DescribeEntity"

// DescribeEntityRequest generates a "aws/request.Request" representing the
// client's request for the DescribeEntity 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 DescribeEntity for more information on using the DescribeEntity
// 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 DescribeEntityRequest method.
//	req, resp := client.DescribeEntityRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeEntity
func (c *WorkMail) DescribeEntityRequest(input *DescribeEntityInput) (req *request.Request, output *DescribeEntityOutput) {
	op := &request.Operation{
		Name:       opDescribeEntity,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeEntityInput{}
	}

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

// DescribeEntity API operation for Amazon WorkMail.
//
// Returns basic details about an entity in WorkMail.
//
// 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 Amazon WorkMail's
// API operation DescribeEntity for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeEntity
func (c *WorkMail) DescribeEntity(input *DescribeEntityInput) (*DescribeEntityOutput, error) {
	req, out := c.DescribeEntityRequest(input)
	return out, req.Send()
}

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

const opDescribeGroup = "DescribeGroup"

// DescribeGroupRequest generates a "aws/request.Request" representing the
// client's request for the DescribeGroup 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 DescribeGroup for more information on using the DescribeGroup
// 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 DescribeGroupRequest method.
//	req, resp := client.DescribeGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeGroup
func (c *WorkMail) DescribeGroupRequest(input *DescribeGroupInput) (req *request.Request, output *DescribeGroupOutput) {
	op := &request.Operation{
		Name:       opDescribeGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeGroupInput{}
	}

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

// DescribeGroup API operation for Amazon WorkMail.
//
// Returns the data available for the group.
//
// 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 Amazon WorkMail's
// API operation DescribeGroup for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeGroup
func (c *WorkMail) DescribeGroup(input *DescribeGroupInput) (*DescribeGroupOutput, error) {
	req, out := c.DescribeGroupRequest(input)
	return out, req.Send()
}

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

const opDescribeInboundDmarcSettings = "DescribeInboundDmarcSettings"

// DescribeInboundDmarcSettingsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeInboundDmarcSettings 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 DescribeInboundDmarcSettings for more information on using the DescribeInboundDmarcSettings
// 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 DescribeInboundDmarcSettingsRequest method.
//	req, resp := client.DescribeInboundDmarcSettingsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeInboundDmarcSettings
func (c *WorkMail) DescribeInboundDmarcSettingsRequest(input *DescribeInboundDmarcSettingsInput) (req *request.Request, output *DescribeInboundDmarcSettingsOutput) {
	op := &request.Operation{
		Name:       opDescribeInboundDmarcSettings,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeInboundDmarcSettingsInput{}
	}

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

// DescribeInboundDmarcSettings API operation for Amazon WorkMail.
//
// Lists the settings in a DMARC policy for a specified organization.
//
// 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 Amazon WorkMail's
// API operation DescribeInboundDmarcSettings for usage and error information.
//
// Returned Error Types:
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeInboundDmarcSettings
func (c *WorkMail) DescribeInboundDmarcSettings(input *DescribeInboundDmarcSettingsInput) (*DescribeInboundDmarcSettingsOutput, error) {
	req, out := c.DescribeInboundDmarcSettingsRequest(input)
	return out, req.Send()
}

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

const opDescribeMailboxExportJob = "DescribeMailboxExportJob"

// DescribeMailboxExportJobRequest generates a "aws/request.Request" representing the
// client's request for the DescribeMailboxExportJob 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 DescribeMailboxExportJob for more information on using the DescribeMailboxExportJob
// 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 DescribeMailboxExportJobRequest method.
//	req, resp := client.DescribeMailboxExportJobRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeMailboxExportJob
func (c *WorkMail) DescribeMailboxExportJobRequest(input *DescribeMailboxExportJobInput) (req *request.Request, output *DescribeMailboxExportJobOutput) {
	op := &request.Operation{
		Name:       opDescribeMailboxExportJob,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeMailboxExportJobInput{}
	}

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

// DescribeMailboxExportJob API operation for Amazon WorkMail.
//
// Describes the current status of a mailbox export job.
//
// 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 Amazon WorkMail's
// API operation DescribeMailboxExportJob for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeMailboxExportJob
func (c *WorkMail) DescribeMailboxExportJob(input *DescribeMailboxExportJobInput) (*DescribeMailboxExportJobOutput, error) {
	req, out := c.DescribeMailboxExportJobRequest(input)
	return out, req.Send()
}

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

const opDescribeOrganization = "DescribeOrganization"

// DescribeOrganizationRequest generates a "aws/request.Request" representing the
// client's request for the DescribeOrganization 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 DescribeOrganization for more information on using the DescribeOrganization
// 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 DescribeOrganizationRequest method.
//	req, resp := client.DescribeOrganizationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeOrganization
func (c *WorkMail) DescribeOrganizationRequest(input *DescribeOrganizationInput) (req *request.Request, output *DescribeOrganizationOutput) {
	op := &request.Operation{
		Name:       opDescribeOrganization,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeOrganizationInput{}
	}

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

// DescribeOrganization API operation for Amazon WorkMail.
//
// Provides more information regarding a given organization based on its identifier.
//
// 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 Amazon WorkMail's
// API operation DescribeOrganization for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeOrganization
func (c *WorkMail) DescribeOrganization(input *DescribeOrganizationInput) (*DescribeOrganizationOutput, error) {
	req, out := c.DescribeOrganizationRequest(input)
	return out, req.Send()
}

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

const opDescribeResource = "DescribeResource"

// DescribeResourceRequest generates a "aws/request.Request" representing the
// client's request for the DescribeResource 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 DescribeResource for more information on using the DescribeResource
// 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 DescribeResourceRequest method.
//	req, resp := client.DescribeResourceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeResource
func (c *WorkMail) DescribeResourceRequest(input *DescribeResourceInput) (req *request.Request, output *DescribeResourceOutput) {
	op := &request.Operation{
		Name:       opDescribeResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeResourceInput{}
	}

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

// DescribeResource API operation for Amazon WorkMail.
//
// Returns the data available for the resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkMail's
// API operation DescribeResource for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeResource
func (c *WorkMail) DescribeResource(input *DescribeResourceInput) (*DescribeResourceOutput, error) {
	req, out := c.DescribeResourceRequest(input)
	return out, req.Send()
}

// DescribeResourceWithContext is the same as DescribeResource with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeResource 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 *WorkMail) DescribeResourceWithContext(ctx aws.Context, input *DescribeResourceInput, opts ...request.Option) (*DescribeResourceOutput, error) {
	req, out := c.DescribeResourceRequest(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/workmail-2017-10-01/DescribeUser
func (c *WorkMail) 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 Amazon WorkMail.
//
// Provides information regarding the 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 Amazon WorkMail's
// API operation DescribeUser for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DescribeUser
func (c *WorkMail) 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 *WorkMail) 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 opDisassociateDelegateFromResource = "DisassociateDelegateFromResource"

// DisassociateDelegateFromResourceRequest generates a "aws/request.Request" representing the
// client's request for the DisassociateDelegateFromResource 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 DisassociateDelegateFromResource for more information on using the DisassociateDelegateFromResource
// 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 DisassociateDelegateFromResourceRequest method.
//	req, resp := client.DisassociateDelegateFromResourceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DisassociateDelegateFromResource
func (c *WorkMail) DisassociateDelegateFromResourceRequest(input *DisassociateDelegateFromResourceInput) (req *request.Request, output *DisassociateDelegateFromResourceOutput) {
	op := &request.Operation{
		Name:       opDisassociateDelegateFromResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DisassociateDelegateFromResourceInput{}
	}

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

// DisassociateDelegateFromResource API operation for Amazon WorkMail.
//
// Removes a member from the resource's set of delegates.
//
// 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 Amazon WorkMail's
// API operation DisassociateDelegateFromResource for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DisassociateDelegateFromResource
func (c *WorkMail) DisassociateDelegateFromResource(input *DisassociateDelegateFromResourceInput) (*DisassociateDelegateFromResourceOutput, error) {
	req, out := c.DisassociateDelegateFromResourceRequest(input)
	return out, req.Send()
}

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

const opDisassociateMemberFromGroup = "DisassociateMemberFromGroup"

// DisassociateMemberFromGroupRequest generates a "aws/request.Request" representing the
// client's request for the DisassociateMemberFromGroup 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 DisassociateMemberFromGroup for more information on using the DisassociateMemberFromGroup
// 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 DisassociateMemberFromGroupRequest method.
//	req, resp := client.DisassociateMemberFromGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DisassociateMemberFromGroup
func (c *WorkMail) DisassociateMemberFromGroupRequest(input *DisassociateMemberFromGroupInput) (req *request.Request, output *DisassociateMemberFromGroupOutput) {
	op := &request.Operation{
		Name:       opDisassociateMemberFromGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DisassociateMemberFromGroupInput{}
	}

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

// DisassociateMemberFromGroup API operation for Amazon WorkMail.
//
// Removes a member from a group.
//
// 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 Amazon WorkMail's
// API operation DisassociateMemberFromGroup for usage and error information.
//
// Returned Error Types:
//
//   - DirectoryServiceAuthenticationFailedException
//     The directory service doesn't recognize the credentials supplied by WorkMail.
//
//   - DirectoryUnavailableException
//     The directory is unavailable. It might be located in another Region or deleted.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/DisassociateMemberFromGroup
func (c *WorkMail) DisassociateMemberFromGroup(input *DisassociateMemberFromGroupInput) (*DisassociateMemberFromGroupOutput, error) {
	req, out := c.DisassociateMemberFromGroupRequest(input)
	return out, req.Send()
}

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

const opGetAccessControlEffect = "GetAccessControlEffect"

// GetAccessControlEffectRequest generates a "aws/request.Request" representing the
// client's request for the GetAccessControlEffect 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 GetAccessControlEffect for more information on using the GetAccessControlEffect
// 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 GetAccessControlEffectRequest method.
//	req, resp := client.GetAccessControlEffectRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetAccessControlEffect
func (c *WorkMail) GetAccessControlEffectRequest(input *GetAccessControlEffectInput) (req *request.Request, output *GetAccessControlEffectOutput) {
	op := &request.Operation{
		Name:       opGetAccessControlEffect,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetAccessControlEffectInput{}
	}

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

// GetAccessControlEffect API operation for Amazon WorkMail.
//
// Gets the effects of an organization's access control rules as they apply
// to a specified IPv4 address, access protocol action, and user ID or impersonation
// role ID. You must provide either the user ID or impersonation role ID. Impersonation
// role ID can only be used with Action EWS.
//
// 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 Amazon WorkMail's
// API operation GetAccessControlEffect for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - ResourceNotFoundException
//     The resource cannot be found.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetAccessControlEffect
func (c *WorkMail) GetAccessControlEffect(input *GetAccessControlEffectInput) (*GetAccessControlEffectOutput, error) {
	req, out := c.GetAccessControlEffectRequest(input)
	return out, req.Send()
}

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

const opGetDefaultRetentionPolicy = "GetDefaultRetentionPolicy"

// GetDefaultRetentionPolicyRequest generates a "aws/request.Request" representing the
// client's request for the GetDefaultRetentionPolicy 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 GetDefaultRetentionPolicy for more information on using the GetDefaultRetentionPolicy
// 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 GetDefaultRetentionPolicyRequest method.
//	req, resp := client.GetDefaultRetentionPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetDefaultRetentionPolicy
func (c *WorkMail) GetDefaultRetentionPolicyRequest(input *GetDefaultRetentionPolicyInput) (req *request.Request, output *GetDefaultRetentionPolicyOutput) {
	op := &request.Operation{
		Name:       opGetDefaultRetentionPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetDefaultRetentionPolicyInput{}
	}

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

// GetDefaultRetentionPolicy API operation for Amazon WorkMail.
//
// Gets the default retention policy details for the specified organization.
//
// 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 Amazon WorkMail's
// API operation GetDefaultRetentionPolicy for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetDefaultRetentionPolicy
func (c *WorkMail) GetDefaultRetentionPolicy(input *GetDefaultRetentionPolicyInput) (*GetDefaultRetentionPolicyOutput, error) {
	req, out := c.GetDefaultRetentionPolicyRequest(input)
	return out, req.Send()
}

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

const opGetImpersonationRole = "GetImpersonationRole"

// GetImpersonationRoleRequest generates a "aws/request.Request" representing the
// client's request for the GetImpersonationRole 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 GetImpersonationRole for more information on using the GetImpersonationRole
// 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 GetImpersonationRoleRequest method.
//	req, resp := client.GetImpersonationRoleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetImpersonationRole
func (c *WorkMail) GetImpersonationRoleRequest(input *GetImpersonationRoleInput) (req *request.Request, output *GetImpersonationRoleOutput) {
	op := &request.Operation{
		Name:       opGetImpersonationRole,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetImpersonationRoleInput{}
	}

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

// GetImpersonationRole API operation for Amazon WorkMail.
//
// Gets the impersonation role details for the given WorkMail organization.
//
// 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 Amazon WorkMail's
// API operation GetImpersonationRole for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - ResourceNotFoundException
//     The resource cannot be found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetImpersonationRole
func (c *WorkMail) GetImpersonationRole(input *GetImpersonationRoleInput) (*GetImpersonationRoleOutput, error) {
	req, out := c.GetImpersonationRoleRequest(input)
	return out, req.Send()
}

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

const opGetImpersonationRoleEffect = "GetImpersonationRoleEffect"

// GetImpersonationRoleEffectRequest generates a "aws/request.Request" representing the
// client's request for the GetImpersonationRoleEffect 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 GetImpersonationRoleEffect for more information on using the GetImpersonationRoleEffect
// 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 GetImpersonationRoleEffectRequest method.
//	req, resp := client.GetImpersonationRoleEffectRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetImpersonationRoleEffect
func (c *WorkMail) GetImpersonationRoleEffectRequest(input *GetImpersonationRoleEffectInput) (req *request.Request, output *GetImpersonationRoleEffectOutput) {
	op := &request.Operation{
		Name:       opGetImpersonationRoleEffect,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetImpersonationRoleEffectInput{}
	}

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

// GetImpersonationRoleEffect API operation for Amazon WorkMail.
//
// Tests whether the given impersonation role can impersonate a target 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 Amazon WorkMail's
// API operation GetImpersonationRoleEffect for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - ResourceNotFoundException
//     The resource cannot be found.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetImpersonationRoleEffect
func (c *WorkMail) GetImpersonationRoleEffect(input *GetImpersonationRoleEffectInput) (*GetImpersonationRoleEffectOutput, error) {
	req, out := c.GetImpersonationRoleEffectRequest(input)
	return out, req.Send()
}

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

const opGetMailDomain = "GetMailDomain"

// GetMailDomainRequest generates a "aws/request.Request" representing the
// client's request for the GetMailDomain 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 GetMailDomain for more information on using the GetMailDomain
// 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 GetMailDomainRequest method.
//	req, resp := client.GetMailDomainRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetMailDomain
func (c *WorkMail) GetMailDomainRequest(input *GetMailDomainInput) (req *request.Request, output *GetMailDomainOutput) {
	op := &request.Operation{
		Name:       opGetMailDomain,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetMailDomainInput{}
	}

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

// GetMailDomain API operation for Amazon WorkMail.
//
// Gets details for a mail domain, including domain records required to configure
// your domain with recommended security.
//
// 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 Amazon WorkMail's
// API operation GetMailDomain for usage and error information.
//
// Returned Error Types:
//
//   - MailDomainNotFoundException
//     The domain specified is not found in your organization.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetMailDomain
func (c *WorkMail) GetMailDomain(input *GetMailDomainInput) (*GetMailDomainOutput, error) {
	req, out := c.GetMailDomainRequest(input)
	return out, req.Send()
}

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

const opGetMailboxDetails = "GetMailboxDetails"

// GetMailboxDetailsRequest generates a "aws/request.Request" representing the
// client's request for the GetMailboxDetails 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 GetMailboxDetails for more information on using the GetMailboxDetails
// 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 GetMailboxDetailsRequest method.
//	req, resp := client.GetMailboxDetailsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetMailboxDetails
func (c *WorkMail) GetMailboxDetailsRequest(input *GetMailboxDetailsInput) (req *request.Request, output *GetMailboxDetailsOutput) {
	op := &request.Operation{
		Name:       opGetMailboxDetails,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetMailboxDetailsInput{}
	}

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

// GetMailboxDetails API operation for Amazon WorkMail.
//
// Requests a user's mailbox details for a specified organization and 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 Amazon WorkMail's
// API operation GetMailboxDetails for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetMailboxDetails
func (c *WorkMail) GetMailboxDetails(input *GetMailboxDetailsInput) (*GetMailboxDetailsOutput, error) {
	req, out := c.GetMailboxDetailsRequest(input)
	return out, req.Send()
}

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

const opGetMobileDeviceAccessEffect = "GetMobileDeviceAccessEffect"

// GetMobileDeviceAccessEffectRequest generates a "aws/request.Request" representing the
// client's request for the GetMobileDeviceAccessEffect 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 GetMobileDeviceAccessEffect for more information on using the GetMobileDeviceAccessEffect
// 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 GetMobileDeviceAccessEffectRequest method.
//	req, resp := client.GetMobileDeviceAccessEffectRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetMobileDeviceAccessEffect
func (c *WorkMail) GetMobileDeviceAccessEffectRequest(input *GetMobileDeviceAccessEffectInput) (req *request.Request, output *GetMobileDeviceAccessEffectOutput) {
	op := &request.Operation{
		Name:       opGetMobileDeviceAccessEffect,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetMobileDeviceAccessEffectInput{}
	}

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

// GetMobileDeviceAccessEffect API operation for Amazon WorkMail.
//
// Simulates the effect of the mobile device access rules for the given attributes
// of a sample access event. Use this method to test the effects of the current
// set of mobile device access rules for the WorkMail organization for a particular
// user's attributes.
//
// 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 Amazon WorkMail's
// API operation GetMobileDeviceAccessEffect for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetMobileDeviceAccessEffect
func (c *WorkMail) GetMobileDeviceAccessEffect(input *GetMobileDeviceAccessEffectInput) (*GetMobileDeviceAccessEffectOutput, error) {
	req, out := c.GetMobileDeviceAccessEffectRequest(input)
	return out, req.Send()
}

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

const opGetMobileDeviceAccessOverride = "GetMobileDeviceAccessOverride"

// GetMobileDeviceAccessOverrideRequest generates a "aws/request.Request" representing the
// client's request for the GetMobileDeviceAccessOverride 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 GetMobileDeviceAccessOverride for more information on using the GetMobileDeviceAccessOverride
// 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 GetMobileDeviceAccessOverrideRequest method.
//	req, resp := client.GetMobileDeviceAccessOverrideRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetMobileDeviceAccessOverride
func (c *WorkMail) GetMobileDeviceAccessOverrideRequest(input *GetMobileDeviceAccessOverrideInput) (req *request.Request, output *GetMobileDeviceAccessOverrideOutput) {
	op := &request.Operation{
		Name:       opGetMobileDeviceAccessOverride,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetMobileDeviceAccessOverrideInput{}
	}

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

// GetMobileDeviceAccessOverride API operation for Amazon WorkMail.
//
// Gets the mobile device access override for the given WorkMail organization,
// user, and device.
//
// 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 Amazon WorkMail's
// API operation GetMobileDeviceAccessOverride for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - ResourceNotFoundException
//     The resource cannot be found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/GetMobileDeviceAccessOverride
func (c *WorkMail) GetMobileDeviceAccessOverride(input *GetMobileDeviceAccessOverrideInput) (*GetMobileDeviceAccessOverrideOutput, error) {
	req, out := c.GetMobileDeviceAccessOverrideRequest(input)
	return out, req.Send()
}

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

const opListAccessControlRules = "ListAccessControlRules"

// ListAccessControlRulesRequest generates a "aws/request.Request" representing the
// client's request for the ListAccessControlRules 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 ListAccessControlRules for more information on using the ListAccessControlRules
// 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 ListAccessControlRulesRequest method.
//	req, resp := client.ListAccessControlRulesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListAccessControlRules
func (c *WorkMail) ListAccessControlRulesRequest(input *ListAccessControlRulesInput) (req *request.Request, output *ListAccessControlRulesOutput) {
	op := &request.Operation{
		Name:       opListAccessControlRules,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListAccessControlRulesInput{}
	}

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

// ListAccessControlRules API operation for Amazon WorkMail.
//
// Lists the access control rules for the specified organization.
//
// 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 Amazon WorkMail's
// API operation ListAccessControlRules for usage and error information.
//
// Returned Error Types:
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListAccessControlRules
func (c *WorkMail) ListAccessControlRules(input *ListAccessControlRulesInput) (*ListAccessControlRulesOutput, error) {
	req, out := c.ListAccessControlRulesRequest(input)
	return out, req.Send()
}

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

const opListAliases = "ListAliases"

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

	if input == nil {
		input = &ListAliasesInput{}
	}

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

// ListAliases API operation for Amazon WorkMail.
//
// Creates a paginated call to list the aliases associated with a given entity.
//
// 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 Amazon WorkMail's
// API operation ListAliases for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListAliases
func (c *WorkMail) ListAliases(input *ListAliasesInput) (*ListAliasesOutput, error) {
	req, out := c.ListAliasesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListAvailabilityConfigurations = "ListAvailabilityConfigurations"

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

	if input == nil {
		input = &ListAvailabilityConfigurationsInput{}
	}

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

// ListAvailabilityConfigurations API operation for Amazon WorkMail.
//
// List all the AvailabilityConfiguration's for the given WorkMail organization.
//
// 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 Amazon WorkMail's
// API operation ListAvailabilityConfigurations for usage and error information.
//
// Returned Error Types:
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListAvailabilityConfigurations
func (c *WorkMail) ListAvailabilityConfigurations(input *ListAvailabilityConfigurationsInput) (*ListAvailabilityConfigurationsOutput, error) {
	req, out := c.ListAvailabilityConfigurationsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListGroupMembers = "ListGroupMembers"

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

	if input == nil {
		input = &ListGroupMembersInput{}
	}

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

// ListGroupMembers API operation for Amazon WorkMail.
//
// Returns an overview of the members of a group. Users and groups can be members
// of a group.
//
// 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 Amazon WorkMail's
// API operation ListGroupMembers for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListGroupMembers
func (c *WorkMail) ListGroupMembers(input *ListGroupMembersInput) (*ListGroupMembersOutput, error) {
	req, out := c.ListGroupMembersRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListGroups = "ListGroups"

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

	if input == nil {
		input = &ListGroupsInput{}
	}

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

// ListGroups API operation for Amazon WorkMail.
//
// Returns summaries of the organization's groups.
//
// 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 Amazon WorkMail's
// API operation ListGroups for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListGroups
func (c *WorkMail) ListGroups(input *ListGroupsInput) (*ListGroupsOutput, error) {
	req, out := c.ListGroupsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListGroupsForEntity = "ListGroupsForEntity"

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

	if input == nil {
		input = &ListGroupsForEntityInput{}
	}

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

// ListGroupsForEntity API operation for Amazon WorkMail.
//
// Returns all the groups to which an entity belongs.
//
// 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 Amazon WorkMail's
// API operation ListGroupsForEntity for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListGroupsForEntity
func (c *WorkMail) ListGroupsForEntity(input *ListGroupsForEntityInput) (*ListGroupsForEntityOutput, error) {
	req, out := c.ListGroupsForEntityRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListImpersonationRoles = "ListImpersonationRoles"

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

	if input == nil {
		input = &ListImpersonationRolesInput{}
	}

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

// ListImpersonationRoles API operation for Amazon WorkMail.
//
// Lists all the impersonation roles for the given WorkMail organization.
//
// 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 Amazon WorkMail's
// API operation ListImpersonationRoles for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListImpersonationRoles
func (c *WorkMail) ListImpersonationRoles(input *ListImpersonationRolesInput) (*ListImpersonationRolesOutput, error) {
	req, out := c.ListImpersonationRolesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListMailDomains = "ListMailDomains"

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

	if input == nil {
		input = &ListMailDomainsInput{}
	}

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

// ListMailDomains API operation for Amazon WorkMail.
//
// Lists the mail domains in a given WorkMail organization.
//
// 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 Amazon WorkMail's
// API operation ListMailDomains for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListMailDomains
func (c *WorkMail) ListMailDomains(input *ListMailDomainsInput) (*ListMailDomainsOutput, error) {
	req, out := c.ListMailDomainsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListMailboxExportJobs = "ListMailboxExportJobs"

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

	if input == nil {
		input = &ListMailboxExportJobsInput{}
	}

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

// ListMailboxExportJobs API operation for Amazon WorkMail.
//
// Lists the mailbox export jobs started for the specified organization within
// the last seven days.
//
// 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 Amazon WorkMail's
// API operation ListMailboxExportJobs for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListMailboxExportJobs
func (c *WorkMail) ListMailboxExportJobs(input *ListMailboxExportJobsInput) (*ListMailboxExportJobsOutput, error) {
	req, out := c.ListMailboxExportJobsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListMailboxPermissions = "ListMailboxPermissions"

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

	if input == nil {
		input = &ListMailboxPermissionsInput{}
	}

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

// ListMailboxPermissions API operation for Amazon WorkMail.
//
// Lists the mailbox permissions associated with a user, group, or resource
// mailbox.
//
// 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 Amazon WorkMail's
// API operation ListMailboxPermissions for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListMailboxPermissions
func (c *WorkMail) ListMailboxPermissions(input *ListMailboxPermissionsInput) (*ListMailboxPermissionsOutput, error) {
	req, out := c.ListMailboxPermissionsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListMobileDeviceAccessOverrides = "ListMobileDeviceAccessOverrides"

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

	if input == nil {
		input = &ListMobileDeviceAccessOverridesInput{}
	}

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

// ListMobileDeviceAccessOverrides API operation for Amazon WorkMail.
//
// Lists all the mobile device access overrides for any given combination of
// WorkMail organization, user, or device.
//
// 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 Amazon WorkMail's
// API operation ListMobileDeviceAccessOverrides for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListMobileDeviceAccessOverrides
func (c *WorkMail) ListMobileDeviceAccessOverrides(input *ListMobileDeviceAccessOverridesInput) (*ListMobileDeviceAccessOverridesOutput, error) {
	req, out := c.ListMobileDeviceAccessOverridesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListMobileDeviceAccessRules = "ListMobileDeviceAccessRules"

// ListMobileDeviceAccessRulesRequest generates a "aws/request.Request" representing the
// client's request for the ListMobileDeviceAccessRules 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 ListMobileDeviceAccessRules for more information on using the ListMobileDeviceAccessRules
// 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 ListMobileDeviceAccessRulesRequest method.
//	req, resp := client.ListMobileDeviceAccessRulesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListMobileDeviceAccessRules
func (c *WorkMail) ListMobileDeviceAccessRulesRequest(input *ListMobileDeviceAccessRulesInput) (req *request.Request, output *ListMobileDeviceAccessRulesOutput) {
	op := &request.Operation{
		Name:       opListMobileDeviceAccessRules,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ListMobileDeviceAccessRulesInput{}
	}

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

// ListMobileDeviceAccessRules API operation for Amazon WorkMail.
//
// Lists the mobile device access rules for the specified WorkMail organization.
//
// 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 Amazon WorkMail's
// API operation ListMobileDeviceAccessRules for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListMobileDeviceAccessRules
func (c *WorkMail) ListMobileDeviceAccessRules(input *ListMobileDeviceAccessRulesInput) (*ListMobileDeviceAccessRulesOutput, error) {
	req, out := c.ListMobileDeviceAccessRulesRequest(input)
	return out, req.Send()
}

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

const opListOrganizations = "ListOrganizations"

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

	if input == nil {
		input = &ListOrganizationsInput{}
	}

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

// ListOrganizations API operation for Amazon WorkMail.
//
// Returns summaries of the customer's organizations.
//
// 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 Amazon WorkMail's
// API operation ListOrganizations for usage and error information.
//
// Returned Error Types:
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListOrganizations
func (c *WorkMail) ListOrganizations(input *ListOrganizationsInput) (*ListOrganizationsOutput, error) {
	req, out := c.ListOrganizationsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListResourceDelegates = "ListResourceDelegates"

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

	if input == nil {
		input = &ListResourceDelegatesInput{}
	}

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

// ListResourceDelegates API operation for Amazon WorkMail.
//
// Lists the delegates associated with a resource. Users and groups can be resource
// delegates and answer requests on behalf of the resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkMail's
// API operation ListResourceDelegates for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListResourceDelegates
func (c *WorkMail) ListResourceDelegates(input *ListResourceDelegatesInput) (*ListResourceDelegatesOutput, error) {
	req, out := c.ListResourceDelegatesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListResources = "ListResources"

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

	if input == nil {
		input = &ListResourcesInput{}
	}

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

// ListResources API operation for Amazon WorkMail.
//
// Returns summaries of the organization's resources.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkMail's
// API operation ListResources for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListResources
func (c *WorkMail) ListResources(input *ListResourcesInput) (*ListResourcesOutput, error) {
	req, out := c.ListResourcesRequest(input)
	return out, req.Send()
}

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

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

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

	for p.Next() {
		if !fn(p.Page().(*ListResourcesOutput), !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/workmail-2017-10-01/ListTagsForResource
func (c *WorkMail) ListTagsForResourceRequest(input *ListTagsForResourceInput) (req *request.Request, output *ListTagsForResourceOutput) {
	op := &request.Operation{
		Name:       opListTagsForResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

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

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

// ListTagsForResource API operation for Amazon WorkMail.
//
// Lists the tags applied to an WorkMail organization resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkMail's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//   - ResourceNotFoundException
//     The resource cannot be found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListTagsForResource
func (c *WorkMail) 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 *WorkMail) ListTagsForResourceWithContext(ctx aws.Context, input *ListTagsForResourceInput, opts ...request.Option) (*ListTagsForResourceOutput, error) {
	req, out := c.ListTagsForResourceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const 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/workmail-2017-10-01/ListUsers
func (c *WorkMail) 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 Amazon WorkMail.
//
// Returns summaries of the organization's 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 Amazon WorkMail's
// API operation ListUsers for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ListUsers
func (c *WorkMail) 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 *WorkMail) 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 *workmail.ListUsersOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *WorkMail) 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 *WorkMail) 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 opPutAccessControlRule = "PutAccessControlRule"

// PutAccessControlRuleRequest generates a "aws/request.Request" representing the
// client's request for the PutAccessControlRule 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 PutAccessControlRule for more information on using the PutAccessControlRule
// 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 PutAccessControlRuleRequest method.
//	req, resp := client.PutAccessControlRuleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/PutAccessControlRule
func (c *WorkMail) PutAccessControlRuleRequest(input *PutAccessControlRuleInput) (req *request.Request, output *PutAccessControlRuleOutput) {
	op := &request.Operation{
		Name:       opPutAccessControlRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutAccessControlRuleInput{}
	}

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

// PutAccessControlRule API operation for Amazon WorkMail.
//
// Adds a new access control rule for the specified organization. The rule allows
// or denies access to the organization for the specified IPv4 addresses, access
// protocol actions, user IDs and impersonation IDs. Adding a new rule with
// the same name as an existing rule replaces the older rule.
//
// 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 Amazon WorkMail's
// API operation PutAccessControlRule for usage and error information.
//
// Returned Error Types:
//
//   - LimitExceededException
//     The request exceeds the limit of the resource.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - ResourceNotFoundException
//     The resource cannot be found.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/PutAccessControlRule
func (c *WorkMail) PutAccessControlRule(input *PutAccessControlRuleInput) (*PutAccessControlRuleOutput, error) {
	req, out := c.PutAccessControlRuleRequest(input)
	return out, req.Send()
}

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

const opPutEmailMonitoringConfiguration = "PutEmailMonitoringConfiguration"

// PutEmailMonitoringConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the PutEmailMonitoringConfiguration 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 PutEmailMonitoringConfiguration for more information on using the PutEmailMonitoringConfiguration
// 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 PutEmailMonitoringConfigurationRequest method.
//	req, resp := client.PutEmailMonitoringConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/PutEmailMonitoringConfiguration
func (c *WorkMail) PutEmailMonitoringConfigurationRequest(input *PutEmailMonitoringConfigurationInput) (req *request.Request, output *PutEmailMonitoringConfigurationOutput) {
	op := &request.Operation{
		Name:       opPutEmailMonitoringConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutEmailMonitoringConfigurationInput{}
	}

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

// PutEmailMonitoringConfiguration API operation for Amazon WorkMail.
//
// Creates or updates the email monitoring configuration for a specified organization.
//
// 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 Amazon WorkMail's
// API operation PutEmailMonitoringConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The resource cannot be found.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/PutEmailMonitoringConfiguration
func (c *WorkMail) PutEmailMonitoringConfiguration(input *PutEmailMonitoringConfigurationInput) (*PutEmailMonitoringConfigurationOutput, error) {
	req, out := c.PutEmailMonitoringConfigurationRequest(input)
	return out, req.Send()
}

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

const opPutInboundDmarcSettings = "PutInboundDmarcSettings"

// PutInboundDmarcSettingsRequest generates a "aws/request.Request" representing the
// client's request for the PutInboundDmarcSettings 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 PutInboundDmarcSettings for more information on using the PutInboundDmarcSettings
// 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 PutInboundDmarcSettingsRequest method.
//	req, resp := client.PutInboundDmarcSettingsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/PutInboundDmarcSettings
func (c *WorkMail) PutInboundDmarcSettingsRequest(input *PutInboundDmarcSettingsInput) (req *request.Request, output *PutInboundDmarcSettingsOutput) {
	op := &request.Operation{
		Name:       opPutInboundDmarcSettings,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutInboundDmarcSettingsInput{}
	}

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

// PutInboundDmarcSettings API operation for Amazon WorkMail.
//
// Enables or disables a DMARC policy for a given organization.
//
// 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 Amazon WorkMail's
// API operation PutInboundDmarcSettings for usage and error information.
//
// Returned Error Types:
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/PutInboundDmarcSettings
func (c *WorkMail) PutInboundDmarcSettings(input *PutInboundDmarcSettingsInput) (*PutInboundDmarcSettingsOutput, error) {
	req, out := c.PutInboundDmarcSettingsRequest(input)
	return out, req.Send()
}

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

const opPutMailboxPermissions = "PutMailboxPermissions"

// PutMailboxPermissionsRequest generates a "aws/request.Request" representing the
// client's request for the PutMailboxPermissions 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 PutMailboxPermissions for more information on using the PutMailboxPermissions
// 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 PutMailboxPermissionsRequest method.
//	req, resp := client.PutMailboxPermissionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/PutMailboxPermissions
func (c *WorkMail) PutMailboxPermissionsRequest(input *PutMailboxPermissionsInput) (req *request.Request, output *PutMailboxPermissionsOutput) {
	op := &request.Operation{
		Name:       opPutMailboxPermissions,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutMailboxPermissionsInput{}
	}

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

// PutMailboxPermissions API operation for Amazon WorkMail.
//
// Sets permissions for a user, group, or resource. This replaces any pre-existing
// permissions.
//
// 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 Amazon WorkMail's
// API operation PutMailboxPermissions for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/PutMailboxPermissions
func (c *WorkMail) PutMailboxPermissions(input *PutMailboxPermissionsInput) (*PutMailboxPermissionsOutput, error) {
	req, out := c.PutMailboxPermissionsRequest(input)
	return out, req.Send()
}

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

const opPutMobileDeviceAccessOverride = "PutMobileDeviceAccessOverride"

// PutMobileDeviceAccessOverrideRequest generates a "aws/request.Request" representing the
// client's request for the PutMobileDeviceAccessOverride 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 PutMobileDeviceAccessOverride for more information on using the PutMobileDeviceAccessOverride
// 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 PutMobileDeviceAccessOverrideRequest method.
//	req, resp := client.PutMobileDeviceAccessOverrideRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/PutMobileDeviceAccessOverride
func (c *WorkMail) PutMobileDeviceAccessOverrideRequest(input *PutMobileDeviceAccessOverrideInput) (req *request.Request, output *PutMobileDeviceAccessOverrideOutput) {
	op := &request.Operation{
		Name:       opPutMobileDeviceAccessOverride,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutMobileDeviceAccessOverrideInput{}
	}

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

// PutMobileDeviceAccessOverride API operation for Amazon WorkMail.
//
// Creates or updates a mobile device access override for the given WorkMail
// organization, user, and device.
//
// 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 Amazon WorkMail's
// API operation PutMobileDeviceAccessOverride for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/PutMobileDeviceAccessOverride
func (c *WorkMail) PutMobileDeviceAccessOverride(input *PutMobileDeviceAccessOverrideInput) (*PutMobileDeviceAccessOverrideOutput, error) {
	req, out := c.PutMobileDeviceAccessOverrideRequest(input)
	return out, req.Send()
}

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

const opPutRetentionPolicy = "PutRetentionPolicy"

// PutRetentionPolicyRequest generates a "aws/request.Request" representing the
// client's request for the PutRetentionPolicy 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 PutRetentionPolicy for more information on using the PutRetentionPolicy
// 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 PutRetentionPolicyRequest method.
//	req, resp := client.PutRetentionPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/PutRetentionPolicy
func (c *WorkMail) PutRetentionPolicyRequest(input *PutRetentionPolicyInput) (req *request.Request, output *PutRetentionPolicyOutput) {
	op := &request.Operation{
		Name:       opPutRetentionPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutRetentionPolicyInput{}
	}

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

// PutRetentionPolicy API operation for Amazon WorkMail.
//
// Puts a retention policy to the specified organization.
//
// 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 Amazon WorkMail's
// API operation PutRetentionPolicy for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - LimitExceededException
//     The request exceeds the limit of the resource.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/PutRetentionPolicy
func (c *WorkMail) PutRetentionPolicy(input *PutRetentionPolicyInput) (*PutRetentionPolicyOutput, error) {
	req, out := c.PutRetentionPolicyRequest(input)
	return out, req.Send()
}

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

const opRegisterMailDomain = "RegisterMailDomain"

// RegisterMailDomainRequest generates a "aws/request.Request" representing the
// client's request for the RegisterMailDomain 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 RegisterMailDomain for more information on using the RegisterMailDomain
// 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 RegisterMailDomainRequest method.
//	req, resp := client.RegisterMailDomainRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/RegisterMailDomain
func (c *WorkMail) RegisterMailDomainRequest(input *RegisterMailDomainInput) (req *request.Request, output *RegisterMailDomainOutput) {
	op := &request.Operation{
		Name:       opRegisterMailDomain,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RegisterMailDomainInput{}
	}

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

// RegisterMailDomain API operation for Amazon WorkMail.
//
// Registers a new domain in WorkMail and SES, and configures it for use by
// WorkMail. Emails received by SES for this domain are routed to the specified
// WorkMail organization, and WorkMail has permanent permission to use the specified
// domain for sending your users' emails.
//
// 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 Amazon WorkMail's
// API operation RegisterMailDomain for usage and error information.
//
// Returned Error Types:
//
//   - MailDomainInUseException
//     The domain you're trying to change is in use by another user or organization
//     in your account. See the error message for details.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - LimitExceededException
//     The request exceeds the limit of the resource.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/RegisterMailDomain
func (c *WorkMail) RegisterMailDomain(input *RegisterMailDomainInput) (*RegisterMailDomainOutput, error) {
	req, out := c.RegisterMailDomainRequest(input)
	return out, req.Send()
}

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

const opRegisterToWorkMail = "RegisterToWorkMail"

// RegisterToWorkMailRequest generates a "aws/request.Request" representing the
// client's request for the RegisterToWorkMail 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 RegisterToWorkMail for more information on using the RegisterToWorkMail
// 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 RegisterToWorkMailRequest method.
//	req, resp := client.RegisterToWorkMailRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/RegisterToWorkMail
func (c *WorkMail) RegisterToWorkMailRequest(input *RegisterToWorkMailInput) (req *request.Request, output *RegisterToWorkMailOutput) {
	op := &request.Operation{
		Name:       opRegisterToWorkMail,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RegisterToWorkMailInput{}
	}

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

// RegisterToWorkMail API operation for Amazon WorkMail.
//
// Registers an existing and disabled user, group, or resource for WorkMail
// use by associating a mailbox and calendaring capabilities. It performs no
// change if the user, group, or resource is enabled and fails if the user,
// group, or resource is deleted. This operation results in the accumulation
// of costs. For more information, see Pricing (https://aws.amazon.com/workmail/pricing).
// The equivalent console functionality for this operation is Enable.
//
// Users can either be created by calling the CreateUser API operation or they
// can be synchronized from your directory. For more information, see DeregisterFromWorkMail.
//
// 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 Amazon WorkMail's
// API operation RegisterToWorkMail for usage and error information.
//
// Returned Error Types:
//
//   - DirectoryServiceAuthenticationFailedException
//     The directory service doesn't recognize the credentials supplied by WorkMail.
//
//   - DirectoryUnavailableException
//     The directory is unavailable. It might be located in another Region or deleted.
//
//   - EmailAddressInUseException
//     The email address that you're trying to assign is already created for a different
//     user, group, or resource.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - EntityAlreadyRegisteredException
//     The user, group, or resource that you're trying to register is already registered.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - MailDomainNotFoundException
//     The domain specified is not found in your organization.
//
//   - MailDomainStateException
//     After a domain has been added to the organization, it must be verified. The
//     domain is not yet verified.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/RegisterToWorkMail
func (c *WorkMail) RegisterToWorkMail(input *RegisterToWorkMailInput) (*RegisterToWorkMailOutput, error) {
	req, out := c.RegisterToWorkMailRequest(input)
	return out, req.Send()
}

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

const opResetPassword = "ResetPassword"

// ResetPasswordRequest generates a "aws/request.Request" representing the
// client's request for the ResetPassword 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 ResetPassword for more information on using the ResetPassword
// 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 ResetPasswordRequest method.
//	req, resp := client.ResetPasswordRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ResetPassword
func (c *WorkMail) ResetPasswordRequest(input *ResetPasswordInput) (req *request.Request, output *ResetPasswordOutput) {
	op := &request.Operation{
		Name:       opResetPassword,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ResetPasswordInput{}
	}

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

// ResetPassword API operation for Amazon WorkMail.
//
// Allows the administrator to reset the password for a 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 Amazon WorkMail's
// API operation ResetPassword for usage and error information.
//
// Returned Error Types:
//
//   - DirectoryServiceAuthenticationFailedException
//     The directory service doesn't recognize the credentials supplied by WorkMail.
//
//   - DirectoryUnavailableException
//     The directory is unavailable. It might be located in another Region or deleted.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - InvalidPasswordException
//     The supplied password doesn't match the minimum security constraints, such
//     as length or use of special characters.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/ResetPassword
func (c *WorkMail) ResetPassword(input *ResetPasswordInput) (*ResetPasswordOutput, error) {
	req, out := c.ResetPasswordRequest(input)
	return out, req.Send()
}

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

const opStartMailboxExportJob = "StartMailboxExportJob"

// StartMailboxExportJobRequest generates a "aws/request.Request" representing the
// client's request for the StartMailboxExportJob 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 StartMailboxExportJob for more information on using the StartMailboxExportJob
// 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 StartMailboxExportJobRequest method.
//	req, resp := client.StartMailboxExportJobRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/StartMailboxExportJob
func (c *WorkMail) StartMailboxExportJobRequest(input *StartMailboxExportJobInput) (req *request.Request, output *StartMailboxExportJobOutput) {
	op := &request.Operation{
		Name:       opStartMailboxExportJob,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StartMailboxExportJobInput{}
	}

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

// StartMailboxExportJob API operation for Amazon WorkMail.
//
// Starts a mailbox export job to export MIME-format email messages and calendar
// items from the specified mailbox to the specified Amazon Simple Storage Service
// (Amazon S3) bucket. For more information, see Exporting mailbox content (https://docs.aws.amazon.com/workmail/latest/adminguide/mail-export.html)
// in the WorkMail Administrator Guide.
//
// 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 Amazon WorkMail's
// API operation StartMailboxExportJob for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - LimitExceededException
//     The request exceeds the limit of the resource.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/StartMailboxExportJob
func (c *WorkMail) StartMailboxExportJob(input *StartMailboxExportJobInput) (*StartMailboxExportJobOutput, error) {
	req, out := c.StartMailboxExportJobRequest(input)
	return out, req.Send()
}

// StartMailboxExportJobWithContext is the same as StartMailboxExportJob with the addition of
// the ability to pass a context and additional request options.
//
// See StartMailboxExportJob 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 *WorkMail) StartMailboxExportJobWithContext(ctx aws.Context, input *StartMailboxExportJobInput, opts ...request.Option) (*StartMailboxExportJobOutput, error) {
	req, out := c.StartMailboxExportJobRequest(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/workmail-2017-10-01/TagResource
func (c *WorkMail) 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 Amazon WorkMail.
//
// Applies the specified tags to the specified WorkMailorganization resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkMail's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - ResourceNotFoundException
//     The resource cannot be found.
//
//   - TooManyTagsException
//     The resource can have up to 50 user-applied tags.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/TagResource
func (c *WorkMail) 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 *WorkMail) 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 opTestAvailabilityConfiguration = "TestAvailabilityConfiguration"

// TestAvailabilityConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the TestAvailabilityConfiguration 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 TestAvailabilityConfiguration for more information on using the TestAvailabilityConfiguration
// 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 TestAvailabilityConfigurationRequest method.
//	req, resp := client.TestAvailabilityConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/TestAvailabilityConfiguration
func (c *WorkMail) TestAvailabilityConfigurationRequest(input *TestAvailabilityConfigurationInput) (req *request.Request, output *TestAvailabilityConfigurationOutput) {
	op := &request.Operation{
		Name:       opTestAvailabilityConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &TestAvailabilityConfigurationInput{}
	}

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

// TestAvailabilityConfiguration API operation for Amazon WorkMail.
//
// Performs a test on an availability provider to ensure that access is allowed.
// For EWS, it verifies the provided credentials can be used to successfully
// log in. For Lambda, it verifies that the Lambda function can be invoked and
// that the resource access policy was configured to deny anonymous access.
// An anonymous invocation is one done without providing either a SourceArn
// or SourceAccount header.
//
// The request must contain either one provider definition (EwsProvider or LambdaProvider)
// or the DomainName parameter. If the DomainName parameter is provided, the
// configuration stored under the DomainName will be tested.
//
// 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 Amazon WorkMail's
// API operation TestAvailabilityConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - ResourceNotFoundException
//     The resource cannot be found.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/TestAvailabilityConfiguration
func (c *WorkMail) TestAvailabilityConfiguration(input *TestAvailabilityConfigurationInput) (*TestAvailabilityConfigurationOutput, error) {
	req, out := c.TestAvailabilityConfigurationRequest(input)
	return out, req.Send()
}

// TestAvailabilityConfigurationWithContext is the same as TestAvailabilityConfiguration with the addition of
// the ability to pass a context and additional request options.
//
// See TestAvailabilityConfiguration 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 *WorkMail) TestAvailabilityConfigurationWithContext(ctx aws.Context, input *TestAvailabilityConfigurationInput, opts ...request.Option) (*TestAvailabilityConfigurationOutput, error) {
	req, out := c.TestAvailabilityConfigurationRequest(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/workmail-2017-10-01/UntagResource
func (c *WorkMail) 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 Amazon WorkMail.
//
// Untags the specified tags from the specified WorkMail organization resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkMail's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//   - ResourceNotFoundException
//     The resource cannot be found.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UntagResource
func (c *WorkMail) 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 *WorkMail) 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 opUpdateAvailabilityConfiguration = "UpdateAvailabilityConfiguration"

// UpdateAvailabilityConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the UpdateAvailabilityConfiguration 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 UpdateAvailabilityConfiguration for more information on using the UpdateAvailabilityConfiguration
// 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 UpdateAvailabilityConfigurationRequest method.
//	req, resp := client.UpdateAvailabilityConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateAvailabilityConfiguration
func (c *WorkMail) UpdateAvailabilityConfigurationRequest(input *UpdateAvailabilityConfigurationInput) (req *request.Request, output *UpdateAvailabilityConfigurationOutput) {
	op := &request.Operation{
		Name:       opUpdateAvailabilityConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateAvailabilityConfigurationInput{}
	}

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

// UpdateAvailabilityConfiguration API operation for Amazon WorkMail.
//
// Updates an existing AvailabilityConfiguration for the given WorkMail organization
// and domain.
//
// 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 Amazon WorkMail's
// API operation UpdateAvailabilityConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - ResourceNotFoundException
//     The resource cannot be found.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateAvailabilityConfiguration
func (c *WorkMail) UpdateAvailabilityConfiguration(input *UpdateAvailabilityConfigurationInput) (*UpdateAvailabilityConfigurationOutput, error) {
	req, out := c.UpdateAvailabilityConfigurationRequest(input)
	return out, req.Send()
}

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

const opUpdateDefaultMailDomain = "UpdateDefaultMailDomain"

// UpdateDefaultMailDomainRequest generates a "aws/request.Request" representing the
// client's request for the UpdateDefaultMailDomain 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 UpdateDefaultMailDomain for more information on using the UpdateDefaultMailDomain
// 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 UpdateDefaultMailDomainRequest method.
//	req, resp := client.UpdateDefaultMailDomainRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateDefaultMailDomain
func (c *WorkMail) UpdateDefaultMailDomainRequest(input *UpdateDefaultMailDomainInput) (req *request.Request, output *UpdateDefaultMailDomainOutput) {
	op := &request.Operation{
		Name:       opUpdateDefaultMailDomain,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateDefaultMailDomainInput{}
	}

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

// UpdateDefaultMailDomain API operation for Amazon WorkMail.
//
// Updates the default mail domain for an organization. The default mail domain
// is used by the WorkMail AWS Console to suggest an email address when enabling
// a mail user. You can only have one default domain.
//
// 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 Amazon WorkMail's
// API operation UpdateDefaultMailDomain for usage and error information.
//
// Returned Error Types:
//
//   - MailDomainNotFoundException
//     The domain specified is not found in your organization.
//
//   - MailDomainStateException
//     After a domain has been added to the organization, it must be verified. The
//     domain is not yet verified.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateDefaultMailDomain
func (c *WorkMail) UpdateDefaultMailDomain(input *UpdateDefaultMailDomainInput) (*UpdateDefaultMailDomainOutput, error) {
	req, out := c.UpdateDefaultMailDomainRequest(input)
	return out, req.Send()
}

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

const opUpdateGroup = "UpdateGroup"

// UpdateGroupRequest generates a "aws/request.Request" representing the
// client's request for the UpdateGroup 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 UpdateGroup for more information on using the UpdateGroup
// 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 UpdateGroupRequest method.
//	req, resp := client.UpdateGroupRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateGroup
func (c *WorkMail) UpdateGroupRequest(input *UpdateGroupInput) (req *request.Request, output *UpdateGroupOutput) {
	op := &request.Operation{
		Name:       opUpdateGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateGroupInput{}
	}

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

// UpdateGroup API operation for Amazon WorkMail.
//
// Updates attibutes in a group.
//
// 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 Amazon WorkMail's
// API operation UpdateGroup for usage and error information.
//
// Returned Error Types:
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateGroup
func (c *WorkMail) UpdateGroup(input *UpdateGroupInput) (*UpdateGroupOutput, error) {
	req, out := c.UpdateGroupRequest(input)
	return out, req.Send()
}

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

const opUpdateImpersonationRole = "UpdateImpersonationRole"

// UpdateImpersonationRoleRequest generates a "aws/request.Request" representing the
// client's request for the UpdateImpersonationRole 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 UpdateImpersonationRole for more information on using the UpdateImpersonationRole
// 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 UpdateImpersonationRoleRequest method.
//	req, resp := client.UpdateImpersonationRoleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateImpersonationRole
func (c *WorkMail) UpdateImpersonationRoleRequest(input *UpdateImpersonationRoleInput) (req *request.Request, output *UpdateImpersonationRoleOutput) {
	op := &request.Operation{
		Name:       opUpdateImpersonationRole,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateImpersonationRoleInput{}
	}

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

// UpdateImpersonationRole API operation for Amazon WorkMail.
//
// Updates an impersonation role for the given WorkMail organization.
//
// 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 Amazon WorkMail's
// API operation UpdateImpersonationRole for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - ResourceNotFoundException
//     The resource cannot be found.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - LimitExceededException
//     The request exceeds the limit of the resource.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateImpersonationRole
func (c *WorkMail) UpdateImpersonationRole(input *UpdateImpersonationRoleInput) (*UpdateImpersonationRoleOutput, error) {
	req, out := c.UpdateImpersonationRoleRequest(input)
	return out, req.Send()
}

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

const opUpdateMailboxQuota = "UpdateMailboxQuota"

// UpdateMailboxQuotaRequest generates a "aws/request.Request" representing the
// client's request for the UpdateMailboxQuota 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 UpdateMailboxQuota for more information on using the UpdateMailboxQuota
// 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 UpdateMailboxQuotaRequest method.
//	req, resp := client.UpdateMailboxQuotaRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateMailboxQuota
func (c *WorkMail) UpdateMailboxQuotaRequest(input *UpdateMailboxQuotaInput) (req *request.Request, output *UpdateMailboxQuotaOutput) {
	op := &request.Operation{
		Name:       opUpdateMailboxQuota,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateMailboxQuotaInput{}
	}

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

// UpdateMailboxQuota API operation for Amazon WorkMail.
//
// Updates a user's current mailbox quota for a specified organization and 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 Amazon WorkMail's
// API operation UpdateMailboxQuota for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateMailboxQuota
func (c *WorkMail) UpdateMailboxQuota(input *UpdateMailboxQuotaInput) (*UpdateMailboxQuotaOutput, error) {
	req, out := c.UpdateMailboxQuotaRequest(input)
	return out, req.Send()
}

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

const opUpdateMobileDeviceAccessRule = "UpdateMobileDeviceAccessRule"

// UpdateMobileDeviceAccessRuleRequest generates a "aws/request.Request" representing the
// client's request for the UpdateMobileDeviceAccessRule 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 UpdateMobileDeviceAccessRule for more information on using the UpdateMobileDeviceAccessRule
// 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 UpdateMobileDeviceAccessRuleRequest method.
//	req, resp := client.UpdateMobileDeviceAccessRuleRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateMobileDeviceAccessRule
func (c *WorkMail) UpdateMobileDeviceAccessRuleRequest(input *UpdateMobileDeviceAccessRuleInput) (req *request.Request, output *UpdateMobileDeviceAccessRuleOutput) {
	op := &request.Operation{
		Name:       opUpdateMobileDeviceAccessRule,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateMobileDeviceAccessRuleInput{}
	}

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

// UpdateMobileDeviceAccessRule API operation for Amazon WorkMail.
//
// Updates a mobile device access rule for the specified WorkMail organization.
//
// 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 Amazon WorkMail's
// API operation UpdateMobileDeviceAccessRule for usage and error information.
//
// Returned Error Types:
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateMobileDeviceAccessRule
func (c *WorkMail) UpdateMobileDeviceAccessRule(input *UpdateMobileDeviceAccessRuleInput) (*UpdateMobileDeviceAccessRuleOutput, error) {
	req, out := c.UpdateMobileDeviceAccessRuleRequest(input)
	return out, req.Send()
}

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

const opUpdatePrimaryEmailAddress = "UpdatePrimaryEmailAddress"

// UpdatePrimaryEmailAddressRequest generates a "aws/request.Request" representing the
// client's request for the UpdatePrimaryEmailAddress 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 UpdatePrimaryEmailAddress for more information on using the UpdatePrimaryEmailAddress
// 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 UpdatePrimaryEmailAddressRequest method.
//	req, resp := client.UpdatePrimaryEmailAddressRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdatePrimaryEmailAddress
func (c *WorkMail) UpdatePrimaryEmailAddressRequest(input *UpdatePrimaryEmailAddressInput) (req *request.Request, output *UpdatePrimaryEmailAddressOutput) {
	op := &request.Operation{
		Name:       opUpdatePrimaryEmailAddress,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdatePrimaryEmailAddressInput{}
	}

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

// UpdatePrimaryEmailAddress API operation for Amazon WorkMail.
//
// Updates the primary email for a user, group, or resource. The current email
// is moved into the list of aliases (or swapped between an existing alias and
// the current primary email), and the email provided in the input is promoted
// as the primary.
//
// 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 Amazon WorkMail's
// API operation UpdatePrimaryEmailAddress for usage and error information.
//
// Returned Error Types:
//
//   - DirectoryServiceAuthenticationFailedException
//     The directory service doesn't recognize the credentials supplied by WorkMail.
//
//   - DirectoryUnavailableException
//     The directory is unavailable. It might be located in another Region or deleted.
//
//   - EmailAddressInUseException
//     The email address that you're trying to assign is already created for a different
//     user, group, or resource.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - MailDomainNotFoundException
//     The domain specified is not found in your organization.
//
//   - MailDomainStateException
//     After a domain has been added to the organization, it must be verified. The
//     domain is not yet verified.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdatePrimaryEmailAddress
func (c *WorkMail) UpdatePrimaryEmailAddress(input *UpdatePrimaryEmailAddressInput) (*UpdatePrimaryEmailAddressOutput, error) {
	req, out := c.UpdatePrimaryEmailAddressRequest(input)
	return out, req.Send()
}

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

const opUpdateResource = "UpdateResource"

// UpdateResourceRequest generates a "aws/request.Request" representing the
// client's request for the UpdateResource 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 UpdateResource for more information on using the UpdateResource
// 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 UpdateResourceRequest method.
//	req, resp := client.UpdateResourceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateResource
func (c *WorkMail) UpdateResourceRequest(input *UpdateResourceInput) (req *request.Request, output *UpdateResourceOutput) {
	op := &request.Operation{
		Name:       opUpdateResource,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateResourceInput{}
	}

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

// UpdateResource API operation for Amazon WorkMail.
//
// Updates data for the resource. To have the latest information, it must be
// preceded by a DescribeResource call. The dataset in the request should be
// the one expected when performing another DescribeResource 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 Amazon WorkMail's
// API operation UpdateResource for usage and error information.
//
// Returned Error Types:
//
//   - DirectoryUnavailableException
//     The directory is unavailable. It might be located in another Region or deleted.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
//   - InvalidConfigurationException
//     The configuration for a resource isn't valid. A resource must either be able
//     to auto-respond to requests or have at least one delegate associated that
//     can do so on its behalf.
//
//   - EmailAddressInUseException
//     The email address that you're trying to assign is already created for a different
//     user, group, or resource.
//
//   - MailDomainNotFoundException
//     The domain specified is not found in your organization.
//
//   - MailDomainStateException
//     After a domain has been added to the organization, it must be verified. The
//     domain is not yet verified.
//
//   - NameAvailabilityException
//     The user, group, or resource name isn't unique in WorkMail.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateResource
func (c *WorkMail) UpdateResource(input *UpdateResourceInput) (*UpdateResourceOutput, error) {
	req, out := c.UpdateResourceRequest(input)
	return out, req.Send()
}

// UpdateResourceWithContext is the same as UpdateResource with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateResource 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 *WorkMail) UpdateResourceWithContext(ctx aws.Context, input *UpdateResourceInput, opts ...request.Option) (*UpdateResourceOutput, error) {
	req, out := c.UpdateResourceRequest(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/workmail-2017-10-01/UpdateUser
func (c *WorkMail) 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)
	req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
	return
}

// UpdateUser API operation for Amazon WorkMail.
//
// Updates data for the user. To have the latest information, it must be preceded
// by a DescribeUser call. The dataset in the request should be the one expected
// when performing another DescribeUser 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 Amazon WorkMail's
// API operation UpdateUser for usage and error information.
//
// Returned Error Types:
//
//   - DirectoryServiceAuthenticationFailedException
//     The directory service doesn't recognize the credentials supplied by WorkMail.
//
//   - DirectoryUnavailableException
//     The directory is unavailable. It might be located in another Region or deleted.
//
//   - EntityNotFoundException
//     The identifier supplied for the user, group, or resource does not exist in
//     your organization.
//
//   - InvalidParameterException
//     One or more of the input parameters don't match the service's restrictions.
//
//   - OrganizationNotFoundException
//     An operation received a valid organization identifier that either doesn't
//     belong or exist in the system.
//
//   - OrganizationStateException
//     The organization must have a valid state to perform certain operations on
//     the organization or its members.
//
//   - UnsupportedOperationException
//     You can't perform a write operation against a read-only directory.
//
//   - EntityStateException
//     You are performing an operation on a user, group, or resource that isn't
//     in the expected state, such as trying to delete an active user.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/workmail-2017-10-01/UpdateUser
func (c *WorkMail) 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 *WorkMail) 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()
}

// A rule that controls access to an WorkMail organization.
type AccessControlRule struct {
	_ struct{} `type:"structure"`

	// Access protocol actions to include in the rule. Valid values include ActiveSync,
	// AutoDiscover, EWS, IMAP, SMTP, WindowsOutlook, and WebMail.
	Actions []*string `type:"list"`

	// The date that the rule was created.
	DateCreated *time.Time `type:"timestamp"`

	// The date that the rule was modified.
	DateModified *time.Time `type:"timestamp"`

	// The rule description.
	Description *string `type:"string"`

	// The rule effect.
	Effect *string `type:"string" enum:"AccessControlRuleEffect"`

	// Impersonation role IDs to include in the rule.
	ImpersonationRoleIds []*string `type:"list"`

	// IPv4 CIDR ranges to include in the rule.
	IpRanges []*string `type:"list"`

	// The rule name.
	Name *string `min:"1" type:"string"`

	// Access protocol actions to exclude from the rule. Valid values include ActiveSync,
	// AutoDiscover, EWS, IMAP, SMTP, WindowsOutlook, and WebMail.
	NotActions []*string `type:"list"`

	// Impersonation role IDs to exclude from the rule.
	NotImpersonationRoleIds []*string `type:"list"`

	// IPv4 CIDR ranges to exclude from the rule.
	NotIpRanges []*string `type:"list"`

	// User IDs to exclude from the rule.
	NotUserIds []*string `type:"list"`

	// User IDs to include in the rule.
	UserIds []*string `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 AccessControlRule) String() string {
	return awsutil.Prettify(s)
}

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

// SetActions sets the Actions field's value.
func (s *AccessControlRule) SetActions(v []*string) *AccessControlRule {
	s.Actions = v
	return s
}

// SetDateCreated sets the DateCreated field's value.
func (s *AccessControlRule) SetDateCreated(v time.Time) *AccessControlRule {
	s.DateCreated = &v
	return s
}

// SetDateModified sets the DateModified field's value.
func (s *AccessControlRule) SetDateModified(v time.Time) *AccessControlRule {
	s.DateModified = &v
	return s
}

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

// SetEffect sets the Effect field's value.
func (s *AccessControlRule) SetEffect(v string) *AccessControlRule {
	s.Effect = &v
	return s
}

// SetImpersonationRoleIds sets the ImpersonationRoleIds field's value.
func (s *AccessControlRule) SetImpersonationRoleIds(v []*string) *AccessControlRule {
	s.ImpersonationRoleIds = v
	return s
}

// SetIpRanges sets the IpRanges field's value.
func (s *AccessControlRule) SetIpRanges(v []*string) *AccessControlRule {
	s.IpRanges = v
	return s
}

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

// SetNotActions sets the NotActions field's value.
func (s *AccessControlRule) SetNotActions(v []*string) *AccessControlRule {
	s.NotActions = v
	return s
}

// SetNotImpersonationRoleIds sets the NotImpersonationRoleIds field's value.
func (s *AccessControlRule) SetNotImpersonationRoleIds(v []*string) *AccessControlRule {
	s.NotImpersonationRoleIds = v
	return s
}

// SetNotIpRanges sets the NotIpRanges field's value.
func (s *AccessControlRule) SetNotIpRanges(v []*string) *AccessControlRule {
	s.NotIpRanges = v
	return s
}

// SetNotUserIds sets the NotUserIds field's value.
func (s *AccessControlRule) SetNotUserIds(v []*string) *AccessControlRule {
	s.NotUserIds = v
	return s
}

// SetUserIds sets the UserIds field's value.
func (s *AccessControlRule) SetUserIds(v []*string) *AccessControlRule {
	s.UserIds = v
	return s
}

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

	// The member (user or group) to associate to the resource.
	//
	// The entity ID can accept UserId or GroupID, Username or Groupname, or email.
	//
	//    * Entity: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: entity@domain.tld
	//
	//    * Entity: entity
	//
	// EntityId is a required field
	EntityId *string `min:"1" type:"string" required:"true"`

	// The organization under which the resource exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The resource for which members (users or groups) are associated.
	//
	// The identifier can accept ResourceId, Resourcename, or email. The following
	// identity formats are available:
	//
	//    * Resource ID: r-0123456789a0123456789b0123456789
	//
	//    * Email address: resource@domain.tld
	//
	//    * Resource name: resource
	//
	// ResourceId is a required field
	ResourceId *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 AssociateDelegateToResourceInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetEntityId sets the EntityId field's value.
func (s *AssociateDelegateToResourceInput) SetEntityId(v string) *AssociateDelegateToResourceInput {
	s.EntityId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *AssociateDelegateToResourceInput) SetOrganizationId(v string) *AssociateDelegateToResourceInput {
	s.OrganizationId = &v
	return s
}

// SetResourceId sets the ResourceId field's value.
func (s *AssociateDelegateToResourceInput) SetResourceId(v string) *AssociateDelegateToResourceInput {
	s.ResourceId = &v
	return s
}

type AssociateDelegateToResourceOutput 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 AssociateDelegateToResourceOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The group to which the member (user or group) is associated.
	//
	// The identifier can accept GroupId, Groupname, or email. The following identity
	// formats are available:
	//
	//    * Group ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: group@domain.tld
	//
	//    * Group name: group
	//
	// GroupId is a required field
	GroupId *string `min:"1" type:"string" required:"true"`

	// The member (user or group) to associate to the group.
	//
	// The member ID can accept UserID or GroupId, Username or Groupname, or email.
	//
	//    * Member: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: member@domain.tld
	//
	//    * Member name: member
	//
	// MemberId is a required field
	MemberId *string `min:"1" type:"string" required:"true"`

	// The organization under which the group exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 AssociateMemberToGroupInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetGroupId sets the GroupId field's value.
func (s *AssociateMemberToGroupInput) SetGroupId(v string) *AssociateMemberToGroupInput {
	s.GroupId = &v
	return s
}

// SetMemberId sets the MemberId field's value.
func (s *AssociateMemberToGroupInput) SetMemberId(v string) *AssociateMemberToGroupInput {
	s.MemberId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *AssociateMemberToGroupInput) SetOrganizationId(v string) *AssociateMemberToGroupInput {
	s.OrganizationId = &v
	return s
}

type AssociateMemberToGroupOutput 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 AssociateMemberToGroupOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The impersonation role ID to assume.
	//
	// ImpersonationRoleId is a required field
	ImpersonationRoleId *string `min:"1" type:"string" required:"true"`

	// The WorkMail organization under which the impersonation role will be assumed.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 AssumeImpersonationRoleInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetImpersonationRoleId sets the ImpersonationRoleId field's value.
func (s *AssumeImpersonationRoleInput) SetImpersonationRoleId(v string) *AssumeImpersonationRoleInput {
	s.ImpersonationRoleId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *AssumeImpersonationRoleInput) SetOrganizationId(v string) *AssumeImpersonationRoleInput {
	s.OrganizationId = &v
	return s
}

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

	// The authentication token's validity, in seconds.
	ExpiresIn *int64 `type:"long"`

	// The authentication token for the impersonation role.
	Token *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 AssumeImpersonationRoleOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetExpiresIn sets the ExpiresIn field's value.
func (s *AssumeImpersonationRoleOutput) SetExpiresIn(v int64) *AssumeImpersonationRoleOutput {
	s.ExpiresIn = &v
	return s
}

// SetToken sets the Token field's value.
func (s *AssumeImpersonationRoleOutput) SetToken(v string) *AssumeImpersonationRoleOutput {
	s.Token = &v
	return s
}

// List all the AvailabilityConfiguration's for the given WorkMail organization.
type AvailabilityConfiguration struct {
	_ struct{} `type:"structure"`

	// The date and time at which the availability configuration was created.
	DateCreated *time.Time `type:"timestamp"`

	// The date and time at which the availability configuration was last modified.
	DateModified *time.Time `type:"timestamp"`

	// Displays the domain to which the provider applies.
	DomainName *string `min:"3" type:"string"`

	// If ProviderType is EWS, then this field contains RedactedEwsAvailabilityProvider.
	// Otherwise, it is not required.
	EwsProvider *RedactedEwsAvailabilityProvider `type:"structure"`

	// If ProviderType is LAMBDA then this field contains LambdaAvailabilityProvider.
	// Otherwise, it is not required.
	LambdaProvider *LambdaAvailabilityProvider `type:"structure"`

	// Displays the provider type that applies to this domain.
	ProviderType *string `type:"string" enum:"AvailabilityProviderType"`
}

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

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

// SetDateCreated sets the DateCreated field's value.
func (s *AvailabilityConfiguration) SetDateCreated(v time.Time) *AvailabilityConfiguration {
	s.DateCreated = &v
	return s
}

// SetDateModified sets the DateModified field's value.
func (s *AvailabilityConfiguration) SetDateModified(v time.Time) *AvailabilityConfiguration {
	s.DateModified = &v
	return s
}

// SetDomainName sets the DomainName field's value.
func (s *AvailabilityConfiguration) SetDomainName(v string) *AvailabilityConfiguration {
	s.DomainName = &v
	return s
}

// SetEwsProvider sets the EwsProvider field's value.
func (s *AvailabilityConfiguration) SetEwsProvider(v *RedactedEwsAvailabilityProvider) *AvailabilityConfiguration {
	s.EwsProvider = v
	return s
}

// SetLambdaProvider sets the LambdaProvider field's value.
func (s *AvailabilityConfiguration) SetLambdaProvider(v *LambdaAvailabilityProvider) *AvailabilityConfiguration {
	s.LambdaProvider = v
	return s
}

// SetProviderType sets the ProviderType field's value.
func (s *AvailabilityConfiguration) SetProviderType(v string) *AvailabilityConfiguration {
	s.ProviderType = &v
	return s
}

// At least one delegate must be associated to the resource to disable automatic
// replies from the resource.
type BookingOptions struct {
	_ struct{} `type:"structure"`

	// The resource's ability to automatically reply to requests. If disabled, delegates
	// must be associated to the resource.
	AutoAcceptRequests *bool `type:"boolean"`

	// The resource's ability to automatically decline any conflicting requests.
	AutoDeclineConflictingRequests *bool `type:"boolean"`

	// The resource's ability to automatically decline any recurring requests.
	AutoDeclineRecurringRequests *bool `type:"boolean"`
}

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

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

// SetAutoAcceptRequests sets the AutoAcceptRequests field's value.
func (s *BookingOptions) SetAutoAcceptRequests(v bool) *BookingOptions {
	s.AutoAcceptRequests = &v
	return s
}

// SetAutoDeclineConflictingRequests sets the AutoDeclineConflictingRequests field's value.
func (s *BookingOptions) SetAutoDeclineConflictingRequests(v bool) *BookingOptions {
	s.AutoDeclineConflictingRequests = &v
	return s
}

// SetAutoDeclineRecurringRequests sets the AutoDeclineRecurringRequests field's value.
func (s *BookingOptions) SetAutoDeclineRecurringRequests(v bool) *BookingOptions {
	s.AutoDeclineRecurringRequests = &v
	return s
}

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

	// The idempotency token for the client request.
	ClientToken *string `min:"1" type:"string" idempotencyToken:"true"`

	// The job ID.
	//
	// JobId is a required field
	JobId *string `min:"1" type:"string" required:"true"`

	// The organization ID.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 CancelMailboxExportJobInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetClientToken sets the ClientToken field's value.
func (s *CancelMailboxExportJobInput) SetClientToken(v string) *CancelMailboxExportJobInput {
	s.ClientToken = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *CancelMailboxExportJobInput) SetJobId(v string) *CancelMailboxExportJobInput {
	s.JobId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *CancelMailboxExportJobInput) SetOrganizationId(v string) *CancelMailboxExportJobInput {
	s.OrganizationId = &v
	return s
}

type CancelMailboxExportJobOutput 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 CancelMailboxExportJobOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The alias to add to the member set.
	//
	// Alias is a required field
	Alias *string `min:"1" type:"string" required:"true"`

	// The member (user or group) to which this alias is added.
	//
	// EntityId is a required field
	EntityId *string `min:"12" type:"string" required:"true"`

	// The organization under which the member (user or group) exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 CreateAliasInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAlias sets the Alias field's value.
func (s *CreateAliasInput) SetAlias(v string) *CreateAliasInput {
	s.Alias = &v
	return s
}

// SetEntityId sets the EntityId field's value.
func (s *CreateAliasInput) SetEntityId(v string) *CreateAliasInput {
	s.EntityId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *CreateAliasInput) SetOrganizationId(v string) *CreateAliasInput {
	s.OrganizationId = &v
	return s
}

type CreateAliasOutput 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 CreateAliasOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// An idempotent token that ensures that an API request is executed only once.
	ClientToken *string `min:"1" type:"string" idempotencyToken:"true"`

	// The domain to which the provider applies.
	//
	// DomainName is a required field
	DomainName *string `min:"3" type:"string" required:"true"`

	// Exchange Web Services (EWS) availability provider definition. The request
	// must contain exactly one provider definition, either EwsProvider or LambdaProvider.
	EwsProvider *EwsAvailabilityProvider `type:"structure"`

	// Lambda availability provider definition. The request must contain exactly
	// one provider definition, either EwsProvider or LambdaProvider.
	LambdaProvider *LambdaAvailabilityProvider `type:"structure"`

	// The WorkMail organization for which the AvailabilityConfiguration will be
	// created.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 CreateAvailabilityConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateAvailabilityConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateAvailabilityConfigurationInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 1))
	}
	if s.DomainName == nil {
		invalidParams.Add(request.NewErrParamRequired("DomainName"))
	}
	if s.DomainName != nil && len(*s.DomainName) < 3 {
		invalidParams.Add(request.NewErrParamMinLen("DomainName", 3))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.EwsProvider != nil {
		if err := s.EwsProvider.Validate(); err != nil {
			invalidParams.AddNested("EwsProvider", err.(request.ErrInvalidParams))
		}
	}
	if s.LambdaProvider != nil {
		if err := s.LambdaProvider.Validate(); err != nil {
			invalidParams.AddNested("LambdaProvider", err.(request.ErrInvalidParams))
		}
	}

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

// SetClientToken sets the ClientToken field's value.
func (s *CreateAvailabilityConfigurationInput) SetClientToken(v string) *CreateAvailabilityConfigurationInput {
	s.ClientToken = &v
	return s
}

// SetDomainName sets the DomainName field's value.
func (s *CreateAvailabilityConfigurationInput) SetDomainName(v string) *CreateAvailabilityConfigurationInput {
	s.DomainName = &v
	return s
}

// SetEwsProvider sets the EwsProvider field's value.
func (s *CreateAvailabilityConfigurationInput) SetEwsProvider(v *EwsAvailabilityProvider) *CreateAvailabilityConfigurationInput {
	s.EwsProvider = v
	return s
}

// SetLambdaProvider sets the LambdaProvider field's value.
func (s *CreateAvailabilityConfigurationInput) SetLambdaProvider(v *LambdaAvailabilityProvider) *CreateAvailabilityConfigurationInput {
	s.LambdaProvider = v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *CreateAvailabilityConfigurationInput) SetOrganizationId(v string) *CreateAvailabilityConfigurationInput {
	s.OrganizationId = &v
	return s
}

type CreateAvailabilityConfigurationOutput 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 CreateAvailabilityConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// If this parameter is enabled, the group will be hidden from the address book.
	HiddenFromGlobalAddressList *bool `type:"boolean"`

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

	// The organization under which the group is to be created.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 CreateGroupInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetHiddenFromGlobalAddressList sets the HiddenFromGlobalAddressList field's value.
func (s *CreateGroupInput) SetHiddenFromGlobalAddressList(v bool) *CreateGroupInput {
	s.HiddenFromGlobalAddressList = &v
	return s
}

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *CreateGroupInput) SetOrganizationId(v string) *CreateGroupInput {
	s.OrganizationId = &v
	return s
}

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

	// The identifier of the group.
	GroupId *string `min:"12" 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 CreateGroupOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetGroupId sets the GroupId field's value.
func (s *CreateGroupOutput) SetGroupId(v string) *CreateGroupOutput {
	s.GroupId = &v
	return s
}

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

	// The idempotency token for the client request.
	ClientToken *string `min:"1" type:"string" idempotencyToken:"true"`

	// The description of the new impersonation role.
	Description *string `min:"1" type:"string"`

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

	// The WorkMail organization to create the new impersonation role within.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The list of rules for the impersonation role.
	//
	// Rules is a required field
	Rules []*ImpersonationRule `type:"list" required:"true"`

	// The impersonation role's type. The available impersonation role types are
	// READ_ONLY or FULL_ACCESS.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"ImpersonationRoleType"`
}

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

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

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

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

// SetClientToken sets the ClientToken field's value.
func (s *CreateImpersonationRoleInput) SetClientToken(v string) *CreateImpersonationRoleInput {
	s.ClientToken = &v
	return s
}

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *CreateImpersonationRoleInput) SetOrganizationId(v string) *CreateImpersonationRoleInput {
	s.OrganizationId = &v
	return s
}

// SetRules sets the Rules field's value.
func (s *CreateImpersonationRoleInput) SetRules(v []*ImpersonationRule) *CreateImpersonationRoleInput {
	s.Rules = v
	return s
}

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

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

	// The new impersonation role ID.
	ImpersonationRoleId *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 CreateImpersonationRoleOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetImpersonationRoleId sets the ImpersonationRoleId field's value.
func (s *CreateImpersonationRoleOutput) SetImpersonationRoleId(v string) *CreateImpersonationRoleOutput {
	s.ImpersonationRoleId = &v
	return s
}

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

	// The idempotency token for the client request.
	ClientToken *string `min:"1" type:"string" idempotencyToken:"true"`

	// The rule description.
	Description *string `min:"1" type:"string"`

	// Device models that the rule will match.
	DeviceModels []*string `min:"1" type:"list"`

	// Device operating systems that the rule will match.
	DeviceOperatingSystems []*string `min:"1" type:"list"`

	// Device types that the rule will match.
	DeviceTypes []*string `min:"1" type:"list"`

	// Device user agents that the rule will match.
	DeviceUserAgents []*string `min:"1" type:"list"`

	// The effect of the rule when it matches. Allowed values are ALLOW or DENY.
	//
	// Effect is a required field
	Effect *string `type:"string" required:"true" enum:"MobileDeviceAccessRuleEffect"`

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

	// Device models that the rule will not match. All other device models will
	// match.
	NotDeviceModels []*string `min:"1" type:"list"`

	// Device operating systems that the rule will not match. All other device operating
	// systems will match.
	NotDeviceOperatingSystems []*string `min:"1" type:"list"`

	// Device types that the rule will not match. All other device types will match.
	NotDeviceTypes []*string `min:"1" type:"list"`

	// Device user agents that the rule will not match. All other device user agents
	// will match.
	NotDeviceUserAgents []*string `min:"1" type:"list"`

	// The WorkMail organization under which the rule will be created.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 CreateMobileDeviceAccessRuleInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateMobileDeviceAccessRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateMobileDeviceAccessRuleInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 1))
	}
	if s.Description != nil && len(*s.Description) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Description", 1))
	}
	if s.DeviceModels != nil && len(s.DeviceModels) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DeviceModels", 1))
	}
	if s.DeviceOperatingSystems != nil && len(s.DeviceOperatingSystems) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DeviceOperatingSystems", 1))
	}
	if s.DeviceTypes != nil && len(s.DeviceTypes) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DeviceTypes", 1))
	}
	if s.DeviceUserAgents != nil && len(s.DeviceUserAgents) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DeviceUserAgents", 1))
	}
	if s.Effect == nil {
		invalidParams.Add(request.NewErrParamRequired("Effect"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}
	if s.NotDeviceModels != nil && len(s.NotDeviceModels) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NotDeviceModels", 1))
	}
	if s.NotDeviceOperatingSystems != nil && len(s.NotDeviceOperatingSystems) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NotDeviceOperatingSystems", 1))
	}
	if s.NotDeviceTypes != nil && len(s.NotDeviceTypes) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NotDeviceTypes", 1))
	}
	if s.NotDeviceUserAgents != nil && len(s.NotDeviceUserAgents) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NotDeviceUserAgents", 1))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}

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

// SetClientToken sets the ClientToken field's value.
func (s *CreateMobileDeviceAccessRuleInput) SetClientToken(v string) *CreateMobileDeviceAccessRuleInput {
	s.ClientToken = &v
	return s
}

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

// SetDeviceModels sets the DeviceModels field's value.
func (s *CreateMobileDeviceAccessRuleInput) SetDeviceModels(v []*string) *CreateMobileDeviceAccessRuleInput {
	s.DeviceModels = v
	return s
}

// SetDeviceOperatingSystems sets the DeviceOperatingSystems field's value.
func (s *CreateMobileDeviceAccessRuleInput) SetDeviceOperatingSystems(v []*string) *CreateMobileDeviceAccessRuleInput {
	s.DeviceOperatingSystems = v
	return s
}

// SetDeviceTypes sets the DeviceTypes field's value.
func (s *CreateMobileDeviceAccessRuleInput) SetDeviceTypes(v []*string) *CreateMobileDeviceAccessRuleInput {
	s.DeviceTypes = v
	return s
}

// SetDeviceUserAgents sets the DeviceUserAgents field's value.
func (s *CreateMobileDeviceAccessRuleInput) SetDeviceUserAgents(v []*string) *CreateMobileDeviceAccessRuleInput {
	s.DeviceUserAgents = v
	return s
}

// SetEffect sets the Effect field's value.
func (s *CreateMobileDeviceAccessRuleInput) SetEffect(v string) *CreateMobileDeviceAccessRuleInput {
	s.Effect = &v
	return s
}

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

// SetNotDeviceModels sets the NotDeviceModels field's value.
func (s *CreateMobileDeviceAccessRuleInput) SetNotDeviceModels(v []*string) *CreateMobileDeviceAccessRuleInput {
	s.NotDeviceModels = v
	return s
}

// SetNotDeviceOperatingSystems sets the NotDeviceOperatingSystems field's value.
func (s *CreateMobileDeviceAccessRuleInput) SetNotDeviceOperatingSystems(v []*string) *CreateMobileDeviceAccessRuleInput {
	s.NotDeviceOperatingSystems = v
	return s
}

// SetNotDeviceTypes sets the NotDeviceTypes field's value.
func (s *CreateMobileDeviceAccessRuleInput) SetNotDeviceTypes(v []*string) *CreateMobileDeviceAccessRuleInput {
	s.NotDeviceTypes = v
	return s
}

// SetNotDeviceUserAgents sets the NotDeviceUserAgents field's value.
func (s *CreateMobileDeviceAccessRuleInput) SetNotDeviceUserAgents(v []*string) *CreateMobileDeviceAccessRuleInput {
	s.NotDeviceUserAgents = v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *CreateMobileDeviceAccessRuleInput) SetOrganizationId(v string) *CreateMobileDeviceAccessRuleInput {
	s.OrganizationId = &v
	return s
}

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

	// The identifier for the newly created mobile device access rule.
	MobileDeviceAccessRuleId *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 CreateMobileDeviceAccessRuleOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetMobileDeviceAccessRuleId sets the MobileDeviceAccessRuleId field's value.
func (s *CreateMobileDeviceAccessRuleOutput) SetMobileDeviceAccessRuleId(v string) *CreateMobileDeviceAccessRuleOutput {
	s.MobileDeviceAccessRuleId = &v
	return s
}

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

	// The organization alias.
	//
	// Alias is a required field
	Alias *string `min:"1" type:"string" required:"true"`

	// The idempotency token associated with the request.
	ClientToken *string `min:"1" type:"string" idempotencyToken:"true"`

	// The AWS Directory Service directory ID.
	DirectoryId *string `min:"12" type:"string"`

	// The email domains to associate with the organization.
	Domains []*Domain `type:"list"`

	// When true, allows organization interoperability between WorkMail and Microsoft
	// Exchange. If true, you must include a AD Connector directory ID in the request.
	EnableInteroperability *bool `type:"boolean"`

	// The Amazon Resource Name (ARN) of a customer managed key from AWS KMS.
	KmsKeyArn *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 CreateOrganizationInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAlias sets the Alias field's value.
func (s *CreateOrganizationInput) SetAlias(v string) *CreateOrganizationInput {
	s.Alias = &v
	return s
}

// SetClientToken sets the ClientToken field's value.
func (s *CreateOrganizationInput) SetClientToken(v string) *CreateOrganizationInput {
	s.ClientToken = &v
	return s
}

// SetDirectoryId sets the DirectoryId field's value.
func (s *CreateOrganizationInput) SetDirectoryId(v string) *CreateOrganizationInput {
	s.DirectoryId = &v
	return s
}

// SetDomains sets the Domains field's value.
func (s *CreateOrganizationInput) SetDomains(v []*Domain) *CreateOrganizationInput {
	s.Domains = v
	return s
}

// SetEnableInteroperability sets the EnableInteroperability field's value.
func (s *CreateOrganizationInput) SetEnableInteroperability(v bool) *CreateOrganizationInput {
	s.EnableInteroperability = &v
	return s
}

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

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

	// The organization ID.
	OrganizationId *string `min:"34" 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 CreateOrganizationOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *CreateOrganizationOutput) SetOrganizationId(v string) *CreateOrganizationOutput {
	s.OrganizationId = &v
	return s
}

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

	// Resource description.
	Description *string `min:"1" type:"string"`

	// If this parameter is enabled, the resource will be hidden from the address
	// book.
	HiddenFromGlobalAddressList *bool `type:"boolean"`

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

	// The identifier associated with the organization for which the resource is
	// created.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The type of the new resource. The available types are equipment and room.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"ResourceType"`
}

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

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

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

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

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

// SetHiddenFromGlobalAddressList sets the HiddenFromGlobalAddressList field's value.
func (s *CreateResourceInput) SetHiddenFromGlobalAddressList(v bool) *CreateResourceInput {
	s.HiddenFromGlobalAddressList = &v
	return s
}

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *CreateResourceInput) SetOrganizationId(v string) *CreateResourceInput {
	s.OrganizationId = &v
	return s
}

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

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

	// The identifier of the new resource.
	ResourceId *string `min:"34" 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 CreateResourceOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetResourceId sets the ResourceId field's value.
func (s *CreateResourceOutput) SetResourceId(v string) *CreateResourceOutput {
	s.ResourceId = &v
	return s
}

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

	// The display name for the new user.
	//
	// DisplayName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateUserInput's
	// String and GoString methods.
	//
	// DisplayName is a required field
	DisplayName *string `type:"string" required:"true" sensitive:"true"`

	// The first name of the new user.
	//
	// FirstName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateUserInput's
	// String and GoString methods.
	FirstName *string `type:"string" sensitive:"true"`

	// If this parameter is enabled, the user will be hidden from the address book.
	HiddenFromGlobalAddressList *bool `type:"boolean"`

	// The last name of the new user.
	//
	// LastName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateUserInput's
	// String and GoString methods.
	LastName *string `type:"string" sensitive:"true"`

	// The name for the new user. WorkMail directory user names have a maximum length
	// of 64. All others have a maximum length of 20.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// The identifier of the organization for which the user is created.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

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

	// The role of the new user.
	//
	// You cannot pass SYSTEM_USER or RESOURCE role in a single request. When a
	// user role is not selected, the default role of USER is selected.
	Role *string `type:"string" enum:"UserRole"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API 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.DisplayName == nil {
		invalidParams.Add(request.NewErrParamRequired("DisplayName"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}

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

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

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

// SetHiddenFromGlobalAddressList sets the HiddenFromGlobalAddressList field's value.
func (s *CreateUserInput) SetHiddenFromGlobalAddressList(v bool) *CreateUserInput {
	s.HiddenFromGlobalAddressList = &v
	return s
}

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

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

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

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

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

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

	// The identifier for the new user.
	UserId *string `min:"12" 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 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()
}

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

// The name of the attribute, which is one of the values defined in the UserAttribute
// enumeration.
type Delegate struct {
	_ struct{} `type:"structure"`

	// The identifier for the user or group associated as the resource's delegate.
	//
	// Id is a required field
	Id *string `type:"string" required:"true"`

	// The type of the delegate: user or group.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"MemberType"`
}

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

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

// SetId sets the Id field's value.
func (s *Delegate) SetId(v string) *Delegate {
	s.Id = &v
	return s
}

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

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

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

	// The identifier for the organization.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DeleteAccessControlRuleInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeleteAccessControlRuleInput) SetOrganizationId(v string) *DeleteAccessControlRuleInput {
	s.OrganizationId = &v
	return s
}

type DeleteAccessControlRuleOutput 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 DeleteAccessControlRuleOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The aliases to be removed from the user's set of aliases. Duplicate entries
	// in the list are collapsed into single entries (the list is transformed into
	// a set).
	//
	// Alias is a required field
	Alias *string `min:"1" type:"string" required:"true"`

	// The identifier for the member (user or group) from which to have the aliases
	// removed.
	//
	// EntityId is a required field
	EntityId *string `min:"12" type:"string" required:"true"`

	// The identifier for the organization under which the user exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DeleteAliasInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAlias sets the Alias field's value.
func (s *DeleteAliasInput) SetAlias(v string) *DeleteAliasInput {
	s.Alias = &v
	return s
}

// SetEntityId sets the EntityId field's value.
func (s *DeleteAliasInput) SetEntityId(v string) *DeleteAliasInput {
	s.EntityId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeleteAliasInput) SetOrganizationId(v string) *DeleteAliasInput {
	s.OrganizationId = &v
	return s
}

type DeleteAliasOutput 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 DeleteAliasOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The domain for which the AvailabilityConfiguration will be deleted.
	//
	// DomainName is a required field
	DomainName *string `min:"3" type:"string" required:"true"`

	// The WorkMail organization for which the AvailabilityConfiguration will be
	// deleted.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DeleteAvailabilityConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetDomainName sets the DomainName field's value.
func (s *DeleteAvailabilityConfigurationInput) SetDomainName(v string) *DeleteAvailabilityConfigurationInput {
	s.DomainName = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeleteAvailabilityConfigurationInput) SetOrganizationId(v string) *DeleteAvailabilityConfigurationInput {
	s.OrganizationId = &v
	return s
}

type DeleteAvailabilityConfigurationOutput 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 DeleteAvailabilityConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The ID of the organization from which the email monitoring configuration
	// is deleted.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DeleteEmailMonitoringConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeleteEmailMonitoringConfigurationInput) SetOrganizationId(v string) *DeleteEmailMonitoringConfigurationInput {
	s.OrganizationId = &v
	return s
}

type DeleteEmailMonitoringConfigurationOutput 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 DeleteEmailMonitoringConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The identifier of the group to be deleted.
	//
	// The identifier can be the GroupId, or Groupname. The following identity formats
	// are available:
	//
	//    * Group ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Group name: group
	//
	// GroupId is a required field
	GroupId *string `min:"1" type:"string" required:"true"`

	// The organization that contains the group.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DeleteGroupInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetGroupId sets the GroupId field's value.
func (s *DeleteGroupInput) SetGroupId(v string) *DeleteGroupInput {
	s.GroupId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeleteGroupInput) SetOrganizationId(v string) *DeleteGroupInput {
	s.OrganizationId = &v
	return s
}

type DeleteGroupOutput 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 DeleteGroupOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The ID of the impersonation role to delete.
	//
	// ImpersonationRoleId is a required field
	ImpersonationRoleId *string `min:"1" type:"string" required:"true"`

	// The WorkMail organization from which to delete the impersonation role.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DeleteImpersonationRoleInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetImpersonationRoleId sets the ImpersonationRoleId field's value.
func (s *DeleteImpersonationRoleInput) SetImpersonationRoleId(v string) *DeleteImpersonationRoleInput {
	s.ImpersonationRoleId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeleteImpersonationRoleInput) SetOrganizationId(v string) *DeleteImpersonationRoleInput {
	s.OrganizationId = &v
	return s
}

type DeleteImpersonationRoleOutput 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 DeleteImpersonationRoleOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The identifier of the entity that owns the mailbox.
	//
	// The identifier can be UserId or Group Id, Username or Groupname, or email.
	//
	//    * Entity ID: 12345678-1234-1234-1234-123456789012, r-0123456789a0123456789b0123456789,
	//    or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: entity@domain.tld
	//
	//    * Entity name: entity
	//
	// EntityId is a required field
	EntityId *string `min:"1" type:"string" required:"true"`

	// The identifier of the entity for which to delete granted permissions.
	//
	// The identifier can be UserId, ResourceID, or Group Id, Username or Groupname,
	// or email.
	//
	//    * Grantee ID: 12345678-1234-1234-1234-123456789012,r-0123456789a0123456789b0123456789,
	//    or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: grantee@domain.tld
	//
	//    * Grantee name: grantee
	//
	// GranteeId is a required field
	GranteeId *string `min:"1" type:"string" required:"true"`

	// The identifier of the organization under which the member (user or group)
	// exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DeleteMailboxPermissionsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetEntityId sets the EntityId field's value.
func (s *DeleteMailboxPermissionsInput) SetEntityId(v string) *DeleteMailboxPermissionsInput {
	s.EntityId = &v
	return s
}

// SetGranteeId sets the GranteeId field's value.
func (s *DeleteMailboxPermissionsInput) SetGranteeId(v string) *DeleteMailboxPermissionsInput {
	s.GranteeId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeleteMailboxPermissionsInput) SetOrganizationId(v string) *DeleteMailboxPermissionsInput {
	s.OrganizationId = &v
	return s
}

type DeleteMailboxPermissionsOutput 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 DeleteMailboxPermissionsOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The mobile device for which you delete the override. DeviceId is case insensitive.
	//
	// DeviceId is a required field
	DeviceId *string `min:"1" type:"string" required:"true"`

	// The WorkMail organization for which the access override will be deleted.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The WorkMail user for which you want to delete the override. Accepts the
	// following types of user identities:
	//
	//    * User ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: user@domain.tld
	//
	//    * User name: user
	//
	// UserId is a required field
	UserId *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 DeleteMobileDeviceAccessOverrideInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeleteMobileDeviceAccessOverrideInput) SetOrganizationId(v string) *DeleteMobileDeviceAccessOverrideInput {
	s.OrganizationId = &v
	return s
}

// SetUserId sets the UserId field's value.
func (s *DeleteMobileDeviceAccessOverrideInput) SetUserId(v string) *DeleteMobileDeviceAccessOverrideInput {
	s.UserId = &v
	return s
}

type DeleteMobileDeviceAccessOverrideOutput 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 DeleteMobileDeviceAccessOverrideOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The identifier of the rule to be deleted.
	//
	// MobileDeviceAccessRuleId is a required field
	MobileDeviceAccessRuleId *string `min:"1" type:"string" required:"true"`

	// The WorkMail organization under which the rule will be deleted.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DeleteMobileDeviceAccessRuleInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetMobileDeviceAccessRuleId sets the MobileDeviceAccessRuleId field's value.
func (s *DeleteMobileDeviceAccessRuleInput) SetMobileDeviceAccessRuleId(v string) *DeleteMobileDeviceAccessRuleInput {
	s.MobileDeviceAccessRuleId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeleteMobileDeviceAccessRuleInput) SetOrganizationId(v string) *DeleteMobileDeviceAccessRuleInput {
	s.OrganizationId = &v
	return s
}

type DeleteMobileDeviceAccessRuleOutput 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 DeleteMobileDeviceAccessRuleOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The idempotency token associated with the request.
	ClientToken *string `min:"1" type:"string" idempotencyToken:"true"`

	// If true, deletes the AWS Directory Service directory associated with the
	// organization.
	//
	// DeleteDirectory is a required field
	DeleteDirectory *bool `type:"boolean" required:"true"`

	// Deletes a WorkMail organization even if the organization has enabled users.
	ForceDelete *bool `type:"boolean"`

	// The organization ID.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DeleteOrganizationInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetClientToken sets the ClientToken field's value.
func (s *DeleteOrganizationInput) SetClientToken(v string) *DeleteOrganizationInput {
	s.ClientToken = &v
	return s
}

// SetDeleteDirectory sets the DeleteDirectory field's value.
func (s *DeleteOrganizationInput) SetDeleteDirectory(v bool) *DeleteOrganizationInput {
	s.DeleteDirectory = &v
	return s
}

// SetForceDelete sets the ForceDelete field's value.
func (s *DeleteOrganizationInput) SetForceDelete(v bool) *DeleteOrganizationInput {
	s.ForceDelete = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeleteOrganizationInput) SetOrganizationId(v string) *DeleteOrganizationInput {
	s.OrganizationId = &v
	return s
}

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

	// The organization ID.
	OrganizationId *string `min:"34" type:"string"`

	// The state of the organization.
	State *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 DeleteOrganizationOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeleteOrganizationOutput) SetOrganizationId(v string) *DeleteOrganizationOutput {
	s.OrganizationId = &v
	return s
}

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

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

	// The identifier associated with the organization from which the resource is
	// deleted.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The identifier of the resource to be deleted.
	//
	// The identifier can accept ResourceId, or Resourcename. The following identity
	// formats are available:
	//
	//    * Resource ID: r-0123456789a0123456789b0123456789
	//
	//    * Resource name: resource
	//
	// ResourceId is a required field
	ResourceId *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 DeleteResourceInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeleteResourceInput) SetOrganizationId(v string) *DeleteResourceInput {
	s.OrganizationId = &v
	return s
}

// SetResourceId sets the ResourceId field's value.
func (s *DeleteResourceInput) SetResourceId(v string) *DeleteResourceInput {
	s.ResourceId = &v
	return s
}

type DeleteResourceOutput 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 DeleteResourceOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The retention policy ID.
	//
	// Id is a required field
	Id *string `min:"1" type:"string" required:"true"`

	// The organization ID.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DeleteRetentionPolicyInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetId sets the Id field's value.
func (s *DeleteRetentionPolicyInput) SetId(v string) *DeleteRetentionPolicyInput {
	s.Id = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeleteRetentionPolicyInput) SetOrganizationId(v string) *DeleteRetentionPolicyInput {
	s.OrganizationId = &v
	return s
}

type DeleteRetentionPolicyOutput 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 DeleteRetentionPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The organization that contains the user to be deleted.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The identifier of the user to be deleted.
	//
	// The identifier can be the UserId or Username. The following identity formats
	// are available:
	//
	//    * User ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * User name: user
	//
	// UserId is a required field
	UserId *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 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.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.UserId == nil {
		invalidParams.Add(request.NewErrParamRequired("UserId"))
	}
	if s.UserId != nil && len(*s.UserId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("UserId", 1))
	}

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

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

// SetUserId sets the UserId field's value.
func (s *DeleteUserInput) SetUserId(v string) *DeleteUserInput {
	s.UserId = &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 DeregisterFromWorkMailInput struct {
	_ struct{} `type:"structure"`

	// The identifier for the member to be updated.
	//
	// The identifier can be UserId, ResourceId, or Group Id, Username, Resourcename,
	// or Groupname, or email.
	//
	//    * Entity ID: 12345678-1234-1234-1234-123456789012, r-0123456789a0123456789b0123456789,
	//    or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: entity@domain.tld
	//
	//    * Entity name: entity
	//
	// EntityId is a required field
	EntityId *string `min:"1" type:"string" required:"true"`

	// The identifier for the organization under which the WorkMail entity exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DeregisterFromWorkMailInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetEntityId sets the EntityId field's value.
func (s *DeregisterFromWorkMailInput) SetEntityId(v string) *DeregisterFromWorkMailInput {
	s.EntityId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeregisterFromWorkMailInput) SetOrganizationId(v string) *DeregisterFromWorkMailInput {
	s.OrganizationId = &v
	return s
}

type DeregisterFromWorkMailOutput 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 DeregisterFromWorkMailOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The domain to deregister in WorkMail and SES.
	//
	// DomainName is a required field
	DomainName *string `min:"3" type:"string" required:"true"`

	// The WorkMail organization for which the domain will be deregistered.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DeregisterMailDomainInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetDomainName sets the DomainName field's value.
func (s *DeregisterMailDomainInput) SetDomainName(v string) *DeregisterMailDomainInput {
	s.DomainName = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DeregisterMailDomainInput) SetOrganizationId(v string) *DeregisterMailDomainInput {
	s.OrganizationId = &v
	return s
}

type DeregisterMailDomainOutput 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 DeregisterMailDomainOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The ID of the organization for which the email monitoring configuration is
	// described.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DescribeEmailMonitoringConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *DescribeEmailMonitoringConfigurationInput) SetOrganizationId(v string) *DescribeEmailMonitoringConfigurationInput {
	s.OrganizationId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the CloudWatch Log group associated with
	// the email monitoring configuration.
	LogGroupArn *string `min:"47" type:"string"`

	// The Amazon Resource Name (ARN) of the IAM Role associated with the email
	// monitoring configuration.
	RoleArn *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 DescribeEmailMonitoringConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetLogGroupArn sets the LogGroupArn field's value.
func (s *DescribeEmailMonitoringConfigurationOutput) SetLogGroupArn(v string) *DescribeEmailMonitoringConfigurationOutput {
	s.LogGroupArn = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *DescribeEmailMonitoringConfigurationOutput) SetRoleArn(v string) *DescribeEmailMonitoringConfigurationOutput {
	s.RoleArn = &v
	return s
}

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

	// The email under which the entity exists.
	//
	// Email is a required field
	Email *string `min:"1" type:"string" required:"true"`

	// The identifier for the organization under which the entity exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DescribeEntityInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetEmail sets the Email field's value.
func (s *DescribeEntityInput) SetEmail(v string) *DescribeEntityInput {
	s.Email = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DescribeEntityInput) SetOrganizationId(v string) *DescribeEntityInput {
	s.OrganizationId = &v
	return s
}

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

	// The entity ID under which the entity exists.
	EntityId *string `min:"12" type:"string"`

	// Username, GroupName, or ResourceName based on entity type.
	Name *string `type:"string"`

	// Entity type.
	Type *string `type:"string" enum:"EntityType"`
}

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

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

// SetEntityId sets the EntityId field's value.
func (s *DescribeEntityOutput) SetEntityId(v string) *DescribeEntityOutput {
	s.EntityId = &v
	return s
}

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

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

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

	// The identifier for the group to be described.
	//
	// The identifier can accept GroupId, Groupname, or email. The following identity
	// formats are available:
	//
	//    * Group ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: group@domain.tld
	//
	//    * Group name: group
	//
	// GroupId is a required field
	GroupId *string `min:"1" type:"string" required:"true"`

	// The identifier for the organization under which the group exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DescribeGroupInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetGroupId sets the GroupId field's value.
func (s *DescribeGroupInput) SetGroupId(v string) *DescribeGroupInput {
	s.GroupId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DescribeGroupInput) SetOrganizationId(v string) *DescribeGroupInput {
	s.OrganizationId = &v
	return s
}

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

	// The date and time when a user was deregistered from WorkMail, in UNIX epoch
	// time format.
	DisabledDate *time.Time `type:"timestamp"`

	// The email of the described group.
	Email *string `min:"1" type:"string"`

	// The date and time when a user was registered to WorkMail, in UNIX epoch time
	// format.
	EnabledDate *time.Time `type:"timestamp"`

	// The identifier of the described group.
	GroupId *string `min:"12" type:"string"`

	// If the value is set to true, the group is hidden from the address book.
	HiddenFromGlobalAddressList *bool `type:"boolean"`

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

	// The state of the user: enabled (registered to WorkMail) or disabled (deregistered
	// or never registered to WorkMail).
	State *string `type:"string" enum:"EntityState"`
}

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

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

// SetDisabledDate sets the DisabledDate field's value.
func (s *DescribeGroupOutput) SetDisabledDate(v time.Time) *DescribeGroupOutput {
	s.DisabledDate = &v
	return s
}

// SetEmail sets the Email field's value.
func (s *DescribeGroupOutput) SetEmail(v string) *DescribeGroupOutput {
	s.Email = &v
	return s
}

// SetEnabledDate sets the EnabledDate field's value.
func (s *DescribeGroupOutput) SetEnabledDate(v time.Time) *DescribeGroupOutput {
	s.EnabledDate = &v
	return s
}

// SetGroupId sets the GroupId field's value.
func (s *DescribeGroupOutput) SetGroupId(v string) *DescribeGroupOutput {
	s.GroupId = &v
	return s
}

// SetHiddenFromGlobalAddressList sets the HiddenFromGlobalAddressList field's value.
func (s *DescribeGroupOutput) SetHiddenFromGlobalAddressList(v bool) *DescribeGroupOutput {
	s.HiddenFromGlobalAddressList = &v
	return s
}

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

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

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

	// Lists the ID of the given organization.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DescribeInboundDmarcSettingsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *DescribeInboundDmarcSettingsInput) SetOrganizationId(v string) *DescribeInboundDmarcSettingsInput {
	s.OrganizationId = &v
	return s
}

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

	// Lists the enforcement setting of the applied policy.
	Enforced *bool `type:"boolean"`
}

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

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

// SetEnforced sets the Enforced field's value.
func (s *DescribeInboundDmarcSettingsOutput) SetEnforced(v bool) *DescribeInboundDmarcSettingsOutput {
	s.Enforced = &v
	return s
}

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

	// The mailbox export job ID.
	//
	// JobId is a required field
	JobId *string `min:"1" type:"string" required:"true"`

	// The organization ID.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DescribeMailboxExportJobInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetJobId sets the JobId field's value.
func (s *DescribeMailboxExportJobInput) SetJobId(v string) *DescribeMailboxExportJobInput {
	s.JobId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DescribeMailboxExportJobInput) SetOrganizationId(v string) *DescribeMailboxExportJobInput {
	s.OrganizationId = &v
	return s
}

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

	// The mailbox export job description.
	Description *string `type:"string"`

	// The mailbox export job end timestamp.
	EndTime *time.Time `type:"timestamp"`

	// The identifier of the user or resource associated with the mailbox.
	EntityId *string `min:"12" type:"string"`

	// Error information for failed mailbox export jobs.
	ErrorInfo *string `min:"1" type:"string"`

	// The estimated progress of the mailbox export job, in percentage points.
	EstimatedProgress *int64 `type:"integer"`

	// The Amazon Resource Name (ARN) of the symmetric AWS Key Management Service
	// (AWS KMS) key that encrypts the exported mailbox content.
	KmsKeyArn *string `min:"20" type:"string"`

	// The ARN of the AWS Identity and Access Management (IAM) role that grants
	// write permission to the Amazon Simple Storage Service (Amazon S3) bucket.
	RoleArn *string `min:"20" type:"string"`

	// The name of the S3 bucket.
	S3BucketName *string `min:"1" type:"string"`

	// The path to the S3 bucket and file that the mailbox export job is exporting
	// to.
	S3Path *string `min:"1" type:"string"`

	// The S3 bucket prefix.
	S3Prefix *string `min:"1" type:"string"`

	// The mailbox export job start timestamp.
	StartTime *time.Time `type:"timestamp"`

	// The state of the mailbox export job.
	State *string `type:"string" enum:"MailboxExportJobState"`
}

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

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

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

// SetEndTime sets the EndTime field's value.
func (s *DescribeMailboxExportJobOutput) SetEndTime(v time.Time) *DescribeMailboxExportJobOutput {
	s.EndTime = &v
	return s
}

// SetEntityId sets the EntityId field's value.
func (s *DescribeMailboxExportJobOutput) SetEntityId(v string) *DescribeMailboxExportJobOutput {
	s.EntityId = &v
	return s
}

// SetErrorInfo sets the ErrorInfo field's value.
func (s *DescribeMailboxExportJobOutput) SetErrorInfo(v string) *DescribeMailboxExportJobOutput {
	s.ErrorInfo = &v
	return s
}

// SetEstimatedProgress sets the EstimatedProgress field's value.
func (s *DescribeMailboxExportJobOutput) SetEstimatedProgress(v int64) *DescribeMailboxExportJobOutput {
	s.EstimatedProgress = &v
	return s
}

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

// SetRoleArn sets the RoleArn field's value.
func (s *DescribeMailboxExportJobOutput) SetRoleArn(v string) *DescribeMailboxExportJobOutput {
	s.RoleArn = &v
	return s
}

// SetS3BucketName sets the S3BucketName field's value.
func (s *DescribeMailboxExportJobOutput) SetS3BucketName(v string) *DescribeMailboxExportJobOutput {
	s.S3BucketName = &v
	return s
}

// SetS3Path sets the S3Path field's value.
func (s *DescribeMailboxExportJobOutput) SetS3Path(v string) *DescribeMailboxExportJobOutput {
	s.S3Path = &v
	return s
}

// SetS3Prefix sets the S3Prefix field's value.
func (s *DescribeMailboxExportJobOutput) SetS3Prefix(v string) *DescribeMailboxExportJobOutput {
	s.S3Prefix = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *DescribeMailboxExportJobOutput) SetStartTime(v time.Time) *DescribeMailboxExportJobOutput {
	s.StartTime = &v
	return s
}

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

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

	// The identifier for the organization to be described.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DescribeOrganizationInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *DescribeOrganizationInput) SetOrganizationId(v string) *DescribeOrganizationInput {
	s.OrganizationId = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the organization.
	ARN *string `min:"1" type:"string"`

	// The alias for an organization.
	Alias *string `min:"1" type:"string"`

	// The date at which the organization became usable in the WorkMail context,
	// in UNIX epoch time format.
	CompletedDate *time.Time `type:"timestamp"`

	// The default mail domain associated with the organization.
	DefaultMailDomain *string `type:"string"`

	// The identifier for the directory associated with an WorkMail organization.
	DirectoryId *string `type:"string"`

	// The type of directory associated with the WorkMail organization.
	DirectoryType *string `type:"string"`

	// (Optional) The error message indicating if unexpected behavior was encountered
	// with regards to the organization.
	ErrorMessage *string `type:"string"`

	// Indicates if interoperability is enabled for this organization.
	InteroperabilityEnabled *bool `type:"boolean"`

	// The user ID of the migration admin if migration is enabled for the organization.
	MigrationAdmin *string `min:"12" type:"string"`

	// The identifier of an organization.
	OrganizationId *string `min:"34" type:"string"`

	// The state of an organization.
	State *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 DescribeOrganizationOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetARN sets the ARN field's value.
func (s *DescribeOrganizationOutput) SetARN(v string) *DescribeOrganizationOutput {
	s.ARN = &v
	return s
}

// SetAlias sets the Alias field's value.
func (s *DescribeOrganizationOutput) SetAlias(v string) *DescribeOrganizationOutput {
	s.Alias = &v
	return s
}

// SetCompletedDate sets the CompletedDate field's value.
func (s *DescribeOrganizationOutput) SetCompletedDate(v time.Time) *DescribeOrganizationOutput {
	s.CompletedDate = &v
	return s
}

// SetDefaultMailDomain sets the DefaultMailDomain field's value.
func (s *DescribeOrganizationOutput) SetDefaultMailDomain(v string) *DescribeOrganizationOutput {
	s.DefaultMailDomain = &v
	return s
}

// SetDirectoryId sets the DirectoryId field's value.
func (s *DescribeOrganizationOutput) SetDirectoryId(v string) *DescribeOrganizationOutput {
	s.DirectoryId = &v
	return s
}

// SetDirectoryType sets the DirectoryType field's value.
func (s *DescribeOrganizationOutput) SetDirectoryType(v string) *DescribeOrganizationOutput {
	s.DirectoryType = &v
	return s
}

// SetErrorMessage sets the ErrorMessage field's value.
func (s *DescribeOrganizationOutput) SetErrorMessage(v string) *DescribeOrganizationOutput {
	s.ErrorMessage = &v
	return s
}

// SetInteroperabilityEnabled sets the InteroperabilityEnabled field's value.
func (s *DescribeOrganizationOutput) SetInteroperabilityEnabled(v bool) *DescribeOrganizationOutput {
	s.InteroperabilityEnabled = &v
	return s
}

// SetMigrationAdmin sets the MigrationAdmin field's value.
func (s *DescribeOrganizationOutput) SetMigrationAdmin(v string) *DescribeOrganizationOutput {
	s.MigrationAdmin = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DescribeOrganizationOutput) SetOrganizationId(v string) *DescribeOrganizationOutput {
	s.OrganizationId = &v
	return s
}

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

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

	// The identifier associated with the organization for which the resource is
	// described.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The identifier of the resource to be described.
	//
	// The identifier can accept ResourceId, Resourcename, or email. The following
	// identity formats are available:
	//
	//    * Resource ID: r-0123456789a0123456789b0123456789
	//
	//    * Email address: resource@domain.tld
	//
	//    * Resource name: resource
	//
	// ResourceId is a required field
	ResourceId *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 DescribeResourceInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *DescribeResourceInput) SetOrganizationId(v string) *DescribeResourceInput {
	s.OrganizationId = &v
	return s
}

// SetResourceId sets the ResourceId field's value.
func (s *DescribeResourceInput) SetResourceId(v string) *DescribeResourceInput {
	s.ResourceId = &v
	return s
}

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

	// The booking options for the described resource.
	BookingOptions *BookingOptions `type:"structure"`

	// Description of the resource.
	Description *string `min:"1" type:"string"`

	// The date and time when a resource was disabled from WorkMail, in UNIX epoch
	// time format.
	DisabledDate *time.Time `type:"timestamp"`

	// The email of the described resource.
	Email *string `min:"1" type:"string"`

	// The date and time when a resource was enabled for WorkMail, in UNIX epoch
	// time format.
	EnabledDate *time.Time `type:"timestamp"`

	// If enabled, the resource is hidden from the global address list.
	HiddenFromGlobalAddressList *bool `type:"boolean"`

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

	// The identifier of the described resource.
	ResourceId *string `min:"34" type:"string"`

	// The state of the resource: enabled (registered to WorkMail), disabled (deregistered
	// or never registered to WorkMail), or deleted.
	State *string `type:"string" enum:"EntityState"`

	// The type of the described resource.
	Type *string `type:"string" enum:"ResourceType"`
}

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

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

// SetBookingOptions sets the BookingOptions field's value.
func (s *DescribeResourceOutput) SetBookingOptions(v *BookingOptions) *DescribeResourceOutput {
	s.BookingOptions = v
	return s
}

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

// SetDisabledDate sets the DisabledDate field's value.
func (s *DescribeResourceOutput) SetDisabledDate(v time.Time) *DescribeResourceOutput {
	s.DisabledDate = &v
	return s
}

// SetEmail sets the Email field's value.
func (s *DescribeResourceOutput) SetEmail(v string) *DescribeResourceOutput {
	s.Email = &v
	return s
}

// SetEnabledDate sets the EnabledDate field's value.
func (s *DescribeResourceOutput) SetEnabledDate(v time.Time) *DescribeResourceOutput {
	s.EnabledDate = &v
	return s
}

// SetHiddenFromGlobalAddressList sets the HiddenFromGlobalAddressList field's value.
func (s *DescribeResourceOutput) SetHiddenFromGlobalAddressList(v bool) *DescribeResourceOutput {
	s.HiddenFromGlobalAddressList = &v
	return s
}

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

// SetResourceId sets the ResourceId field's value.
func (s *DescribeResourceOutput) SetResourceId(v string) *DescribeResourceOutput {
	s.ResourceId = &v
	return s
}

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

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

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

	// The identifier for the organization under which the user exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The identifier for the user to be described.
	//
	// The identifier can be the UserId, Username, or email. The following identity
	// formats are available:
	//
	//    * User ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: user@domain.tld
	//
	//    * User name: user
	//
	// UserId is a required field
	UserId *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 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.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.UserId == nil {
		invalidParams.Add(request.NewErrParamRequired("UserId"))
	}
	if s.UserId != nil && len(*s.UserId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("UserId", 1))
	}

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *DescribeUserInput) SetOrganizationId(v string) *DescribeUserInput {
	s.OrganizationId = &v
	return s
}

// SetUserId sets the UserId field's value.
func (s *DescribeUserInput) SetUserId(v string) *DescribeUserInput {
	s.UserId = &v
	return s
}

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

	// City where the user is located.
	//
	// City is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribeUserOutput's
	// String and GoString methods.
	City *string `type:"string" sensitive:"true"`

	// Company of the user.
	//
	// Company is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribeUserOutput's
	// String and GoString methods.
	Company *string `type:"string" sensitive:"true"`

	// Country where the user is located.
	//
	// Country is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribeUserOutput's
	// String and GoString methods.
	Country *string `type:"string" sensitive:"true"`

	// Department of the user.
	//
	// Department is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribeUserOutput's
	// String and GoString methods.
	Department *string `type:"string" sensitive:"true"`

	// The date and time at which the user was disabled for WorkMail usage, in UNIX
	// epoch time format.
	DisabledDate *time.Time `type:"timestamp"`

	// The display name of the user.
	//
	// DisplayName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribeUserOutput's
	// String and GoString methods.
	DisplayName *string `type:"string" sensitive:"true"`

	// The email of the user.
	Email *string `min:"1" type:"string"`

	// The date and time at which the user was enabled for WorkMailusage, in UNIX
	// epoch time format.
	EnabledDate *time.Time `type:"timestamp"`

	// First name of the user.
	//
	// FirstName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribeUserOutput's
	// String and GoString methods.
	FirstName *string `type:"string" sensitive:"true"`

	// If enabled, the user is hidden from the global address list.
	HiddenFromGlobalAddressList *bool `type:"boolean"`

	// Initials of the user.
	//
	// Initials is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribeUserOutput's
	// String and GoString methods.
	Initials *string `type:"string" sensitive:"true"`

	// Job title of the user.
	//
	// JobTitle is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribeUserOutput's
	// String and GoString methods.
	JobTitle *string `type:"string" sensitive:"true"`

	// Last name of the user.
	//
	// LastName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribeUserOutput's
	// String and GoString methods.
	LastName *string `type:"string" sensitive:"true"`

	// The date when the mailbox was removed for the user.
	MailboxDeprovisionedDate *time.Time `type:"timestamp"`

	// The date when the mailbox was created for the user.
	MailboxProvisionedDate *time.Time `type:"timestamp"`

	// The name for the user.
	Name *string `min:"1" type:"string"`

	// Office where the user is located.
	//
	// Office is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribeUserOutput's
	// String and GoString methods.
	Office *string `type:"string" sensitive:"true"`

	// The state of a user: enabled (registered to WorkMail) or disabled (deregistered
	// or never registered to WorkMail).
	State *string `type:"string" enum:"EntityState"`

	// Street where the user is located.
	//
	// Street is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribeUserOutput's
	// String and GoString methods.
	Street *string `type:"string" sensitive:"true"`

	// User's contact number.
	//
	// Telephone is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribeUserOutput's
	// String and GoString methods.
	Telephone *string `type:"string" sensitive:"true"`

	// The identifier for the described user.
	UserId *string `min:"12" type:"string"`

	// In certain cases, other entities are modeled as users. If interoperability
	// is enabled, resources are imported into WorkMail as users. Because different
	// WorkMail organizations rely on different directory types, administrators
	// can distinguish between an unregistered user (account is disabled and has
	// a user role) and the directory administrators. The values are USER, RESOURCE,
	// SYSTEM_USER, and REMOTE_USER.
	UserRole *string `type:"string" enum:"UserRole"`

	// Zip code of the user.
	//
	// ZipCode is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DescribeUserOutput's
	// String and GoString methods.
	ZipCode *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 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()
}

// SetCity sets the City field's value.
func (s *DescribeUserOutput) SetCity(v string) *DescribeUserOutput {
	s.City = &v
	return s
}

// SetCompany sets the Company field's value.
func (s *DescribeUserOutput) SetCompany(v string) *DescribeUserOutput {
	s.Company = &v
	return s
}

// SetCountry sets the Country field's value.
func (s *DescribeUserOutput) SetCountry(v string) *DescribeUserOutput {
	s.Country = &v
	return s
}

// SetDepartment sets the Department field's value.
func (s *DescribeUserOutput) SetDepartment(v string) *DescribeUserOutput {
	s.Department = &v
	return s
}

// SetDisabledDate sets the DisabledDate field's value.
func (s *DescribeUserOutput) SetDisabledDate(v time.Time) *DescribeUserOutput {
	s.DisabledDate = &v
	return s
}

// SetDisplayName sets the DisplayName field's value.
func (s *DescribeUserOutput) SetDisplayName(v string) *DescribeUserOutput {
	s.DisplayName = &v
	return s
}

// SetEmail sets the Email field's value.
func (s *DescribeUserOutput) SetEmail(v string) *DescribeUserOutput {
	s.Email = &v
	return s
}

// SetEnabledDate sets the EnabledDate field's value.
func (s *DescribeUserOutput) SetEnabledDate(v time.Time) *DescribeUserOutput {
	s.EnabledDate = &v
	return s
}

// SetFirstName sets the FirstName field's value.
func (s *DescribeUserOutput) SetFirstName(v string) *DescribeUserOutput {
	s.FirstName = &v
	return s
}

// SetHiddenFromGlobalAddressList sets the HiddenFromGlobalAddressList field's value.
func (s *DescribeUserOutput) SetHiddenFromGlobalAddressList(v bool) *DescribeUserOutput {
	s.HiddenFromGlobalAddressList = &v
	return s
}

// SetInitials sets the Initials field's value.
func (s *DescribeUserOutput) SetInitials(v string) *DescribeUserOutput {
	s.Initials = &v
	return s
}

// SetJobTitle sets the JobTitle field's value.
func (s *DescribeUserOutput) SetJobTitle(v string) *DescribeUserOutput {
	s.JobTitle = &v
	return s
}

// SetLastName sets the LastName field's value.
func (s *DescribeUserOutput) SetLastName(v string) *DescribeUserOutput {
	s.LastName = &v
	return s
}

// SetMailboxDeprovisionedDate sets the MailboxDeprovisionedDate field's value.
func (s *DescribeUserOutput) SetMailboxDeprovisionedDate(v time.Time) *DescribeUserOutput {
	s.MailboxDeprovisionedDate = &v
	return s
}

// SetMailboxProvisionedDate sets the MailboxProvisionedDate field's value.
func (s *DescribeUserOutput) SetMailboxProvisionedDate(v time.Time) *DescribeUserOutput {
	s.MailboxProvisionedDate = &v
	return s
}

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

// SetOffice sets the Office field's value.
func (s *DescribeUserOutput) SetOffice(v string) *DescribeUserOutput {
	s.Office = &v
	return s
}

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

// SetStreet sets the Street field's value.
func (s *DescribeUserOutput) SetStreet(v string) *DescribeUserOutput {
	s.Street = &v
	return s
}

// SetTelephone sets the Telephone field's value.
func (s *DescribeUserOutput) SetTelephone(v string) *DescribeUserOutput {
	s.Telephone = &v
	return s
}

// SetUserId sets the UserId field's value.
func (s *DescribeUserOutput) SetUserId(v string) *DescribeUserOutput {
	s.UserId = &v
	return s
}

// SetUserRole sets the UserRole field's value.
func (s *DescribeUserOutput) SetUserRole(v string) *DescribeUserOutput {
	s.UserRole = &v
	return s
}

// SetZipCode sets the ZipCode field's value.
func (s *DescribeUserOutput) SetZipCode(v string) *DescribeUserOutput {
	s.ZipCode = &v
	return s
}

// The directory is already in use by another WorkMail organization in the same
// account and Region.
type DirectoryInUseException 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 DirectoryInUseException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorDirectoryInUseException(v protocol.ResponseMetadata) error {
	return &DirectoryInUseException{
		RespMetadata: v,
	}
}

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

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

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

func (s *DirectoryInUseException) 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 *DirectoryInUseException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The directory service doesn't recognize the credentials supplied by WorkMail.
type DirectoryServiceAuthenticationFailedException 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 DirectoryServiceAuthenticationFailedException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorDirectoryServiceAuthenticationFailedException(v protocol.ResponseMetadata) error {
	return &DirectoryServiceAuthenticationFailedException{
		RespMetadata: v,
	}
}

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

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

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

func (s *DirectoryServiceAuthenticationFailedException) 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 *DirectoryServiceAuthenticationFailedException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The directory is unavailable. It might be located in another Region or deleted.
type DirectoryUnavailableException 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 DirectoryUnavailableException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorDirectoryUnavailableException(v protocol.ResponseMetadata) error {
	return &DirectoryUnavailableException{
		RespMetadata: v,
	}
}

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

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

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

func (s *DirectoryUnavailableException) 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 *DirectoryUnavailableException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

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

	// The identifier for the member (user, group) to be removed from the resource's
	// delegates.
	//
	// The entity ID can accept UserId or GroupID, Username or Groupname, or email.
	//
	//    * Entity: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: entity@domain.tld
	//
	//    * Entity: entity
	//
	// EntityId is a required field
	EntityId *string `min:"1" type:"string" required:"true"`

	// The identifier for the organization under which the resource exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The identifier of the resource from which delegates' set members are removed.
	//
	// The identifier can accept ResourceId, Resourcename, or email. The following
	// identity formats are available:
	//
	//    * Resource ID: r-0123456789a0123456789b0123456789
	//
	//    * Email address: resource@domain.tld
	//
	//    * Resource name: resource
	//
	// ResourceId is a required field
	ResourceId *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 DisassociateDelegateFromResourceInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetEntityId sets the EntityId field's value.
func (s *DisassociateDelegateFromResourceInput) SetEntityId(v string) *DisassociateDelegateFromResourceInput {
	s.EntityId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DisassociateDelegateFromResourceInput) SetOrganizationId(v string) *DisassociateDelegateFromResourceInput {
	s.OrganizationId = &v
	return s
}

// SetResourceId sets the ResourceId field's value.
func (s *DisassociateDelegateFromResourceInput) SetResourceId(v string) *DisassociateDelegateFromResourceInput {
	s.ResourceId = &v
	return s
}

type DisassociateDelegateFromResourceOutput 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 DisassociateDelegateFromResourceOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

	// The identifier for the group from which members are removed.
	//
	// The identifier can accept GroupId, Groupname, or email. The following identity
	// formats are available:
	//
	//    * Group ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: group@domain.tld
	//
	//    * Group name: group
	//
	// GroupId is a required field
	GroupId *string `min:"1" type:"string" required:"true"`

	// The identifier for the member to be removed from the group.
	//
	// The member ID can accept UserID or GroupId, Username or Groupname, or email.
	//
	//    * Member ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: member@domain.tld
	//
	//    * Member name: member
	//
	// MemberId is a required field
	MemberId *string `min:"1" type:"string" required:"true"`

	// The identifier for the organization under which the group exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 DisassociateMemberFromGroupInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetGroupId sets the GroupId field's value.
func (s *DisassociateMemberFromGroupInput) SetGroupId(v string) *DisassociateMemberFromGroupInput {
	s.GroupId = &v
	return s
}

// SetMemberId sets the MemberId field's value.
func (s *DisassociateMemberFromGroupInput) SetMemberId(v string) *DisassociateMemberFromGroupInput {
	s.MemberId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *DisassociateMemberFromGroupInput) SetOrganizationId(v string) *DisassociateMemberFromGroupInput {
	s.OrganizationId = &v
	return s
}

type DisassociateMemberFromGroupOutput 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 DisassociateMemberFromGroupOutput) String() string {
	return awsutil.Prettify(s)
}

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

// A DNS record uploaded to your DNS provider.
type DnsRecord struct {
	_ struct{} `type:"structure"`

	// The DNS hostname.- For example, domain.example.com.
	Hostname *string `type:"string"`

	// The RFC 1035 record type. Possible values: CNAME, A, MX.
	Type *string `type:"string"`

	// The value returned by the DNS for a query to that hostname and record type.
	Value *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 DnsRecord) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

// The domain to associate with an WorkMail organization.
//
// When you configure a domain hosted in Amazon Route 53 (Route 53), all recommended
// DNS records are added to the organization when you create it. For more information,
// see Adding a domain (https://docs.aws.amazon.com/workmail/latest/adminguide/add_domain.html)
// in the WorkMail Administrator Guide.
type Domain struct {
	_ struct{} `type:"structure"`

	// The fully qualified domain name.
	//
	// DomainName is a required field
	DomainName *string `min:"3" type:"string" required:"true"`

	// The hosted zone ID for a domain hosted in Route 53. Required when configuring
	// a domain hosted in Route 53.
	HostedZoneId *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 Domain) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

// The email address that you're trying to assign is already created for a different
// user, group, or resource.
type EmailAddressInUseException 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 EmailAddressInUseException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorEmailAddressInUseException(v protocol.ResponseMetadata) error {
	return &EmailAddressInUseException{
		RespMetadata: v,
	}
}

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

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

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

func (s *EmailAddressInUseException) 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 *EmailAddressInUseException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The user, group, or resource that you're trying to register is already registered.
type EntityAlreadyRegisteredException 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 EntityAlreadyRegisteredException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorEntityAlreadyRegisteredException(v protocol.ResponseMetadata) error {
	return &EntityAlreadyRegisteredException{
		RespMetadata: v,
	}
}

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

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

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

func (s *EntityAlreadyRegisteredException) 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 *EntityAlreadyRegisteredException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The identifier supplied for the user, group, or resource does not exist in
// your organization.
type EntityNotFoundException 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 EntityNotFoundException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorEntityNotFoundException(v protocol.ResponseMetadata) error {
	return &EntityNotFoundException{
		RespMetadata: v,
	}
}

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

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

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

func (s *EntityNotFoundException) 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 *EntityNotFoundException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// You are performing an operation on a user, group, or resource that isn't
// in the expected state, such as trying to delete an active user.
type EntityStateException 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 EntityStateException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorEntityStateException(v protocol.ResponseMetadata) error {
	return &EntityStateException{
		RespMetadata: v,
	}
}

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

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

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

func (s *EntityStateException) 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 *EntityStateException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// Describes an EWS based availability provider. This is only used as input
// to the service.
type EwsAvailabilityProvider struct {
	_ struct{} `type:"structure"`

	// The endpoint of the remote EWS server.
	//
	// EwsEndpoint is a required field
	EwsEndpoint *string `type:"string" required:"true"`

	// The password used to authenticate the remote EWS server.
	//
	// EwsPassword is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by EwsAvailabilityProvider's
	// String and GoString methods.
	//
	// EwsPassword is a required field
	EwsPassword *string `type:"string" required:"true" sensitive:"true"`

	// The username used to authenticate the remote EWS server.
	//
	// EwsUsername is a required field
	EwsUsername *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 EwsAvailabilityProvider) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetEwsEndpoint sets the EwsEndpoint field's value.
func (s *EwsAvailabilityProvider) SetEwsEndpoint(v string) *EwsAvailabilityProvider {
	s.EwsEndpoint = &v
	return s
}

// SetEwsPassword sets the EwsPassword field's value.
func (s *EwsAvailabilityProvider) SetEwsPassword(v string) *EwsAvailabilityProvider {
	s.EwsPassword = &v
	return s
}

// SetEwsUsername sets the EwsUsername field's value.
func (s *EwsAvailabilityProvider) SetEwsUsername(v string) *EwsAvailabilityProvider {
	s.EwsUsername = &v
	return s
}

// The configuration applied to an organization's folders by its retention policy.
type FolderConfiguration struct {
	_ struct{} `type:"structure"`

	// The action to take on the folder contents at the end of the folder configuration
	// period.
	//
	// Action is a required field
	Action *string `type:"string" required:"true" enum:"RetentionAction"`

	// The folder name.
	//
	// Name is a required field
	Name *string `type:"string" required:"true" enum:"FolderName"`

	// The number of days for which the folder-configuration action applies.
	Period *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 FolderConfiguration) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAction sets the Action field's value.
func (s *FolderConfiguration) SetAction(v string) *FolderConfiguration {
	s.Action = &v
	return s
}

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

// SetPeriod sets the Period field's value.
func (s *FolderConfiguration) SetPeriod(v int64) *FolderConfiguration {
	s.Period = &v
	return s
}

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

	// The access protocol action. Valid values include ActiveSync, AutoDiscover,
	// EWS, IMAP, SMTP, WindowsOutlook, and WebMail.
	//
	// Action is a required field
	Action *string `min:"1" type:"string" required:"true"`

	// The impersonation role ID.
	ImpersonationRoleId *string `min:"1" type:"string"`

	// The IPv4 address.
	//
	// IpAddress is a required field
	IpAddress *string `min:"1" type:"string" required:"true"`

	// The identifier for the organization.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The user ID.
	UserId *string `min:"12" 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 GetAccessControlEffectInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetAccessControlEffectInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetAccessControlEffectInput"}
	if s.Action == nil {
		invalidParams.Add(request.NewErrParamRequired("Action"))
	}
	if s.Action != nil && len(*s.Action) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Action", 1))
	}
	if s.ImpersonationRoleId != nil && len(*s.ImpersonationRoleId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ImpersonationRoleId", 1))
	}
	if s.IpAddress == nil {
		invalidParams.Add(request.NewErrParamRequired("IpAddress"))
	}
	if s.IpAddress != nil && len(*s.IpAddress) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("IpAddress", 1))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.UserId != nil && len(*s.UserId) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("UserId", 12))
	}

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

// SetAction sets the Action field's value.
func (s *GetAccessControlEffectInput) SetAction(v string) *GetAccessControlEffectInput {
	s.Action = &v
	return s
}

// SetImpersonationRoleId sets the ImpersonationRoleId field's value.
func (s *GetAccessControlEffectInput) SetImpersonationRoleId(v string) *GetAccessControlEffectInput {
	s.ImpersonationRoleId = &v
	return s
}

// SetIpAddress sets the IpAddress field's value.
func (s *GetAccessControlEffectInput) SetIpAddress(v string) *GetAccessControlEffectInput {
	s.IpAddress = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *GetAccessControlEffectInput) SetOrganizationId(v string) *GetAccessControlEffectInput {
	s.OrganizationId = &v
	return s
}

// SetUserId sets the UserId field's value.
func (s *GetAccessControlEffectInput) SetUserId(v string) *GetAccessControlEffectInput {
	s.UserId = &v
	return s
}

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

	// The rule effect.
	Effect *string `type:"string" enum:"AccessControlRuleEffect"`

	// The rules that match the given parameters, resulting in an effect.
	MatchedRules []*string `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 GetAccessControlEffectOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEffect sets the Effect field's value.
func (s *GetAccessControlEffectOutput) SetEffect(v string) *GetAccessControlEffectOutput {
	s.Effect = &v
	return s
}

// SetMatchedRules sets the MatchedRules field's value.
func (s *GetAccessControlEffectOutput) SetMatchedRules(v []*string) *GetAccessControlEffectOutput {
	s.MatchedRules = v
	return s
}

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

	// The organization ID.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 GetDefaultRetentionPolicyInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *GetDefaultRetentionPolicyInput) SetOrganizationId(v string) *GetDefaultRetentionPolicyInput {
	s.OrganizationId = &v
	return s
}

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

	// The retention policy description.
	Description *string `type:"string"`

	// The retention policy folder configurations.
	FolderConfigurations []*FolderConfiguration `type:"list"`

	// The retention policy ID.
	Id *string `min:"1" type:"string"`

	// The retention policy name.
	Name *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 GetDefaultRetentionPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetFolderConfigurations sets the FolderConfigurations field's value.
func (s *GetDefaultRetentionPolicyOutput) SetFolderConfigurations(v []*FolderConfiguration) *GetDefaultRetentionPolicyOutput {
	s.FolderConfigurations = v
	return s
}

// SetId sets the Id field's value.
func (s *GetDefaultRetentionPolicyOutput) SetId(v string) *GetDefaultRetentionPolicyOutput {
	s.Id = &v
	return s
}

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

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

	// The impersonation role ID to test.
	//
	// ImpersonationRoleId is a required field
	ImpersonationRoleId *string `min:"1" type:"string" required:"true"`

	// The WorkMail organization where the impersonation role is defined.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The WorkMail organization user chosen to test the impersonation role. The
	// following identity formats are available:
	//
	//    * User ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: user@domain.tld
	//
	//    * User name: user
	//
	// TargetUser is a required field
	TargetUser *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 GetImpersonationRoleEffectInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetImpersonationRoleId sets the ImpersonationRoleId field's value.
func (s *GetImpersonationRoleEffectInput) SetImpersonationRoleId(v string) *GetImpersonationRoleEffectInput {
	s.ImpersonationRoleId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *GetImpersonationRoleEffectInput) SetOrganizationId(v string) *GetImpersonationRoleEffectInput {
	s.OrganizationId = &v
	return s
}

// SetTargetUser sets the TargetUser field's value.
func (s *GetImpersonationRoleEffectInput) SetTargetUser(v string) *GetImpersonationRoleEffectInput {
	s.TargetUser = &v
	return s
}

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

	// Effect of the impersonation role on the target user based on its rules. Available
	// effects are ALLOW or DENY.
	Effect *string `type:"string" enum:"AccessEffect"`

	// A list of the rules that match the input and produce the configured effect.
	MatchedRules []*ImpersonationMatchedRule `type:"list"`

	// The impersonation role type.
	Type *string `type:"string" enum:"ImpersonationRoleType"`
}

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

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

// SetEffect sets the Effect field's value.
func (s *GetImpersonationRoleEffectOutput) SetEffect(v string) *GetImpersonationRoleEffectOutput {
	s.Effect = &v
	return s
}

// SetMatchedRules sets the MatchedRules field's value.
func (s *GetImpersonationRoleEffectOutput) SetMatchedRules(v []*ImpersonationMatchedRule) *GetImpersonationRoleEffectOutput {
	s.MatchedRules = v
	return s
}

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

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

	// The impersonation role ID to retrieve.
	//
	// ImpersonationRoleId is a required field
	ImpersonationRoleId *string `min:"1" type:"string" required:"true"`

	// The WorkMail organization from which to retrieve the impersonation role.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 GetImpersonationRoleInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetImpersonationRoleId sets the ImpersonationRoleId field's value.
func (s *GetImpersonationRoleInput) SetImpersonationRoleId(v string) *GetImpersonationRoleInput {
	s.ImpersonationRoleId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *GetImpersonationRoleInput) SetOrganizationId(v string) *GetImpersonationRoleInput {
	s.OrganizationId = &v
	return s
}

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

	// The date when the impersonation role was created.
	DateCreated *time.Time `type:"timestamp"`

	// The date when the impersonation role was last modified.
	DateModified *time.Time `type:"timestamp"`

	// The impersonation role description.
	Description *string `min:"1" type:"string"`

	// The impersonation role ID.
	ImpersonationRoleId *string `min:"1" type:"string"`

	// The impersonation role name.
	Name *string `min:"1" type:"string"`

	// The list of rules for the given impersonation role.
	Rules []*ImpersonationRule `type:"list"`

	// The impersonation role type.
	Type *string `type:"string" enum:"ImpersonationRoleType"`
}

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

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

// SetDateCreated sets the DateCreated field's value.
func (s *GetImpersonationRoleOutput) SetDateCreated(v time.Time) *GetImpersonationRoleOutput {
	s.DateCreated = &v
	return s
}

// SetDateModified sets the DateModified field's value.
func (s *GetImpersonationRoleOutput) SetDateModified(v time.Time) *GetImpersonationRoleOutput {
	s.DateModified = &v
	return s
}

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

// SetImpersonationRoleId sets the ImpersonationRoleId field's value.
func (s *GetImpersonationRoleOutput) SetImpersonationRoleId(v string) *GetImpersonationRoleOutput {
	s.ImpersonationRoleId = &v
	return s
}

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

// SetRules sets the Rules field's value.
func (s *GetImpersonationRoleOutput) SetRules(v []*ImpersonationRule) *GetImpersonationRoleOutput {
	s.Rules = v
	return s
}

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

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

	// The domain from which you want to retrieve details.
	//
	// DomainName is a required field
	DomainName *string `min:"3" type:"string" required:"true"`

	// The WorkMail organization for which the domain is retrieved.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 GetMailDomainInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetDomainName sets the DomainName field's value.
func (s *GetMailDomainInput) SetDomainName(v string) *GetMailDomainInput {
	s.DomainName = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *GetMailDomainInput) SetOrganizationId(v string) *GetMailDomainInput {
	s.OrganizationId = &v
	return s
}

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

	// Indicates the status of a DKIM verification.
	DkimVerificationStatus *string `type:"string" enum:"DnsRecordVerificationStatus"`

	// Specifies whether the domain is the default domain for your organization.
	IsDefault *bool `type:"boolean"`

	// Specifies whether the domain is a test domain provided by WorkMail, or a
	// custom domain.
	IsTestDomain *bool `type:"boolean"`

	// Indicates the status of the domain ownership verification.
	OwnershipVerificationStatus *string `type:"string" enum:"DnsRecordVerificationStatus"`

	// A list of the DNS records that WorkMail recommends adding in your DNS provider
	// for the best user experience. The records configure your domain with DMARC,
	// SPF, DKIM, and direct incoming email traffic to SES. See admin guide for
	// more details.
	Records []*DnsRecord `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 GetMailDomainOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetDkimVerificationStatus sets the DkimVerificationStatus field's value.
func (s *GetMailDomainOutput) SetDkimVerificationStatus(v string) *GetMailDomainOutput {
	s.DkimVerificationStatus = &v
	return s
}

// SetIsDefault sets the IsDefault field's value.
func (s *GetMailDomainOutput) SetIsDefault(v bool) *GetMailDomainOutput {
	s.IsDefault = &v
	return s
}

// SetIsTestDomain sets the IsTestDomain field's value.
func (s *GetMailDomainOutput) SetIsTestDomain(v bool) *GetMailDomainOutput {
	s.IsTestDomain = &v
	return s
}

// SetOwnershipVerificationStatus sets the OwnershipVerificationStatus field's value.
func (s *GetMailDomainOutput) SetOwnershipVerificationStatus(v string) *GetMailDomainOutput {
	s.OwnershipVerificationStatus = &v
	return s
}

// SetRecords sets the Records field's value.
func (s *GetMailDomainOutput) SetRecords(v []*DnsRecord) *GetMailDomainOutput {
	s.Records = v
	return s
}

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

	// The identifier for the organization that contains the user whose mailbox
	// details are being requested.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The identifier for the user whose mailbox details are being requested.
	//
	// The identifier can be the UserId, Username, or email. The following identity
	// formats are available:
	//
	//    * User ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: user@domain.tld
	//
	//    * User name: user
	//
	// UserId is a required field
	UserId *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 GetMailboxDetailsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *GetMailboxDetailsInput) SetOrganizationId(v string) *GetMailboxDetailsInput {
	s.OrganizationId = &v
	return s
}

// SetUserId sets the UserId field's value.
func (s *GetMailboxDetailsInput) SetUserId(v string) *GetMailboxDetailsInput {
	s.UserId = &v
	return s
}

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

	// The maximum allowed mailbox size, in MB, for the specified user.
	MailboxQuota *int64 `min:"1" type:"integer"`

	// The current mailbox size, in MB, for the specified user.
	MailboxSize *float64 `type:"double"`
}

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

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

// SetMailboxQuota sets the MailboxQuota field's value.
func (s *GetMailboxDetailsOutput) SetMailboxQuota(v int64) *GetMailboxDetailsOutput {
	s.MailboxQuota = &v
	return s
}

// SetMailboxSize sets the MailboxSize field's value.
func (s *GetMailboxDetailsOutput) SetMailboxSize(v float64) *GetMailboxDetailsOutput {
	s.MailboxSize = &v
	return s
}

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

	// Device model the simulated user will report.
	DeviceModel *string `min:"1" type:"string"`

	// Device operating system the simulated user will report.
	DeviceOperatingSystem *string `min:"1" type:"string"`

	// Device type the simulated user will report.
	DeviceType *string `min:"1" type:"string"`

	// Device user agent the simulated user will report.
	DeviceUserAgent *string `min:"1" type:"string"`

	// The WorkMail organization to simulate the access effect for.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 GetMobileDeviceAccessEffectInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetDeviceModel sets the DeviceModel field's value.
func (s *GetMobileDeviceAccessEffectInput) SetDeviceModel(v string) *GetMobileDeviceAccessEffectInput {
	s.DeviceModel = &v
	return s
}

// SetDeviceOperatingSystem sets the DeviceOperatingSystem field's value.
func (s *GetMobileDeviceAccessEffectInput) SetDeviceOperatingSystem(v string) *GetMobileDeviceAccessEffectInput {
	s.DeviceOperatingSystem = &v
	return s
}

// SetDeviceType sets the DeviceType field's value.
func (s *GetMobileDeviceAccessEffectInput) SetDeviceType(v string) *GetMobileDeviceAccessEffectInput {
	s.DeviceType = &v
	return s
}

// SetDeviceUserAgent sets the DeviceUserAgent field's value.
func (s *GetMobileDeviceAccessEffectInput) SetDeviceUserAgent(v string) *GetMobileDeviceAccessEffectInput {
	s.DeviceUserAgent = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *GetMobileDeviceAccessEffectInput) SetOrganizationId(v string) *GetMobileDeviceAccessEffectInput {
	s.OrganizationId = &v
	return s
}

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

	// The effect of the simulated access, ALLOW or DENY, after evaluating mobile
	// device access rules in the WorkMail organization for the simulated user parameters.
	Effect *string `type:"string" enum:"MobileDeviceAccessRuleEffect"`

	// A list of the rules which matched the simulated user input and produced the
	// effect.
	MatchedRules []*MobileDeviceAccessMatchedRule `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 GetMobileDeviceAccessEffectOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEffect sets the Effect field's value.
func (s *GetMobileDeviceAccessEffectOutput) SetEffect(v string) *GetMobileDeviceAccessEffectOutput {
	s.Effect = &v
	return s
}

// SetMatchedRules sets the MatchedRules field's value.
func (s *GetMobileDeviceAccessEffectOutput) SetMatchedRules(v []*MobileDeviceAccessMatchedRule) *GetMobileDeviceAccessEffectOutput {
	s.MatchedRules = v
	return s
}

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

	// The mobile device to which the override applies. DeviceId is case insensitive.
	//
	// DeviceId is a required field
	DeviceId *string `min:"1" type:"string" required:"true"`

	// The WorkMail organization to which you want to apply the override.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// Identifies the WorkMail user for the override. Accepts the following types
	// of user identities:
	//
	//    * User ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: user@domain.tld
	//
	//    * User name: user
	//
	// UserId is a required field
	UserId *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 GetMobileDeviceAccessOverrideInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *GetMobileDeviceAccessOverrideInput) SetOrganizationId(v string) *GetMobileDeviceAccessOverrideInput {
	s.OrganizationId = &v
	return s
}

// SetUserId sets the UserId field's value.
func (s *GetMobileDeviceAccessOverrideInput) SetUserId(v string) *GetMobileDeviceAccessOverrideInput {
	s.UserId = &v
	return s
}

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

	// The date the override was first created.
	DateCreated *time.Time `type:"timestamp"`

	// The date the description was last modified.
	DateModified *time.Time `type:"timestamp"`

	// A description of the override.
	Description *string `min:"1" type:"string"`

	// The device to which the access override applies.
	DeviceId *string `min:"1" type:"string"`

	// The effect of the override, ALLOW or DENY.
	Effect *string `type:"string" enum:"MobileDeviceAccessRuleEffect"`

	// The WorkMail user to which the access override applies.
	UserId *string `min:"12" 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 GetMobileDeviceAccessOverrideOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetDateCreated sets the DateCreated field's value.
func (s *GetMobileDeviceAccessOverrideOutput) SetDateCreated(v time.Time) *GetMobileDeviceAccessOverrideOutput {
	s.DateCreated = &v
	return s
}

// SetDateModified sets the DateModified field's value.
func (s *GetMobileDeviceAccessOverrideOutput) SetDateModified(v time.Time) *GetMobileDeviceAccessOverrideOutput {
	s.DateModified = &v
	return s
}

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

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

// SetEffect sets the Effect field's value.
func (s *GetMobileDeviceAccessOverrideOutput) SetEffect(v string) *GetMobileDeviceAccessOverrideOutput {
	s.Effect = &v
	return s
}

// SetUserId sets the UserId field's value.
func (s *GetMobileDeviceAccessOverrideOutput) SetUserId(v string) *GetMobileDeviceAccessOverrideOutput {
	s.UserId = &v
	return s
}

// The representation of an WorkMail group.
type Group struct {
	_ struct{} `type:"structure"`

	// The date indicating when the group was disabled from WorkMail use.
	DisabledDate *time.Time `type:"timestamp"`

	// The email of the group.
	Email *string `min:"1" type:"string"`

	// The date indicating when the group was enabled for WorkMail use.
	EnabledDate *time.Time `type:"timestamp"`

	// The identifier of the group.
	Id *string `min:"12" type:"string"`

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

	// The state of the group, which can be ENABLED, DISABLED, or DELETED.
	State *string `type:"string" enum:"EntityState"`
}

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

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

// SetDisabledDate sets the DisabledDate field's value.
func (s *Group) SetDisabledDate(v time.Time) *Group {
	s.DisabledDate = &v
	return s
}

// SetEmail sets the Email field's value.
func (s *Group) SetEmail(v string) *Group {
	s.Email = &v
	return s
}

// SetEnabledDate sets the EnabledDate field's value.
func (s *Group) SetEnabledDate(v time.Time) *Group {
	s.EnabledDate = &v
	return s
}

// SetId sets the Id field's value.
func (s *Group) SetId(v string) *Group {
	s.Id = &v
	return s
}

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

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

// The identifier that contains the Group ID and name of a group.
type GroupIdentifier struct {
	_ struct{} `type:"structure"`

	// Group ID that matched the group.
	GroupId *string `min:"12" type:"string"`

	// Group name that matched the group.
	GroupName *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 GroupIdentifier) String() string {
	return awsutil.Prettify(s)
}

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

// SetGroupId sets the GroupId field's value.
func (s *GroupIdentifier) SetGroupId(v string) *GroupIdentifier {
	s.GroupId = &v
	return s
}

// SetGroupName sets the GroupName field's value.
func (s *GroupIdentifier) SetGroupName(v string) *GroupIdentifier {
	s.GroupName = &v
	return s
}

// The impersonation rule that matched the input.
type ImpersonationMatchedRule struct {
	_ struct{} `type:"structure"`

	// The ID of the rule that matched the input
	ImpersonationRuleId *string `min:"1" type:"string"`

	// The name of the rule that matched the input.
	Name *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 ImpersonationMatchedRule) String() string {
	return awsutil.Prettify(s)
}

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

// SetImpersonationRuleId sets the ImpersonationRuleId field's value.
func (s *ImpersonationMatchedRule) SetImpersonationRuleId(v string) *ImpersonationMatchedRule {
	s.ImpersonationRuleId = &v
	return s
}

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

// An impersonation role for the given WorkMail organization.
type ImpersonationRole struct {
	_ struct{} `type:"structure"`

	// The date when the impersonation role was created.
	DateCreated *time.Time `type:"timestamp"`

	// The date when the impersonation role was last modified.
	DateModified *time.Time `type:"timestamp"`

	// The identifier of the impersonation role.
	ImpersonationRoleId *string `min:"1" type:"string"`

	// The impersonation role name.
	Name *string `min:"1" type:"string"`

	// The impersonation role type.
	Type *string `type:"string" enum:"ImpersonationRoleType"`
}

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

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

// SetDateCreated sets the DateCreated field's value.
func (s *ImpersonationRole) SetDateCreated(v time.Time) *ImpersonationRole {
	s.DateCreated = &v
	return s
}

// SetDateModified sets the DateModified field's value.
func (s *ImpersonationRole) SetDateModified(v time.Time) *ImpersonationRole {
	s.DateModified = &v
	return s
}

// SetImpersonationRoleId sets the ImpersonationRoleId field's value.
func (s *ImpersonationRole) SetImpersonationRoleId(v string) *ImpersonationRole {
	s.ImpersonationRoleId = &v
	return s
}

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

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

// The rules for the given impersonation role.
type ImpersonationRule struct {
	_ struct{} `type:"structure"`

	// The rule description.
	Description *string `min:"1" type:"string"`

	// The effect of the rule when it matches the input. Allowed effect values are
	// ALLOW or DENY.
	//
	// Effect is a required field
	Effect *string `type:"string" required:"true" enum:"AccessEffect"`

	// The identifier of the rule.
	//
	// ImpersonationRuleId is a required field
	ImpersonationRuleId *string `min:"1" type:"string" required:"true"`

	// The rule name.
	Name *string `min:"1" type:"string"`

	// A list of user IDs that don't match the rule.
	NotTargetUsers []*string `min:"1" type:"list"`

	// A list of user IDs that match the rule.
	TargetUsers []*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 ImpersonationRule) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

// SetEffect sets the Effect field's value.
func (s *ImpersonationRule) SetEffect(v string) *ImpersonationRule {
	s.Effect = &v
	return s
}

// SetImpersonationRuleId sets the ImpersonationRuleId field's value.
func (s *ImpersonationRule) SetImpersonationRuleId(v string) *ImpersonationRule {
	s.ImpersonationRuleId = &v
	return s
}

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

// SetNotTargetUsers sets the NotTargetUsers field's value.
func (s *ImpersonationRule) SetNotTargetUsers(v []*string) *ImpersonationRule {
	s.NotTargetUsers = v
	return s
}

// SetTargetUsers sets the TargetUsers field's value.
func (s *ImpersonationRule) SetTargetUsers(v []*string) *ImpersonationRule {
	s.TargetUsers = v
	return s
}

// The configuration for a resource isn't valid. A resource must either be able
// to auto-respond to requests or have at least one delegate associated that
// can do so on its behalf.
type InvalidConfigurationException 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 InvalidConfigurationException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorInvalidConfigurationException(v protocol.ResponseMetadata) error {
	return &InvalidConfigurationException{
		RespMetadata: v,
	}
}

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

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

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

func (s *InvalidConfigurationException) 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 *InvalidConfigurationException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// You SES configuration has customizations that WorkMail cannot save. The error
// message lists the invalid setting. For examples of invalid settings, refer
// to CreateReceiptRule (https://docs.aws.amazon.com/ses/latest/APIReference/API_CreateReceiptRule.html).
type InvalidCustomSesConfigurationException 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 InvalidCustomSesConfigurationException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorInvalidCustomSesConfigurationException(v protocol.ResponseMetadata) error {
	return &InvalidCustomSesConfigurationException{
		RespMetadata: v,
	}
}

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

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

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

func (s *InvalidCustomSesConfigurationException) 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 *InvalidCustomSesConfigurationException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// One or more of the input parameters don't match the service's restrictions.
type InvalidParameterException 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 InvalidParameterException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorInvalidParameterException(v protocol.ResponseMetadata) error {
	return &InvalidParameterException{
		RespMetadata: v,
	}
}

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

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

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

func (s *InvalidParameterException) 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 *InvalidParameterException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The supplied password doesn't match the minimum security constraints, such
// as length or use of special characters.
type InvalidPasswordException 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 InvalidPasswordException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorInvalidPasswordException(v protocol.ResponseMetadata) error {
	return &InvalidPasswordException{
		RespMetadata: v,
	}
}

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

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

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

func (s *InvalidPasswordException) 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 *InvalidPasswordException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// Describes a Lambda based availability provider.
type LambdaAvailabilityProvider struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the Lambda that acts as the availability
	// provider.
	//
	// LambdaArn is a required field
	LambdaArn *string `min:"49" 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 LambdaAvailabilityProvider) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetLambdaArn sets the LambdaArn field's value.
func (s *LambdaAvailabilityProvider) SetLambdaArn(v string) *LambdaAvailabilityProvider {
	s.LambdaArn = &v
	return s
}

// The request exceeds the limit of the resource.
type LimitExceededException 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 LimitExceededException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorLimitExceededException(v protocol.ResponseMetadata) error {
	return &LimitExceededException{
		RespMetadata: v,
	}
}

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

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

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

func (s *LimitExceededException) 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 *LimitExceededException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

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

	// The identifier for the organization.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 ListAccessControlRulesInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListAccessControlRulesInput) SetOrganizationId(v string) *ListAccessControlRulesInput {
	s.OrganizationId = &v
	return s
}

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

	// The access control rules.
	Rules []*AccessControlRule `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 ListAccessControlRulesOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetRules sets the Rules field's value.
func (s *ListAccessControlRulesOutput) SetRules(v []*AccessControlRule) *ListAccessControlRulesOutput {
	s.Rules = v
	return s
}

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

	// The identifier for the entity for which to list the aliases.
	//
	// EntityId is a required field
	EntityId *string `min:"12" type:"string" required:"true"`

	// The maximum number of results to return in a single call.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to use to retrieve the next page of results. The first call does
	// not contain any tokens.
	NextToken *string `min:"1" type:"string"`

	// The identifier for the organization under which the entity exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 ListAliasesInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetEntityId sets the EntityId field's value.
func (s *ListAliasesInput) SetEntityId(v string) *ListAliasesInput {
	s.EntityId = &v
	return s
}

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListAliasesInput) SetOrganizationId(v string) *ListAliasesInput {
	s.OrganizationId = &v
	return s
}

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

	// The entity's paginated aliases.
	Aliases []*string `type:"list"`

	// The token to use to retrieve the next page of results. The value is "null"
	// when there are no more results to return.
	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 ListAliasesOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetAliases sets the Aliases field's value.
func (s *ListAliasesOutput) SetAliases(v []*string) *ListAliasesOutput {
	s.Aliases = v
	return s
}

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

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

	// The maximum number of results to return in a single call.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to use to retrieve the next page of results. The first call does
	// not require a token.
	NextToken *string `min:"1" type:"string"`

	// The WorkMail organization for which the AvailabilityConfiguration's will
	// be listed.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 ListAvailabilityConfigurationsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListAvailabilityConfigurationsInput) SetOrganizationId(v string) *ListAvailabilityConfigurationsInput {
	s.OrganizationId = &v
	return s
}

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

	// The list of AvailabilityConfiguration's that exist for the specified WorkMail
	// organization.
	AvailabilityConfigurations []*AvailabilityConfiguration `type:"list"`

	// The token to use to retrieve the next page of results. The value is null
	// when there are no further results to return.
	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 ListAvailabilityConfigurationsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetAvailabilityConfigurations sets the AvailabilityConfigurations field's value.
func (s *ListAvailabilityConfigurationsOutput) SetAvailabilityConfigurations(v []*AvailabilityConfiguration) *ListAvailabilityConfigurationsOutput {
	s.AvailabilityConfigurations = v
	return s
}

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

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

	// The identifier for the group to which the members (users or groups) are associated.
	//
	// The identifier can accept GroupId, Groupname, or email. The following identity
	// formats are available:
	//
	//    * Group ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: group@domain.tld
	//
	//    * Group name: group
	//
	// GroupId is a required field
	GroupId *string `min:"1" type:"string" required:"true"`

	// The maximum number of results to return in a single call.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to use to retrieve the next page of results. The first call does
	// not contain any tokens.
	NextToken *string `min:"1" type:"string"`

	// The identifier for the organization under which the group exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 ListGroupMembersInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetGroupId sets the GroupId field's value.
func (s *ListGroupMembersInput) SetGroupId(v string) *ListGroupMembersInput {
	s.GroupId = &v
	return s
}

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListGroupMembersInput) SetOrganizationId(v string) *ListGroupMembersInput {
	s.OrganizationId = &v
	return s
}

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

	// The members associated to the group.
	Members []*Member `type:"list"`

	// The token to use to retrieve the next page of results. The first call does
	// not contain any tokens.
	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 ListGroupMembersOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetMembers sets the Members field's value.
func (s *ListGroupMembersOutput) SetMembers(v []*Member) *ListGroupMembersOutput {
	s.Members = v
	return s
}

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

// Filtering options for ListGroups operation. This is only used as input to
// Operation.
type ListGroupsFilters struct {
	_ struct{} `type:"structure"`

	// Filters only groups with the provided name prefix.
	NamePrefix *string `type:"string"`

	// Filters only groups with the provided primary email prefix.
	PrimaryEmailPrefix *string `type:"string"`

	// Filters only groups with the provided state.
	State *string `type:"string" enum:"EntityState"`
}

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

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

// SetNamePrefix sets the NamePrefix field's value.
func (s *ListGroupsFilters) SetNamePrefix(v string) *ListGroupsFilters {
	s.NamePrefix = &v
	return s
}

// SetPrimaryEmailPrefix sets the PrimaryEmailPrefix field's value.
func (s *ListGroupsFilters) SetPrimaryEmailPrefix(v string) *ListGroupsFilters {
	s.PrimaryEmailPrefix = &v
	return s
}

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

// Filtering options for ListGroupsForEntity operation. This is only used as
// input to Operation.
type ListGroupsForEntityFilters struct {
	_ struct{} `type:"structure"`

	// Filters only group names that start with the provided name prefix.
	GroupNamePrefix *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 ListGroupsForEntityFilters) String() string {
	return awsutil.Prettify(s)
}

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

// SetGroupNamePrefix sets the GroupNamePrefix field's value.
func (s *ListGroupsForEntityFilters) SetGroupNamePrefix(v string) *ListGroupsForEntityFilters {
	s.GroupNamePrefix = &v
	return s
}

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

	// The identifier for the entity.
	//
	// The entity ID can accept UserId or GroupID, Username or Groupname, or email.
	//
	//    * Entity ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: entity@domain.tld
	//
	//    * Entity name: entity
	//
	// EntityId is a required field
	EntityId *string `min:"1" type:"string" required:"true"`

	// Limit the search results based on the filter criteria.
	Filters *ListGroupsForEntityFilters `type:"structure"`

	// The maximum number of results to return in a single call.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to use to retrieve the next page of results. The first call does
	// not contain any tokens.
	NextToken *string `min:"1" type:"string"`

	// The identifier for the organization under which the entity exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 ListGroupsForEntityInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetEntityId sets the EntityId field's value.
func (s *ListGroupsForEntityInput) SetEntityId(v string) *ListGroupsForEntityInput {
	s.EntityId = &v
	return s
}

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListGroupsForEntityInput) SetOrganizationId(v string) *ListGroupsForEntityInput {
	s.OrganizationId = &v
	return s
}

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

	// The overview of groups in an organization.
	Groups []*GroupIdentifier `type:"list"`

	// The token to use to retrieve the next page of results. This value is `null`
	// when there are no more results to return.
	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 ListGroupsForEntityOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetGroups sets the Groups field's value.
func (s *ListGroupsForEntityOutput) SetGroups(v []*GroupIdentifier) *ListGroupsForEntityOutput {
	s.Groups = v
	return s
}

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

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

	// Limit the search results based on the filter criteria. Only one filter per
	// request is supported.
	Filters *ListGroupsFilters `type:"structure"`

	// The maximum number of results to return in a single call.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to use to retrieve the next page of results. The first call does
	// not contain any tokens.
	NextToken *string `min:"1" type:"string"`

	// The identifier for the organization under which the groups exist.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 ListGroupsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListGroupsInput) SetOrganizationId(v string) *ListGroupsInput {
	s.OrganizationId = &v
	return s
}

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

	// The overview of groups for an organization.
	Groups []*Group `type:"list"`

	// The token to use to retrieve the next page of results. The value is "null"
	// when there are no more results to return.
	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 ListGroupsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetGroups sets the Groups field's value.
func (s *ListGroupsOutput) SetGroups(v []*Group) *ListGroupsOutput {
	s.Groups = v
	return s
}

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

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

	// The maximum number of results returned in a single call.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token used to retrieve the next page of results. The first call doesn't
	// require a token.
	NextToken *string `min:"1" type:"string"`

	// The WorkMail organization to which the listed impersonation roles belong.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 ListImpersonationRolesInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListImpersonationRolesInput) SetOrganizationId(v string) *ListImpersonationRolesInput {
	s.OrganizationId = &v
	return s
}

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

	// The token to retrieve the next page of results. The value is null when there
	// are no results to return.
	NextToken *string `min:"1" type:"string"`

	// The list of impersonation roles under the given WorkMail organization.
	Roles []*ImpersonationRole `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 ListImpersonationRolesOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetRoles sets the Roles field's value.
func (s *ListImpersonationRolesOutput) SetRoles(v []*ImpersonationRole) *ListImpersonationRolesOutput {
	s.Roles = v
	return s
}

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

	// The maximum number of results to return in a single call.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to use to retrieve the next page of results. The first call does
	// not require a token.
	NextToken *string `min:"1" type:"string"`

	// The WorkMail organization for which to list domains.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 ListMailDomainsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListMailDomainsInput) SetOrganizationId(v string) *ListMailDomainsInput {
	s.OrganizationId = &v
	return s
}

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

	// The list of mail domain summaries, specifying domains that exist in the specified
	// WorkMail organization, along with the information about whether the domain
	// is or isn't the default.
	MailDomains []*MailDomainSummary `type:"list"`

	// The token to use to retrieve the next page of results. The value becomes
	// null when there are no more results to return.
	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 ListMailDomainsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetMailDomains sets the MailDomains field's value.
func (s *ListMailDomainsOutput) SetMailDomains(v []*MailDomainSummary) *ListMailDomainsOutput {
	s.MailDomains = v
	return s
}

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

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

	// The maximum number of results to return in a single call.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to use to retrieve the next page of results.
	NextToken *string `min:"1" type:"string"`

	// The organization ID.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 ListMailboxExportJobsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListMailboxExportJobsInput) SetOrganizationId(v string) *ListMailboxExportJobsInput {
	s.OrganizationId = &v
	return s
}

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

	// The mailbox export job details.
	Jobs []*MailboxExportJob `type:"list"`

	// The token to use to retrieve the next page of results.
	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 ListMailboxExportJobsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetJobs sets the Jobs field's value.
func (s *ListMailboxExportJobsOutput) SetJobs(v []*MailboxExportJob) *ListMailboxExportJobsOutput {
	s.Jobs = v
	return s
}

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

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

	// The identifier of the user, or resource for which to list mailbox permissions.
	//
	// The entity ID can accept UserId or ResourceId, Username or Resourcename,
	// or email.
	//
	//    * Entity ID: 12345678-1234-1234-1234-123456789012, or r-0123456789a0123456789b0123456789
	//
	//    * Email address: entity@domain.tld
	//
	//    * Entity name: entity
	//
	// EntityId is a required field
	EntityId *string `min:"1" type:"string" required:"true"`

	// The maximum number of results to return in a single call.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to use to retrieve the next page of results. The first call does
	// not contain any tokens.
	NextToken *string `min:"1" type:"string"`

	// The identifier of the organization under which the user, group, or resource
	// exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 ListMailboxPermissionsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetEntityId sets the EntityId field's value.
func (s *ListMailboxPermissionsInput) SetEntityId(v string) *ListMailboxPermissionsInput {
	s.EntityId = &v
	return s
}

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListMailboxPermissionsInput) SetOrganizationId(v string) *ListMailboxPermissionsInput {
	s.OrganizationId = &v
	return s
}

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

	// The token to use to retrieve the next page of results. The value is "null"
	// when there are no more results to return.
	NextToken *string `min:"1" type:"string"`

	// One page of the user, group, or resource mailbox permissions.
	Permissions []*Permission `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 ListMailboxPermissionsOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetPermissions sets the Permissions field's value.
func (s *ListMailboxPermissionsOutput) SetPermissions(v []*Permission) *ListMailboxPermissionsOutput {
	s.Permissions = v
	return s
}

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

	// The mobile device to which the access override applies.
	DeviceId *string `min:"1" type:"string"`

	// The maximum number of results to return in a single call.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to use to retrieve the next page of results. The first call does
	// not require a token.
	NextToken *string `min:"1" type:"string"`

	// The WorkMail organization under which to list mobile device access overrides.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The WorkMail user under which you list the mobile device access overrides.
	// Accepts the following types of user identities:
	//
	//    * User ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: user@domain.tld
	//
	//    * User name: user
	UserId *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 ListMobileDeviceAccessOverridesInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListMobileDeviceAccessOverridesInput) SetOrganizationId(v string) *ListMobileDeviceAccessOverridesInput {
	s.OrganizationId = &v
	return s
}

// SetUserId sets the UserId field's value.
func (s *ListMobileDeviceAccessOverridesInput) SetUserId(v string) *ListMobileDeviceAccessOverridesInput {
	s.UserId = &v
	return s
}

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

	// The token to use to retrieve the next page of results. The value is “null”
	// when there are no more results to return.
	NextToken *string `min:"1" type:"string"`

	// The list of mobile device access overrides that exist for the specified WorkMail
	// organization and user.
	Overrides []*MobileDeviceAccessOverride `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 ListMobileDeviceAccessOverridesOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetOverrides sets the Overrides field's value.
func (s *ListMobileDeviceAccessOverridesOutput) SetOverrides(v []*MobileDeviceAccessOverride) *ListMobileDeviceAccessOverridesOutput {
	s.Overrides = v
	return s
}

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

	// The WorkMail organization for which to list the rules.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 ListMobileDeviceAccessRulesInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListMobileDeviceAccessRulesInput) SetOrganizationId(v string) *ListMobileDeviceAccessRulesInput {
	s.OrganizationId = &v
	return s
}

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

	// The list of mobile device access rules that exist under the specified WorkMail
	// organization.
	Rules []*MobileDeviceAccessRule `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 ListMobileDeviceAccessRulesOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetRules sets the Rules field's value.
func (s *ListMobileDeviceAccessRulesOutput) SetRules(v []*MobileDeviceAccessRule) *ListMobileDeviceAccessRulesOutput {
	s.Rules = v
	return s
}

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

	// The maximum number of results to return in a single call.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to use to retrieve the next page of results. The first call does
	// not contain any tokens.
	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 ListOrganizationsInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListOrganizationsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListOrganizationsInput"}
	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 *ListOrganizationsInput) SetMaxResults(v int64) *ListOrganizationsInput {
	s.MaxResults = &v
	return s
}

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

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

	// The token to use to retrieve the next page of results. The value is "null"
	// when there are no more results to return.
	NextToken *string `min:"1" type:"string"`

	// The overview of owned organizations presented as a list of organization summaries.
	OrganizationSummaries []*OrganizationSummary `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 ListOrganizationsOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetOrganizationSummaries sets the OrganizationSummaries field's value.
func (s *ListOrganizationsOutput) SetOrganizationSummaries(v []*OrganizationSummary) *ListOrganizationsOutput {
	s.OrganizationSummaries = v
	return s
}

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

	// The number of maximum results in a page.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token used to paginate through the delegates associated with a resource.
	NextToken *string `min:"1" type:"string"`

	// The identifier for the organization that contains the resource for which
	// delegates are listed.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The identifier for the resource whose delegates are listed.
	//
	// The identifier can accept ResourceId, Resourcename, or email. The following
	// identity formats are available:
	//
	//    * Resource ID: r-0123456789a0123456789b0123456789
	//
	//    * Email address: resource@domain.tld
	//
	//    * Resource name: resource
	//
	// ResourceId is a required field
	ResourceId *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 ListResourceDelegatesInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListResourceDelegatesInput) SetOrganizationId(v string) *ListResourceDelegatesInput {
	s.OrganizationId = &v
	return s
}

// SetResourceId sets the ResourceId field's value.
func (s *ListResourceDelegatesInput) SetResourceId(v string) *ListResourceDelegatesInput {
	s.ResourceId = &v
	return s
}

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

	// One page of the resource's delegates.
	Delegates []*Delegate `type:"list"`

	// The token used to paginate through the delegates associated with a resource.
	// While results are still available, it has an associated value. When the last
	// page is reached, the token is empty.
	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 ListResourceDelegatesOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetDelegates sets the Delegates field's value.
func (s *ListResourceDelegatesOutput) SetDelegates(v []*Delegate) *ListResourceDelegatesOutput {
	s.Delegates = v
	return s
}

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

// Filtering options for ListResources operation. This is only used as input
// to Operation.
type ListResourcesFilters struct {
	_ struct{} `type:"structure"`

	// Filters only resource that start with the entered name prefix .
	NamePrefix *string `type:"string"`

	// Filters only resource with the provided primary email prefix.
	PrimaryEmailPrefix *string `type:"string"`

	// Filters only resource with the provided state.
	State *string `type:"string" enum:"EntityState"`
}

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

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

// SetNamePrefix sets the NamePrefix field's value.
func (s *ListResourcesFilters) SetNamePrefix(v string) *ListResourcesFilters {
	s.NamePrefix = &v
	return s
}

// SetPrimaryEmailPrefix sets the PrimaryEmailPrefix field's value.
func (s *ListResourcesFilters) SetPrimaryEmailPrefix(v string) *ListResourcesFilters {
	s.PrimaryEmailPrefix = &v
	return s
}

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

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

	// Limit the resource search results based on the filter criteria. You can only
	// use one filter per request.
	Filters *ListResourcesFilters `type:"structure"`

	// The maximum number of results to return in a single call.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to use to retrieve the next page of results. The first call does
	// not contain any tokens.
	NextToken *string `min:"1" type:"string"`

	// The identifier for the organization under which the resources exist.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 ListResourcesInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListResourcesInput) SetOrganizationId(v string) *ListResourcesInput {
	s.OrganizationId = &v
	return s
}

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

	// The token used to paginate through all the organization's resources. While
	// results are still available, it has an associated value. When the last page
	// is reached, the token is empty.
	NextToken *string `min:"1" type:"string"`

	// One page of the organization's resource representation.
	Resources []*Resource `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 ListResourcesOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetResources sets the Resources field's value.
func (s *ListResourcesOutput) SetResources(v []*Resource) *ListResourcesOutput {
	s.Resources = v
	return s
}

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

	// The resource ARN.
	//
	// ResourceARN is a required field
	ResourceARN *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 ListTagsForResourceInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

	// A list of tag key-value pairs.
	Tags []*Tag `type:"list"`
}

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

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

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

// Filtering options for ListUsers operation. This is only used as input to
// Operation.
type ListUsersFilters struct {
	_ struct{} `type:"structure"`

	// Filters only users with the provided display name prefix.
	//
	// DisplayNamePrefix is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ListUsersFilters's
	// String and GoString methods.
	DisplayNamePrefix *string `type:"string" sensitive:"true"`

	// Filters only users with the provided email prefix.
	PrimaryEmailPrefix *string `type:"string"`

	// Filters only users with the provided state.
	State *string `type:"string" enum:"EntityState"`

	// Filters only users with the provided username prefix.
	UsernamePrefix *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 ListUsersFilters) String() string {
	return awsutil.Prettify(s)
}

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

// SetDisplayNamePrefix sets the DisplayNamePrefix field's value.
func (s *ListUsersFilters) SetDisplayNamePrefix(v string) *ListUsersFilters {
	s.DisplayNamePrefix = &v
	return s
}

// SetPrimaryEmailPrefix sets the PrimaryEmailPrefix field's value.
func (s *ListUsersFilters) SetPrimaryEmailPrefix(v string) *ListUsersFilters {
	s.PrimaryEmailPrefix = &v
	return s
}

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

// SetUsernamePrefix sets the UsernamePrefix field's value.
func (s *ListUsersFilters) SetUsernamePrefix(v string) *ListUsersFilters {
	s.UsernamePrefix = &v
	return s
}

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

	// Limit the user search results based on the filter criteria. You can only
	// use one filter per request.
	Filters *ListUsersFilters `type:"structure"`

	// The maximum number of results to return in a single call.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token to use to retrieve the next page of results. The first call does
	// not contain any tokens.
	NextToken *string `min:"1" type:"string"`

	// The identifier for the organization under which the users exist.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}

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

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

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

// SetOrganizationId sets the OrganizationId field's value.
func (s *ListUsersInput) SetOrganizationId(v string) *ListUsersInput {
	s.OrganizationId = &v
	return s
}

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

	// The token to use to retrieve the next page of results. This value is `null`
	// when there are no more results to return.
	NextToken *string `min:"1" type:"string"`

	// The overview of users for an organization.
	Users []*User `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 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
}

// SetUsers sets the Users field's value.
func (s *ListUsersOutput) SetUsers(v []*User) *ListUsersOutput {
	s.Users = v
	return s
}

// The domain you're trying to change is in use by another user or organization
// in your account. See the error message for details.
type MailDomainInUseException 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 MailDomainInUseException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorMailDomainInUseException(v protocol.ResponseMetadata) error {
	return &MailDomainInUseException{
		RespMetadata: v,
	}
}

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

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

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

func (s *MailDomainInUseException) 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 *MailDomainInUseException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The domain specified is not found in your organization.
type MailDomainNotFoundException 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 MailDomainNotFoundException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorMailDomainNotFoundException(v protocol.ResponseMetadata) error {
	return &MailDomainNotFoundException{
		RespMetadata: v,
	}
}

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

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

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

func (s *MailDomainNotFoundException) 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 *MailDomainNotFoundException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// After a domain has been added to the organization, it must be verified. The
// domain is not yet verified.
type MailDomainStateException 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 MailDomainStateException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorMailDomainStateException(v protocol.ResponseMetadata) error {
	return &MailDomainStateException{
		RespMetadata: v,
	}
}

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

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

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

func (s *MailDomainStateException) 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 *MailDomainStateException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The data for a given domain.
type MailDomainSummary struct {
	_ struct{} `type:"structure"`

	// Whether the domain is default or not.
	DefaultDomain *bool `type:"boolean"`

	// The domain name.
	DomainName *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 MailDomainSummary) String() string {
	return awsutil.Prettify(s)
}

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

// SetDefaultDomain sets the DefaultDomain field's value.
func (s *MailDomainSummary) SetDefaultDomain(v bool) *MailDomainSummary {
	s.DefaultDomain = &v
	return s
}

// SetDomainName sets the DomainName field's value.
func (s *MailDomainSummary) SetDomainName(v string) *MailDomainSummary {
	s.DomainName = &v
	return s
}

// The details of a mailbox export job, including the user or resource ID associated
// with the mailbox and the S3 bucket that the mailbox contents are exported
// to.
type MailboxExportJob struct {
	_ struct{} `type:"structure"`

	// The mailbox export job description.
	Description *string `type:"string"`

	// The mailbox export job end timestamp.
	EndTime *time.Time `type:"timestamp"`

	// The identifier of the user or resource associated with the mailbox.
	EntityId *string `min:"12" type:"string"`

	// The estimated progress of the mailbox export job, in percentage points.
	EstimatedProgress *int64 `type:"integer"`

	// The identifier of the mailbox export job.
	JobId *string `min:"1" type:"string"`

	// The name of the S3 bucket.
	S3BucketName *string `min:"1" type:"string"`

	// The path to the S3 bucket and file that the mailbox export job exports to.
	S3Path *string `min:"1" type:"string"`

	// The mailbox export job start timestamp.
	StartTime *time.Time `type:"timestamp"`

	// The state of the mailbox export job.
	State *string `type:"string" enum:"MailboxExportJobState"`
}

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

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

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

// SetEndTime sets the EndTime field's value.
func (s *MailboxExportJob) SetEndTime(v time.Time) *MailboxExportJob {
	s.EndTime = &v
	return s
}

// SetEntityId sets the EntityId field's value.
func (s *MailboxExportJob) SetEntityId(v string) *MailboxExportJob {
	s.EntityId = &v
	return s
}

// SetEstimatedProgress sets the EstimatedProgress field's value.
func (s *MailboxExportJob) SetEstimatedProgress(v int64) *MailboxExportJob {
	s.EstimatedProgress = &v
	return s
}

// SetJobId sets the JobId field's value.
func (s *MailboxExportJob) SetJobId(v string) *MailboxExportJob {
	s.JobId = &v
	return s
}

// SetS3BucketName sets the S3BucketName field's value.
func (s *MailboxExportJob) SetS3BucketName(v string) *MailboxExportJob {
	s.S3BucketName = &v
	return s
}

// SetS3Path sets the S3Path field's value.
func (s *MailboxExportJob) SetS3Path(v string) *MailboxExportJob {
	s.S3Path = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *MailboxExportJob) SetStartTime(v time.Time) *MailboxExportJob {
	s.StartTime = &v
	return s
}

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

// The representation of a user or group.
type Member struct {
	_ struct{} `type:"structure"`

	// The date indicating when the member was disabled from WorkMail use.
	DisabledDate *time.Time `type:"timestamp"`

	// The date indicating when the member was enabled for WorkMail use.
	EnabledDate *time.Time `type:"timestamp"`

	// The identifier of the member.
	Id *string `type:"string"`

	// The name of the member.
	Name *string `type:"string"`

	// The state of the member, which can be ENABLED, DISABLED, or DELETED.
	State *string `type:"string" enum:"EntityState"`

	// A member can be a user or group.
	Type *string `type:"string" enum:"MemberType"`
}

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

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

// SetDisabledDate sets the DisabledDate field's value.
func (s *Member) SetDisabledDate(v time.Time) *Member {
	s.DisabledDate = &v
	return s
}

// SetEnabledDate sets the EnabledDate field's value.
func (s *Member) SetEnabledDate(v time.Time) *Member {
	s.EnabledDate = &v
	return s
}

// SetId sets the Id field's value.
func (s *Member) SetId(v string) *Member {
	s.Id = &v
	return s
}

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

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

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

// The rule that a simulated user matches.
type MobileDeviceAccessMatchedRule struct {
	_ struct{} `type:"structure"`

	// Identifier of the rule that a simulated user matches.
	MobileDeviceAccessRuleId *string `min:"1" type:"string"`

	// Name of a rule that a simulated user matches.
	Name *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 MobileDeviceAccessMatchedRule) String() string {
	return awsutil.Prettify(s)
}

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

// SetMobileDeviceAccessRuleId sets the MobileDeviceAccessRuleId field's value.
func (s *MobileDeviceAccessMatchedRule) SetMobileDeviceAccessRuleId(v string) *MobileDeviceAccessMatchedRule {
	s.MobileDeviceAccessRuleId = &v
	return s
}

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

// The override object.
type MobileDeviceAccessOverride struct {
	_ struct{} `type:"structure"`

	// The date the override was first created.
	DateCreated *time.Time `type:"timestamp"`

	// The date the override was last modified.
	DateModified *time.Time `type:"timestamp"`

	// A description of the override.
	Description *string `min:"1" type:"string"`

	// The device to which the override applies.
	DeviceId *string `min:"1" type:"string"`

	// The effect of the override, ALLOW or DENY.
	Effect *string `type:"string" enum:"MobileDeviceAccessRuleEffect"`

	// The WorkMail user to which the access override applies.
	UserId *string `min:"12" 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 MobileDeviceAccessOverride) String() string {
	return awsutil.Prettify(s)
}

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

// SetDateCreated sets the DateCreated field's value.
func (s *MobileDeviceAccessOverride) SetDateCreated(v time.Time) *MobileDeviceAccessOverride {
	s.DateCreated = &v
	return s
}

// SetDateModified sets the DateModified field's value.
func (s *MobileDeviceAccessOverride) SetDateModified(v time.Time) *MobileDeviceAccessOverride {
	s.DateModified = &v
	return s
}

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

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

// SetEffect sets the Effect field's value.
func (s *MobileDeviceAccessOverride) SetEffect(v string) *MobileDeviceAccessOverride {
	s.Effect = &v
	return s
}

// SetUserId sets the UserId field's value.
func (s *MobileDeviceAccessOverride) SetUserId(v string) *MobileDeviceAccessOverride {
	s.UserId = &v
	return s
}

// A rule that controls access to mobile devices for an WorkMail group.
type MobileDeviceAccessRule struct {
	_ struct{} `type:"structure"`

	// The date and time at which an access rule was created.
	DateCreated *time.Time `type:"timestamp"`

	// The date and time at which an access rule was modified.
	DateModified *time.Time `type:"timestamp"`

	// The description of a mobile access rule.
	Description *string `min:"1" type:"string"`

	// Device models that a rule will match.
	DeviceModels []*string `min:"1" type:"list"`

	// Device operating systems that a rule will match.
	DeviceOperatingSystems []*string `min:"1" type:"list"`

	// Device types that a rule will match.
	DeviceTypes []*string `min:"1" type:"list"`

	// Device user agents that a rule will match.
	DeviceUserAgents []*string `min:"1" type:"list"`

	// The effect of the rule when it matches. Allowed values are ALLOW or DENY.
	Effect *string `type:"string" enum:"MobileDeviceAccessRuleEffect"`

	// The ID assigned to a mobile access rule.
	MobileDeviceAccessRuleId *string `min:"1" type:"string"`

	// The name of a mobile access rule.
	Name *string `min:"1" type:"string"`

	// Device models that a rule will not match. All other device models will match.
	NotDeviceModels []*string `min:"1" type:"list"`

	// Device operating systems that a rule will not match. All other device types
	// will match.
	NotDeviceOperatingSystems []*string `min:"1" type:"list"`

	// Device types that a rule will not match. All other device types will match.
	NotDeviceTypes []*string `min:"1" type:"list"`

	// Device user agents that a rule will not match. All other device user agents
	// will match.
	NotDeviceUserAgents []*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 MobileDeviceAccessRule) String() string {
	return awsutil.Prettify(s)
}

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

// SetDateCreated sets the DateCreated field's value.
func (s *MobileDeviceAccessRule) SetDateCreated(v time.Time) *MobileDeviceAccessRule {
	s.DateCreated = &v
	return s
}

// SetDateModified sets the DateModified field's value.
func (s *MobileDeviceAccessRule) SetDateModified(v time.Time) *MobileDeviceAccessRule {
	s.DateModified = &v
	return s
}

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

// SetDeviceModels sets the DeviceModels field's value.
func (s *MobileDeviceAccessRule) SetDeviceModels(v []*string) *MobileDeviceAccessRule {
	s.DeviceModels = v
	return s
}

// SetDeviceOperatingSystems sets the DeviceOperatingSystems field's value.
func (s *MobileDeviceAccessRule) SetDeviceOperatingSystems(v []*string) *MobileDeviceAccessRule {
	s.DeviceOperatingSystems = v
	return s
}

// SetDeviceTypes sets the DeviceTypes field's value.
func (s *MobileDeviceAccessRule) SetDeviceTypes(v []*string) *MobileDeviceAccessRule {
	s.DeviceTypes = v
	return s
}

// SetDeviceUserAgents sets the DeviceUserAgents field's value.
func (s *MobileDeviceAccessRule) SetDeviceUserAgents(v []*string) *MobileDeviceAccessRule {
	s.DeviceUserAgents = v
	return s
}

// SetEffect sets the Effect field's value.
func (s *MobileDeviceAccessRule) SetEffect(v string) *MobileDeviceAccessRule {
	s.Effect = &v
	return s
}

// SetMobileDeviceAccessRuleId sets the MobileDeviceAccessRuleId field's value.
func (s *MobileDeviceAccessRule) SetMobileDeviceAccessRuleId(v string) *MobileDeviceAccessRule {
	s.MobileDeviceAccessRuleId = &v
	return s
}

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

// SetNotDeviceModels sets the NotDeviceModels field's value.
func (s *MobileDeviceAccessRule) SetNotDeviceModels(v []*string) *MobileDeviceAccessRule {
	s.NotDeviceModels = v
	return s
}

// SetNotDeviceOperatingSystems sets the NotDeviceOperatingSystems field's value.
func (s *MobileDeviceAccessRule) SetNotDeviceOperatingSystems(v []*string) *MobileDeviceAccessRule {
	s.NotDeviceOperatingSystems = v
	return s
}

// SetNotDeviceTypes sets the NotDeviceTypes field's value.
func (s *MobileDeviceAccessRule) SetNotDeviceTypes(v []*string) *MobileDeviceAccessRule {
	s.NotDeviceTypes = v
	return s
}

// SetNotDeviceUserAgents sets the NotDeviceUserAgents field's value.
func (s *MobileDeviceAccessRule) SetNotDeviceUserAgents(v []*string) *MobileDeviceAccessRule {
	s.NotDeviceUserAgents = v
	return s
}

// The user, group, or resource name isn't unique in WorkMail.
type NameAvailabilityException 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 NameAvailabilityException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorNameAvailabilityException(v protocol.ResponseMetadata) error {
	return &NameAvailabilityException{
		RespMetadata: v,
	}
}

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

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

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

func (s *NameAvailabilityException) 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 *NameAvailabilityException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// An operation received a valid organization identifier that either doesn't
// belong or exist in the system.
type OrganizationNotFoundException 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 OrganizationNotFoundException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorOrganizationNotFoundException(v protocol.ResponseMetadata) error {
	return &OrganizationNotFoundException{
		RespMetadata: v,
	}
}

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

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

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

func (s *OrganizationNotFoundException) 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 *OrganizationNotFoundException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *OrganizationNotFoundException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The organization must have a valid state to perform certain operations on
// the organization or its members.
type OrganizationStateException 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 OrganizationStateException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OrganizationStateException) GoString() string {
	return s.String()
}

func newErrorOrganizationStateException(v protocol.ResponseMetadata) error {
	return &OrganizationStateException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *OrganizationStateException) Code() string {
	return "OrganizationStateException"
}

// Message returns the exception's message.
func (s *OrganizationStateException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *OrganizationStateException) OrigErr() error {
	return nil
}

func (s *OrganizationStateException) 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 *OrganizationStateException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *OrganizationStateException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The representation of an organization.
type OrganizationSummary struct {
	_ struct{} `type:"structure"`

	// The alias associated with the organization.
	Alias *string `min:"1" type:"string"`

	// The default email domain associated with the organization.
	DefaultMailDomain *string `min:"3" type:"string"`

	// The error message associated with the organization. It is only present if
	// unexpected behavior has occurred with regards to the organization. It provides
	// insight or solutions regarding unexpected behavior.
	ErrorMessage *string `type:"string"`

	// The identifier associated with the organization.
	OrganizationId *string `min:"34" type:"string"`

	// The state associated with the organization.
	State *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 OrganizationSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s OrganizationSummary) GoString() string {
	return s.String()
}

// SetAlias sets the Alias field's value.
func (s *OrganizationSummary) SetAlias(v string) *OrganizationSummary {
	s.Alias = &v
	return s
}

// SetDefaultMailDomain sets the DefaultMailDomain field's value.
func (s *OrganizationSummary) SetDefaultMailDomain(v string) *OrganizationSummary {
	s.DefaultMailDomain = &v
	return s
}

// SetErrorMessage sets the ErrorMessage field's value.
func (s *OrganizationSummary) SetErrorMessage(v string) *OrganizationSummary {
	s.ErrorMessage = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *OrganizationSummary) SetOrganizationId(v string) *OrganizationSummary {
	s.OrganizationId = &v
	return s
}

// SetState sets the State field's value.
func (s *OrganizationSummary) SetState(v string) *OrganizationSummary {
	s.State = &v
	return s
}

// Permission granted to a user, group, or resource to access a certain aspect
// of another user, group, or resource mailbox.
type Permission struct {
	_ struct{} `type:"structure"`

	// The identifier of the user, group, or resource to which the permissions are
	// granted.
	//
	// GranteeId is a required field
	GranteeId *string `min:"12" type:"string" required:"true"`

	// The type of user, group, or resource referred to in GranteeId.
	//
	// GranteeType is a required field
	GranteeType *string `type:"string" required:"true" enum:"MemberType"`

	// The permissions granted to the grantee. SEND_AS allows the grantee to send
	// email as the owner of the mailbox (the grantee is not mentioned on these
	// emails). SEND_ON_BEHALF allows the grantee to send email on behalf of the
	// owner of the mailbox (the grantee is not mentioned as the physical sender
	// of these emails). FULL_ACCESS allows the grantee full access to the mailbox,
	// irrespective of other folder-level permissions set on the mailbox.
	//
	// PermissionValues is a required field
	PermissionValues []*string `type:"list" required:"true" enum:"PermissionType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Permission) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Permission) GoString() string {
	return s.String()
}

// SetGranteeId sets the GranteeId field's value.
func (s *Permission) SetGranteeId(v string) *Permission {
	s.GranteeId = &v
	return s
}

// SetGranteeType sets the GranteeType field's value.
func (s *Permission) SetGranteeType(v string) *Permission {
	s.GranteeType = &v
	return s
}

// SetPermissionValues sets the PermissionValues field's value.
func (s *Permission) SetPermissionValues(v []*string) *Permission {
	s.PermissionValues = v
	return s
}

type PutAccessControlRuleInput struct {
	_ struct{} `type:"structure"`

	// Access protocol actions to include in the rule. Valid values include ActiveSync,
	// AutoDiscover, EWS, IMAP, SMTP, WindowsOutlook, and WebMail.
	Actions []*string `type:"list"`

	// The rule description.
	//
	// Description is a required field
	Description *string `type:"string" required:"true"`

	// The rule effect.
	//
	// Effect is a required field
	Effect *string `type:"string" required:"true" enum:"AccessControlRuleEffect"`

	// Impersonation role IDs to include in the rule.
	ImpersonationRoleIds []*string `type:"list"`

	// IPv4 CIDR ranges to include in the rule.
	IpRanges []*string `type:"list"`

	// The rule name.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// Access protocol actions to exclude from the rule. Valid values include ActiveSync,
	// AutoDiscover, EWS, IMAP, SMTP, WindowsOutlook, and WebMail.
	NotActions []*string `type:"list"`

	// Impersonation role IDs to exclude from the rule.
	NotImpersonationRoleIds []*string `type:"list"`

	// IPv4 CIDR ranges to exclude from the rule.
	NotIpRanges []*string `type:"list"`

	// User IDs to exclude from the rule.
	NotUserIds []*string `type:"list"`

	// The identifier of the organization.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// User IDs to include in the rule.
	UserIds []*string `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 PutAccessControlRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAccessControlRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutAccessControlRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutAccessControlRuleInput"}
	if s.Description == nil {
		invalidParams.Add(request.NewErrParamRequired("Description"))
	}
	if s.Effect == nil {
		invalidParams.Add(request.NewErrParamRequired("Effect"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetActions sets the Actions field's value.
func (s *PutAccessControlRuleInput) SetActions(v []*string) *PutAccessControlRuleInput {
	s.Actions = v
	return s
}

// SetDescription sets the Description field's value.
func (s *PutAccessControlRuleInput) SetDescription(v string) *PutAccessControlRuleInput {
	s.Description = &v
	return s
}

// SetEffect sets the Effect field's value.
func (s *PutAccessControlRuleInput) SetEffect(v string) *PutAccessControlRuleInput {
	s.Effect = &v
	return s
}

// SetImpersonationRoleIds sets the ImpersonationRoleIds field's value.
func (s *PutAccessControlRuleInput) SetImpersonationRoleIds(v []*string) *PutAccessControlRuleInput {
	s.ImpersonationRoleIds = v
	return s
}

// SetIpRanges sets the IpRanges field's value.
func (s *PutAccessControlRuleInput) SetIpRanges(v []*string) *PutAccessControlRuleInput {
	s.IpRanges = v
	return s
}

// SetName sets the Name field's value.
func (s *PutAccessControlRuleInput) SetName(v string) *PutAccessControlRuleInput {
	s.Name = &v
	return s
}

// SetNotActions sets the NotActions field's value.
func (s *PutAccessControlRuleInput) SetNotActions(v []*string) *PutAccessControlRuleInput {
	s.NotActions = v
	return s
}

// SetNotImpersonationRoleIds sets the NotImpersonationRoleIds field's value.
func (s *PutAccessControlRuleInput) SetNotImpersonationRoleIds(v []*string) *PutAccessControlRuleInput {
	s.NotImpersonationRoleIds = v
	return s
}

// SetNotIpRanges sets the NotIpRanges field's value.
func (s *PutAccessControlRuleInput) SetNotIpRanges(v []*string) *PutAccessControlRuleInput {
	s.NotIpRanges = v
	return s
}

// SetNotUserIds sets the NotUserIds field's value.
func (s *PutAccessControlRuleInput) SetNotUserIds(v []*string) *PutAccessControlRuleInput {
	s.NotUserIds = v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *PutAccessControlRuleInput) SetOrganizationId(v string) *PutAccessControlRuleInput {
	s.OrganizationId = &v
	return s
}

// SetUserIds sets the UserIds field's value.
func (s *PutAccessControlRuleInput) SetUserIds(v []*string) *PutAccessControlRuleInput {
	s.UserIds = v
	return s
}

type PutAccessControlRuleOutput 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 PutAccessControlRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutAccessControlRuleOutput) GoString() string {
	return s.String()
}

type PutEmailMonitoringConfigurationInput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the CloudWatch Log group associated with
	// the email monitoring configuration.
	//
	// LogGroupArn is a required field
	LogGroupArn *string `min:"47" type:"string" required:"true"`

	// The ID of the organization for which the email monitoring configuration is
	// set.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The Amazon Resource Name (ARN) of the IAM Role associated with the email
	// monitoring configuration.
	//
	// RoleArn is a required field
	RoleArn *string `min:"20" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutEmailMonitoringConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutEmailMonitoringConfigurationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutEmailMonitoringConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutEmailMonitoringConfigurationInput"}
	if s.LogGroupArn == nil {
		invalidParams.Add(request.NewErrParamRequired("LogGroupArn"))
	}
	if s.LogGroupArn != nil && len(*s.LogGroupArn) < 47 {
		invalidParams.Add(request.NewErrParamMinLen("LogGroupArn", 47))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.RoleArn != nil && len(*s.RoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetLogGroupArn sets the LogGroupArn field's value.
func (s *PutEmailMonitoringConfigurationInput) SetLogGroupArn(v string) *PutEmailMonitoringConfigurationInput {
	s.LogGroupArn = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *PutEmailMonitoringConfigurationInput) SetOrganizationId(v string) *PutEmailMonitoringConfigurationInput {
	s.OrganizationId = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *PutEmailMonitoringConfigurationInput) SetRoleArn(v string) *PutEmailMonitoringConfigurationInput {
	s.RoleArn = &v
	return s
}

type PutEmailMonitoringConfigurationOutput 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 PutEmailMonitoringConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutEmailMonitoringConfigurationOutput) GoString() string {
	return s.String()
}

type PutInboundDmarcSettingsInput struct {
	_ struct{} `type:"structure"`

	// Enforces or suspends a policy after it's applied.
	//
	// Enforced is a required field
	Enforced *bool `type:"boolean" required:"true"`

	// The ID of the organization that you are applying the DMARC policy to.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 PutInboundDmarcSettingsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutInboundDmarcSettingsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutInboundDmarcSettingsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutInboundDmarcSettingsInput"}
	if s.Enforced == nil {
		invalidParams.Add(request.NewErrParamRequired("Enforced"))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEnforced sets the Enforced field's value.
func (s *PutInboundDmarcSettingsInput) SetEnforced(v bool) *PutInboundDmarcSettingsInput {
	s.Enforced = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *PutInboundDmarcSettingsInput) SetOrganizationId(v string) *PutInboundDmarcSettingsInput {
	s.OrganizationId = &v
	return s
}

type PutInboundDmarcSettingsOutput 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 PutInboundDmarcSettingsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutInboundDmarcSettingsOutput) GoString() string {
	return s.String()
}

type PutMailboxPermissionsInput struct {
	_ struct{} `type:"structure"`

	// The identifier of the user or resource for which to update mailbox permissions.
	//
	// The identifier can be UserId, ResourceID, or Group Id, Username, Resourcename,
	// or Groupname, or email.
	//
	//    * Entity ID: 12345678-1234-1234-1234-123456789012, r-0123456789a0123456789b0123456789,
	//    or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: entity@domain.tld
	//
	//    * Entity name: entity
	//
	// EntityId is a required field
	EntityId *string `min:"1" type:"string" required:"true"`

	// The identifier of the user, group, or resource to which to grant the permissions.
	//
	// The identifier can be UserId, ResourceID, or Group Id, Username, Resourcename,
	// or Groupname, or email.
	//
	//    * Grantee ID: 12345678-1234-1234-1234-123456789012, r-0123456789a0123456789b0123456789,
	//    or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: grantee@domain.tld
	//
	//    * Grantee name: grantee
	//
	// GranteeId is a required field
	GranteeId *string `min:"1" type:"string" required:"true"`

	// The identifier of the organization under which the user, group, or resource
	// exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The permissions granted to the grantee. SEND_AS allows the grantee to send
	// email as the owner of the mailbox (the grantee is not mentioned on these
	// emails). SEND_ON_BEHALF allows the grantee to send email on behalf of the
	// owner of the mailbox (the grantee is not mentioned as the physical sender
	// of these emails). FULL_ACCESS allows the grantee full access to the mailbox,
	// irrespective of other folder-level permissions set on the mailbox.
	//
	// PermissionValues is a required field
	PermissionValues []*string `type:"list" required:"true" enum:"PermissionType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutMailboxPermissionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutMailboxPermissionsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutMailboxPermissionsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutMailboxPermissionsInput"}
	if s.EntityId == nil {
		invalidParams.Add(request.NewErrParamRequired("EntityId"))
	}
	if s.EntityId != nil && len(*s.EntityId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("EntityId", 1))
	}
	if s.GranteeId == nil {
		invalidParams.Add(request.NewErrParamRequired("GranteeId"))
	}
	if s.GranteeId != nil && len(*s.GranteeId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("GranteeId", 1))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.PermissionValues == nil {
		invalidParams.Add(request.NewErrParamRequired("PermissionValues"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEntityId sets the EntityId field's value.
func (s *PutMailboxPermissionsInput) SetEntityId(v string) *PutMailboxPermissionsInput {
	s.EntityId = &v
	return s
}

// SetGranteeId sets the GranteeId field's value.
func (s *PutMailboxPermissionsInput) SetGranteeId(v string) *PutMailboxPermissionsInput {
	s.GranteeId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *PutMailboxPermissionsInput) SetOrganizationId(v string) *PutMailboxPermissionsInput {
	s.OrganizationId = &v
	return s
}

// SetPermissionValues sets the PermissionValues field's value.
func (s *PutMailboxPermissionsInput) SetPermissionValues(v []*string) *PutMailboxPermissionsInput {
	s.PermissionValues = v
	return s
}

type PutMailboxPermissionsOutput 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 PutMailboxPermissionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutMailboxPermissionsOutput) GoString() string {
	return s.String()
}

type PutMobileDeviceAccessOverrideInput struct {
	_ struct{} `type:"structure"`

	// A description of the override.
	Description *string `min:"1" type:"string"`

	// The mobile device for which you create the override. DeviceId is case insensitive.
	//
	// DeviceId is a required field
	DeviceId *string `min:"1" type:"string" required:"true"`

	// The effect of the override, ALLOW or DENY.
	//
	// Effect is a required field
	Effect *string `type:"string" required:"true" enum:"MobileDeviceAccessRuleEffect"`

	// Identifies the WorkMail organization for which you create the override.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The WorkMail user for which you create the override. Accepts the following
	// types of user identities:
	//
	//    * User ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: user@domain.tld
	//
	//    * User name: user
	//
	// UserId is a required field
	UserId *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 PutMobileDeviceAccessOverrideInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutMobileDeviceAccessOverrideInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutMobileDeviceAccessOverrideInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutMobileDeviceAccessOverrideInput"}
	if s.Description != nil && len(*s.Description) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Description", 1))
	}
	if s.DeviceId == nil {
		invalidParams.Add(request.NewErrParamRequired("DeviceId"))
	}
	if s.DeviceId != nil && len(*s.DeviceId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DeviceId", 1))
	}
	if s.Effect == nil {
		invalidParams.Add(request.NewErrParamRequired("Effect"))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.UserId == nil {
		invalidParams.Add(request.NewErrParamRequired("UserId"))
	}
	if s.UserId != nil && len(*s.UserId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("UserId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDescription sets the Description field's value.
func (s *PutMobileDeviceAccessOverrideInput) SetDescription(v string) *PutMobileDeviceAccessOverrideInput {
	s.Description = &v
	return s
}

// SetDeviceId sets the DeviceId field's value.
func (s *PutMobileDeviceAccessOverrideInput) SetDeviceId(v string) *PutMobileDeviceAccessOverrideInput {
	s.DeviceId = &v
	return s
}

// SetEffect sets the Effect field's value.
func (s *PutMobileDeviceAccessOverrideInput) SetEffect(v string) *PutMobileDeviceAccessOverrideInput {
	s.Effect = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *PutMobileDeviceAccessOverrideInput) SetOrganizationId(v string) *PutMobileDeviceAccessOverrideInput {
	s.OrganizationId = &v
	return s
}

// SetUserId sets the UserId field's value.
func (s *PutMobileDeviceAccessOverrideInput) SetUserId(v string) *PutMobileDeviceAccessOverrideInput {
	s.UserId = &v
	return s
}

type PutMobileDeviceAccessOverrideOutput 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 PutMobileDeviceAccessOverrideOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutMobileDeviceAccessOverrideOutput) GoString() string {
	return s.String()
}

type PutRetentionPolicyInput struct {
	_ struct{} `type:"structure"`

	// The retention policy description.
	//
	// Description is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by PutRetentionPolicyInput's
	// String and GoString methods.
	Description *string `type:"string" sensitive:"true"`

	// The retention policy folder configurations.
	//
	// FolderConfigurations is a required field
	FolderConfigurations []*FolderConfiguration `type:"list" required:"true"`

	// The retention policy ID.
	Id *string `min:"1" type:"string"`

	// The retention policy name.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// The organization ID.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 PutRetentionPolicyInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutRetentionPolicyInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutRetentionPolicyInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutRetentionPolicyInput"}
	if s.FolderConfigurations == nil {
		invalidParams.Add(request.NewErrParamRequired("FolderConfigurations"))
	}
	if s.Id != nil && len(*s.Id) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Id", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.FolderConfigurations != nil {
		for i, v := range s.FolderConfigurations {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "FolderConfigurations", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDescription sets the Description field's value.
func (s *PutRetentionPolicyInput) SetDescription(v string) *PutRetentionPolicyInput {
	s.Description = &v
	return s
}

// SetFolderConfigurations sets the FolderConfigurations field's value.
func (s *PutRetentionPolicyInput) SetFolderConfigurations(v []*FolderConfiguration) *PutRetentionPolicyInput {
	s.FolderConfigurations = v
	return s
}

// SetId sets the Id field's value.
func (s *PutRetentionPolicyInput) SetId(v string) *PutRetentionPolicyInput {
	s.Id = &v
	return s
}

// SetName sets the Name field's value.
func (s *PutRetentionPolicyInput) SetName(v string) *PutRetentionPolicyInput {
	s.Name = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *PutRetentionPolicyInput) SetOrganizationId(v string) *PutRetentionPolicyInput {
	s.OrganizationId = &v
	return s
}

type PutRetentionPolicyOutput 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 PutRetentionPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PutRetentionPolicyOutput) GoString() string {
	return s.String()
}

// Describes an EWS based availability provider when returned from the service.
// It does not contain the password of the endpoint.
type RedactedEwsAvailabilityProvider struct {
	_ struct{} `type:"structure"`

	// The endpoint of the remote EWS server.
	EwsEndpoint *string `type:"string"`

	// The username used to authenticate the remote EWS server.
	EwsUsername *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 RedactedEwsAvailabilityProvider) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RedactedEwsAvailabilityProvider) GoString() string {
	return s.String()
}

// SetEwsEndpoint sets the EwsEndpoint field's value.
func (s *RedactedEwsAvailabilityProvider) SetEwsEndpoint(v string) *RedactedEwsAvailabilityProvider {
	s.EwsEndpoint = &v
	return s
}

// SetEwsUsername sets the EwsUsername field's value.
func (s *RedactedEwsAvailabilityProvider) SetEwsUsername(v string) *RedactedEwsAvailabilityProvider {
	s.EwsUsername = &v
	return s
}

type RegisterMailDomainInput struct {
	_ struct{} `type:"structure"`

	// Idempotency token used when retrying requests.
	ClientToken *string `min:"1" type:"string" idempotencyToken:"true"`

	// The name of the mail domain to create in WorkMail and SES.
	//
	// DomainName is a required field
	DomainName *string `min:"3" type:"string" required:"true"`

	// The WorkMail organization under which you're creating the domain.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 RegisterMailDomainInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterMailDomainInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegisterMailDomainInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegisterMailDomainInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 1))
	}
	if s.DomainName == nil {
		invalidParams.Add(request.NewErrParamRequired("DomainName"))
	}
	if s.DomainName != nil && len(*s.DomainName) < 3 {
		invalidParams.Add(request.NewErrParamMinLen("DomainName", 3))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetClientToken sets the ClientToken field's value.
func (s *RegisterMailDomainInput) SetClientToken(v string) *RegisterMailDomainInput {
	s.ClientToken = &v
	return s
}

// SetDomainName sets the DomainName field's value.
func (s *RegisterMailDomainInput) SetDomainName(v string) *RegisterMailDomainInput {
	s.DomainName = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *RegisterMailDomainInput) SetOrganizationId(v string) *RegisterMailDomainInput {
	s.OrganizationId = &v
	return s
}

type RegisterMailDomainOutput 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 RegisterMailDomainOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterMailDomainOutput) GoString() string {
	return s.String()
}

type RegisterToWorkMailInput struct {
	_ struct{} `type:"structure"`

	// The email for the user, group, or resource to be updated.
	//
	// Email is a required field
	Email *string `min:"1" type:"string" required:"true"`

	// The identifier for the user, group, or resource to be updated.
	//
	// The identifier can accept UserId, ResourceId, or GroupId, or Username, Resourcename,
	// or Groupname. The following identity formats are available:
	//
	//    * Entity ID: 12345678-1234-1234-1234-123456789012, r-0123456789a0123456789b0123456789,
	//    or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Entity name: entity
	//
	// EntityId is a required field
	EntityId *string `min:"1" type:"string" required:"true"`

	// The identifier for the organization under which the user, group, or resource
	// exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 RegisterToWorkMailInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterToWorkMailInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegisterToWorkMailInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegisterToWorkMailInput"}
	if s.Email == nil {
		invalidParams.Add(request.NewErrParamRequired("Email"))
	}
	if s.Email != nil && len(*s.Email) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Email", 1))
	}
	if s.EntityId == nil {
		invalidParams.Add(request.NewErrParamRequired("EntityId"))
	}
	if s.EntityId != nil && len(*s.EntityId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("EntityId", 1))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEmail sets the Email field's value.
func (s *RegisterToWorkMailInput) SetEmail(v string) *RegisterToWorkMailInput {
	s.Email = &v
	return s
}

// SetEntityId sets the EntityId field's value.
func (s *RegisterToWorkMailInput) SetEntityId(v string) *RegisterToWorkMailInput {
	s.EntityId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *RegisterToWorkMailInput) SetOrganizationId(v string) *RegisterToWorkMailInput {
	s.OrganizationId = &v
	return s
}

type RegisterToWorkMailOutput 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 RegisterToWorkMailOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s RegisterToWorkMailOutput) GoString() string {
	return s.String()
}

// This user, group, or resource name is not allowed in WorkMail.
type ReservedNameException 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 ReservedNameException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReservedNameException) GoString() string {
	return s.String()
}

func newErrorReservedNameException(v protocol.ResponseMetadata) error {
	return &ReservedNameException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ReservedNameException) Code() string {
	return "ReservedNameException"
}

// Message returns the exception's message.
func (s *ReservedNameException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ReservedNameException) OrigErr() error {
	return nil
}

func (s *ReservedNameException) 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 *ReservedNameException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ReservedNameException) RequestID() string {
	return s.RespMetadata.RequestID
}

type ResetPasswordInput struct {
	_ struct{} `type:"structure"`

	// The identifier of the organization that contains the user for which the password
	// is reset.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The new password for the user.
	//
	// Password is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ResetPasswordInput's
	// String and GoString methods.
	//
	// Password is a required field
	Password *string `type:"string" required:"true" sensitive:"true"`

	// The identifier of the user for whom the password is reset.
	//
	// UserId is a required field
	UserId *string `min:"12" 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 ResetPasswordInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResetPasswordInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ResetPasswordInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ResetPasswordInput"}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.Password == nil {
		invalidParams.Add(request.NewErrParamRequired("Password"))
	}
	if s.UserId == nil {
		invalidParams.Add(request.NewErrParamRequired("UserId"))
	}
	if s.UserId != nil && len(*s.UserId) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("UserId", 12))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *ResetPasswordInput) SetOrganizationId(v string) *ResetPasswordInput {
	s.OrganizationId = &v
	return s
}

// SetPassword sets the Password field's value.
func (s *ResetPasswordInput) SetPassword(v string) *ResetPasswordInput {
	s.Password = &v
	return s
}

// SetUserId sets the UserId field's value.
func (s *ResetPasswordInput) SetUserId(v string) *ResetPasswordInput {
	s.UserId = &v
	return s
}

type ResetPasswordOutput 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 ResetPasswordOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResetPasswordOutput) GoString() string {
	return s.String()
}

// The representation of a resource.
type Resource struct {
	_ struct{} `type:"structure"`

	// Resource description.
	Description *string `min:"1" type:"string"`

	// The date indicating when the resource was disabled from WorkMail use.
	DisabledDate *time.Time `type:"timestamp"`

	// The email of the resource.
	Email *string `min:"1" type:"string"`

	// The date indicating when the resource was enabled for WorkMail use.
	EnabledDate *time.Time `type:"timestamp"`

	// The identifier of the resource.
	Id *string `min:"12" type:"string"`

	// The name of the resource.
	Name *string `min:"1" type:"string"`

	// The state of the resource, which can be ENABLED, DISABLED, or DELETED.
	State *string `type:"string" enum:"EntityState"`

	// The type of the resource: equipment or room.
	Type *string `type:"string" enum:"ResourceType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Resource) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Resource) GoString() string {
	return s.String()
}

// SetDescription sets the Description field's value.
func (s *Resource) SetDescription(v string) *Resource {
	s.Description = &v
	return s
}

// SetDisabledDate sets the DisabledDate field's value.
func (s *Resource) SetDisabledDate(v time.Time) *Resource {
	s.DisabledDate = &v
	return s
}

// SetEmail sets the Email field's value.
func (s *Resource) SetEmail(v string) *Resource {
	s.Email = &v
	return s
}

// SetEnabledDate sets the EnabledDate field's value.
func (s *Resource) SetEnabledDate(v time.Time) *Resource {
	s.EnabledDate = &v
	return s
}

// SetId sets the Id field's value.
func (s *Resource) SetId(v string) *Resource {
	s.Id = &v
	return s
}

// SetName sets the Name field's value.
func (s *Resource) SetName(v string) *Resource {
	s.Name = &v
	return s
}

// SetState sets the State field's value.
func (s *Resource) SetState(v string) *Resource {
	s.State = &v
	return s
}

// SetType sets the Type field's value.
func (s *Resource) SetType(v string) *Resource {
	s.Type = &v
	return s
}

// The resource cannot be found.
type ResourceNotFoundException 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 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", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ResourceNotFoundException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ResourceNotFoundException) RequestID() string {
	return s.RespMetadata.RequestID
}

type StartMailboxExportJobInput struct {
	_ struct{} `type:"structure"`

	// The idempotency token for the client request.
	ClientToken *string `min:"1" type:"string" idempotencyToken:"true"`

	// The mailbox export job description.
	Description *string `type:"string"`

	// The identifier of the user or resource associated with the mailbox.
	//
	// The identifier can accept UserId or ResourceId, Username or Resourcename,
	// or email. The following identity formats are available:
	//
	//    * Entity ID: 12345678-1234-1234-1234-123456789012, r-0123456789a0123456789b0123456789
	//    , or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: entity@domain.tld
	//
	//    * Entity name: entity
	//
	// EntityId is a required field
	EntityId *string `min:"1" type:"string" required:"true"`

	// The Amazon Resource Name (ARN) of the symmetric AWS Key Management Service
	// (AWS KMS) key that encrypts the exported mailbox content.
	//
	// KmsKeyArn is a required field
	KmsKeyArn *string `min:"20" type:"string" required:"true"`

	// The identifier associated with the organization.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The ARN of the AWS Identity and Access Management (IAM) role that grants
	// write permission to the S3 bucket.
	//
	// RoleArn is a required field
	RoleArn *string `min:"20" type:"string" required:"true"`

	// The name of the S3 bucket.
	//
	// S3BucketName is a required field
	S3BucketName *string `min:"1" type:"string" required:"true"`

	// The S3 bucket prefix.
	//
	// S3Prefix is a required field
	S3Prefix *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 StartMailboxExportJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartMailboxExportJobInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StartMailboxExportJobInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StartMailboxExportJobInput"}
	if s.ClientToken != nil && len(*s.ClientToken) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ClientToken", 1))
	}
	if s.EntityId == nil {
		invalidParams.Add(request.NewErrParamRequired("EntityId"))
	}
	if s.EntityId != nil && len(*s.EntityId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("EntityId", 1))
	}
	if s.KmsKeyArn == nil {
		invalidParams.Add(request.NewErrParamRequired("KmsKeyArn"))
	}
	if s.KmsKeyArn != nil && len(*s.KmsKeyArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("KmsKeyArn", 20))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.RoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RoleArn"))
	}
	if s.RoleArn != nil && len(*s.RoleArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20))
	}
	if s.S3BucketName == nil {
		invalidParams.Add(request.NewErrParamRequired("S3BucketName"))
	}
	if s.S3BucketName != nil && len(*s.S3BucketName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("S3BucketName", 1))
	}
	if s.S3Prefix == nil {
		invalidParams.Add(request.NewErrParamRequired("S3Prefix"))
	}
	if s.S3Prefix != nil && len(*s.S3Prefix) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("S3Prefix", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetClientToken sets the ClientToken field's value.
func (s *StartMailboxExportJobInput) SetClientToken(v string) *StartMailboxExportJobInput {
	s.ClientToken = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *StartMailboxExportJobInput) SetDescription(v string) *StartMailboxExportJobInput {
	s.Description = &v
	return s
}

// SetEntityId sets the EntityId field's value.
func (s *StartMailboxExportJobInput) SetEntityId(v string) *StartMailboxExportJobInput {
	s.EntityId = &v
	return s
}

// SetKmsKeyArn sets the KmsKeyArn field's value.
func (s *StartMailboxExportJobInput) SetKmsKeyArn(v string) *StartMailboxExportJobInput {
	s.KmsKeyArn = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *StartMailboxExportJobInput) SetOrganizationId(v string) *StartMailboxExportJobInput {
	s.OrganizationId = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *StartMailboxExportJobInput) SetRoleArn(v string) *StartMailboxExportJobInput {
	s.RoleArn = &v
	return s
}

// SetS3BucketName sets the S3BucketName field's value.
func (s *StartMailboxExportJobInput) SetS3BucketName(v string) *StartMailboxExportJobInput {
	s.S3BucketName = &v
	return s
}

// SetS3Prefix sets the S3Prefix field's value.
func (s *StartMailboxExportJobInput) SetS3Prefix(v string) *StartMailboxExportJobInput {
	s.S3Prefix = &v
	return s
}

type StartMailboxExportJobOutput struct {
	_ struct{} `type:"structure"`

	// The job ID.
	JobId *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 StartMailboxExportJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartMailboxExportJobOutput) GoString() string {
	return s.String()
}

// SetJobId sets the JobId field's value.
func (s *StartMailboxExportJobOutput) SetJobId(v string) *StartMailboxExportJobOutput {
	s.JobId = &v
	return s
}

// Describes a tag applied to a resource.
type Tag struct {
	_ struct{} `type:"structure"`

	// The key of the tag.
	//
	// Key is a required field
	Key *string `min:"1" type:"string" required:"true"`

	// The value of the tag.
	//
	// Value is a required field
	Value *string `type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tag) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tag) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Tag) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Tag"}
	if s.Key == nil {
		invalidParams.Add(request.NewErrParamRequired("Key"))
	}
	if s.Key != nil && len(*s.Key) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Key", 1))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetKey sets the Key field's value.
func (s *Tag) SetKey(v string) *Tag {
	s.Key = &v
	return s
}

// SetValue sets the Value field's value.
func (s *Tag) SetValue(v string) *Tag {
	s.Value = &v
	return s
}

type TagResourceInput struct {
	_ struct{} `type:"structure"`

	// The resource ARN.
	//
	// ResourceARN is a required field
	ResourceARN *string `min:"1" type:"string" required:"true"`

	// The tag key-value pairs.
	//
	// Tags is a required field
	Tags []*Tag `type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TagResourceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TagResourceInput"}
	if s.ResourceARN == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceARN"))
	}
	if s.ResourceARN != nil && len(*s.ResourceARN) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceARN", 1))
	}
	if s.Tags == nil {
		invalidParams.Add(request.NewErrParamRequired("Tags"))
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetResourceARN sets the ResourceARN field's value.
func (s *TagResourceInput) SetResourceARN(v string) *TagResourceInput {
	s.ResourceARN = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *TagResourceInput) SetTags(v []*Tag) *TagResourceInput {
	s.Tags = v
	return s
}

type TagResourceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TagResourceOutput) GoString() string {
	return s.String()
}

type TestAvailabilityConfigurationInput struct {
	_ struct{} `type:"structure"`

	// The domain to which the provider applies. If this field is provided, a stored
	// availability provider associated to this domain name will be tested.
	DomainName *string `min:"3" type:"string"`

	// Describes an EWS based availability provider. This is only used as input
	// to the service.
	EwsProvider *EwsAvailabilityProvider `type:"structure"`

	// Describes a Lambda based availability provider.
	LambdaProvider *LambdaAvailabilityProvider `type:"structure"`

	// The WorkMail organization where the availability provider will be tested.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 TestAvailabilityConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestAvailabilityConfigurationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TestAvailabilityConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TestAvailabilityConfigurationInput"}
	if s.DomainName != nil && len(*s.DomainName) < 3 {
		invalidParams.Add(request.NewErrParamMinLen("DomainName", 3))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.EwsProvider != nil {
		if err := s.EwsProvider.Validate(); err != nil {
			invalidParams.AddNested("EwsProvider", err.(request.ErrInvalidParams))
		}
	}
	if s.LambdaProvider != nil {
		if err := s.LambdaProvider.Validate(); err != nil {
			invalidParams.AddNested("LambdaProvider", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDomainName sets the DomainName field's value.
func (s *TestAvailabilityConfigurationInput) SetDomainName(v string) *TestAvailabilityConfigurationInput {
	s.DomainName = &v
	return s
}

// SetEwsProvider sets the EwsProvider field's value.
func (s *TestAvailabilityConfigurationInput) SetEwsProvider(v *EwsAvailabilityProvider) *TestAvailabilityConfigurationInput {
	s.EwsProvider = v
	return s
}

// SetLambdaProvider sets the LambdaProvider field's value.
func (s *TestAvailabilityConfigurationInput) SetLambdaProvider(v *LambdaAvailabilityProvider) *TestAvailabilityConfigurationInput {
	s.LambdaProvider = v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *TestAvailabilityConfigurationInput) SetOrganizationId(v string) *TestAvailabilityConfigurationInput {
	s.OrganizationId = &v
	return s
}

type TestAvailabilityConfigurationOutput struct {
	_ struct{} `type:"structure"`

	// String containing the reason for a failed test if TestPassed is false.
	FailureReason *string `type:"string"`

	// Boolean indicating whether the test passed or failed.
	TestPassed *bool `type:"boolean"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestAvailabilityConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TestAvailabilityConfigurationOutput) GoString() string {
	return s.String()
}

// SetFailureReason sets the FailureReason field's value.
func (s *TestAvailabilityConfigurationOutput) SetFailureReason(v string) *TestAvailabilityConfigurationOutput {
	s.FailureReason = &v
	return s
}

// SetTestPassed sets the TestPassed field's value.
func (s *TestAvailabilityConfigurationOutput) SetTestPassed(v bool) *TestAvailabilityConfigurationOutput {
	s.TestPassed = &v
	return s
}

// The resource can have up to 50 user-applied tags.
type TooManyTagsException 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 TooManyTagsException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TooManyTagsException) GoString() string {
	return s.String()
}

func newErrorTooManyTagsException(v protocol.ResponseMetadata) error {
	return &TooManyTagsException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *TooManyTagsException) Code() string {
	return "TooManyTagsException"
}

// Message returns the exception's message.
func (s *TooManyTagsException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *TooManyTagsException) OrigErr() error {
	return nil
}

func (s *TooManyTagsException) 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 *TooManyTagsException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *TooManyTagsException) RequestID() string {
	return s.RespMetadata.RequestID
}

// You can't perform a write operation against a read-only directory.
type UnsupportedOperationException 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 UnsupportedOperationException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UnsupportedOperationException) GoString() string {
	return s.String()
}

func newErrorUnsupportedOperationException(v protocol.ResponseMetadata) error {
	return &UnsupportedOperationException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *UnsupportedOperationException) Code() string {
	return "UnsupportedOperationException"
}

// Message returns the exception's message.
func (s *UnsupportedOperationException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *UnsupportedOperationException) OrigErr() error {
	return nil
}

func (s *UnsupportedOperationException) 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 *UnsupportedOperationException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *UnsupportedOperationException) RequestID() string {
	return s.RespMetadata.RequestID
}

type UntagResourceInput struct {
	_ struct{} `type:"structure"`

	// The resource ARN.
	//
	// ResourceARN is a required field
	ResourceARN *string `min:"1" type:"string" required:"true"`

	// The tag keys.
	//
	// TagKeys is a required field
	TagKeys []*string `type:"list" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UntagResourceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UntagResourceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UntagResourceInput"}
	if s.ResourceARN == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceARN"))
	}
	if s.ResourceARN != nil && len(*s.ResourceARN) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceARN", 1))
	}
	if s.TagKeys == nil {
		invalidParams.Add(request.NewErrParamRequired("TagKeys"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetResourceARN sets the ResourceARN field's value.
func (s *UntagResourceInput) SetResourceARN(v string) *UntagResourceInput {
	s.ResourceARN = &v
	return s
}

// SetTagKeys sets the TagKeys field's value.
func (s *UntagResourceInput) SetTagKeys(v []*string) *UntagResourceInput {
	s.TagKeys = v
	return s
}

type UntagResourceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API 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 UpdateAvailabilityConfigurationInput struct {
	_ struct{} `type:"structure"`

	// The domain to which the provider applies the availability configuration.
	//
	// DomainName is a required field
	DomainName *string `min:"3" type:"string" required:"true"`

	// The EWS availability provider definition. The request must contain exactly
	// one provider definition, either EwsProvider or LambdaProvider. The previously
	// stored provider will be overridden by the one provided.
	EwsProvider *EwsAvailabilityProvider `type:"structure"`

	// The Lambda availability provider definition. The request must contain exactly
	// one provider definition, either EwsProvider or LambdaProvider. The previously
	// stored provider will be overridden by the one provided.
	LambdaProvider *LambdaAvailabilityProvider `type:"structure"`

	// The WorkMail organization for which the AvailabilityConfiguration will be
	// updated.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 UpdateAvailabilityConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAvailabilityConfigurationInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateAvailabilityConfigurationInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateAvailabilityConfigurationInput"}
	if s.DomainName == nil {
		invalidParams.Add(request.NewErrParamRequired("DomainName"))
	}
	if s.DomainName != nil && len(*s.DomainName) < 3 {
		invalidParams.Add(request.NewErrParamMinLen("DomainName", 3))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.EwsProvider != nil {
		if err := s.EwsProvider.Validate(); err != nil {
			invalidParams.AddNested("EwsProvider", err.(request.ErrInvalidParams))
		}
	}
	if s.LambdaProvider != nil {
		if err := s.LambdaProvider.Validate(); err != nil {
			invalidParams.AddNested("LambdaProvider", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDomainName sets the DomainName field's value.
func (s *UpdateAvailabilityConfigurationInput) SetDomainName(v string) *UpdateAvailabilityConfigurationInput {
	s.DomainName = &v
	return s
}

// SetEwsProvider sets the EwsProvider field's value.
func (s *UpdateAvailabilityConfigurationInput) SetEwsProvider(v *EwsAvailabilityProvider) *UpdateAvailabilityConfigurationInput {
	s.EwsProvider = v
	return s
}

// SetLambdaProvider sets the LambdaProvider field's value.
func (s *UpdateAvailabilityConfigurationInput) SetLambdaProvider(v *LambdaAvailabilityProvider) *UpdateAvailabilityConfigurationInput {
	s.LambdaProvider = v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *UpdateAvailabilityConfigurationInput) SetOrganizationId(v string) *UpdateAvailabilityConfigurationInput {
	s.OrganizationId = &v
	return s
}

type UpdateAvailabilityConfigurationOutput 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 UpdateAvailabilityConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateAvailabilityConfigurationOutput) GoString() string {
	return s.String()
}

type UpdateDefaultMailDomainInput struct {
	_ struct{} `type:"structure"`

	// The domain name that will become the default domain.
	//
	// DomainName is a required field
	DomainName *string `min:"3" type:"string" required:"true"`

	// The WorkMail organization for which to list domains.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 UpdateDefaultMailDomainInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDefaultMailDomainInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateDefaultMailDomainInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateDefaultMailDomainInput"}
	if s.DomainName == nil {
		invalidParams.Add(request.NewErrParamRequired("DomainName"))
	}
	if s.DomainName != nil && len(*s.DomainName) < 3 {
		invalidParams.Add(request.NewErrParamMinLen("DomainName", 3))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDomainName sets the DomainName field's value.
func (s *UpdateDefaultMailDomainInput) SetDomainName(v string) *UpdateDefaultMailDomainInput {
	s.DomainName = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *UpdateDefaultMailDomainInput) SetOrganizationId(v string) *UpdateDefaultMailDomainInput {
	s.OrganizationId = &v
	return s
}

type UpdateDefaultMailDomainOutput 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 UpdateDefaultMailDomainOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateDefaultMailDomainOutput) GoString() string {
	return s.String()
}

type UpdateGroupInput struct {
	_ struct{} `type:"structure"`

	// The identifier for the group to be updated.
	//
	// The identifier can accept GroupId, Groupname, or email. The following identity
	// formats are available:
	//
	//    * Group ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: group@domain.tld
	//
	//    * Group name: group
	//
	// GroupId is a required field
	GroupId *string `min:"1" type:"string" required:"true"`

	// If enabled, the group is hidden from the global address list.
	HiddenFromGlobalAddressList *bool `type:"boolean"`

	// The identifier for the organization under which the group exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 UpdateGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateGroupInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateGroupInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateGroupInput"}
	if s.GroupId == nil {
		invalidParams.Add(request.NewErrParamRequired("GroupId"))
	}
	if s.GroupId != nil && len(*s.GroupId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("GroupId", 1))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetGroupId sets the GroupId field's value.
func (s *UpdateGroupInput) SetGroupId(v string) *UpdateGroupInput {
	s.GroupId = &v
	return s
}

// SetHiddenFromGlobalAddressList sets the HiddenFromGlobalAddressList field's value.
func (s *UpdateGroupInput) SetHiddenFromGlobalAddressList(v bool) *UpdateGroupInput {
	s.HiddenFromGlobalAddressList = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *UpdateGroupInput) SetOrganizationId(v string) *UpdateGroupInput {
	s.OrganizationId = &v
	return s
}

type UpdateGroupOutput 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 UpdateGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateGroupOutput) GoString() string {
	return s.String()
}

type UpdateImpersonationRoleInput struct {
	_ struct{} `type:"structure"`

	// The updated impersonation role description.
	Description *string `min:"1" type:"string"`

	// The ID of the impersonation role to update.
	//
	// ImpersonationRoleId is a required field
	ImpersonationRoleId *string `min:"1" type:"string" required:"true"`

	// The updated impersonation role name.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// The WorkMail organization that contains the impersonation role to update.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The updated list of rules.
	//
	// Rules is a required field
	Rules []*ImpersonationRule `type:"list" required:"true"`

	// The updated impersonation role type.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"ImpersonationRoleType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateImpersonationRoleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateImpersonationRoleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateImpersonationRoleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateImpersonationRoleInput"}
	if s.Description != nil && len(*s.Description) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Description", 1))
	}
	if s.ImpersonationRoleId == nil {
		invalidParams.Add(request.NewErrParamRequired("ImpersonationRoleId"))
	}
	if s.ImpersonationRoleId != nil && len(*s.ImpersonationRoleId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ImpersonationRoleId", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.Rules == nil {
		invalidParams.Add(request.NewErrParamRequired("Rules"))
	}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}
	if s.Rules != nil {
		for i, v := range s.Rules {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Rules", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDescription sets the Description field's value.
func (s *UpdateImpersonationRoleInput) SetDescription(v string) *UpdateImpersonationRoleInput {
	s.Description = &v
	return s
}

// SetImpersonationRoleId sets the ImpersonationRoleId field's value.
func (s *UpdateImpersonationRoleInput) SetImpersonationRoleId(v string) *UpdateImpersonationRoleInput {
	s.ImpersonationRoleId = &v
	return s
}

// SetName sets the Name field's value.
func (s *UpdateImpersonationRoleInput) SetName(v string) *UpdateImpersonationRoleInput {
	s.Name = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *UpdateImpersonationRoleInput) SetOrganizationId(v string) *UpdateImpersonationRoleInput {
	s.OrganizationId = &v
	return s
}

// SetRules sets the Rules field's value.
func (s *UpdateImpersonationRoleInput) SetRules(v []*ImpersonationRule) *UpdateImpersonationRoleInput {
	s.Rules = v
	return s
}

// SetType sets the Type field's value.
func (s *UpdateImpersonationRoleInput) SetType(v string) *UpdateImpersonationRoleInput {
	s.Type = &v
	return s
}

type UpdateImpersonationRoleOutput 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 UpdateImpersonationRoleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateImpersonationRoleOutput) GoString() string {
	return s.String()
}

type UpdateMailboxQuotaInput struct {
	_ struct{} `type:"structure"`

	// The updated mailbox quota, in MB, for the specified user.
	//
	// MailboxQuota is a required field
	MailboxQuota *int64 `min:"1" type:"integer" required:"true"`

	// The identifier for the organization that contains the user for whom to update
	// the mailbox quota.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The identifer for the user for whom to update the mailbox quota.
	//
	// The identifier can be the UserId, Username, or email. The following identity
	// formats are available:
	//
	//    * User ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: user@domain.tld
	//
	//    * User name: user
	//
	// UserId is a required field
	UserId *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 UpdateMailboxQuotaInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateMailboxQuotaInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateMailboxQuotaInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateMailboxQuotaInput"}
	if s.MailboxQuota == nil {
		invalidParams.Add(request.NewErrParamRequired("MailboxQuota"))
	}
	if s.MailboxQuota != nil && *s.MailboxQuota < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MailboxQuota", 1))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.UserId == nil {
		invalidParams.Add(request.NewErrParamRequired("UserId"))
	}
	if s.UserId != nil && len(*s.UserId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("UserId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMailboxQuota sets the MailboxQuota field's value.
func (s *UpdateMailboxQuotaInput) SetMailboxQuota(v int64) *UpdateMailboxQuotaInput {
	s.MailboxQuota = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *UpdateMailboxQuotaInput) SetOrganizationId(v string) *UpdateMailboxQuotaInput {
	s.OrganizationId = &v
	return s
}

// SetUserId sets the UserId field's value.
func (s *UpdateMailboxQuotaInput) SetUserId(v string) *UpdateMailboxQuotaInput {
	s.UserId = &v
	return s
}

type UpdateMailboxQuotaOutput 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 UpdateMailboxQuotaOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateMailboxQuotaOutput) GoString() string {
	return s.String()
}

type UpdateMobileDeviceAccessRuleInput struct {
	_ struct{} `type:"structure"`

	// The updated rule description.
	Description *string `min:"1" type:"string"`

	// Device models that the updated rule will match.
	DeviceModels []*string `min:"1" type:"list"`

	// Device operating systems that the updated rule will match.
	DeviceOperatingSystems []*string `min:"1" type:"list"`

	// Device types that the updated rule will match.
	DeviceTypes []*string `min:"1" type:"list"`

	// User agents that the updated rule will match.
	DeviceUserAgents []*string `min:"1" type:"list"`

	// The effect of the rule when it matches. Allowed values are ALLOW or DENY.
	//
	// Effect is a required field
	Effect *string `type:"string" required:"true" enum:"MobileDeviceAccessRuleEffect"`

	// The identifier of the rule to be updated.
	//
	// MobileDeviceAccessRuleId is a required field
	MobileDeviceAccessRuleId *string `min:"1" type:"string" required:"true"`

	// The updated rule name.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// Device models that the updated rule will not match. All other device models
	// will match.
	NotDeviceModels []*string `min:"1" type:"list"`

	// Device operating systems that the updated rule will not match. All other
	// device operating systems will match.
	NotDeviceOperatingSystems []*string `min:"1" type:"list"`

	// Device types that the updated rule will not match. All other device types
	// will match.
	NotDeviceTypes []*string `min:"1" type:"list"`

	// User agents that the updated rule will not match. All other user agents will
	// match.
	NotDeviceUserAgents []*string `min:"1" type:"list"`

	// The WorkMail organization under which the rule will be updated.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 UpdateMobileDeviceAccessRuleInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateMobileDeviceAccessRuleInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateMobileDeviceAccessRuleInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateMobileDeviceAccessRuleInput"}
	if s.Description != nil && len(*s.Description) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Description", 1))
	}
	if s.DeviceModels != nil && len(s.DeviceModels) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DeviceModels", 1))
	}
	if s.DeviceOperatingSystems != nil && len(s.DeviceOperatingSystems) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DeviceOperatingSystems", 1))
	}
	if s.DeviceTypes != nil && len(s.DeviceTypes) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DeviceTypes", 1))
	}
	if s.DeviceUserAgents != nil && len(s.DeviceUserAgents) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("DeviceUserAgents", 1))
	}
	if s.Effect == nil {
		invalidParams.Add(request.NewErrParamRequired("Effect"))
	}
	if s.MobileDeviceAccessRuleId == nil {
		invalidParams.Add(request.NewErrParamRequired("MobileDeviceAccessRuleId"))
	}
	if s.MobileDeviceAccessRuleId != nil && len(*s.MobileDeviceAccessRuleId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("MobileDeviceAccessRuleId", 1))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}
	if s.NotDeviceModels != nil && len(s.NotDeviceModels) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NotDeviceModels", 1))
	}
	if s.NotDeviceOperatingSystems != nil && len(s.NotDeviceOperatingSystems) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NotDeviceOperatingSystems", 1))
	}
	if s.NotDeviceTypes != nil && len(s.NotDeviceTypes) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NotDeviceTypes", 1))
	}
	if s.NotDeviceUserAgents != nil && len(s.NotDeviceUserAgents) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("NotDeviceUserAgents", 1))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDescription sets the Description field's value.
func (s *UpdateMobileDeviceAccessRuleInput) SetDescription(v string) *UpdateMobileDeviceAccessRuleInput {
	s.Description = &v
	return s
}

// SetDeviceModels sets the DeviceModels field's value.
func (s *UpdateMobileDeviceAccessRuleInput) SetDeviceModels(v []*string) *UpdateMobileDeviceAccessRuleInput {
	s.DeviceModels = v
	return s
}

// SetDeviceOperatingSystems sets the DeviceOperatingSystems field's value.
func (s *UpdateMobileDeviceAccessRuleInput) SetDeviceOperatingSystems(v []*string) *UpdateMobileDeviceAccessRuleInput {
	s.DeviceOperatingSystems = v
	return s
}

// SetDeviceTypes sets the DeviceTypes field's value.
func (s *UpdateMobileDeviceAccessRuleInput) SetDeviceTypes(v []*string) *UpdateMobileDeviceAccessRuleInput {
	s.DeviceTypes = v
	return s
}

// SetDeviceUserAgents sets the DeviceUserAgents field's value.
func (s *UpdateMobileDeviceAccessRuleInput) SetDeviceUserAgents(v []*string) *UpdateMobileDeviceAccessRuleInput {
	s.DeviceUserAgents = v
	return s
}

// SetEffect sets the Effect field's value.
func (s *UpdateMobileDeviceAccessRuleInput) SetEffect(v string) *UpdateMobileDeviceAccessRuleInput {
	s.Effect = &v
	return s
}

// SetMobileDeviceAccessRuleId sets the MobileDeviceAccessRuleId field's value.
func (s *UpdateMobileDeviceAccessRuleInput) SetMobileDeviceAccessRuleId(v string) *UpdateMobileDeviceAccessRuleInput {
	s.MobileDeviceAccessRuleId = &v
	return s
}

// SetName sets the Name field's value.
func (s *UpdateMobileDeviceAccessRuleInput) SetName(v string) *UpdateMobileDeviceAccessRuleInput {
	s.Name = &v
	return s
}

// SetNotDeviceModels sets the NotDeviceModels field's value.
func (s *UpdateMobileDeviceAccessRuleInput) SetNotDeviceModels(v []*string) *UpdateMobileDeviceAccessRuleInput {
	s.NotDeviceModels = v
	return s
}

// SetNotDeviceOperatingSystems sets the NotDeviceOperatingSystems field's value.
func (s *UpdateMobileDeviceAccessRuleInput) SetNotDeviceOperatingSystems(v []*string) *UpdateMobileDeviceAccessRuleInput {
	s.NotDeviceOperatingSystems = v
	return s
}

// SetNotDeviceTypes sets the NotDeviceTypes field's value.
func (s *UpdateMobileDeviceAccessRuleInput) SetNotDeviceTypes(v []*string) *UpdateMobileDeviceAccessRuleInput {
	s.NotDeviceTypes = v
	return s
}

// SetNotDeviceUserAgents sets the NotDeviceUserAgents field's value.
func (s *UpdateMobileDeviceAccessRuleInput) SetNotDeviceUserAgents(v []*string) *UpdateMobileDeviceAccessRuleInput {
	s.NotDeviceUserAgents = v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *UpdateMobileDeviceAccessRuleInput) SetOrganizationId(v string) *UpdateMobileDeviceAccessRuleInput {
	s.OrganizationId = &v
	return s
}

type UpdateMobileDeviceAccessRuleOutput 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 UpdateMobileDeviceAccessRuleOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateMobileDeviceAccessRuleOutput) GoString() string {
	return s.String()
}

type UpdatePrimaryEmailAddressInput struct {
	_ struct{} `type:"structure"`

	// The value of the email to be updated as primary.
	//
	// Email is a required field
	Email *string `min:"1" type:"string" required:"true"`

	// The user, group, or resource to update.
	//
	// The identifier can accept UseriD, ResourceId, or GroupId, Username, Resourcename,
	// or Groupname, or email. The following identity formats are available:
	//
	//    * Entity ID: 12345678-1234-1234-1234-123456789012, r-0123456789a0123456789b0123456789,
	//    or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: entity@domain.tld
	//
	//    * Entity name: entity
	//
	// EntityId is a required field
	EntityId *string `min:"1" type:"string" required:"true"`

	// The organization that contains the user, group, or resource to update.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" 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 UpdatePrimaryEmailAddressInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePrimaryEmailAddressInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdatePrimaryEmailAddressInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdatePrimaryEmailAddressInput"}
	if s.Email == nil {
		invalidParams.Add(request.NewErrParamRequired("Email"))
	}
	if s.Email != nil && len(*s.Email) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Email", 1))
	}
	if s.EntityId == nil {
		invalidParams.Add(request.NewErrParamRequired("EntityId"))
	}
	if s.EntityId != nil && len(*s.EntityId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("EntityId", 1))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEmail sets the Email field's value.
func (s *UpdatePrimaryEmailAddressInput) SetEmail(v string) *UpdatePrimaryEmailAddressInput {
	s.Email = &v
	return s
}

// SetEntityId sets the EntityId field's value.
func (s *UpdatePrimaryEmailAddressInput) SetEntityId(v string) *UpdatePrimaryEmailAddressInput {
	s.EntityId = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *UpdatePrimaryEmailAddressInput) SetOrganizationId(v string) *UpdatePrimaryEmailAddressInput {
	s.OrganizationId = &v
	return s
}

type UpdatePrimaryEmailAddressOutput 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 UpdatePrimaryEmailAddressOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdatePrimaryEmailAddressOutput) GoString() string {
	return s.String()
}

type UpdateResourceInput struct {
	_ struct{} `type:"structure"`

	// The resource's booking options to be updated.
	BookingOptions *BookingOptions `type:"structure"`

	// Updates the resource description.
	Description *string `type:"string"`

	// If enabled, the resource is hidden from the global address list.
	HiddenFromGlobalAddressList *bool `type:"boolean"`

	// The name of the resource to be updated.
	Name *string `min:"1" type:"string"`

	// The identifier associated with the organization for which the resource is
	// updated.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// The identifier of the resource to be updated.
	//
	// The identifier can accept ResourceId, Resourcename, or email. The following
	// identity formats are available:
	//
	//    * Resource ID: r-0123456789a0123456789b0123456789
	//
	//    * Email address: resource@domain.tld
	//
	//    * Resource name: resource
	//
	// ResourceId is a required field
	ResourceId *string `min:"1" type:"string" required:"true"`

	// Updates the resource type.
	Type *string `type:"string" enum:"ResourceType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateResourceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateResourceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateResourceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateResourceInput"}
	if s.Name != nil && len(*s.Name) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Name", 1))
	}
	if s.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.ResourceId == nil {
		invalidParams.Add(request.NewErrParamRequired("ResourceId"))
	}
	if s.ResourceId != nil && len(*s.ResourceId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ResourceId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetBookingOptions sets the BookingOptions field's value.
func (s *UpdateResourceInput) SetBookingOptions(v *BookingOptions) *UpdateResourceInput {
	s.BookingOptions = v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdateResourceInput) SetDescription(v string) *UpdateResourceInput {
	s.Description = &v
	return s
}

// SetHiddenFromGlobalAddressList sets the HiddenFromGlobalAddressList field's value.
func (s *UpdateResourceInput) SetHiddenFromGlobalAddressList(v bool) *UpdateResourceInput {
	s.HiddenFromGlobalAddressList = &v
	return s
}

// SetName sets the Name field's value.
func (s *UpdateResourceInput) SetName(v string) *UpdateResourceInput {
	s.Name = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *UpdateResourceInput) SetOrganizationId(v string) *UpdateResourceInput {
	s.OrganizationId = &v
	return s
}

// SetResourceId sets the ResourceId field's value.
func (s *UpdateResourceInput) SetResourceId(v string) *UpdateResourceInput {
	s.ResourceId = &v
	return s
}

// SetType sets the Type field's value.
func (s *UpdateResourceInput) SetType(v string) *UpdateResourceInput {
	s.Type = &v
	return s
}

type UpdateResourceOutput 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 UpdateResourceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateResourceOutput) GoString() string {
	return s.String()
}

type UpdateUserInput struct {
	_ struct{} `type:"structure"`

	// Updates the user's city.
	//
	// City is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateUserInput's
	// String and GoString methods.
	City *string `type:"string" sensitive:"true"`

	// Updates the user's company.
	//
	// Company is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateUserInput's
	// String and GoString methods.
	Company *string `type:"string" sensitive:"true"`

	// Updates the user's country.
	//
	// Country is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateUserInput's
	// String and GoString methods.
	Country *string `type:"string" sensitive:"true"`

	// Updates the user's department.
	//
	// Department is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateUserInput's
	// String and GoString methods.
	Department *string `type:"string" sensitive:"true"`

	// Updates the display name of the user.
	//
	// DisplayName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateUserInput's
	// String and GoString methods.
	DisplayName *string `type:"string" sensitive:"true"`

	// Updates the user's first name.
	//
	// FirstName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateUserInput's
	// String and GoString methods.
	FirstName *string `type:"string" sensitive:"true"`

	// If enabled, the user is hidden from the global address list.
	HiddenFromGlobalAddressList *bool `type:"boolean"`

	// Updates the user's initials.
	//
	// Initials is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateUserInput's
	// String and GoString methods.
	Initials *string `type:"string" sensitive:"true"`

	// Updates the user's job title.
	//
	// JobTitle is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateUserInput's
	// String and GoString methods.
	JobTitle *string `type:"string" sensitive:"true"`

	// Updates the user's last name.
	//
	// LastName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateUserInput's
	// String and GoString methods.
	LastName *string `type:"string" sensitive:"true"`

	// Updates the user's office.
	//
	// Office is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateUserInput's
	// String and GoString methods.
	Office *string `type:"string" sensitive:"true"`

	// The identifier for the organization under which the user exists.
	//
	// OrganizationId is a required field
	OrganizationId *string `min:"34" type:"string" required:"true"`

	// Updates the user role.
	//
	// You cannot pass SYSTEM_USER or RESOURCE.
	Role *string `type:"string" enum:"UserRole"`

	// Updates the user's street address.
	//
	// Street is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateUserInput's
	// String and GoString methods.
	Street *string `type:"string" sensitive:"true"`

	// Updates the user's contact details.
	//
	// Telephone is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateUserInput's
	// String and GoString methods.
	Telephone *string `type:"string" sensitive:"true"`

	// The identifier for the user to be updated.
	//
	// The identifier can be the UserId, Username, or email. The following identity
	// formats are available:
	//
	//    * User ID: 12345678-1234-1234-1234-123456789012 or S-1-1-12-1234567890-123456789-123456789-1234
	//
	//    * Email address: user@domain.tld
	//
	//    * User name: user
	//
	// UserId is a required field
	UserId *string `min:"1" type:"string" required:"true"`

	// Updates the user's zipcode.
	//
	// ZipCode is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateUserInput's
	// String and GoString methods.
	ZipCode *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 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.OrganizationId == nil {
		invalidParams.Add(request.NewErrParamRequired("OrganizationId"))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 34 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 34))
	}
	if s.UserId == nil {
		invalidParams.Add(request.NewErrParamRequired("UserId"))
	}
	if s.UserId != nil && len(*s.UserId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("UserId", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCity sets the City field's value.
func (s *UpdateUserInput) SetCity(v string) *UpdateUserInput {
	s.City = &v
	return s
}

// SetCompany sets the Company field's value.
func (s *UpdateUserInput) SetCompany(v string) *UpdateUserInput {
	s.Company = &v
	return s
}

// SetCountry sets the Country field's value.
func (s *UpdateUserInput) SetCountry(v string) *UpdateUserInput {
	s.Country = &v
	return s
}

// SetDepartment sets the Department field's value.
func (s *UpdateUserInput) SetDepartment(v string) *UpdateUserInput {
	s.Department = &v
	return s
}

// SetDisplayName sets the DisplayName field's value.
func (s *UpdateUserInput) SetDisplayName(v string) *UpdateUserInput {
	s.DisplayName = &v
	return s
}

// SetFirstName sets the FirstName field's value.
func (s *UpdateUserInput) SetFirstName(v string) *UpdateUserInput {
	s.FirstName = &v
	return s
}

// SetHiddenFromGlobalAddressList sets the HiddenFromGlobalAddressList field's value.
func (s *UpdateUserInput) SetHiddenFromGlobalAddressList(v bool) *UpdateUserInput {
	s.HiddenFromGlobalAddressList = &v
	return s
}

// SetInitials sets the Initials field's value.
func (s *UpdateUserInput) SetInitials(v string) *UpdateUserInput {
	s.Initials = &v
	return s
}

// SetJobTitle sets the JobTitle field's value.
func (s *UpdateUserInput) SetJobTitle(v string) *UpdateUserInput {
	s.JobTitle = &v
	return s
}

// SetLastName sets the LastName field's value.
func (s *UpdateUserInput) SetLastName(v string) *UpdateUserInput {
	s.LastName = &v
	return s
}

// SetOffice sets the Office field's value.
func (s *UpdateUserInput) SetOffice(v string) *UpdateUserInput {
	s.Office = &v
	return s
}

// SetOrganizationId sets the OrganizationId field's value.
func (s *UpdateUserInput) SetOrganizationId(v string) *UpdateUserInput {
	s.OrganizationId = &v
	return s
}

// SetRole sets the Role field's value.
func (s *UpdateUserInput) SetRole(v string) *UpdateUserInput {
	s.Role = &v
	return s
}

// SetStreet sets the Street field's value.
func (s *UpdateUserInput) SetStreet(v string) *UpdateUserInput {
	s.Street = &v
	return s
}

// SetTelephone sets the Telephone field's value.
func (s *UpdateUserInput) SetTelephone(v string) *UpdateUserInput {
	s.Telephone = &v
	return s
}

// SetUserId sets the UserId field's value.
func (s *UpdateUserInput) SetUserId(v string) *UpdateUserInput {
	s.UserId = &v
	return s
}

// SetZipCode sets the ZipCode field's value.
func (s *UpdateUserInput) SetZipCode(v string) *UpdateUserInput {
	s.ZipCode = &v
	return s
}

type UpdateUserOutput 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 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()
}

// The representation of an WorkMail user.
type User struct {
	_ struct{} `type:"structure"`

	// The date indicating when the user was disabled from WorkMail use.
	DisabledDate *time.Time `type:"timestamp"`

	// The display name of the user.
	DisplayName *string `type:"string"`

	// The email of the user.
	Email *string `min:"1" type:"string"`

	// The date indicating when the user was enabled for WorkMail use.
	EnabledDate *time.Time `type:"timestamp"`

	// The identifier of the user.
	Id *string `min:"12" type:"string"`

	// The name of the user.
	Name *string `min:"1" type:"string"`

	// The state of the user, which can be ENABLED, DISABLED, or DELETED.
	State *string `type:"string" enum:"EntityState"`

	// The role of the user.
	UserRole *string `type:"string" enum:"UserRole"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s User) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s User) GoString() string {
	return s.String()
}

// SetDisabledDate sets the DisabledDate field's value.
func (s *User) SetDisabledDate(v time.Time) *User {
	s.DisabledDate = &v
	return s
}

// SetDisplayName sets the DisplayName field's value.
func (s *User) SetDisplayName(v string) *User {
	s.DisplayName = &v
	return s
}

// SetEmail sets the Email field's value.
func (s *User) SetEmail(v string) *User {
	s.Email = &v
	return s
}

// SetEnabledDate sets the EnabledDate field's value.
func (s *User) SetEnabledDate(v time.Time) *User {
	s.EnabledDate = &v
	return s
}

// SetId sets the Id field's value.
func (s *User) SetId(v string) *User {
	s.Id = &v
	return s
}

// SetName sets the Name field's value.
func (s *User) SetName(v string) *User {
	s.Name = &v
	return s
}

// SetState sets the State field's value.
func (s *User) SetState(v string) *User {
	s.State = &v
	return s
}

// SetUserRole sets the UserRole field's value.
func (s *User) SetUserRole(v string) *User {
	s.UserRole = &v
	return s
}

const (
	// AccessControlRuleEffectAllow is a AccessControlRuleEffect enum value
	AccessControlRuleEffectAllow = "ALLOW"

	// AccessControlRuleEffectDeny is a AccessControlRuleEffect enum value
	AccessControlRuleEffectDeny = "DENY"
)

// AccessControlRuleEffect_Values returns all elements of the AccessControlRuleEffect enum
func AccessControlRuleEffect_Values() []string {
	return []string{
		AccessControlRuleEffectAllow,
		AccessControlRuleEffectDeny,
	}
}

const (
	// AccessEffectAllow is a AccessEffect enum value
	AccessEffectAllow = "ALLOW"

	// AccessEffectDeny is a AccessEffect enum value
	AccessEffectDeny = "DENY"
)

// AccessEffect_Values returns all elements of the AccessEffect enum
func AccessEffect_Values() []string {
	return []string{
		AccessEffectAllow,
		AccessEffectDeny,
	}
}

const (
	// AvailabilityProviderTypeEws is a AvailabilityProviderType enum value
	AvailabilityProviderTypeEws = "EWS"

	// AvailabilityProviderTypeLambda is a AvailabilityProviderType enum value
	AvailabilityProviderTypeLambda = "LAMBDA"
)

// AvailabilityProviderType_Values returns all elements of the AvailabilityProviderType enum
func AvailabilityProviderType_Values() []string {
	return []string{
		AvailabilityProviderTypeEws,
		AvailabilityProviderTypeLambda,
	}
}

const (
	// DnsRecordVerificationStatusPending is a DnsRecordVerificationStatus enum value
	DnsRecordVerificationStatusPending = "PENDING"

	// DnsRecordVerificationStatusVerified is a DnsRecordVerificationStatus enum value
	DnsRecordVerificationStatusVerified = "VERIFIED"

	// DnsRecordVerificationStatusFailed is a DnsRecordVerificationStatus enum value
	DnsRecordVerificationStatusFailed = "FAILED"
)

// DnsRecordVerificationStatus_Values returns all elements of the DnsRecordVerificationStatus enum
func DnsRecordVerificationStatus_Values() []string {
	return []string{
		DnsRecordVerificationStatusPending,
		DnsRecordVerificationStatusVerified,
		DnsRecordVerificationStatusFailed,
	}
}

const (
	// EntityStateEnabled is a EntityState enum value
	EntityStateEnabled = "ENABLED"

	// EntityStateDisabled is a EntityState enum value
	EntityStateDisabled = "DISABLED"

	// EntityStateDeleted is a EntityState enum value
	EntityStateDeleted = "DELETED"
)

// EntityState_Values returns all elements of the EntityState enum
func EntityState_Values() []string {
	return []string{
		EntityStateEnabled,
		EntityStateDisabled,
		EntityStateDeleted,
	}
}

const (
	// EntityTypeGroup is a EntityType enum value
	EntityTypeGroup = "GROUP"

	// EntityTypeUser is a EntityType enum value
	EntityTypeUser = "USER"

	// EntityTypeResource is a EntityType enum value
	EntityTypeResource = "RESOURCE"
)

// EntityType_Values returns all elements of the EntityType enum
func EntityType_Values() []string {
	return []string{
		EntityTypeGroup,
		EntityTypeUser,
		EntityTypeResource,
	}
}

const (
	// FolderNameInbox is a FolderName enum value
	FolderNameInbox = "INBOX"

	// FolderNameDeletedItems is a FolderName enum value
	FolderNameDeletedItems = "DELETED_ITEMS"

	// FolderNameSentItems is a FolderName enum value
	FolderNameSentItems = "SENT_ITEMS"

	// FolderNameDrafts is a FolderName enum value
	FolderNameDrafts = "DRAFTS"

	// FolderNameJunkEmail is a FolderName enum value
	FolderNameJunkEmail = "JUNK_EMAIL"
)

// FolderName_Values returns all elements of the FolderName enum
func FolderName_Values() []string {
	return []string{
		FolderNameInbox,
		FolderNameDeletedItems,
		FolderNameSentItems,
		FolderNameDrafts,
		FolderNameJunkEmail,
	}
}

const (
	// ImpersonationRoleTypeFullAccess is a ImpersonationRoleType enum value
	ImpersonationRoleTypeFullAccess = "FULL_ACCESS"

	// ImpersonationRoleTypeReadOnly is a ImpersonationRoleType enum value
	ImpersonationRoleTypeReadOnly = "READ_ONLY"
)

// ImpersonationRoleType_Values returns all elements of the ImpersonationRoleType enum
func ImpersonationRoleType_Values() []string {
	return []string{
		ImpersonationRoleTypeFullAccess,
		ImpersonationRoleTypeReadOnly,
	}
}

const (
	// MailboxExportJobStateRunning is a MailboxExportJobState enum value
	MailboxExportJobStateRunning = "RUNNING"

	// MailboxExportJobStateCompleted is a MailboxExportJobState enum value
	MailboxExportJobStateCompleted = "COMPLETED"

	// MailboxExportJobStateFailed is a MailboxExportJobState enum value
	MailboxExportJobStateFailed = "FAILED"

	// MailboxExportJobStateCancelled is a MailboxExportJobState enum value
	MailboxExportJobStateCancelled = "CANCELLED"
)

// MailboxExportJobState_Values returns all elements of the MailboxExportJobState enum
func MailboxExportJobState_Values() []string {
	return []string{
		MailboxExportJobStateRunning,
		MailboxExportJobStateCompleted,
		MailboxExportJobStateFailed,
		MailboxExportJobStateCancelled,
	}
}

const (
	// MemberTypeGroup is a MemberType enum value
	MemberTypeGroup = "GROUP"

	// MemberTypeUser is a MemberType enum value
	MemberTypeUser = "USER"
)

// MemberType_Values returns all elements of the MemberType enum
func MemberType_Values() []string {
	return []string{
		MemberTypeGroup,
		MemberTypeUser,
	}
}

const (
	// MobileDeviceAccessRuleEffectAllow is a MobileDeviceAccessRuleEffect enum value
	MobileDeviceAccessRuleEffectAllow = "ALLOW"

	// MobileDeviceAccessRuleEffectDeny is a MobileDeviceAccessRuleEffect enum value
	MobileDeviceAccessRuleEffectDeny = "DENY"
)

// MobileDeviceAccessRuleEffect_Values returns all elements of the MobileDeviceAccessRuleEffect enum
func MobileDeviceAccessRuleEffect_Values() []string {
	return []string{
		MobileDeviceAccessRuleEffectAllow,
		MobileDeviceAccessRuleEffectDeny,
	}
}

const (
	// PermissionTypeFullAccess is a PermissionType enum value
	PermissionTypeFullAccess = "FULL_ACCESS"

	// PermissionTypeSendAs is a PermissionType enum value
	PermissionTypeSendAs = "SEND_AS"

	// PermissionTypeSendOnBehalf is a PermissionType enum value
	PermissionTypeSendOnBehalf = "SEND_ON_BEHALF"
)

// PermissionType_Values returns all elements of the PermissionType enum
func PermissionType_Values() []string {
	return []string{
		PermissionTypeFullAccess,
		PermissionTypeSendAs,
		PermissionTypeSendOnBehalf,
	}
}

const (
	// ResourceTypeRoom is a ResourceType enum value
	ResourceTypeRoom = "ROOM"

	// ResourceTypeEquipment is a ResourceType enum value
	ResourceTypeEquipment = "EQUIPMENT"
)

// ResourceType_Values returns all elements of the ResourceType enum
func ResourceType_Values() []string {
	return []string{
		ResourceTypeRoom,
		ResourceTypeEquipment,
	}
}

const (
	// RetentionActionNone is a RetentionAction enum value
	RetentionActionNone = "NONE"

	// RetentionActionDelete is a RetentionAction enum value
	RetentionActionDelete = "DELETE"

	// RetentionActionPermanentlyDelete is a RetentionAction enum value
	RetentionActionPermanentlyDelete = "PERMANENTLY_DELETE"
)

// RetentionAction_Values returns all elements of the RetentionAction enum
func RetentionAction_Values() []string {
	return []string{
		RetentionActionNone,
		RetentionActionDelete,
		RetentionActionPermanentlyDelete,
	}
}

const (
	// UserRoleUser is a UserRole enum value
	UserRoleUser = "USER"

	// UserRoleResource is a UserRole enum value
	UserRoleResource = "RESOURCE"

	// UserRoleSystemUser is a UserRole enum value
	UserRoleSystemUser = "SYSTEM_USER"

	// UserRoleRemoteUser is a UserRole enum value
	UserRoleRemoteUser = "REMOTE_USER"
)

// UserRole_Values returns all elements of the UserRole enum
func UserRole_Values() []string {
	return []string{
		UserRoleUser,
		UserRoleResource,
		UserRoleSystemUser,
		UserRoleRemoteUser,
	}
}
© 2026 GrazzMean
Beegazpacho


Let’s  Start  Your  Online  Journey  with  Beegazpacho 

Welcome to Beegazpacho,
where creativity meets strategy,
and innovation drives success.


Contact
Now


OUR CLIENTS

WhatsApp-Image-2021-12-06.png
Untitled-design-11.png
niaf-logo.png
20220406-163308-scaled.jpg
karchi-logo.png
20220405-171252.png
20220405-171309.png
20220321-161603.png
20220321-161611.png
20220321-161628.png
20220321-161244.png
20220321-161256.png
20220321-161450.png
20220321-161205.png
20220226-170222.png
20220321-161051.png
20211202-170852.png
Untitled-design-9
pidilite-png-logo-colour
logo-black-e1706125740216-qisosldqhzgcaerhdt6n4t3m4s50jr0iik48z0h5vk
Fraikin-Dayim-logo-1
hpcl-logo-2-1
services

Transforming Ideas into
Success

.01
Digital Marketing

We drive growth through data-driven strategies and cutting-edge techniques.

Learn More

.02
SEO

Improve your online visibility and rank higher on search engines with our expert SEO services.

Learn More

.03
Website Designing

We design websites that are not only visually stunning but also user-centric, ensuring seamless navigation and enhanced user experience.

Learn More

.04
App Development

Our apps are crafted to be intuitive, engaging, and functional, providing your users with an exceptional mobile experience.

Learn More

.05
Social Media Ads

Target the right audience with precision and creativity to maximize engagement and conversions.

Learn More

.06
Google Ads

Maximize ROI with precision-targeted campaigns on Google’s powerful ad platform.

Learn More

.07
Google My Business

Optimize your local presence with strategies that put your business on the map and attract more customers.

Learn More

.08
Graphic Designing

Our designs tell your brand’s story in a visually compelling way.

Learn More

.09
3D Videos

Bring your product to life with immersive and dynamic 3D explainer videos.

Learn More

about BEEGAZPACHO

creating special Things
For special brands

Join the ranks of successful brands by partnering with Beegazpacho

00+

Happy Customer

00+

Continents

Our vision is not just to be a service provider but to be your partner in growth. We see ourselves as an extension of your team, working tirelessly to ensure that your brand not only meets its goals but surpasses them.

Explore
more

Our Recent Work

Crafted with Passion and Precision

Connect now


Web Design
Design, Development & Identity

Logo Design
Design, Development & Identity

Creative Brand design
Design, Development & Identity

Product Design Marketing
Design, Development & Identity

DIGITAL MARKETING
SEO
WEBSITE DESIGNING
APP DEVELOPMENT
SOCIAL MEDIA ADS
GOOGLE ADS
GOOGLE MY BUSINESS
GRAPHIC DESINING
3D VIDEOS
Client Stories

Hear It from Those Who Know Us Best

Our clients’ success stories speak volumes about our commitment to excellence. Don’t just take our word for it—hear directly from the brands we’ve partnered with. Their testimonials highlight our ability to bring visions to life and create a lasting impact on their businesses.

“Beegazpacho feels like an extension of our team. Their content marketing and social media expertise have elevated our brand. They listen, adapt, and always deliver on time. We look forward to continuing this partnership.”

— Sarah Williams

Head of Marketing, GreenPlanet Apparel

“Beegazpacho’s data-driven strategies helped us improve our online ads, optimize our website, and enhance branding. We’ve seen great ROI and increased visibility. Their professionalism is unmatched.”

— Arvind Shah

CEO, InnovateTech Solutions

“Partnering with Beegazpacho has been a game-changer for our brand. Their creative ad campaigns and SEO services have boosted our online presence and significantly increased leads and sales. We couldn’t ask for a better partner!”

— Rina Kapoor

Marketing Director, Luxury Home Interiors

“Beegazpacho feels like an extension of our team. Their content marketing and social media expertise have elevated our brand. They listen, adapt, and always deliver on time. We look forward to continuing this partnership.”

— Sarah Williams

Head of Marketing, GreenPlanet Apparel

“Beegazpacho’s data-driven strategies helped us improve our online ads, optimize our website, and enhance branding. We’ve seen great ROI and increased visibility. Their professionalism is unmatched.”

— Arvind Shah

CEO, InnovateTech Solutions

“Partnering with Beegazpacho has been a game-changer for our brand. Their creative ad campaigns and SEO services have boosted our online presence and significantly increased leads and sales. We couldn’t ask for a better partner!”

— Rina Kapoor

Marketing Director, Luxury Home Interiors