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

// Package workdocs provides a client for Amazon WorkDocs.
package workdocs

import (
	"fmt"
	"time"

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

const opAbortDocumentVersionUpload = "AbortDocumentVersionUpload"

// AbortDocumentVersionUploadRequest generates a "aws/request.Request" representing the
// client's request for the AbortDocumentVersionUpload operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See AbortDocumentVersionUpload for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the AbortDocumentVersionUpload method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the AbortDocumentVersionUploadRequest method.
//    req, resp := client.AbortDocumentVersionUploadRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/AbortDocumentVersionUpload
func (c *WorkDocs) AbortDocumentVersionUploadRequest(input *AbortDocumentVersionUploadInput) (req *request.Request, output *AbortDocumentVersionUploadOutput) {
	op := &request.Operation{
		Name:       opAbortDocumentVersionUpload,
		HTTPMethod: "DELETE",
		HTTPPath:   "/api/v1/documents/{DocumentId}/versions/{VersionId}",
	}

	if input == nil {
		input = &AbortDocumentVersionUploadInput{}
	}

	output = &AbortDocumentVersionUploadOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(restjson.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	return
}

// AbortDocumentVersionUpload API operation for Amazon WorkDocs.
//
// Aborts the upload of the specified document version that was previously initiated
// by InitiateDocumentVersionUpload. The client should make this call only when
// it no longer intends or fails to upload the document version.
//
// 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 WorkDocs's
// API operation AbortDocumentVersionUpload for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeProhibitedStateException "ProhibitedStateException"
//   The specified document version is not in the INITIALIZED state.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/AbortDocumentVersionUpload
func (c *WorkDocs) AbortDocumentVersionUpload(input *AbortDocumentVersionUploadInput) (*AbortDocumentVersionUploadOutput, error) {
	req, out := c.AbortDocumentVersionUploadRequest(input)
	err := req.Send()
	return out, err
}

const opActivateUser = "ActivateUser"

// ActivateUserRequest generates a "aws/request.Request" representing the
// client's request for the ActivateUser operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See ActivateUser for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the ActivateUser method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the ActivateUserRequest method.
//    req, resp := client.ActivateUserRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/ActivateUser
func (c *WorkDocs) ActivateUserRequest(input *ActivateUserInput) (req *request.Request, output *ActivateUserOutput) {
	op := &request.Operation{
		Name:       opActivateUser,
		HTTPMethod: "POST",
		HTTPPath:   "/api/v1/users/{UserId}/activation",
	}

	if input == nil {
		input = &ActivateUserInput{}
	}

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

// ActivateUser API operation for Amazon WorkDocs.
//
// Activates the specified user. Only active users can access Amazon WorkDocs.
//
// 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 WorkDocs's
// API operation ActivateUser for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/ActivateUser
func (c *WorkDocs) ActivateUser(input *ActivateUserInput) (*ActivateUserOutput, error) {
	req, out := c.ActivateUserRequest(input)
	err := req.Send()
	return out, err
}

const opAddResourcePermissions = "AddResourcePermissions"

// AddResourcePermissionsRequest generates a "aws/request.Request" representing the
// client's request for the AddResourcePermissions operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See AddResourcePermissions for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the AddResourcePermissions method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the AddResourcePermissionsRequest method.
//    req, resp := client.AddResourcePermissionsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/AddResourcePermissions
func (c *WorkDocs) AddResourcePermissionsRequest(input *AddResourcePermissionsInput) (req *request.Request, output *AddResourcePermissionsOutput) {
	op := &request.Operation{
		Name:       opAddResourcePermissions,
		HTTPMethod: "POST",
		HTTPPath:   "/api/v1/resources/{ResourceId}/permissions",
	}

	if input == nil {
		input = &AddResourcePermissionsInput{}
	}

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

// AddResourcePermissions API operation for Amazon WorkDocs.
//
// Creates a set of permissions for the specified folder or document. The resource
// permissions are overwritten if the principals already have different 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 WorkDocs's
// API operation AddResourcePermissions for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/AddResourcePermissions
func (c *WorkDocs) AddResourcePermissions(input *AddResourcePermissionsInput) (*AddResourcePermissionsOutput, error) {
	req, out := c.AddResourcePermissionsRequest(input)
	err := req.Send()
	return out, err
}

const opCreateFolder = "CreateFolder"

// CreateFolderRequest generates a "aws/request.Request" representing the
// client's request for the CreateFolder operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See CreateFolder for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the CreateFolder method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the CreateFolderRequest method.
//    req, resp := client.CreateFolderRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/CreateFolder
func (c *WorkDocs) CreateFolderRequest(input *CreateFolderInput) (req *request.Request, output *CreateFolderOutput) {
	op := &request.Operation{
		Name:       opCreateFolder,
		HTTPMethod: "POST",
		HTTPPath:   "/api/v1/folders",
	}

	if input == nil {
		input = &CreateFolderInput{}
	}

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

// CreateFolder API operation for Amazon WorkDocs.
//
// Creates a folder with the specified name and parent folder.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkDocs's
// API operation CreateFolder for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeEntityAlreadyExistsException "EntityAlreadyExistsException"
//   The resource already exists.
//
//   * ErrCodeProhibitedStateException "ProhibitedStateException"
//   The specified document version is not in the INITIALIZED state.
//
//   * ErrCodeLimitExceededException "LimitExceededException"
//   You've exceeded the maximum of 100,000 folders under the parent folder.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/CreateFolder
func (c *WorkDocs) CreateFolder(input *CreateFolderInput) (*CreateFolderOutput, error) {
	req, out := c.CreateFolderRequest(input)
	err := req.Send()
	return out, err
}

const opCreateNotificationSubscription = "CreateNotificationSubscription"

// CreateNotificationSubscriptionRequest generates a "aws/request.Request" representing the
// client's request for the CreateNotificationSubscription operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See CreateNotificationSubscription for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the CreateNotificationSubscription method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the CreateNotificationSubscriptionRequest method.
//    req, resp := client.CreateNotificationSubscriptionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/CreateNotificationSubscription
func (c *WorkDocs) CreateNotificationSubscriptionRequest(input *CreateNotificationSubscriptionInput) (req *request.Request, output *CreateNotificationSubscriptionOutput) {
	op := &request.Operation{
		Name:       opCreateNotificationSubscription,
		HTTPMethod: "POST",
		HTTPPath:   "/api/v1/organizations/{OrganizationId}/subscriptions",
	}

	if input == nil {
		input = &CreateNotificationSubscriptionInput{}
	}

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

// CreateNotificationSubscription API operation for Amazon WorkDocs.
//
// Configure WorkDocs to use Amazon SNS notifications.
//
// The endpoint receives a confirmation message, and must confirm the subscription.
// For more information, see Confirm the Subscription (http://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html#SendMessageToHttp.confirm)
// in the Amazon Simple Notification Service Developer 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 WorkDocs's
// API operation CreateNotificationSubscription for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeTooManySubscriptionsException "TooManySubscriptionsException"
//   You've reached the limit on the number of subscriptions for the WorkDocs
//   instance.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/CreateNotificationSubscription
func (c *WorkDocs) CreateNotificationSubscription(input *CreateNotificationSubscriptionInput) (*CreateNotificationSubscriptionOutput, error) {
	req, out := c.CreateNotificationSubscriptionRequest(input)
	err := req.Send()
	return out, err
}

const opCreateUser = "CreateUser"

// CreateUserRequest generates a "aws/request.Request" representing the
// client's request for the CreateUser operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See CreateUser for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the CreateUser method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the CreateUserRequest method.
//    req, resp := client.CreateUserRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/CreateUser
func (c *WorkDocs) CreateUserRequest(input *CreateUserInput) (req *request.Request, output *CreateUserOutput) {
	op := &request.Operation{
		Name:       opCreateUser,
		HTTPMethod: "POST",
		HTTPPath:   "/api/v1/users",
	}

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

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

// CreateUser API operation for Amazon WorkDocs.
//
// Creates a user in a Simple AD or Microsoft AD directory. The status of a
// newly created user is "ACTIVE". New users can access Amazon WorkDocs.
//
// 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 WorkDocs's
// API operation CreateUser for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityAlreadyExistsException "EntityAlreadyExistsException"
//   The resource already exists.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/CreateUser
func (c *WorkDocs) CreateUser(input *CreateUserInput) (*CreateUserOutput, error) {
	req, out := c.CreateUserRequest(input)
	err := req.Send()
	return out, err
}

const opDeactivateUser = "DeactivateUser"

// DeactivateUserRequest generates a "aws/request.Request" representing the
// client's request for the DeactivateUser operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeactivateUser for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeactivateUser method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeactivateUserRequest method.
//    req, resp := client.DeactivateUserRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeactivateUser
func (c *WorkDocs) DeactivateUserRequest(input *DeactivateUserInput) (req *request.Request, output *DeactivateUserOutput) {
	op := &request.Operation{
		Name:       opDeactivateUser,
		HTTPMethod: "DELETE",
		HTTPPath:   "/api/v1/users/{UserId}/activation",
	}

	if input == nil {
		input = &DeactivateUserInput{}
	}

	output = &DeactivateUserOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(restjson.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	return
}

// DeactivateUser API operation for Amazon WorkDocs.
//
// Deactivates the specified user, which revokes the user's access to Amazon
// WorkDocs.
//
// 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 WorkDocs's
// API operation DeactivateUser for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeactivateUser
func (c *WorkDocs) DeactivateUser(input *DeactivateUserInput) (*DeactivateUserOutput, error) {
	req, out := c.DeactivateUserRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteDocument = "DeleteDocument"

// DeleteDocumentRequest generates a "aws/request.Request" representing the
// client's request for the DeleteDocument operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeleteDocument for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeleteDocument method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeleteDocumentRequest method.
//    req, resp := client.DeleteDocumentRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteDocument
func (c *WorkDocs) DeleteDocumentRequest(input *DeleteDocumentInput) (req *request.Request, output *DeleteDocumentOutput) {
	op := &request.Operation{
		Name:       opDeleteDocument,
		HTTPMethod: "DELETE",
		HTTPPath:   "/api/v1/documents/{DocumentId}",
	}

	if input == nil {
		input = &DeleteDocumentInput{}
	}

	output = &DeleteDocumentOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(restjson.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	return
}

// DeleteDocument API operation for Amazon WorkDocs.
//
// Permanently deletes the specified document and its associated metadata.
//
// 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 WorkDocs's
// API operation DeleteDocument for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeProhibitedStateException "ProhibitedStateException"
//   The specified document version is not in the INITIALIZED state.
//
//   * ErrCodeConcurrentModificationException "ConcurrentModificationException"
//   The resource hierarchy is changing.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteDocument
func (c *WorkDocs) DeleteDocument(input *DeleteDocumentInput) (*DeleteDocumentOutput, error) {
	req, out := c.DeleteDocumentRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteFolder = "DeleteFolder"

// DeleteFolderRequest generates a "aws/request.Request" representing the
// client's request for the DeleteFolder operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeleteFolder for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeleteFolder method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeleteFolderRequest method.
//    req, resp := client.DeleteFolderRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteFolder
func (c *WorkDocs) DeleteFolderRequest(input *DeleteFolderInput) (req *request.Request, output *DeleteFolderOutput) {
	op := &request.Operation{
		Name:       opDeleteFolder,
		HTTPMethod: "DELETE",
		HTTPPath:   "/api/v1/folders/{FolderId}",
	}

	if input == nil {
		input = &DeleteFolderInput{}
	}

	output = &DeleteFolderOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(restjson.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	return
}

// DeleteFolder API operation for Amazon WorkDocs.
//
// Permanently deletes the specified folder and its contents.
//
// 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 WorkDocs's
// API operation DeleteFolder for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeProhibitedStateException "ProhibitedStateException"
//   The specified document version is not in the INITIALIZED state.
//
//   * ErrCodeConcurrentModificationException "ConcurrentModificationException"
//   The resource hierarchy is changing.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteFolder
func (c *WorkDocs) DeleteFolder(input *DeleteFolderInput) (*DeleteFolderOutput, error) {
	req, out := c.DeleteFolderRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteFolderContents = "DeleteFolderContents"

// DeleteFolderContentsRequest generates a "aws/request.Request" representing the
// client's request for the DeleteFolderContents operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeleteFolderContents for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeleteFolderContents method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeleteFolderContentsRequest method.
//    req, resp := client.DeleteFolderContentsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteFolderContents
func (c *WorkDocs) DeleteFolderContentsRequest(input *DeleteFolderContentsInput) (req *request.Request, output *DeleteFolderContentsOutput) {
	op := &request.Operation{
		Name:       opDeleteFolderContents,
		HTTPMethod: "DELETE",
		HTTPPath:   "/api/v1/folders/{FolderId}/contents",
	}

	if input == nil {
		input = &DeleteFolderContentsInput{}
	}

	output = &DeleteFolderContentsOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(restjson.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	return
}

// DeleteFolderContents API operation for Amazon WorkDocs.
//
// Deletes the contents of the specified folder.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkDocs's
// API operation DeleteFolderContents for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteFolderContents
func (c *WorkDocs) DeleteFolderContents(input *DeleteFolderContentsInput) (*DeleteFolderContentsOutput, error) {
	req, out := c.DeleteFolderContentsRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteNotificationSubscription = "DeleteNotificationSubscription"

// DeleteNotificationSubscriptionRequest generates a "aws/request.Request" representing the
// client's request for the DeleteNotificationSubscription operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeleteNotificationSubscription for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeleteNotificationSubscription method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeleteNotificationSubscriptionRequest method.
//    req, resp := client.DeleteNotificationSubscriptionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteNotificationSubscription
func (c *WorkDocs) DeleteNotificationSubscriptionRequest(input *DeleteNotificationSubscriptionInput) (req *request.Request, output *DeleteNotificationSubscriptionOutput) {
	op := &request.Operation{
		Name:       opDeleteNotificationSubscription,
		HTTPMethod: "DELETE",
		HTTPPath:   "/api/v1/organizations/{OrganizationId}/subscriptions/{SubscriptionId}",
	}

	if input == nil {
		input = &DeleteNotificationSubscriptionInput{}
	}

	output = &DeleteNotificationSubscriptionOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(restjson.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	return
}

// DeleteNotificationSubscription API operation for Amazon WorkDocs.
//
// Deletes the specified subscription 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 WorkDocs's
// API operation DeleteNotificationSubscription for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
//   * ErrCodeProhibitedStateException "ProhibitedStateException"
//   The specified document version is not in the INITIALIZED state.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteNotificationSubscription
func (c *WorkDocs) DeleteNotificationSubscription(input *DeleteNotificationSubscriptionInput) (*DeleteNotificationSubscriptionOutput, error) {
	req, out := c.DeleteNotificationSubscriptionRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteUser = "DeleteUser"

// DeleteUserRequest generates a "aws/request.Request" representing the
// client's request for the DeleteUser operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeleteUser for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeleteUser method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeleteUserRequest method.
//    req, resp := client.DeleteUserRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteUser
func (c *WorkDocs) DeleteUserRequest(input *DeleteUserInput) (req *request.Request, output *DeleteUserOutput) {
	op := &request.Operation{
		Name:       opDeleteUser,
		HTTPMethod: "DELETE",
		HTTPPath:   "/api/v1/users/{UserId}",
	}

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

	output = &DeleteUserOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(restjson.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	return
}

// DeleteUser API operation for Amazon WorkDocs.
//
// Deletes the specified user from a Simple AD or Microsoft AD directory.
//
// 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 WorkDocs's
// API operation DeleteUser for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteUser
func (c *WorkDocs) DeleteUser(input *DeleteUserInput) (*DeleteUserOutput, error) {
	req, out := c.DeleteUserRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeDocumentVersions = "DescribeDocumentVersions"

// DescribeDocumentVersionsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeDocumentVersions operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeDocumentVersions for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeDocumentVersions method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeDocumentVersionsRequest method.
//    req, resp := client.DescribeDocumentVersionsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeDocumentVersions
func (c *WorkDocs) DescribeDocumentVersionsRequest(input *DescribeDocumentVersionsInput) (req *request.Request, output *DescribeDocumentVersionsOutput) {
	op := &request.Operation{
		Name:       opDescribeDocumentVersions,
		HTTPMethod: "GET",
		HTTPPath:   "/api/v1/documents/{DocumentId}/versions",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "Limit",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &DescribeDocumentVersionsInput{}
	}

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

// DescribeDocumentVersions API operation for Amazon WorkDocs.
//
// Retrieves the document versions for the specified document.
//
// By default, only active versions are returned.
//
// 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 WorkDocs's
// API operation DescribeDocumentVersions for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeInvalidArgumentException "InvalidArgumentException"
//   The pagination marker and/or limit fields are not valid.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
//   * ErrCodeProhibitedStateException "ProhibitedStateException"
//   The specified document version is not in the INITIALIZED state.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeDocumentVersions
func (c *WorkDocs) DescribeDocumentVersions(input *DescribeDocumentVersionsInput) (*DescribeDocumentVersionsOutput, error) {
	req, out := c.DescribeDocumentVersionsRequest(input)
	err := req.Send()
	return out, err
}

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

const opDescribeFolderContents = "DescribeFolderContents"

// DescribeFolderContentsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeFolderContents operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeFolderContents for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeFolderContents method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeFolderContentsRequest method.
//    req, resp := client.DescribeFolderContentsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeFolderContents
func (c *WorkDocs) DescribeFolderContentsRequest(input *DescribeFolderContentsInput) (req *request.Request, output *DescribeFolderContentsOutput) {
	op := &request.Operation{
		Name:       opDescribeFolderContents,
		HTTPMethod: "GET",
		HTTPPath:   "/api/v1/folders/{FolderId}/contents",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "Limit",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &DescribeFolderContentsInput{}
	}

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

// DescribeFolderContents API operation for Amazon WorkDocs.
//
// Describes the contents of the specified folder, including its documents and
// sub-folders.
//
// By default, Amazon WorkDocs returns the first 100 active document and folder
// metadata items. If there are more results, the response includes a marker
// that you can use to request the next set of results. You can also request
// initialized documents.
//
// 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 WorkDocs's
// API operation DescribeFolderContents for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeInvalidArgumentException "InvalidArgumentException"
//   The pagination marker and/or limit fields are not valid.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
//   * ErrCodeProhibitedStateException "ProhibitedStateException"
//   The specified document version is not in the INITIALIZED state.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeFolderContents
func (c *WorkDocs) DescribeFolderContents(input *DescribeFolderContentsInput) (*DescribeFolderContentsOutput, error) {
	req, out := c.DescribeFolderContentsRequest(input)
	err := req.Send()
	return out, err
}

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

const opDescribeNotificationSubscriptions = "DescribeNotificationSubscriptions"

// DescribeNotificationSubscriptionsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeNotificationSubscriptions operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeNotificationSubscriptions for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeNotificationSubscriptions method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeNotificationSubscriptionsRequest method.
//    req, resp := client.DescribeNotificationSubscriptionsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeNotificationSubscriptions
func (c *WorkDocs) DescribeNotificationSubscriptionsRequest(input *DescribeNotificationSubscriptionsInput) (req *request.Request, output *DescribeNotificationSubscriptionsOutput) {
	op := &request.Operation{
		Name:       opDescribeNotificationSubscriptions,
		HTTPMethod: "GET",
		HTTPPath:   "/api/v1/organizations/{OrganizationId}/subscriptions",
	}

	if input == nil {
		input = &DescribeNotificationSubscriptionsInput{}
	}

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

// DescribeNotificationSubscriptions API operation for Amazon WorkDocs.
//
// Lists the specified notification subscriptions.
//
// 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 WorkDocs's
// API operation DescribeNotificationSubscriptions for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeNotificationSubscriptions
func (c *WorkDocs) DescribeNotificationSubscriptions(input *DescribeNotificationSubscriptionsInput) (*DescribeNotificationSubscriptionsOutput, error) {
	req, out := c.DescribeNotificationSubscriptionsRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeResourcePermissions = "DescribeResourcePermissions"

// DescribeResourcePermissionsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeResourcePermissions operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeResourcePermissions for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeResourcePermissions method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeResourcePermissionsRequest method.
//    req, resp := client.DescribeResourcePermissionsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeResourcePermissions
func (c *WorkDocs) DescribeResourcePermissionsRequest(input *DescribeResourcePermissionsInput) (req *request.Request, output *DescribeResourcePermissionsOutput) {
	op := &request.Operation{
		Name:       opDescribeResourcePermissions,
		HTTPMethod: "GET",
		HTTPPath:   "/api/v1/resources/{ResourceId}/permissions",
	}

	if input == nil {
		input = &DescribeResourcePermissionsInput{}
	}

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

// DescribeResourcePermissions API operation for Amazon WorkDocs.
//
// Describes the permissions of a specified resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkDocs's
// API operation DescribeResourcePermissions for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeResourcePermissions
func (c *WorkDocs) DescribeResourcePermissions(input *DescribeResourcePermissionsInput) (*DescribeResourcePermissionsOutput, error) {
	req, out := c.DescribeResourcePermissionsRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeUsers = "DescribeUsers"

// DescribeUsersRequest generates a "aws/request.Request" representing the
// client's request for the DescribeUsers operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeUsers for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeUsers method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeUsersRequest method.
//    req, resp := client.DescribeUsersRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeUsers
func (c *WorkDocs) DescribeUsersRequest(input *DescribeUsersInput) (req *request.Request, output *DescribeUsersOutput) {
	op := &request.Operation{
		Name:       opDescribeUsers,
		HTTPMethod: "GET",
		HTTPPath:   "/api/v1/users",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "Limit",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &DescribeUsersInput{}
	}

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

// DescribeUsers API operation for Amazon WorkDocs.
//
// Describes the specified users. You can describe all users or filter the results
// (for example, by status or organization).
//
// By default, Amazon WorkDocs returns the first 24 active or pending users.
// If there are more results, the response includes a marker that you can use
// to request the next set of results.
//
// 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 WorkDocs's
// API operation DescribeUsers for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
//   * ErrCodeInvalidArgumentException "InvalidArgumentException"
//   The pagination marker and/or limit fields are not valid.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeUsers
func (c *WorkDocs) DescribeUsers(input *DescribeUsersInput) (*DescribeUsersOutput, error) {
	req, out := c.DescribeUsersRequest(input)
	err := req.Send()
	return out, err
}

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

const opGetDocument = "GetDocument"

// GetDocumentRequest generates a "aws/request.Request" representing the
// client's request for the GetDocument operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See GetDocument for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the GetDocument method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the GetDocumentRequest method.
//    req, resp := client.GetDocumentRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetDocument
func (c *WorkDocs) GetDocumentRequest(input *GetDocumentInput) (req *request.Request, output *GetDocumentOutput) {
	op := &request.Operation{
		Name:       opGetDocument,
		HTTPMethod: "GET",
		HTTPPath:   "/api/v1/documents/{DocumentId}",
	}

	if input == nil {
		input = &GetDocumentInput{}
	}

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

// GetDocument API operation for Amazon WorkDocs.
//
// Retrieves the specified document object.
//
// 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 WorkDocs's
// API operation GetDocument for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeInvalidArgumentException "InvalidArgumentException"
//   The pagination marker and/or limit fields are not valid.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetDocument
func (c *WorkDocs) GetDocument(input *GetDocumentInput) (*GetDocumentOutput, error) {
	req, out := c.GetDocumentRequest(input)
	err := req.Send()
	return out, err
}

const opGetDocumentPath = "GetDocumentPath"

// GetDocumentPathRequest generates a "aws/request.Request" representing the
// client's request for the GetDocumentPath operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See GetDocumentPath for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the GetDocumentPath method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the GetDocumentPathRequest method.
//    req, resp := client.GetDocumentPathRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetDocumentPath
func (c *WorkDocs) GetDocumentPathRequest(input *GetDocumentPathInput) (req *request.Request, output *GetDocumentPathOutput) {
	op := &request.Operation{
		Name:       opGetDocumentPath,
		HTTPMethod: "GET",
		HTTPPath:   "/api/v1/documents/{DocumentId}/path",
	}

	if input == nil {
		input = &GetDocumentPathInput{}
	}

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

// GetDocumentPath API operation for Amazon WorkDocs.
//
// Retrieves the path information (the hierarchy from the root folder) for the
// requested document.
//
// By default, Amazon WorkDocs returns a maximum of 100 levels upwards from
// the requested document and only includes the IDs of the parent folders in
// the path. You can limit the maximum number of levels. You can also request
// the names of the parent folders.
//
// 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 WorkDocs's
// API operation GetDocumentPath for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetDocumentPath
func (c *WorkDocs) GetDocumentPath(input *GetDocumentPathInput) (*GetDocumentPathOutput, error) {
	req, out := c.GetDocumentPathRequest(input)
	err := req.Send()
	return out, err
}

const opGetDocumentVersion = "GetDocumentVersion"

// GetDocumentVersionRequest generates a "aws/request.Request" representing the
// client's request for the GetDocumentVersion operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See GetDocumentVersion for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the GetDocumentVersion method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the GetDocumentVersionRequest method.
//    req, resp := client.GetDocumentVersionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetDocumentVersion
func (c *WorkDocs) GetDocumentVersionRequest(input *GetDocumentVersionInput) (req *request.Request, output *GetDocumentVersionOutput) {
	op := &request.Operation{
		Name:       opGetDocumentVersion,
		HTTPMethod: "GET",
		HTTPPath:   "/api/v1/documents/{DocumentId}/versions/{VersionId}",
	}

	if input == nil {
		input = &GetDocumentVersionInput{}
	}

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

// GetDocumentVersion API operation for Amazon WorkDocs.
//
// Retrieves version metadata for the specified document.
//
// 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 WorkDocs's
// API operation GetDocumentVersion for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
//   * ErrCodeProhibitedStateException "ProhibitedStateException"
//   The specified document version is not in the INITIALIZED state.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetDocumentVersion
func (c *WorkDocs) GetDocumentVersion(input *GetDocumentVersionInput) (*GetDocumentVersionOutput, error) {
	req, out := c.GetDocumentVersionRequest(input)
	err := req.Send()
	return out, err
}

const opGetFolder = "GetFolder"

// GetFolderRequest generates a "aws/request.Request" representing the
// client's request for the GetFolder operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See GetFolder for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the GetFolder method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the GetFolderRequest method.
//    req, resp := client.GetFolderRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetFolder
func (c *WorkDocs) GetFolderRequest(input *GetFolderInput) (req *request.Request, output *GetFolderOutput) {
	op := &request.Operation{
		Name:       opGetFolder,
		HTTPMethod: "GET",
		HTTPPath:   "/api/v1/folders/{FolderId}",
	}

	if input == nil {
		input = &GetFolderInput{}
	}

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

// GetFolder API operation for Amazon WorkDocs.
//
// Retrieves the metadata of the specified folder.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkDocs's
// API operation GetFolder for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeInvalidArgumentException "InvalidArgumentException"
//   The pagination marker and/or limit fields are not valid.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
//   * ErrCodeProhibitedStateException "ProhibitedStateException"
//   The specified document version is not in the INITIALIZED state.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetFolder
func (c *WorkDocs) GetFolder(input *GetFolderInput) (*GetFolderOutput, error) {
	req, out := c.GetFolderRequest(input)
	err := req.Send()
	return out, err
}

const opGetFolderPath = "GetFolderPath"

// GetFolderPathRequest generates a "aws/request.Request" representing the
// client's request for the GetFolderPath operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See GetFolderPath for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the GetFolderPath method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the GetFolderPathRequest method.
//    req, resp := client.GetFolderPathRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetFolderPath
func (c *WorkDocs) GetFolderPathRequest(input *GetFolderPathInput) (req *request.Request, output *GetFolderPathOutput) {
	op := &request.Operation{
		Name:       opGetFolderPath,
		HTTPMethod: "GET",
		HTTPPath:   "/api/v1/folders/{FolderId}/path",
	}

	if input == nil {
		input = &GetFolderPathInput{}
	}

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

// GetFolderPath API operation for Amazon WorkDocs.
//
// Retrieves the path information (the hierarchy from the root folder) for the
// specified folder.
//
// By default, Amazon WorkDocs returns a maximum of 100 levels upwards from
// the requested folder and only includes the IDs of the parent folders in the
// path. You can limit the maximum number of levels. You can also request the
// parent folder names.
//
// 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 WorkDocs's
// API operation GetFolderPath for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetFolderPath
func (c *WorkDocs) GetFolderPath(input *GetFolderPathInput) (*GetFolderPathOutput, error) {
	req, out := c.GetFolderPathRequest(input)
	err := req.Send()
	return out, err
}

const opInitiateDocumentVersionUpload = "InitiateDocumentVersionUpload"

// InitiateDocumentVersionUploadRequest generates a "aws/request.Request" representing the
// client's request for the InitiateDocumentVersionUpload operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See InitiateDocumentVersionUpload for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the InitiateDocumentVersionUpload method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the InitiateDocumentVersionUploadRequest method.
//    req, resp := client.InitiateDocumentVersionUploadRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/InitiateDocumentVersionUpload
func (c *WorkDocs) InitiateDocumentVersionUploadRequest(input *InitiateDocumentVersionUploadInput) (req *request.Request, output *InitiateDocumentVersionUploadOutput) {
	op := &request.Operation{
		Name:       opInitiateDocumentVersionUpload,
		HTTPMethod: "POST",
		HTTPPath:   "/api/v1/documents",
	}

	if input == nil {
		input = &InitiateDocumentVersionUploadInput{}
	}

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

// InitiateDocumentVersionUpload API operation for Amazon WorkDocs.
//
// Creates a new document object and version object.
//
// The client specifies the parent folder ID and name of the document to upload.
// The ID is optionally specified when creating a new version of an existing
// document. This is the first step to upload a document. Next, upload the document
// to the URL returned from the call, and then call UpdateDocumentVersion.
//
// To cancel the document upload, call AbortDocumentVersionUpload.
//
// 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 WorkDocs's
// API operation InitiateDocumentVersionUpload for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeEntityAlreadyExistsException "EntityAlreadyExistsException"
//   The resource already exists.
//
//   * ErrCodeStorageLimitExceededException "StorageLimitExceededException"
//   The storage limit has been exceeded.
//
//   * ErrCodeStorageLimitWillExceedException "StorageLimitWillExceedException"
//   The storage limit will be exceeded.
//
//   * ErrCodeProhibitedStateException "ProhibitedStateException"
//   The specified document version is not in the INITIALIZED state.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/InitiateDocumentVersionUpload
func (c *WorkDocs) InitiateDocumentVersionUpload(input *InitiateDocumentVersionUploadInput) (*InitiateDocumentVersionUploadOutput, error) {
	req, out := c.InitiateDocumentVersionUploadRequest(input)
	err := req.Send()
	return out, err
}

const opRemoveAllResourcePermissions = "RemoveAllResourcePermissions"

// RemoveAllResourcePermissionsRequest generates a "aws/request.Request" representing the
// client's request for the RemoveAllResourcePermissions operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See RemoveAllResourcePermissions for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the RemoveAllResourcePermissions method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the RemoveAllResourcePermissionsRequest method.
//    req, resp := client.RemoveAllResourcePermissionsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/RemoveAllResourcePermissions
func (c *WorkDocs) RemoveAllResourcePermissionsRequest(input *RemoveAllResourcePermissionsInput) (req *request.Request, output *RemoveAllResourcePermissionsOutput) {
	op := &request.Operation{
		Name:       opRemoveAllResourcePermissions,
		HTTPMethod: "DELETE",
		HTTPPath:   "/api/v1/resources/{ResourceId}/permissions",
	}

	if input == nil {
		input = &RemoveAllResourcePermissionsInput{}
	}

	output = &RemoveAllResourcePermissionsOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(restjson.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	return
}

// RemoveAllResourcePermissions API operation for Amazon WorkDocs.
//
// Removes all the permissions from 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 WorkDocs's
// API operation RemoveAllResourcePermissions for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/RemoveAllResourcePermissions
func (c *WorkDocs) RemoveAllResourcePermissions(input *RemoveAllResourcePermissionsInput) (*RemoveAllResourcePermissionsOutput, error) {
	req, out := c.RemoveAllResourcePermissionsRequest(input)
	err := req.Send()
	return out, err
}

const opRemoveResourcePermission = "RemoveResourcePermission"

// RemoveResourcePermissionRequest generates a "aws/request.Request" representing the
// client's request for the RemoveResourcePermission operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See RemoveResourcePermission for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the RemoveResourcePermission method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the RemoveResourcePermissionRequest method.
//    req, resp := client.RemoveResourcePermissionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/RemoveResourcePermission
func (c *WorkDocs) RemoveResourcePermissionRequest(input *RemoveResourcePermissionInput) (req *request.Request, output *RemoveResourcePermissionOutput) {
	op := &request.Operation{
		Name:       opRemoveResourcePermission,
		HTTPMethod: "DELETE",
		HTTPPath:   "/api/v1/resources/{ResourceId}/permissions/{PrincipalId}",
	}

	if input == nil {
		input = &RemoveResourcePermissionInput{}
	}

	output = &RemoveResourcePermissionOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(restjson.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	return
}

// RemoveResourcePermission API operation for Amazon WorkDocs.
//
// Removes the permission for the specified principal from 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 WorkDocs's
// API operation RemoveResourcePermission for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/RemoveResourcePermission
func (c *WorkDocs) RemoveResourcePermission(input *RemoveResourcePermissionInput) (*RemoveResourcePermissionOutput, error) {
	req, out := c.RemoveResourcePermissionRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateDocument = "UpdateDocument"

// UpdateDocumentRequest generates a "aws/request.Request" representing the
// client's request for the UpdateDocument operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UpdateDocument for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateDocument method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateDocumentRequest method.
//    req, resp := client.UpdateDocumentRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateDocument
func (c *WorkDocs) UpdateDocumentRequest(input *UpdateDocumentInput) (req *request.Request, output *UpdateDocumentOutput) {
	op := &request.Operation{
		Name:       opUpdateDocument,
		HTTPMethod: "PATCH",
		HTTPPath:   "/api/v1/documents/{DocumentId}",
	}

	if input == nil {
		input = &UpdateDocumentInput{}
	}

	output = &UpdateDocumentOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(restjson.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	return
}

// UpdateDocument API operation for Amazon WorkDocs.
//
// Updates the specified attributes of the specified document. The user must
// have access to both the document and its parent folder, if applicable.
//
// 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 WorkDocs's
// API operation UpdateDocument for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeEntityAlreadyExistsException "EntityAlreadyExistsException"
//   The resource already exists.
//
//   * ErrCodeLimitExceededException "LimitExceededException"
//   You've exceeded the maximum of 100,000 folders under the parent folder.
//
//   * ErrCodeProhibitedStateException "ProhibitedStateException"
//   The specified document version is not in the INITIALIZED state.
//
//   * ErrCodeConcurrentModificationException "ConcurrentModificationException"
//   The resource hierarchy is changing.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateDocument
func (c *WorkDocs) UpdateDocument(input *UpdateDocumentInput) (*UpdateDocumentOutput, error) {
	req, out := c.UpdateDocumentRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateDocumentVersion = "UpdateDocumentVersion"

// UpdateDocumentVersionRequest generates a "aws/request.Request" representing the
// client's request for the UpdateDocumentVersion operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UpdateDocumentVersion for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateDocumentVersion method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateDocumentVersionRequest method.
//    req, resp := client.UpdateDocumentVersionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateDocumentVersion
func (c *WorkDocs) UpdateDocumentVersionRequest(input *UpdateDocumentVersionInput) (req *request.Request, output *UpdateDocumentVersionOutput) {
	op := &request.Operation{
		Name:       opUpdateDocumentVersion,
		HTTPMethod: "PATCH",
		HTTPPath:   "/api/v1/documents/{DocumentId}/versions/{VersionId}",
	}

	if input == nil {
		input = &UpdateDocumentVersionInput{}
	}

	output = &UpdateDocumentVersionOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(restjson.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	return
}

// UpdateDocumentVersion API operation for Amazon WorkDocs.
//
// Changes the status of the document version to ACTIVE.
//
// Amazon WorkDocs also sets its document container to ACTIVE. This is the last
// step in a document upload, after the client uploads the document to an S3-presigned
// URL returned by InitiateDocumentVersionUpload.
//
// 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 WorkDocs's
// API operation UpdateDocumentVersion for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeProhibitedStateException "ProhibitedStateException"
//   The specified document version is not in the INITIALIZED state.
//
//   * ErrCodeConcurrentModificationException "ConcurrentModificationException"
//   The resource hierarchy is changing.
//
//   * ErrCodeInvalidOperationException "InvalidOperationException"
//   The operation is invalid.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateDocumentVersion
func (c *WorkDocs) UpdateDocumentVersion(input *UpdateDocumentVersionInput) (*UpdateDocumentVersionOutput, error) {
	req, out := c.UpdateDocumentVersionRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateFolder = "UpdateFolder"

// UpdateFolderRequest generates a "aws/request.Request" representing the
// client's request for the UpdateFolder operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UpdateFolder for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateFolder method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateFolderRequest method.
//    req, resp := client.UpdateFolderRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateFolder
func (c *WorkDocs) UpdateFolderRequest(input *UpdateFolderInput) (req *request.Request, output *UpdateFolderOutput) {
	op := &request.Operation{
		Name:       opUpdateFolder,
		HTTPMethod: "PATCH",
		HTTPPath:   "/api/v1/folders/{FolderId}",
	}

	if input == nil {
		input = &UpdateFolderInput{}
	}

	output = &UpdateFolderOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(restjson.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	return
}

// UpdateFolder API operation for Amazon WorkDocs.
//
// Updates the specified attributes of the specified folder. The user must have
// access to both the folder and its parent folder, if applicable.
//
// 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 WorkDocs's
// API operation UpdateFolder for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeEntityAlreadyExistsException "EntityAlreadyExistsException"
//   The resource already exists.
//
//   * ErrCodeProhibitedStateException "ProhibitedStateException"
//   The specified document version is not in the INITIALIZED state.
//
//   * ErrCodeConcurrentModificationException "ConcurrentModificationException"
//   The resource hierarchy is changing.
//
//   * ErrCodeLimitExceededException "LimitExceededException"
//   You've exceeded the maximum of 100,000 folders under the parent folder.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateFolder
func (c *WorkDocs) UpdateFolder(input *UpdateFolderInput) (*UpdateFolderOutput, error) {
	req, out := c.UpdateFolderRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateUser = "UpdateUser"

// UpdateUserRequest generates a "aws/request.Request" representing the
// client's request for the UpdateUser operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UpdateUser for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateUser method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateUserRequest method.
//    req, resp := client.UpdateUserRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateUser
func (c *WorkDocs) UpdateUserRequest(input *UpdateUserInput) (req *request.Request, output *UpdateUserOutput) {
	op := &request.Operation{
		Name:       opUpdateUser,
		HTTPMethod: "PATCH",
		HTTPPath:   "/api/v1/users/{UserId}",
	}

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

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

// UpdateUser API operation for Amazon WorkDocs.
//
// Updates the specified attributes of the specified user, and grants or revokes
// administrative privileges to the Amazon WorkDocs site.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon WorkDocs's
// API operation UpdateUser for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeEntityNotExistsException "EntityNotExistsException"
//   The resource does not exist.
//
//   * ErrCodeUnauthorizedOperationException "UnauthorizedOperationException"
//   The operation is not permitted.
//
//   * ErrCodeUnauthorizedResourceAccessException "UnauthorizedResourceAccessException"
//   The caller does not have access to perform the action on the resource.
//
//   * ErrCodeIllegalUserStateException "IllegalUserStateException"
//   The user is undergoing transfer of ownership.
//
//   * ErrCodeFailedDependencyException "FailedDependencyException"
//   The AWS Directory Service cannot reach an on-premises instance. Or a dependency
//   under the control of the organization is failing, such as a connected active
//   directory.
//
//   * ErrCodeServiceUnavailableException "ServiceUnavailableException"
//   One or more of the dependencies is unavailable.
//
//   * ErrCodeDeactivatingLastSystemUserException "DeactivatingLastSystemUserException"
//   The last user in the organization is being deactivated.
//
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateUser
func (c *WorkDocs) UpdateUser(input *UpdateUserInput) (*UpdateUserOutput, error) {
	req, out := c.UpdateUserRequest(input)
	err := req.Send()
	return out, err
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/AbortDocumentVersionUploadRequest
type AbortDocumentVersionUploadInput struct {
	_ struct{} `type:"structure"`

	// The ID of the document.
	//
	// DocumentId is a required field
	DocumentId *string `location:"uri" locationName:"DocumentId" min:"1" type:"string" required:"true"`

	// The ID of the version.
	//
	// VersionId is a required field
	VersionId *string `location:"uri" locationName:"VersionId" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetDocumentId sets the DocumentId field's value.
func (s *AbortDocumentVersionUploadInput) SetDocumentId(v string) *AbortDocumentVersionUploadInput {
	s.DocumentId = &v
	return s
}

// SetVersionId sets the VersionId field's value.
func (s *AbortDocumentVersionUploadInput) SetVersionId(v string) *AbortDocumentVersionUploadInput {
	s.VersionId = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/AbortDocumentVersionUploadOutput
type AbortDocumentVersionUploadOutput struct {
	_ struct{} `type:"structure"`
}

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/ActivateUserRequest
type ActivateUserInput struct {
	_ struct{} `type:"structure"`

	// The ID of the user.
	//
	// UserId is a required field
	UserId *string `location:"uri" locationName:"UserId" min:"1" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ActivateUserInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ActivateUserInput"}
	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
}

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/ActivateUserResponse
type ActivateUserOutput struct {
	_ struct{} `type:"structure"`

	// The user information.
	User *User `type:"structure"`
}

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

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

// SetUser sets the User field's value.
func (s *ActivateUserOutput) SetUser(v *User) *ActivateUserOutput {
	s.User = v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/AddResourcePermissionsRequest
type AddResourcePermissionsInput struct {
	_ struct{} `type:"structure"`

	// The users, groups, or organization being granted permission.
	//
	// Principals is a required field
	Principals []*SharePrincipal `type:"list" required:"true"`

	// The ID of the resource.
	//
	// ResourceId is a required field
	ResourceId *string `location:"uri" locationName:"ResourceId" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetPrincipals sets the Principals field's value.
func (s *AddResourcePermissionsInput) SetPrincipals(v []*SharePrincipal) *AddResourcePermissionsInput {
	s.Principals = v
	return s
}

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/AddResourcePermissionsResponse
type AddResourcePermissionsOutput struct {
	_ struct{} `type:"structure"`

	// The share results.
	ShareResults []*ShareResult `type:"list"`
}

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

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

// SetShareResults sets the ShareResults field's value.
func (s *AddResourcePermissionsOutput) SetShareResults(v []*ShareResult) *AddResourcePermissionsOutput {
	s.ShareResults = v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/CreateFolderRequest
type CreateFolderInput struct {
	_ struct{} `type:"structure"`

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

	// The ID of the parent folder.
	//
	// ParentFolderId is a required field
	ParentFolderId *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

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

// SetParentFolderId sets the ParentFolderId field's value.
func (s *CreateFolderInput) SetParentFolderId(v string) *CreateFolderInput {
	s.ParentFolderId = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/CreateFolderResponse
type CreateFolderOutput struct {
	_ struct{} `type:"structure"`

	// The metadata of the folder.
	Metadata *FolderMetadata `type:"structure"`
}

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

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

// SetMetadata sets the Metadata field's value.
func (s *CreateFolderOutput) SetMetadata(v *FolderMetadata) *CreateFolderOutput {
	s.Metadata = v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/CreateNotificationSubscriptionRequest
type CreateNotificationSubscriptionInput struct {
	_ struct{} `type:"structure"`

	// The endpoint to receive the notifications. If the protocol is HTTPS, the
	// endpoint is a URL that begins with "https://".
	//
	// Endpoint is a required field
	Endpoint *string `min:"1" type:"string" required:"true"`

	// The ID of the organization.
	//
	// OrganizationId is a required field
	OrganizationId *string `location:"uri" locationName:"OrganizationId" min:"1" type:"string" required:"true"`

	// The protocol to use. The supported value is https, which delivers JSON-encoded
	// messasges using HTTPS POST.
	//
	// Protocol is a required field
	Protocol *string `type:"string" required:"true" enum:"SubscriptionProtocolType"`

	// The notification type.
	//
	// SubscriptionType is a required field
	SubscriptionType *string `type:"string" required:"true" enum:"SubscriptionType"`
}

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

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

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

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

// SetEndpoint sets the Endpoint field's value.
func (s *CreateNotificationSubscriptionInput) SetEndpoint(v string) *CreateNotificationSubscriptionInput {
	s.Endpoint = &v
	return s
}

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

// SetProtocol sets the Protocol field's value.
func (s *CreateNotificationSubscriptionInput) SetProtocol(v string) *CreateNotificationSubscriptionInput {
	s.Protocol = &v
	return s
}

// SetSubscriptionType sets the SubscriptionType field's value.
func (s *CreateNotificationSubscriptionInput) SetSubscriptionType(v string) *CreateNotificationSubscriptionInput {
	s.SubscriptionType = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/CreateNotificationSubscriptionResponse
type CreateNotificationSubscriptionOutput struct {
	_ struct{} `type:"structure"`

	// The subscription.
	Subscription *Subscription `type:"structure"`
}

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

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

// SetSubscription sets the Subscription field's value.
func (s *CreateNotificationSubscriptionOutput) SetSubscription(v *Subscription) *CreateNotificationSubscriptionOutput {
	s.Subscription = v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/CreateUserRequest
type CreateUserInput struct {
	_ struct{} `type:"structure"`

	// The given name of the user.
	//
	// GivenName is a required field
	GivenName *string `min:"1" type:"string" required:"true"`

	// The ID of the organization.
	OrganizationId *string `min:"1" type:"string"`

	// The password of the user.
	//
	// Password is a required field
	Password *string `min:"4" type:"string" required:"true"`

	// The amount of storage for the user.
	StorageRule *StorageRuleType `type:"structure"`

	// The surname of the user.
	//
	// Surname is a required field
	Surname *string `min:"1" type:"string" required:"true"`

	// The time zone ID of the user.
	TimeZoneId *string `min:"1" type:"string"`

	// The login name of the user.
	//
	// Username is a required field
	Username *string `min:"1" type:"string" required:"true"`
}

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

// GoString returns the string representation
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.GivenName == nil {
		invalidParams.Add(request.NewErrParamRequired("GivenName"))
	}
	if s.GivenName != nil && len(*s.GivenName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("GivenName", 1))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 1))
	}
	if s.Password == nil {
		invalidParams.Add(request.NewErrParamRequired("Password"))
	}
	if s.Password != nil && len(*s.Password) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("Password", 4))
	}
	if s.Surname == nil {
		invalidParams.Add(request.NewErrParamRequired("Surname"))
	}
	if s.Surname != nil && len(*s.Surname) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Surname", 1))
	}
	if s.TimeZoneId != nil && len(*s.TimeZoneId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TimeZoneId", 1))
	}
	if s.Username == nil {
		invalidParams.Add(request.NewErrParamRequired("Username"))
	}
	if s.Username != nil && len(*s.Username) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Username", 1))
	}

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

// SetGivenName sets the GivenName field's value.
func (s *CreateUserInput) SetGivenName(v string) *CreateUserInput {
	s.GivenName = &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
}

// SetStorageRule sets the StorageRule field's value.
func (s *CreateUserInput) SetStorageRule(v *StorageRuleType) *CreateUserInput {
	s.StorageRule = v
	return s
}

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

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/CreateUserResponse
type CreateUserOutput struct {
	_ struct{} `type:"structure"`

	// The user information.
	User *User `type:"structure"`
}

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

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

// SetUser sets the User field's value.
func (s *CreateUserOutput) SetUser(v *User) *CreateUserOutput {
	s.User = v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeactivateUserRequest
type DeactivateUserInput struct {
	_ struct{} `type:"structure"`

	// The ID of the user.
	//
	// UserId is a required field
	UserId *string `location:"uri" locationName:"UserId" min:"1" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeactivateUserInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeactivateUserInput"}
	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
}

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeactivateUserOutput
type DeactivateUserOutput struct {
	_ struct{} `type:"structure"`
}

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteDocumentRequest
type DeleteDocumentInput struct {
	_ struct{} `type:"structure"`

	// The ID of the document.
	//
	// DocumentId is a required field
	DocumentId *string `location:"uri" locationName:"DocumentId" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetDocumentId sets the DocumentId field's value.
func (s *DeleteDocumentInput) SetDocumentId(v string) *DeleteDocumentInput {
	s.DocumentId = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteDocumentOutput
type DeleteDocumentOutput struct {
	_ struct{} `type:"structure"`
}

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteFolderContentsRequest
type DeleteFolderContentsInput struct {
	_ struct{} `type:"structure"`

	// The ID of the folder.
	//
	// FolderId is a required field
	FolderId *string `location:"uri" locationName:"FolderId" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetFolderId sets the FolderId field's value.
func (s *DeleteFolderContentsInput) SetFolderId(v string) *DeleteFolderContentsInput {
	s.FolderId = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteFolderContentsOutput
type DeleteFolderContentsOutput struct {
	_ struct{} `type:"structure"`
}

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteFolderRequest
type DeleteFolderInput struct {
	_ struct{} `type:"structure"`

	// The ID of the folder.
	//
	// FolderId is a required field
	FolderId *string `location:"uri" locationName:"FolderId" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetFolderId sets the FolderId field's value.
func (s *DeleteFolderInput) SetFolderId(v string) *DeleteFolderInput {
	s.FolderId = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteFolderOutput
type DeleteFolderOutput struct {
	_ struct{} `type:"structure"`
}

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteNotificationSubscriptionRequest
type DeleteNotificationSubscriptionInput struct {
	_ struct{} `type:"structure"`

	// The ID of the organization.
	//
	// OrganizationId is a required field
	OrganizationId *string `location:"uri" locationName:"OrganizationId" min:"1" type:"string" required:"true"`

	// The ID of the subscription.
	//
	// SubscriptionId is a required field
	SubscriptionId *string `location:"uri" locationName:"SubscriptionId" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

// SetSubscriptionId sets the SubscriptionId field's value.
func (s *DeleteNotificationSubscriptionInput) SetSubscriptionId(v string) *DeleteNotificationSubscriptionInput {
	s.SubscriptionId = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteNotificationSubscriptionOutput
type DeleteNotificationSubscriptionOutput struct {
	_ struct{} `type:"structure"`
}

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteUserRequest
type DeleteUserInput struct {
	_ struct{} `type:"structure"`

	// The ID of the user.
	//
	// UserId is a required field
	UserId *string `location:"uri" locationName:"UserId" min:"1" type:"string" required:"true"`
}

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

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DeleteUserOutput
type DeleteUserOutput struct {
	_ struct{} `type:"structure"`
}

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeDocumentVersionsRequest
type DescribeDocumentVersionsInput struct {
	_ struct{} `type:"structure"`

	// The ID of the document.
	//
	// DocumentId is a required field
	DocumentId *string `location:"uri" locationName:"DocumentId" min:"1" type:"string" required:"true"`

	// Specify "SOURCE" to include initialized versions and a URL for the source
	// document.
	Fields *string `location:"querystring" locationName:"fields" min:"1" type:"string"`

	// A comma-separated list of values. Specify "INITIALIZED" to include incomplete
	// versions.
	Include *string `location:"querystring" locationName:"include" min:"1" type:"string"`

	// The maximum number of versions to return with this call.
	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`

	// The marker for the next set of results. (You received this marker from a
	// previous call.)
	Marker *string `location:"querystring" locationName:"marker" min:"1" type:"string"`
}

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

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

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

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

// SetDocumentId sets the DocumentId field's value.
func (s *DescribeDocumentVersionsInput) SetDocumentId(v string) *DescribeDocumentVersionsInput {
	s.DocumentId = &v
	return s
}

// SetFields sets the Fields field's value.
func (s *DescribeDocumentVersionsInput) SetFields(v string) *DescribeDocumentVersionsInput {
	s.Fields = &v
	return s
}

// SetInclude sets the Include field's value.
func (s *DescribeDocumentVersionsInput) SetInclude(v string) *DescribeDocumentVersionsInput {
	s.Include = &v
	return s
}

// SetLimit sets the Limit field's value.
func (s *DescribeDocumentVersionsInput) SetLimit(v int64) *DescribeDocumentVersionsInput {
	s.Limit = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *DescribeDocumentVersionsInput) SetMarker(v string) *DescribeDocumentVersionsInput {
	s.Marker = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeDocumentVersionsResponse
type DescribeDocumentVersionsOutput struct {
	_ struct{} `type:"structure"`

	// The document versions.
	DocumentVersions []*DocumentVersionMetadata `type:"list"`

	// The marker to use when requesting the next set of results. If there are no
	// additional results, the string is empty.
	Marker *string `min:"1" type:"string"`
}

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

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

// SetDocumentVersions sets the DocumentVersions field's value.
func (s *DescribeDocumentVersionsOutput) SetDocumentVersions(v []*DocumentVersionMetadata) *DescribeDocumentVersionsOutput {
	s.DocumentVersions = v
	return s
}

// SetMarker sets the Marker field's value.
func (s *DescribeDocumentVersionsOutput) SetMarker(v string) *DescribeDocumentVersionsOutput {
	s.Marker = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeFolderContentsRequest
type DescribeFolderContentsInput struct {
	_ struct{} `type:"structure"`

	// The ID of the folder.
	//
	// FolderId is a required field
	FolderId *string `location:"uri" locationName:"FolderId" min:"1" type:"string" required:"true"`

	// The contents to include. Specify "INITIALIZED" to include initialized documents.
	Include *string `location:"querystring" locationName:"include" min:"1" type:"string"`

	// The maximum number of items to return with this call.
	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`

	// The marker for the next set of results. (You received this marker from a
	// previous call.)
	Marker *string `location:"querystring" locationName:"marker" min:"1" type:"string"`

	// The order for the contents of the folder.
	Order *string `location:"querystring" locationName:"order" type:"string" enum:"OrderType"`

	// The sorting criteria.
	Sort *string `location:"querystring" locationName:"sort" type:"string" enum:"ResourceSortType"`

	// The type of items.
	Type *string `location:"querystring" locationName:"type" type:"string" enum:"FolderContentType"`
}

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

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

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

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

// SetFolderId sets the FolderId field's value.
func (s *DescribeFolderContentsInput) SetFolderId(v string) *DescribeFolderContentsInput {
	s.FolderId = &v
	return s
}

// SetInclude sets the Include field's value.
func (s *DescribeFolderContentsInput) SetInclude(v string) *DescribeFolderContentsInput {
	s.Include = &v
	return s
}

// SetLimit sets the Limit field's value.
func (s *DescribeFolderContentsInput) SetLimit(v int64) *DescribeFolderContentsInput {
	s.Limit = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *DescribeFolderContentsInput) SetMarker(v string) *DescribeFolderContentsInput {
	s.Marker = &v
	return s
}

// SetOrder sets the Order field's value.
func (s *DescribeFolderContentsInput) SetOrder(v string) *DescribeFolderContentsInput {
	s.Order = &v
	return s
}

// SetSort sets the Sort field's value.
func (s *DescribeFolderContentsInput) SetSort(v string) *DescribeFolderContentsInput {
	s.Sort = &v
	return s
}

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeFolderContentsResponse
type DescribeFolderContentsOutput struct {
	_ struct{} `type:"structure"`

	// The documents in the specified folder.
	Documents []*DocumentMetadata `type:"list"`

	// The sub-folders in the specified folder.
	Folders []*FolderMetadata `type:"list"`

	// The marker to use when requesting the next set of results. If there are no
	// additional results, the string is empty.
	Marker *string `min:"1" type:"string"`
}

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

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

// SetDocuments sets the Documents field's value.
func (s *DescribeFolderContentsOutput) SetDocuments(v []*DocumentMetadata) *DescribeFolderContentsOutput {
	s.Documents = v
	return s
}

// SetFolders sets the Folders field's value.
func (s *DescribeFolderContentsOutput) SetFolders(v []*FolderMetadata) *DescribeFolderContentsOutput {
	s.Folders = v
	return s
}

// SetMarker sets the Marker field's value.
func (s *DescribeFolderContentsOutput) SetMarker(v string) *DescribeFolderContentsOutput {
	s.Marker = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeNotificationSubscriptionsRequest
type DescribeNotificationSubscriptionsInput struct {
	_ struct{} `type:"structure"`

	// The maximum number of items to return with this call.
	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`

	// The marker for the next set of results. (You received this marker from a
	// previous call.)
	Marker *string `location:"querystring" locationName:"marker" min:"1" type:"string"`

	// The ID of the organization.
	//
	// OrganizationId is a required field
	OrganizationId *string `location:"uri" locationName:"OrganizationId" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetLimit sets the Limit field's value.
func (s *DescribeNotificationSubscriptionsInput) SetLimit(v int64) *DescribeNotificationSubscriptionsInput {
	s.Limit = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *DescribeNotificationSubscriptionsInput) SetMarker(v string) *DescribeNotificationSubscriptionsInput {
	s.Marker = &v
	return s
}

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeNotificationSubscriptionsResponse
type DescribeNotificationSubscriptionsOutput struct {
	_ struct{} `type:"structure"`

	// The marker to use when requesting the next set of results. If there are no
	// additional results, the string is empty.
	Marker *string `min:"1" type:"string"`

	// The subscriptions.
	Subscriptions []*Subscription `type:"list"`
}

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

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

// SetMarker sets the Marker field's value.
func (s *DescribeNotificationSubscriptionsOutput) SetMarker(v string) *DescribeNotificationSubscriptionsOutput {
	s.Marker = &v
	return s
}

// SetSubscriptions sets the Subscriptions field's value.
func (s *DescribeNotificationSubscriptionsOutput) SetSubscriptions(v []*Subscription) *DescribeNotificationSubscriptionsOutput {
	s.Subscriptions = v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeResourcePermissionsRequest
type DescribeResourcePermissionsInput struct {
	_ struct{} `type:"structure"`

	// The maximum number of items to return with this call.
	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`

	// The marker for the next set of results. (You received this marker from a
	// previous call)
	Marker *string `location:"querystring" locationName:"marker" min:"1" type:"string"`

	// The ID of the resource.
	//
	// ResourceId is a required field
	ResourceId *string `location:"uri" locationName:"ResourceId" min:"1" type:"string" required:"true"`
}

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

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

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

// SetLimit sets the Limit field's value.
func (s *DescribeResourcePermissionsInput) SetLimit(v int64) *DescribeResourcePermissionsInput {
	s.Limit = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *DescribeResourcePermissionsInput) SetMarker(v string) *DescribeResourcePermissionsInput {
	s.Marker = &v
	return s
}

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeResourcePermissionsResponse
type DescribeResourcePermissionsOutput struct {
	_ struct{} `type:"structure"`

	// The marker to use when requesting the next set of results. If there are no
	// additional results, the string is empty.
	Marker *string `min:"1" type:"string"`

	// The principals.
	Principals []*Principal `type:"list"`
}

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

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

// SetMarker sets the Marker field's value.
func (s *DescribeResourcePermissionsOutput) SetMarker(v string) *DescribeResourcePermissionsOutput {
	s.Marker = &v
	return s
}

// SetPrincipals sets the Principals field's value.
func (s *DescribeResourcePermissionsOutput) SetPrincipals(v []*Principal) *DescribeResourcePermissionsOutput {
	s.Principals = v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeUsersRequest
type DescribeUsersInput struct {
	_ struct{} `type:"structure"`

	// A comma-separated list of values. Specify "STORAGE_METADATA" to include the
	// user storage quota and utilization information.
	Fields *string `location:"querystring" locationName:"fields" min:"1" type:"string"`

	// The state of the users. Specify "ALL" to include inactive users.
	Include *string `location:"querystring" locationName:"include" type:"string" enum:"UserFilterType"`

	// The maximum number of items to return.
	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`

	// The marker for the next set of results. (You received this marker from a
	// previous call.)
	Marker *string `location:"querystring" locationName:"marker" min:"1" type:"string"`

	// The order for the results.
	Order *string `location:"querystring" locationName:"order" type:"string" enum:"OrderType"`

	// The ID of the organization.
	OrganizationId *string `location:"querystring" locationName:"organizationId" min:"1" type:"string"`

	// A query to filter users by user name.
	Query *string `location:"querystring" locationName:"query" min:"1" type:"string"`

	// The sorting criteria.
	Sort *string `location:"querystring" locationName:"sort" type:"string" enum:"UserSortType"`

	// The IDs of the users.
	UserIds *string `location:"querystring" locationName:"userIds" min:"1" type:"string"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeUsersInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeUsersInput"}
	if s.Fields != nil && len(*s.Fields) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Fields", 1))
	}
	if s.Limit != nil && *s.Limit < 1 {
		invalidParams.Add(request.NewErrParamMinValue("Limit", 1))
	}
	if s.Marker != nil && len(*s.Marker) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Marker", 1))
	}
	if s.OrganizationId != nil && len(*s.OrganizationId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("OrganizationId", 1))
	}
	if s.Query != nil && len(*s.Query) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Query", 1))
	}
	if s.UserIds != nil && len(*s.UserIds) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("UserIds", 1))
	}

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

// SetFields sets the Fields field's value.
func (s *DescribeUsersInput) SetFields(v string) *DescribeUsersInput {
	s.Fields = &v
	return s
}

// SetInclude sets the Include field's value.
func (s *DescribeUsersInput) SetInclude(v string) *DescribeUsersInput {
	s.Include = &v
	return s
}

// SetLimit sets the Limit field's value.
func (s *DescribeUsersInput) SetLimit(v int64) *DescribeUsersInput {
	s.Limit = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *DescribeUsersInput) SetMarker(v string) *DescribeUsersInput {
	s.Marker = &v
	return s
}

// SetOrder sets the Order field's value.
func (s *DescribeUsersInput) SetOrder(v string) *DescribeUsersInput {
	s.Order = &v
	return s
}

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

// SetQuery sets the Query field's value.
func (s *DescribeUsersInput) SetQuery(v string) *DescribeUsersInput {
	s.Query = &v
	return s
}

// SetSort sets the Sort field's value.
func (s *DescribeUsersInput) SetSort(v string) *DescribeUsersInput {
	s.Sort = &v
	return s
}

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DescribeUsersResponse
type DescribeUsersOutput struct {
	_ struct{} `type:"structure"`

	// The marker to use when requesting the next set of results. If there are no
	// additional results, the string is empty.
	Marker *string `min:"1" type:"string"`

	// The total number of users included in the results.
	TotalNumberOfUsers *int64 `type:"long"`

	// The users.
	Users []*User `type:"list"`
}

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

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

// SetMarker sets the Marker field's value.
func (s *DescribeUsersOutput) SetMarker(v string) *DescribeUsersOutput {
	s.Marker = &v
	return s
}

// SetTotalNumberOfUsers sets the TotalNumberOfUsers field's value.
func (s *DescribeUsersOutput) SetTotalNumberOfUsers(v int64) *DescribeUsersOutput {
	s.TotalNumberOfUsers = &v
	return s
}

// SetUsers sets the Users field's value.
func (s *DescribeUsersOutput) SetUsers(v []*User) *DescribeUsersOutput {
	s.Users = v
	return s
}

// Describes the document.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DocumentMetadata
type DocumentMetadata struct {
	_ struct{} `type:"structure"`

	// The time when the document was created.
	CreatedTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The ID of the creator.
	CreatorId *string `min:"1" type:"string"`

	// The ID of the document.
	Id *string `min:"1" type:"string"`

	// The latest version of the document.
	LatestVersionMetadata *DocumentVersionMetadata `type:"structure"`

	// The time when the document was updated.
	ModifiedTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The ID of the parent folder.
	ParentFolderId *string `min:"1" type:"string"`

	// The resource state.
	ResourceState *string `type:"string" enum:"ResourceStateType"`
}

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

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

// SetCreatedTimestamp sets the CreatedTimestamp field's value.
func (s *DocumentMetadata) SetCreatedTimestamp(v time.Time) *DocumentMetadata {
	s.CreatedTimestamp = &v
	return s
}

// SetCreatorId sets the CreatorId field's value.
func (s *DocumentMetadata) SetCreatorId(v string) *DocumentMetadata {
	s.CreatorId = &v
	return s
}

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

// SetLatestVersionMetadata sets the LatestVersionMetadata field's value.
func (s *DocumentMetadata) SetLatestVersionMetadata(v *DocumentVersionMetadata) *DocumentMetadata {
	s.LatestVersionMetadata = v
	return s
}

// SetModifiedTimestamp sets the ModifiedTimestamp field's value.
func (s *DocumentMetadata) SetModifiedTimestamp(v time.Time) *DocumentMetadata {
	s.ModifiedTimestamp = &v
	return s
}

// SetParentFolderId sets the ParentFolderId field's value.
func (s *DocumentMetadata) SetParentFolderId(v string) *DocumentMetadata {
	s.ParentFolderId = &v
	return s
}

// SetResourceState sets the ResourceState field's value.
func (s *DocumentMetadata) SetResourceState(v string) *DocumentMetadata {
	s.ResourceState = &v
	return s
}

// Describes a version of a document.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/DocumentVersionMetadata
type DocumentVersionMetadata struct {
	_ struct{} `type:"structure"`

	// The time stamp when the content of the document was originally created.
	ContentCreatedTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The time stamp when the content of the document was modified.
	ContentModifiedTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The content type of the document.
	ContentType *string `min:"1" type:"string"`

	// The time stamp when the document was first uploaded.
	CreatedTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The ID of the creator.
	CreatorId *string `min:"1" type:"string"`

	// The ID of the version.
	Id *string `min:"1" type:"string"`

	// The time stamp when the document was last uploaded.
	ModifiedTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`

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

	// The signature of the document.
	Signature *string `type:"string"`

	// The size of the document, in bytes.
	Size *int64 `type:"long"`

	// The source of the document.
	Source map[string]*string `type:"map"`

	// The status of the document.
	Status *string `type:"string" enum:"DocumentStatusType"`

	// The thumbnail of the document.
	Thumbnail map[string]*string `type:"map"`
}

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

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

// SetContentCreatedTimestamp sets the ContentCreatedTimestamp field's value.
func (s *DocumentVersionMetadata) SetContentCreatedTimestamp(v time.Time) *DocumentVersionMetadata {
	s.ContentCreatedTimestamp = &v
	return s
}

// SetContentModifiedTimestamp sets the ContentModifiedTimestamp field's value.
func (s *DocumentVersionMetadata) SetContentModifiedTimestamp(v time.Time) *DocumentVersionMetadata {
	s.ContentModifiedTimestamp = &v
	return s
}

// SetContentType sets the ContentType field's value.
func (s *DocumentVersionMetadata) SetContentType(v string) *DocumentVersionMetadata {
	s.ContentType = &v
	return s
}

// SetCreatedTimestamp sets the CreatedTimestamp field's value.
func (s *DocumentVersionMetadata) SetCreatedTimestamp(v time.Time) *DocumentVersionMetadata {
	s.CreatedTimestamp = &v
	return s
}

// SetCreatorId sets the CreatorId field's value.
func (s *DocumentVersionMetadata) SetCreatorId(v string) *DocumentVersionMetadata {
	s.CreatorId = &v
	return s
}

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

// SetModifiedTimestamp sets the ModifiedTimestamp field's value.
func (s *DocumentVersionMetadata) SetModifiedTimestamp(v time.Time) *DocumentVersionMetadata {
	s.ModifiedTimestamp = &v
	return s
}

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

// SetSignature sets the Signature field's value.
func (s *DocumentVersionMetadata) SetSignature(v string) *DocumentVersionMetadata {
	s.Signature = &v
	return s
}

// SetSize sets the Size field's value.
func (s *DocumentVersionMetadata) SetSize(v int64) *DocumentVersionMetadata {
	s.Size = &v
	return s
}

// SetSource sets the Source field's value.
func (s *DocumentVersionMetadata) SetSource(v map[string]*string) *DocumentVersionMetadata {
	s.Source = v
	return s
}

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

// SetThumbnail sets the Thumbnail field's value.
func (s *DocumentVersionMetadata) SetThumbnail(v map[string]*string) *DocumentVersionMetadata {
	s.Thumbnail = v
	return s
}

// Describes a folder.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/FolderMetadata
type FolderMetadata struct {
	_ struct{} `type:"structure"`

	// The time when the folder was created.
	CreatedTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The ID of the creator.
	CreatorId *string `min:"1" type:"string"`

	// The ID of the folder.
	Id *string `min:"1" type:"string"`

	// The time when the folder was updated.
	ModifiedTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`

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

	// The ID of the parent folder.
	ParentFolderId *string `min:"1" type:"string"`

	// The resource state of the folder.
	ResourceState *string `type:"string" enum:"ResourceStateType"`

	// The unique identifier created from the subfolders and documents of the folder.
	Signature *string `type:"string"`
}

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

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

// SetCreatedTimestamp sets the CreatedTimestamp field's value.
func (s *FolderMetadata) SetCreatedTimestamp(v time.Time) *FolderMetadata {
	s.CreatedTimestamp = &v
	return s
}

// SetCreatorId sets the CreatorId field's value.
func (s *FolderMetadata) SetCreatorId(v string) *FolderMetadata {
	s.CreatorId = &v
	return s
}

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

// SetModifiedTimestamp sets the ModifiedTimestamp field's value.
func (s *FolderMetadata) SetModifiedTimestamp(v time.Time) *FolderMetadata {
	s.ModifiedTimestamp = &v
	return s
}

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

// SetParentFolderId sets the ParentFolderId field's value.
func (s *FolderMetadata) SetParentFolderId(v string) *FolderMetadata {
	s.ParentFolderId = &v
	return s
}

// SetResourceState sets the ResourceState field's value.
func (s *FolderMetadata) SetResourceState(v string) *FolderMetadata {
	s.ResourceState = &v
	return s
}

// SetSignature sets the Signature field's value.
func (s *FolderMetadata) SetSignature(v string) *FolderMetadata {
	s.Signature = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetDocumentRequest
type GetDocumentInput struct {
	_ struct{} `type:"structure"`

	// The ID of the document object.
	//
	// DocumentId is a required field
	DocumentId *string `location:"uri" locationName:"DocumentId" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetDocumentId sets the DocumentId field's value.
func (s *GetDocumentInput) SetDocumentId(v string) *GetDocumentInput {
	s.DocumentId = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetDocumentResponse
type GetDocumentOutput struct {
	_ struct{} `type:"structure"`

	// The document object.
	Metadata *DocumentMetadata `type:"structure"`
}

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

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

// SetMetadata sets the Metadata field's value.
func (s *GetDocumentOutput) SetMetadata(v *DocumentMetadata) *GetDocumentOutput {
	s.Metadata = v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetDocumentPathRequest
type GetDocumentPathInput struct {
	_ struct{} `type:"structure"`

	// The ID of the document.
	//
	// DocumentId is a required field
	DocumentId *string `location:"uri" locationName:"DocumentId" min:"1" type:"string" required:"true"`

	// A comma-separated list of values. Specify "NAME" to include the names of
	// the parent folders.
	Fields *string `location:"querystring" locationName:"fields" min:"1" type:"string"`

	// The maximum number of levels in the hierarchy to return.
	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`

	// This value is not supported.
	Marker *string `location:"querystring" locationName:"marker" min:"1" type:"string"`
}

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

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

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

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

// SetDocumentId sets the DocumentId field's value.
func (s *GetDocumentPathInput) SetDocumentId(v string) *GetDocumentPathInput {
	s.DocumentId = &v
	return s
}

// SetFields sets the Fields field's value.
func (s *GetDocumentPathInput) SetFields(v string) *GetDocumentPathInput {
	s.Fields = &v
	return s
}

// SetLimit sets the Limit field's value.
func (s *GetDocumentPathInput) SetLimit(v int64) *GetDocumentPathInput {
	s.Limit = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *GetDocumentPathInput) SetMarker(v string) *GetDocumentPathInput {
	s.Marker = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetDocumentPathResponse
type GetDocumentPathOutput struct {
	_ struct{} `type:"structure"`

	// The path information.
	Path *ResourcePath `type:"structure"`
}

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

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

// SetPath sets the Path field's value.
func (s *GetDocumentPathOutput) SetPath(v *ResourcePath) *GetDocumentPathOutput {
	s.Path = v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetDocumentVersionRequest
type GetDocumentVersionInput struct {
	_ struct{} `type:"structure"`

	// The ID of the document.
	//
	// DocumentId is a required field
	DocumentId *string `location:"uri" locationName:"DocumentId" min:"1" type:"string" required:"true"`

	// A comma-separated list of values. Specify "SOURCE" to include a URL for the
	// source document.
	Fields *string `location:"querystring" locationName:"fields" min:"1" type:"string"`

	// The version ID of the document.
	//
	// VersionId is a required field
	VersionId *string `location:"uri" locationName:"VersionId" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetDocumentId sets the DocumentId field's value.
func (s *GetDocumentVersionInput) SetDocumentId(v string) *GetDocumentVersionInput {
	s.DocumentId = &v
	return s
}

// SetFields sets the Fields field's value.
func (s *GetDocumentVersionInput) SetFields(v string) *GetDocumentVersionInput {
	s.Fields = &v
	return s
}

// SetVersionId sets the VersionId field's value.
func (s *GetDocumentVersionInput) SetVersionId(v string) *GetDocumentVersionInput {
	s.VersionId = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetDocumentVersionResponse
type GetDocumentVersionOutput struct {
	_ struct{} `type:"structure"`

	// The version metadata.
	Metadata *DocumentVersionMetadata `type:"structure"`
}

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

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

// SetMetadata sets the Metadata field's value.
func (s *GetDocumentVersionOutput) SetMetadata(v *DocumentVersionMetadata) *GetDocumentVersionOutput {
	s.Metadata = v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetFolderRequest
type GetFolderInput struct {
	_ struct{} `type:"structure"`

	// The ID of the folder.
	//
	// FolderId is a required field
	FolderId *string `location:"uri" locationName:"FolderId" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetFolderId sets the FolderId field's value.
func (s *GetFolderInput) SetFolderId(v string) *GetFolderInput {
	s.FolderId = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetFolderResponse
type GetFolderOutput struct {
	_ struct{} `type:"structure"`

	// The metadata of the folder.
	Metadata *FolderMetadata `type:"structure"`
}

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

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

// SetMetadata sets the Metadata field's value.
func (s *GetFolderOutput) SetMetadata(v *FolderMetadata) *GetFolderOutput {
	s.Metadata = v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetFolderPathRequest
type GetFolderPathInput struct {
	_ struct{} `type:"structure"`

	// A comma-separated list of values. Specify "NAME" to include the names of
	// the parent folders.
	Fields *string `location:"querystring" locationName:"fields" min:"1" type:"string"`

	// The ID of the folder.
	//
	// FolderId is a required field
	FolderId *string `location:"uri" locationName:"FolderId" min:"1" type:"string" required:"true"`

	// The maximum number of levels in the hierarchy to return.
	Limit *int64 `location:"querystring" locationName:"limit" min:"1" type:"integer"`

	// This value is not supported.
	Marker *string `location:"querystring" locationName:"marker" min:"1" type:"string"`
}

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

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

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

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

// SetFields sets the Fields field's value.
func (s *GetFolderPathInput) SetFields(v string) *GetFolderPathInput {
	s.Fields = &v
	return s
}

// SetFolderId sets the FolderId field's value.
func (s *GetFolderPathInput) SetFolderId(v string) *GetFolderPathInput {
	s.FolderId = &v
	return s
}

// SetLimit sets the Limit field's value.
func (s *GetFolderPathInput) SetLimit(v int64) *GetFolderPathInput {
	s.Limit = &v
	return s
}

// SetMarker sets the Marker field's value.
func (s *GetFolderPathInput) SetMarker(v string) *GetFolderPathInput {
	s.Marker = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/GetFolderPathResponse
type GetFolderPathOutput struct {
	_ struct{} `type:"structure"`

	// The path information.
	Path *ResourcePath `type:"structure"`
}

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

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

// SetPath sets the Path field's value.
func (s *GetFolderPathOutput) SetPath(v *ResourcePath) *GetFolderPathOutput {
	s.Path = v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/InitiateDocumentVersionUploadRequest
type InitiateDocumentVersionUploadInput struct {
	_ struct{} `type:"structure"`

	// The time stamp when the content of the document was originally created.
	ContentCreatedTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The time stamp when the content of the document was modified.
	ContentModifiedTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The content type of the document.
	ContentType *string `min:"1" type:"string"`

	// The size of the document, in bytes.
	DocumentSizeInBytes *int64 `type:"long"`

	// The ID of the document.
	Id *string `min:"1" type:"string"`

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

	// The ID of the parent folder.
	//
	// ParentFolderId is a required field
	ParentFolderId *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetContentCreatedTimestamp sets the ContentCreatedTimestamp field's value.
func (s *InitiateDocumentVersionUploadInput) SetContentCreatedTimestamp(v time.Time) *InitiateDocumentVersionUploadInput {
	s.ContentCreatedTimestamp = &v
	return s
}

// SetContentModifiedTimestamp sets the ContentModifiedTimestamp field's value.
func (s *InitiateDocumentVersionUploadInput) SetContentModifiedTimestamp(v time.Time) *InitiateDocumentVersionUploadInput {
	s.ContentModifiedTimestamp = &v
	return s
}

// SetContentType sets the ContentType field's value.
func (s *InitiateDocumentVersionUploadInput) SetContentType(v string) *InitiateDocumentVersionUploadInput {
	s.ContentType = &v
	return s
}

// SetDocumentSizeInBytes sets the DocumentSizeInBytes field's value.
func (s *InitiateDocumentVersionUploadInput) SetDocumentSizeInBytes(v int64) *InitiateDocumentVersionUploadInput {
	s.DocumentSizeInBytes = &v
	return s
}

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

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

// SetParentFolderId sets the ParentFolderId field's value.
func (s *InitiateDocumentVersionUploadInput) SetParentFolderId(v string) *InitiateDocumentVersionUploadInput {
	s.ParentFolderId = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/InitiateDocumentVersionUploadResponse
type InitiateDocumentVersionUploadOutput struct {
	_ struct{} `type:"structure"`

	// The document metadata.
	Metadata *DocumentMetadata `type:"structure"`

	// The upload metadata.
	UploadMetadata *UploadMetadata `type:"structure"`
}

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

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

// SetMetadata sets the Metadata field's value.
func (s *InitiateDocumentVersionUploadOutput) SetMetadata(v *DocumentMetadata) *InitiateDocumentVersionUploadOutput {
	s.Metadata = v
	return s
}

// SetUploadMetadata sets the UploadMetadata field's value.
func (s *InitiateDocumentVersionUploadOutput) SetUploadMetadata(v *UploadMetadata) *InitiateDocumentVersionUploadOutput {
	s.UploadMetadata = v
	return s
}

// Describes the permissions.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/PermissionInfo
type PermissionInfo struct {
	_ struct{} `type:"structure"`

	// The role of the user.
	Role *string `type:"string" enum:"RoleType"`

	// The type of permissions.
	Type *string `type:"string" enum:"RolePermissionType"`
}

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

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

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

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

// Describes a resource.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/Principal
type Principal struct {
	_ struct{} `type:"structure"`

	// The ID of the resource.
	Id *string `min:"1" type:"string"`

	// The permission information for the resource.
	Roles []*PermissionInfo `type:"list"`

	// The type of resource.
	Type *string `type:"string" enum:"PrincipalType"`
}

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

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

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

// SetRoles sets the Roles field's value.
func (s *Principal) SetRoles(v []*PermissionInfo) *Principal {
	s.Roles = v
	return s
}

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/RemoveAllResourcePermissionsRequest
type RemoveAllResourcePermissionsInput struct {
	_ struct{} `type:"structure"`

	// The ID of the resource.
	//
	// ResourceId is a required field
	ResourceId *string `location:"uri" locationName:"ResourceId" min:"1" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *RemoveAllResourcePermissionsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RemoveAllResourcePermissionsInput"}
	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
}

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/RemoveAllResourcePermissionsOutput
type RemoveAllResourcePermissionsOutput struct {
	_ struct{} `type:"structure"`
}

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/RemoveResourcePermissionRequest
type RemoveResourcePermissionInput struct {
	_ struct{} `type:"structure"`

	// The principal ID of the resource.
	//
	// PrincipalId is a required field
	PrincipalId *string `location:"uri" locationName:"PrincipalId" min:"1" type:"string" required:"true"`

	// The principal type of the resource.
	PrincipalType *string `location:"querystring" locationName:"type" type:"string" enum:"PrincipalType"`

	// The ID of the resource.
	//
	// ResourceId is a required field
	ResourceId *string `location:"uri" locationName:"ResourceId" min:"1" type:"string" required:"true"`
}

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

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

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

// SetPrincipalId sets the PrincipalId field's value.
func (s *RemoveResourcePermissionInput) SetPrincipalId(v string) *RemoveResourcePermissionInput {
	s.PrincipalId = &v
	return s
}

// SetPrincipalType sets the PrincipalType field's value.
func (s *RemoveResourcePermissionInput) SetPrincipalType(v string) *RemoveResourcePermissionInput {
	s.PrincipalType = &v
	return s
}

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/RemoveResourcePermissionOutput
type RemoveResourcePermissionOutput struct {
	_ struct{} `type:"structure"`
}

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

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

// Describes the path information of a resource.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/ResourcePath
type ResourcePath struct {
	_ struct{} `type:"structure"`

	// The components of the resource path.
	Components []*ResourcePathComponent `type:"list"`
}

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

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

// SetComponents sets the Components field's value.
func (s *ResourcePath) SetComponents(v []*ResourcePathComponent) *ResourcePath {
	s.Components = v
	return s
}

// Describes the resource path.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/ResourcePathComponent
type ResourcePathComponent struct {
	_ struct{} `type:"structure"`

	// The ID of the resource path.
	Id *string `min:"1" type:"string"`

	// The name of the resource path.
	Name *string `min:"1" type:"string"`
}

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

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

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

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

// Describes the recipient type and ID, if available.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/SharePrincipal
type SharePrincipal struct {
	_ struct{} `type:"structure"`

	// The ID of the recipient.
	//
	// Id is a required field
	Id *string `min:"1" type:"string" required:"true"`

	// The role of the recipient.
	//
	// Role is a required field
	Role *string `type:"string" required:"true" enum:"RoleType"`

	// The type of the recipient.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"PrincipalType"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *SharePrincipal) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SharePrincipal"}
	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.Role == nil {
		invalidParams.Add(request.NewErrParamRequired("Role"))
	}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}

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

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

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

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

// Describes the share results of a resource.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/ShareResult
type ShareResult struct {
	_ struct{} `type:"structure"`

	// The ID of the principal.
	PrincipalId *string `min:"1" type:"string"`

	// The role.
	Role *string `type:"string" enum:"RoleType"`

	// The ID of the resource that was shared.
	ShareId *string `min:"1" type:"string"`

	// The status.
	Status *string `type:"string" enum:"ShareStatusType"`

	// The status message.
	StatusMessage *string `type:"string"`
}

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

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

// SetPrincipalId sets the PrincipalId field's value.
func (s *ShareResult) SetPrincipalId(v string) *ShareResult {
	s.PrincipalId = &v
	return s
}

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

// SetShareId sets the ShareId field's value.
func (s *ShareResult) SetShareId(v string) *ShareResult {
	s.ShareId = &v
	return s
}

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

// SetStatusMessage sets the StatusMessage field's value.
func (s *ShareResult) SetStatusMessage(v string) *ShareResult {
	s.StatusMessage = &v
	return s
}

// Describes the storage for a user.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/StorageRuleType
type StorageRuleType struct {
	_ struct{} `type:"structure"`

	// The amount of storage allocated, in bytes.
	StorageAllocatedInBytes *int64 `type:"long"`

	// The type of storage.
	StorageType *string `type:"string" enum:"StorageType"`
}

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

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

// SetStorageAllocatedInBytes sets the StorageAllocatedInBytes field's value.
func (s *StorageRuleType) SetStorageAllocatedInBytes(v int64) *StorageRuleType {
	s.StorageAllocatedInBytes = &v
	return s
}

// SetStorageType sets the StorageType field's value.
func (s *StorageRuleType) SetStorageType(v string) *StorageRuleType {
	s.StorageType = &v
	return s
}

// Describes a subscription.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/Subscription
type Subscription struct {
	_ struct{} `type:"structure"`

	// The endpoint of the subscription.
	EndPoint *string `min:"1" type:"string"`

	// The protocol of the subscription.
	Protocol *string `type:"string" enum:"SubscriptionProtocolType"`

	// The ID of the subscription.
	SubscriptionId *string `min:"1" type:"string"`
}

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

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

// SetEndPoint sets the EndPoint field's value.
func (s *Subscription) SetEndPoint(v string) *Subscription {
	s.EndPoint = &v
	return s
}

// SetProtocol sets the Protocol field's value.
func (s *Subscription) SetProtocol(v string) *Subscription {
	s.Protocol = &v
	return s
}

// SetSubscriptionId sets the SubscriptionId field's value.
func (s *Subscription) SetSubscriptionId(v string) *Subscription {
	s.SubscriptionId = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateDocumentRequest
type UpdateDocumentInput struct {
	_ struct{} `type:"structure"`

	// The ID of the document.
	//
	// DocumentId is a required field
	DocumentId *string `location:"uri" locationName:"DocumentId" min:"1" type:"string" required:"true"`

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

	// The ID of the parent folder.
	ParentFolderId *string `min:"1" type:"string"`

	// The resource state of the document. Note that only ACTIVE and RECYCLED are
	// supported.
	ResourceState *string `type:"string" enum:"ResourceStateType"`
}

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

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

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

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

// SetDocumentId sets the DocumentId field's value.
func (s *UpdateDocumentInput) SetDocumentId(v string) *UpdateDocumentInput {
	s.DocumentId = &v
	return s
}

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

// SetParentFolderId sets the ParentFolderId field's value.
func (s *UpdateDocumentInput) SetParentFolderId(v string) *UpdateDocumentInput {
	s.ParentFolderId = &v
	return s
}

// SetResourceState sets the ResourceState field's value.
func (s *UpdateDocumentInput) SetResourceState(v string) *UpdateDocumentInput {
	s.ResourceState = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateDocumentOutput
type UpdateDocumentOutput struct {
	_ struct{} `type:"structure"`
}

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateDocumentVersionRequest
type UpdateDocumentVersionInput struct {
	_ struct{} `type:"structure"`

	// The ID of the document.
	//
	// DocumentId is a required field
	DocumentId *string `location:"uri" locationName:"DocumentId" min:"1" type:"string" required:"true"`

	// The version ID of the document.
	//
	// VersionId is a required field
	VersionId *string `location:"uri" locationName:"VersionId" min:"1" type:"string" required:"true"`

	// The status of the version.
	VersionStatus *string `type:"string" enum:"DocumentVersionStatus"`
}

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

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

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

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

// SetDocumentId sets the DocumentId field's value.
func (s *UpdateDocumentVersionInput) SetDocumentId(v string) *UpdateDocumentVersionInput {
	s.DocumentId = &v
	return s
}

// SetVersionId sets the VersionId field's value.
func (s *UpdateDocumentVersionInput) SetVersionId(v string) *UpdateDocumentVersionInput {
	s.VersionId = &v
	return s
}

// SetVersionStatus sets the VersionStatus field's value.
func (s *UpdateDocumentVersionInput) SetVersionStatus(v string) *UpdateDocumentVersionInput {
	s.VersionStatus = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateDocumentVersionOutput
type UpdateDocumentVersionOutput struct {
	_ struct{} `type:"structure"`
}

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateFolderRequest
type UpdateFolderInput struct {
	_ struct{} `type:"structure"`

	// The ID of the folder.
	//
	// FolderId is a required field
	FolderId *string `location:"uri" locationName:"FolderId" min:"1" type:"string" required:"true"`

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

	// The ID of the parent folder.
	ParentFolderId *string `min:"1" type:"string"`

	// The resource state of the folder. Note that only ACTIVE and RECYCLED are
	// accepted values from the API.
	ResourceState *string `type:"string" enum:"ResourceStateType"`
}

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

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

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

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

// SetFolderId sets the FolderId field's value.
func (s *UpdateFolderInput) SetFolderId(v string) *UpdateFolderInput {
	s.FolderId = &v
	return s
}

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

// SetParentFolderId sets the ParentFolderId field's value.
func (s *UpdateFolderInput) SetParentFolderId(v string) *UpdateFolderInput {
	s.ParentFolderId = &v
	return s
}

// SetResourceState sets the ResourceState field's value.
func (s *UpdateFolderInput) SetResourceState(v string) *UpdateFolderInput {
	s.ResourceState = &v
	return s
}

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateFolderOutput
type UpdateFolderOutput struct {
	_ struct{} `type:"structure"`
}

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateUserRequest
type UpdateUserInput struct {
	_ struct{} `type:"structure"`

	// The given name of the user.
	GivenName *string `min:"1" type:"string"`

	// The locale of the user.
	Locale *string `type:"string" enum:"LocaleType"`

	// The amount of storage for the user.
	StorageRule *StorageRuleType `type:"structure"`

	// The surname of the user.
	Surname *string `min:"1" type:"string"`

	// The time zone ID of the user.
	TimeZoneId *string `min:"1" type:"string"`

	// The type of the user.
	Type *string `type:"string" enum:"UserType"`

	// The ID of the user.
	//
	// UserId is a required field
	UserId *string `location:"uri" locationName:"UserId" min:"1" type:"string" required:"true"`
}

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

// GoString returns the string representation
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.GivenName != nil && len(*s.GivenName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("GivenName", 1))
	}
	if s.Surname != nil && len(*s.Surname) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Surname", 1))
	}
	if s.TimeZoneId != nil && len(*s.TimeZoneId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TimeZoneId", 1))
	}
	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
}

// SetGivenName sets the GivenName field's value.
func (s *UpdateUserInput) SetGivenName(v string) *UpdateUserInput {
	s.GivenName = &v
	return s
}

// SetLocale sets the Locale field's value.
func (s *UpdateUserInput) SetLocale(v string) *UpdateUserInput {
	s.Locale = &v
	return s
}

// SetStorageRule sets the StorageRule field's value.
func (s *UpdateUserInput) SetStorageRule(v *StorageRuleType) *UpdateUserInput {
	s.StorageRule = v
	return s
}

// SetSurname sets the Surname field's value.
func (s *UpdateUserInput) SetSurname(v string) *UpdateUserInput {
	s.Surname = &v
	return s
}

// SetTimeZoneId sets the TimeZoneId field's value.
func (s *UpdateUserInput) SetTimeZoneId(v string) *UpdateUserInput {
	s.TimeZoneId = &v
	return s
}

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

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

// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UpdateUserResponse
type UpdateUserOutput struct {
	_ struct{} `type:"structure"`

	// The user information.
	User *User `type:"structure"`
}

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

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

// SetUser sets the User field's value.
func (s *UpdateUserOutput) SetUser(v *User) *UpdateUserOutput {
	s.User = v
	return s
}

// Describes the upload.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UploadMetadata
type UploadMetadata struct {
	_ struct{} `type:"structure"`

	// The signed headers.
	SignedHeaders map[string]*string `type:"map"`

	// The URL of the upload.
	UploadUrl *string `min:"1" type:"string"`
}

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

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

// SetSignedHeaders sets the SignedHeaders field's value.
func (s *UploadMetadata) SetSignedHeaders(v map[string]*string) *UploadMetadata {
	s.SignedHeaders = v
	return s
}

// SetUploadUrl sets the UploadUrl field's value.
func (s *UploadMetadata) SetUploadUrl(v string) *UploadMetadata {
	s.UploadUrl = &v
	return s
}

// Describes a user.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/User
type User struct {
	_ struct{} `type:"structure"`

	// The time when the user was created.
	CreatedTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The email address of the user.
	EmailAddress *string `min:"1" type:"string"`

	// The given name of the user.
	GivenName *string `min:"1" type:"string"`

	// The ID of the user.
	Id *string `min:"1" type:"string"`

	// The locale of the user.
	Locale *string `type:"string" enum:"LocaleType"`

	// The time when the user was modified.
	ModifiedTimestamp *time.Time `type:"timestamp" timestampFormat:"unix"`

	// The ID of the organization.
	OrganizationId *string `min:"1" type:"string"`

	// The ID of the recycle bin folder.
	RecycleBinFolderId *string `min:"1" type:"string"`

	// The ID of the root folder.
	RootFolderId *string `min:"1" type:"string"`

	// The status of the user.
	Status *string `type:"string" enum:"UserStatusType"`

	// The storage for the user.
	Storage *UserStorageMetadata `type:"structure"`

	// The surname of the user.
	Surname *string `min:"1" type:"string"`

	// The time zone ID of the user.
	TimeZoneId *string `min:"1" type:"string"`

	// The type of user.
	Type *string `type:"string" enum:"UserType"`

	// The login name of the user.
	Username *string `min:"1" type:"string"`
}

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

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

// SetCreatedTimestamp sets the CreatedTimestamp field's value.
func (s *User) SetCreatedTimestamp(v time.Time) *User {
	s.CreatedTimestamp = &v
	return s
}

// SetEmailAddress sets the EmailAddress field's value.
func (s *User) SetEmailAddress(v string) *User {
	s.EmailAddress = &v
	return s
}

// SetGivenName sets the GivenName field's value.
func (s *User) SetGivenName(v string) *User {
	s.GivenName = &v
	return s
}

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

// SetLocale sets the Locale field's value.
func (s *User) SetLocale(v string) *User {
	s.Locale = &v
	return s
}

// SetModifiedTimestamp sets the ModifiedTimestamp field's value.
func (s *User) SetModifiedTimestamp(v time.Time) *User {
	s.ModifiedTimestamp = &v
	return s
}

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

// SetRecycleBinFolderId sets the RecycleBinFolderId field's value.
func (s *User) SetRecycleBinFolderId(v string) *User {
	s.RecycleBinFolderId = &v
	return s
}

// SetRootFolderId sets the RootFolderId field's value.
func (s *User) SetRootFolderId(v string) *User {
	s.RootFolderId = &v
	return s
}

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

// SetStorage sets the Storage field's value.
func (s *User) SetStorage(v *UserStorageMetadata) *User {
	s.Storage = v
	return s
}

// SetSurname sets the Surname field's value.
func (s *User) SetSurname(v string) *User {
	s.Surname = &v
	return s
}

// SetTimeZoneId sets the TimeZoneId field's value.
func (s *User) SetTimeZoneId(v string) *User {
	s.TimeZoneId = &v
	return s
}

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

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

// Describes the storage for a user.
// Please also see https://docs.aws.amazon.com/goto/WebAPI/workdocs-2016-05-01/UserStorageMetadata
type UserStorageMetadata struct {
	_ struct{} `type:"structure"`

	// The storage for a user.
	StorageRule *StorageRuleType `type:"structure"`

	// The amount of storage utilized, in bytes.
	StorageUtilizedInBytes *int64 `type:"long"`
}

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

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

// SetStorageRule sets the StorageRule field's value.
func (s *UserStorageMetadata) SetStorageRule(v *StorageRuleType) *UserStorageMetadata {
	s.StorageRule = v
	return s
}

// SetStorageUtilizedInBytes sets the StorageUtilizedInBytes field's value.
func (s *UserStorageMetadata) SetStorageUtilizedInBytes(v int64) *UserStorageMetadata {
	s.StorageUtilizedInBytes = &v
	return s
}

const (
	// DocumentSourceTypeOriginal is a DocumentSourceType enum value
	DocumentSourceTypeOriginal = "ORIGINAL"

	// DocumentSourceTypeWithComments is a DocumentSourceType enum value
	DocumentSourceTypeWithComments = "WITH_COMMENTS"
)

const (
	// DocumentStatusTypeInitialized is a DocumentStatusType enum value
	DocumentStatusTypeInitialized = "INITIALIZED"

	// DocumentStatusTypeActive is a DocumentStatusType enum value
	DocumentStatusTypeActive = "ACTIVE"
)

const (
	// DocumentThumbnailTypeSmall is a DocumentThumbnailType enum value
	DocumentThumbnailTypeSmall = "SMALL"

	// DocumentThumbnailTypeSmallHq is a DocumentThumbnailType enum value
	DocumentThumbnailTypeSmallHq = "SMALL_HQ"

	// DocumentThumbnailTypeLarge is a DocumentThumbnailType enum value
	DocumentThumbnailTypeLarge = "LARGE"
)

const (
	// DocumentVersionStatusActive is a DocumentVersionStatus enum value
	DocumentVersionStatusActive = "ACTIVE"
)

const (
	// FolderContentTypeAll is a FolderContentType enum value
	FolderContentTypeAll = "ALL"

	// FolderContentTypeDocument is a FolderContentType enum value
	FolderContentTypeDocument = "DOCUMENT"

	// FolderContentTypeFolder is a FolderContentType enum value
	FolderContentTypeFolder = "FOLDER"
)

const (
	// LocaleTypeEn is a LocaleType enum value
	LocaleTypeEn = "en"

	// LocaleTypeFr is a LocaleType enum value
	LocaleTypeFr = "fr"

	// LocaleTypeKo is a LocaleType enum value
	LocaleTypeKo = "ko"

	// LocaleTypeDe is a LocaleType enum value
	LocaleTypeDe = "de"

	// LocaleTypeEs is a LocaleType enum value
	LocaleTypeEs = "es"

	// LocaleTypeJa is a LocaleType enum value
	LocaleTypeJa = "ja"

	// LocaleTypeRu is a LocaleType enum value
	LocaleTypeRu = "ru"

	// LocaleTypeZhCn is a LocaleType enum value
	LocaleTypeZhCn = "zh_CN"

	// LocaleTypeZhTw is a LocaleType enum value
	LocaleTypeZhTw = "zh_TW"

	// LocaleTypePtBr is a LocaleType enum value
	LocaleTypePtBr = "pt_BR"

	// LocaleTypeDefault is a LocaleType enum value
	LocaleTypeDefault = "default"
)

const (
	// OrderTypeAscending is a OrderType enum value
	OrderTypeAscending = "ASCENDING"

	// OrderTypeDescending is a OrderType enum value
	OrderTypeDescending = "DESCENDING"
)

const (
	// PrincipalTypeUser is a PrincipalType enum value
	PrincipalTypeUser = "USER"

	// PrincipalTypeGroup is a PrincipalType enum value
	PrincipalTypeGroup = "GROUP"

	// PrincipalTypeInvite is a PrincipalType enum value
	PrincipalTypeInvite = "INVITE"

	// PrincipalTypeAnonymous is a PrincipalType enum value
	PrincipalTypeAnonymous = "ANONYMOUS"

	// PrincipalTypeOrganization is a PrincipalType enum value
	PrincipalTypeOrganization = "ORGANIZATION"
)

const (
	// ResourceSortTypeDate is a ResourceSortType enum value
	ResourceSortTypeDate = "DATE"

	// ResourceSortTypeName is a ResourceSortType enum value
	ResourceSortTypeName = "NAME"
)

const (
	// ResourceStateTypeActive is a ResourceStateType enum value
	ResourceStateTypeActive = "ACTIVE"

	// ResourceStateTypeRestoring is a ResourceStateType enum value
	ResourceStateTypeRestoring = "RESTORING"

	// ResourceStateTypeRecycling is a ResourceStateType enum value
	ResourceStateTypeRecycling = "RECYCLING"

	// ResourceStateTypeRecycled is a ResourceStateType enum value
	ResourceStateTypeRecycled = "RECYCLED"
)

const (
	// RolePermissionTypeDirect is a RolePermissionType enum value
	RolePermissionTypeDirect = "DIRECT"

	// RolePermissionTypeInherited is a RolePermissionType enum value
	RolePermissionTypeInherited = "INHERITED"
)

const (
	// RoleTypeViewer is a RoleType enum value
	RoleTypeViewer = "VIEWER"

	// RoleTypeContributor is a RoleType enum value
	RoleTypeContributor = "CONTRIBUTOR"

	// RoleTypeOwner is a RoleType enum value
	RoleTypeOwner = "OWNER"

	// RoleTypeCoowner is a RoleType enum value
	RoleTypeCoowner = "COOWNER"
)

const (
	// ShareStatusTypeSuccess is a ShareStatusType enum value
	ShareStatusTypeSuccess = "SUCCESS"

	// ShareStatusTypeFailure is a ShareStatusType enum value
	ShareStatusTypeFailure = "FAILURE"
)

const (
	// StorageTypeUnlimited is a StorageType enum value
	StorageTypeUnlimited = "UNLIMITED"

	// StorageTypeQuota is a StorageType enum value
	StorageTypeQuota = "QUOTA"
)

const (
	// SubscriptionProtocolTypeHttps is a SubscriptionProtocolType enum value
	SubscriptionProtocolTypeHttps = "HTTPS"
)

const (
	// SubscriptionTypeAll is a SubscriptionType enum value
	SubscriptionTypeAll = "ALL"
)

const (
	// UserFilterTypeAll is a UserFilterType enum value
	UserFilterTypeAll = "ALL"

	// UserFilterTypeActivePending is a UserFilterType enum value
	UserFilterTypeActivePending = "ACTIVE_PENDING"
)

const (
	// UserSortTypeUserName is a UserSortType enum value
	UserSortTypeUserName = "USER_NAME"

	// UserSortTypeFullName is a UserSortType enum value
	UserSortTypeFullName = "FULL_NAME"

	// UserSortTypeStorageLimit is a UserSortType enum value
	UserSortTypeStorageLimit = "STORAGE_LIMIT"

	// UserSortTypeUserStatus is a UserSortType enum value
	UserSortTypeUserStatus = "USER_STATUS"

	// UserSortTypeStorageUsed is a UserSortType enum value
	UserSortTypeStorageUsed = "STORAGE_USED"
)

const (
	// UserStatusTypeActive is a UserStatusType enum value
	UserStatusTypeActive = "ACTIVE"

	// UserStatusTypeInactive is a UserStatusType enum value
	UserStatusTypeInactive = "INACTIVE"

	// UserStatusTypePending is a UserStatusType enum value
	UserStatusTypePending = "PENDING"
)

const (
	// UserTypeUser is a UserType enum value
	UserTypeUser = "USER"

	// UserTypeAdmin is a UserType enum value
	UserTypeAdmin = "ADMIN"
)
