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

package keyspaces

import (
	"fmt"
	"time"

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

const opCreateKeyspace = "CreateKeyspace"

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

	if input == nil {
		input = &CreateKeyspaceInput{}
	}

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

// CreateKeyspace API operation for Amazon Keyspaces.
//
// The CreateKeyspace operation adds a new keyspace to your account. In an Amazon
// Web Services account, keyspace names must be unique within each Region.
//
// CreateKeyspace is an asynchronous operation. You can monitor the creation
// status of the new keyspace by using the GetKeyspace operation.
//
// For more information, see Creating keyspaces (https://docs.aws.amazon.com/keyspaces/latest/devguide/working-with-keyspaces.html#keyspaces-create)
// in the Amazon Keyspaces 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 Keyspaces's
// API operation CreateKeyspace for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - ConflictException
//     Amazon Keyspaces couldn't complete the requested action. This error may occur
//     if you try to perform an action and the same or a different action is already
//     in progress, or if you try to create a resource that already exists.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/CreateKeyspace
func (c *Keyspaces) CreateKeyspace(input *CreateKeyspaceInput) (*CreateKeyspaceOutput, error) {
	req, out := c.CreateKeyspaceRequest(input)
	return out, req.Send()
}

// CreateKeyspaceWithContext is the same as CreateKeyspace with the addition of
// the ability to pass a context and additional request options.
//
// See CreateKeyspace for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) CreateKeyspaceWithContext(ctx aws.Context, input *CreateKeyspaceInput, opts ...request.Option) (*CreateKeyspaceOutput, error) {
	req, out := c.CreateKeyspaceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opCreateTable = "CreateTable"

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

	if input == nil {
		input = &CreateTableInput{}
	}

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

// CreateTable API operation for Amazon Keyspaces.
//
// The CreateTable operation adds a new table to the specified keyspace. Within
// a keyspace, table names must be unique.
//
// CreateTable is an asynchronous operation. When the request is received, the
// status of the table is set to CREATING. You can monitor the creation status
// of the new table by using the GetTable operation, which returns the current
// status of the table. You can start using a table when the status is ACTIVE.
//
// For more information, see Creating tables (https://docs.aws.amazon.com/keyspaces/latest/devguide/working-with-tables.html#tables-create)
// in the Amazon Keyspaces 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 Keyspaces's
// API operation CreateTable for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - ConflictException
//     Amazon Keyspaces couldn't complete the requested action. This error may occur
//     if you try to perform an action and the same or a different action is already
//     in progress, or if you try to create a resource that already exists.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
//   - ResourceNotFoundException
//     The operation tried to access a keyspace or table that doesn't exist. The
//     resource might not be specified correctly, or its status might not be ACTIVE.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/CreateTable
func (c *Keyspaces) CreateTable(input *CreateTableInput) (*CreateTableOutput, error) {
	req, out := c.CreateTableRequest(input)
	return out, req.Send()
}

// CreateTableWithContext is the same as CreateTable with the addition of
// the ability to pass a context and additional request options.
//
// See CreateTable for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) CreateTableWithContext(ctx aws.Context, input *CreateTableInput, opts ...request.Option) (*CreateTableOutput, error) {
	req, out := c.CreateTableRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteKeyspace = "DeleteKeyspace"

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

	if input == nil {
		input = &DeleteKeyspaceInput{}
	}

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

// DeleteKeyspace API operation for Amazon Keyspaces.
//
// The DeleteKeyspace operation deletes a keyspace and all of its tables.
//
// 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 Keyspaces's
// API operation DeleteKeyspace for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - ConflictException
//     Amazon Keyspaces couldn't complete the requested action. This error may occur
//     if you try to perform an action and the same or a different action is already
//     in progress, or if you try to create a resource that already exists.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
//   - ResourceNotFoundException
//     The operation tried to access a keyspace or table that doesn't exist. The
//     resource might not be specified correctly, or its status might not be ACTIVE.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/DeleteKeyspace
func (c *Keyspaces) DeleteKeyspace(input *DeleteKeyspaceInput) (*DeleteKeyspaceOutput, error) {
	req, out := c.DeleteKeyspaceRequest(input)
	return out, req.Send()
}

// DeleteKeyspaceWithContext is the same as DeleteKeyspace with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteKeyspace for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) DeleteKeyspaceWithContext(ctx aws.Context, input *DeleteKeyspaceInput, opts ...request.Option) (*DeleteKeyspaceOutput, error) {
	req, out := c.DeleteKeyspaceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDeleteTable = "DeleteTable"

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

	if input == nil {
		input = &DeleteTableInput{}
	}

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

// DeleteTable API operation for Amazon Keyspaces.
//
// The DeleteTable operation deletes a table and all of its data. After a DeleteTable
// request is received, the specified table is in the DELETING state until Amazon
// Keyspaces completes the deletion. If the table is in the ACTIVE state, you
// can delete it. If a table is either in the CREATING or UPDATING states, then
// Amazon Keyspaces returns a ResourceInUseException. If the specified table
// does not exist, Amazon Keyspaces returns a ResourceNotFoundException. If
// the table is already in the DELETING state, no error is 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 Keyspaces's
// API operation DeleteTable for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - ConflictException
//     Amazon Keyspaces couldn't complete the requested action. This error may occur
//     if you try to perform an action and the same or a different action is already
//     in progress, or if you try to create a resource that already exists.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
//   - ResourceNotFoundException
//     The operation tried to access a keyspace or table that doesn't exist. The
//     resource might not be specified correctly, or its status might not be ACTIVE.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/DeleteTable
func (c *Keyspaces) DeleteTable(input *DeleteTableInput) (*DeleteTableOutput, error) {
	req, out := c.DeleteTableRequest(input)
	return out, req.Send()
}

// DeleteTableWithContext is the same as DeleteTable with the addition of
// the ability to pass a context and additional request options.
//
// See DeleteTable for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) DeleteTableWithContext(ctx aws.Context, input *DeleteTableInput, opts ...request.Option) (*DeleteTableOutput, error) {
	req, out := c.DeleteTableRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetKeyspace = "GetKeyspace"

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

	if input == nil {
		input = &GetKeyspaceInput{}
	}

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

// GetKeyspace API operation for Amazon Keyspaces.
//
// Returns the name and the Amazon Resource Name (ARN) of the specified table.
//
// 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 Keyspaces's
// API operation GetKeyspace for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
//   - ResourceNotFoundException
//     The operation tried to access a keyspace or table that doesn't exist. The
//     resource might not be specified correctly, or its status might not be ACTIVE.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/GetKeyspace
func (c *Keyspaces) GetKeyspace(input *GetKeyspaceInput) (*GetKeyspaceOutput, error) {
	req, out := c.GetKeyspaceRequest(input)
	return out, req.Send()
}

// GetKeyspaceWithContext is the same as GetKeyspace with the addition of
// the ability to pass a context and additional request options.
//
// See GetKeyspace for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) GetKeyspaceWithContext(ctx aws.Context, input *GetKeyspaceInput, opts ...request.Option) (*GetKeyspaceOutput, error) {
	req, out := c.GetKeyspaceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetTable = "GetTable"

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

	if input == nil {
		input = &GetTableInput{}
	}

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

// GetTable API operation for Amazon Keyspaces.
//
// Returns information about the table, including the table's name and current
// status, the keyspace name, configuration settings, and metadata.
//
// To read table metadata using GetTable, Select action permissions for the
// table and system tables are required to complete the operation.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Keyspaces's
// API operation GetTable for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
//   - ResourceNotFoundException
//     The operation tried to access a keyspace or table that doesn't exist. The
//     resource might not be specified correctly, or its status might not be ACTIVE.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/GetTable
func (c *Keyspaces) GetTable(input *GetTableInput) (*GetTableOutput, error) {
	req, out := c.GetTableRequest(input)
	return out, req.Send()
}

// GetTableWithContext is the same as GetTable with the addition of
// the ability to pass a context and additional request options.
//
// See GetTable for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) GetTableWithContext(ctx aws.Context, input *GetTableInput, opts ...request.Option) (*GetTableOutput, error) {
	req, out := c.GetTableRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGetTableAutoScalingSettings = "GetTableAutoScalingSettings"

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

	if input == nil {
		input = &GetTableAutoScalingSettingsInput{}
	}

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

// GetTableAutoScalingSettings API operation for Amazon Keyspaces.
//
// Returns auto scaling related settings of the specified table in JSON format.
// If the table is a multi-Region table, the Amazon Web Services Region specific
// auto scaling settings of the table are included.
//
// Amazon Keyspaces auto scaling helps you provision throughput capacity for
// variable workloads efficiently by increasing and decreasing your table's
// read and write capacity automatically in response to application traffic.
// For more information, see Managing throughput capacity automatically with
// Amazon Keyspaces auto scaling (https://docs.aws.amazon.com/keyspaces/latest/devguide/autoscaling.html)
// in the Amazon Keyspaces Developer Guide.
//
// GetTableAutoScalingSettings can't be used as an action in an IAM policy.
//
// To define permissions for GetTableAutoScalingSettings, you must allow the
// following two actions in the IAM policy statement's Action element:
//
//   - application-autoscaling:DescribeScalableTargets
//
//   - application-autoscaling:DescribeScalingPolicies
//
// 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 Keyspaces's
// API operation GetTableAutoScalingSettings for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
//   - ResourceNotFoundException
//     The operation tried to access a keyspace or table that doesn't exist. The
//     resource might not be specified correctly, or its status might not be ACTIVE.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/GetTableAutoScalingSettings
func (c *Keyspaces) GetTableAutoScalingSettings(input *GetTableAutoScalingSettingsInput) (*GetTableAutoScalingSettingsOutput, error) {
	req, out := c.GetTableAutoScalingSettingsRequest(input)
	return out, req.Send()
}

// GetTableAutoScalingSettingsWithContext is the same as GetTableAutoScalingSettings with the addition of
// the ability to pass a context and additional request options.
//
// See GetTableAutoScalingSettings for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) GetTableAutoScalingSettingsWithContext(ctx aws.Context, input *GetTableAutoScalingSettingsInput, opts ...request.Option) (*GetTableAutoScalingSettingsOutput, error) {
	req, out := c.GetTableAutoScalingSettingsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opListKeyspaces = "ListKeyspaces"

// ListKeyspacesRequest generates a "aws/request.Request" representing the
// client's request for the ListKeyspaces operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListKeyspaces for more information on using the ListKeyspaces
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ListKeyspacesRequest method.
//	req, resp := client.ListKeyspacesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/ListKeyspaces
func (c *Keyspaces) ListKeyspacesRequest(input *ListKeyspacesInput) (req *request.Request, output *ListKeyspacesOutput) {
	op := &request.Operation{
		Name:       opListKeyspaces,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListKeyspacesInput{}
	}

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

// ListKeyspaces API operation for Amazon Keyspaces.
//
// Returns a list of keyspaces.
//
// 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 Keyspaces's
// API operation ListKeyspaces for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
//   - ResourceNotFoundException
//     The operation tried to access a keyspace or table that doesn't exist. The
//     resource might not be specified correctly, or its status might not be ACTIVE.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/ListKeyspaces
func (c *Keyspaces) ListKeyspaces(input *ListKeyspacesInput) (*ListKeyspacesOutput, error) {
	req, out := c.ListKeyspacesRequest(input)
	return out, req.Send()
}

// ListKeyspacesWithContext is the same as ListKeyspaces with the addition of
// the ability to pass a context and additional request options.
//
// See ListKeyspaces for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) ListKeyspacesWithContext(ctx aws.Context, input *ListKeyspacesInput, opts ...request.Option) (*ListKeyspacesOutput, error) {
	req, out := c.ListKeyspacesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

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

// ListKeyspacesPagesWithContext same as ListKeyspacesPages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) ListKeyspacesPagesWithContext(ctx aws.Context, input *ListKeyspacesInput, fn func(*ListKeyspacesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListKeyspacesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListKeyspacesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListTables = "ListTables"

// ListTablesRequest generates a "aws/request.Request" representing the
// client's request for the ListTables operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ListTables for more information on using the ListTables
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ListTablesRequest method.
//	req, resp := client.ListTablesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/ListTables
func (c *Keyspaces) ListTablesRequest(input *ListTablesInput) (req *request.Request, output *ListTablesOutput) {
	op := &request.Operation{
		Name:       opListTables,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListTablesInput{}
	}

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

// ListTables API operation for Amazon Keyspaces.
//
// Returns a list of tables for a specified keyspace.
//
// 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 Keyspaces's
// API operation ListTables for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
//   - ResourceNotFoundException
//     The operation tried to access a keyspace or table that doesn't exist. The
//     resource might not be specified correctly, or its status might not be ACTIVE.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/ListTables
func (c *Keyspaces) ListTables(input *ListTablesInput) (*ListTablesOutput, error) {
	req, out := c.ListTablesRequest(input)
	return out, req.Send()
}

// ListTablesWithContext is the same as ListTables with the addition of
// the ability to pass a context and additional request options.
//
// See ListTables for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) ListTablesWithContext(ctx aws.Context, input *ListTablesInput, opts ...request.Option) (*ListTablesOutput, error) {
	req, out := c.ListTablesRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

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

// ListTablesPagesWithContext same as ListTablesPages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) ListTablesPagesWithContext(ctx aws.Context, input *ListTablesInput, fn func(*ListTablesOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListTablesInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListTablesRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opListTagsForResource = "ListTagsForResource"

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

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

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

// ListTagsForResource API operation for Amazon Keyspaces.
//
// Returns a list of all tags associated with the specified Amazon Keyspaces
// 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 Keyspaces's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
//   - ResourceNotFoundException
//     The operation tried to access a keyspace or table that doesn't exist. The
//     resource might not be specified correctly, or its status might not be ACTIVE.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/ListTagsForResource
func (c *Keyspaces) ListTagsForResource(input *ListTagsForResourceInput) (*ListTagsForResourceOutput, error) {
	req, out := c.ListTagsForResourceRequest(input)
	return out, req.Send()
}

// ListTagsForResourceWithContext is the same as ListTagsForResource with the addition of
// the ability to pass a context and additional request options.
//
// See ListTagsForResource for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) ListTagsForResourceWithContext(ctx aws.Context, input *ListTagsForResourceInput, opts ...request.Option) (*ListTagsForResourceOutput, error) {
	req, out := c.ListTagsForResourceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// ListTagsForResourcePages iterates over the pages of a ListTagsForResource operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See ListTagsForResource method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//	// Example iterating over at most 3 pages of a ListTagsForResource operation.
//	pageNum := 0
//	err := client.ListTagsForResourcePages(params,
//	    func(page *keyspaces.ListTagsForResourceOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *Keyspaces) ListTagsForResourcePages(input *ListTagsForResourceInput, fn func(*ListTagsForResourceOutput, bool) bool) error {
	return c.ListTagsForResourcePagesWithContext(aws.BackgroundContext(), input, fn)
}

// ListTagsForResourcePagesWithContext same as ListTagsForResourcePages except
// it takes a Context and allows setting request options on the pages.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) ListTagsForResourcePagesWithContext(ctx aws.Context, input *ListTagsForResourceInput, fn func(*ListTagsForResourceOutput, bool) bool, opts ...request.Option) error {
	p := request.Pagination{
		NewRequest: func() (*request.Request, error) {
			var inCpy *ListTagsForResourceInput
			if input != nil {
				tmp := *input
				inCpy = &tmp
			}
			req, _ := c.ListTagsForResourceRequest(inCpy)
			req.SetContext(ctx)
			req.ApplyOptions(opts...)
			return req, nil
		},
	}

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

	return p.Err()
}

const opRestoreTable = "RestoreTable"

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

	if input == nil {
		input = &RestoreTableInput{}
	}

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

// RestoreTable API operation for Amazon Keyspaces.
//
// Restores the table to the specified point in time within the earliest_restorable_timestamp
// and the current time. For more information about restore points, see Time
// window for PITR continuous backups (https://docs.aws.amazon.com/keyspaces/latest/devguide/PointInTimeRecovery_HowItWorks.html#howitworks_backup_window)
// in the Amazon Keyspaces Developer Guide.
//
// Any number of users can execute up to 4 concurrent restores (any type of
// restore) in a given account.
//
// When you restore using point in time recovery, Amazon Keyspaces restores
// your source table's schema and data to the state based on the selected timestamp
// (day:hour:minute:second) to a new table. The Time to Live (TTL) settings
// are also restored to the state based on the selected timestamp.
//
// In addition to the table's schema, data, and TTL settings, RestoreTable restores
// the capacity mode, auto scaling settings, encryption settings, and point-in-time
// recovery settings from the source table. Unlike the table's schema data and
// TTL settings, which are restored based on the selected timestamp, these settings
// are always restored based on the table's settings as of the current time
// or when the table was deleted.
//
// You can also overwrite these settings during restore:
//
//   - Read/write capacity mode
//
//   - Provisioned throughput capacity units
//
//   - Auto scaling settings
//
//   - Point-in-time (PITR) settings
//
//   - Tags
//
// For more information, see PITR restore settings (https://docs.aws.amazon.com/keyspaces/latest/devguide/PointInTimeRecovery_HowItWorks.html#howitworks_backup_settings)
// in the Amazon Keyspaces Developer Guide.
//
// Note that the following settings are not restored, and you must configure
// them manually for the new table:
//
//   - Identity and Access Management (IAM) policies
//
//   - Amazon CloudWatch metrics and alarms
//
// 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 Keyspaces's
// API operation RestoreTable for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - ConflictException
//     Amazon Keyspaces couldn't complete the requested action. This error may occur
//     if you try to perform an action and the same or a different action is already
//     in progress, or if you try to create a resource that already exists.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
//   - ResourceNotFoundException
//     The operation tried to access a keyspace or table that doesn't exist. The
//     resource might not be specified correctly, or its status might not be ACTIVE.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/RestoreTable
func (c *Keyspaces) RestoreTable(input *RestoreTableInput) (*RestoreTableOutput, error) {
	req, out := c.RestoreTableRequest(input)
	return out, req.Send()
}

// RestoreTableWithContext is the same as RestoreTable with the addition of
// the ability to pass a context and additional request options.
//
// See RestoreTable for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) RestoreTableWithContext(ctx aws.Context, input *RestoreTableInput, opts ...request.Option) (*RestoreTableOutput, error) {
	req, out := c.RestoreTableRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opTagResource = "TagResource"

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

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

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

// TagResource API operation for Amazon Keyspaces.
//
// Associates a set of tags with a Amazon Keyspaces resource. You can then activate
// these user-defined tags so that they appear on the Cost Management Console
// for cost allocation tracking. For more information, see Adding tags and labels
// to Amazon Keyspaces resources (https://docs.aws.amazon.com/keyspaces/latest/devguide/tagging-keyspaces.html)
// in the Amazon Keyspaces Developer Guide.
//
// For IAM policy examples that show how to control access to Amazon Keyspaces
// resources based on tags, see Amazon Keyspaces resource access based on tags
// (https://docs.aws.amazon.com/keyspaces/latest/devguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-tags)
// in the Amazon Keyspaces 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 Keyspaces's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
//   - ResourceNotFoundException
//     The operation tried to access a keyspace or table that doesn't exist. The
//     resource might not be specified correctly, or its status might not be ACTIVE.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/TagResource
func (c *Keyspaces) TagResource(input *TagResourceInput) (*TagResourceOutput, error) {
	req, out := c.TagResourceRequest(input)
	return out, req.Send()
}

// TagResourceWithContext is the same as TagResource with the addition of
// the ability to pass a context and additional request options.
//
// See TagResource for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) TagResourceWithContext(ctx aws.Context, input *TagResourceInput, opts ...request.Option) (*TagResourceOutput, error) {
	req, out := c.TagResourceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUntagResource = "UntagResource"

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

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

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

// UntagResource API operation for Amazon Keyspaces.
//
// Removes the association of tags from a Amazon Keyspaces 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 Keyspaces's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - ConflictException
//     Amazon Keyspaces couldn't complete the requested action. This error may occur
//     if you try to perform an action and the same or a different action is already
//     in progress, or if you try to create a resource that already exists.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
//   - ResourceNotFoundException
//     The operation tried to access a keyspace or table that doesn't exist. The
//     resource might not be specified correctly, or its status might not be ACTIVE.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/UntagResource
func (c *Keyspaces) UntagResource(input *UntagResourceInput) (*UntagResourceOutput, error) {
	req, out := c.UntagResourceRequest(input)
	return out, req.Send()
}

// UntagResourceWithContext is the same as UntagResource with the addition of
// the ability to pass a context and additional request options.
//
// See UntagResource for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) UntagResourceWithContext(ctx aws.Context, input *UntagResourceInput, opts ...request.Option) (*UntagResourceOutput, error) {
	req, out := c.UntagResourceRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opUpdateTable = "UpdateTable"

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

	if input == nil {
		input = &UpdateTableInput{}
	}

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

// UpdateTable API operation for Amazon Keyspaces.
//
// Adds new columns to the table or updates one of the table's settings, for
// example capacity mode, auto scaling, encryption, point-in-time recovery,
// or ttl settings. Note that you can only update one specific table setting
// per update operation.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Keyspaces's
// API operation UpdateTable for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The operation failed due to an invalid or malformed request.
//
//   - ServiceQuotaExceededException
//     The operation exceeded the service quota for this resource. For more information
//     on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
//     in the Amazon Keyspaces Developer Guide.
//
//   - InternalServerException
//     Amazon Keyspaces was unable to fully process this request because of an internal
//     server error.
//
//   - ConflictException
//     Amazon Keyspaces couldn't complete the requested action. This error may occur
//     if you try to perform an action and the same or a different action is already
//     in progress, or if you try to create a resource that already exists.
//
//   - AccessDeniedException
//     You don't have sufficient access permissions to perform this action.
//
//   - ResourceNotFoundException
//     The operation tried to access a keyspace or table that doesn't exist. The
//     resource might not be specified correctly, or its status might not be ACTIVE.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/keyspaces-2022-02-10/UpdateTable
func (c *Keyspaces) UpdateTable(input *UpdateTableInput) (*UpdateTableOutput, error) {
	req, out := c.UpdateTableRequest(input)
	return out, req.Send()
}

// UpdateTableWithContext is the same as UpdateTable with the addition of
// the ability to pass a context and additional request options.
//
// See UpdateTable for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *Keyspaces) UpdateTableWithContext(ctx aws.Context, input *UpdateTableInput, opts ...request.Option) (*UpdateTableOutput, error) {
	req, out := c.UpdateTableRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// You don't have sufficient access permissions to perform this action.
type AccessDeniedException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// Description of the error.
	Message_ *string `locationName:"message" type:"string"`
}

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

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

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

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

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

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

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

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

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

// Amazon Keyspaces supports the target tracking auto scaling policy. With this
// policy, Amazon Keyspaces auto scaling ensures that the table's ratio of consumed
// to provisioned capacity stays at or near the target value that you specify.
// You define the target value as a percentage between 20 and 90.
type AutoScalingPolicy struct {
	_ struct{} `type:"structure"`

	// Auto scaling scales up capacity automatically when traffic exceeds this target
	// utilization rate, and then back down when it falls below the target. A double
	// between 20 and 90.
	TargetTrackingScalingPolicyConfiguration *TargetTrackingScalingPolicyConfiguration `locationName:"targetTrackingScalingPolicyConfiguration" type:"structure"`
}

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

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

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

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

// SetTargetTrackingScalingPolicyConfiguration sets the TargetTrackingScalingPolicyConfiguration field's value.
func (s *AutoScalingPolicy) SetTargetTrackingScalingPolicyConfiguration(v *TargetTrackingScalingPolicyConfiguration) *AutoScalingPolicy {
	s.TargetTrackingScalingPolicyConfiguration = v
	return s
}

// The optional auto scaling settings for a table with provisioned throughput
// capacity.
//
// To turn on auto scaling for a table in throughputMode:PROVISIONED, you must
// specify the following parameters.
//
// Configure the minimum and maximum capacity units. The auto scaling policy
// ensures that capacity never goes below the minimum or above the maximum range.
//
//   - minimumUnits: The minimum level of throughput the table should always
//     be ready to support. The value must be between 1 and the max throughput
//     per second quota for your account (40,000 by default).
//
//   - maximumUnits: The maximum level of throughput the table should always
//     be ready to support. The value must be between 1 and the max throughput
//     per second quota for your account (40,000 by default).
//
//   - scalingPolicy: Amazon Keyspaces supports the target tracking scaling
//     policy. The auto scaling target is the provisioned capacity of the table.
//     targetTrackingScalingPolicyConfiguration: To define the target tracking
//     policy, you must define the target value. targetValue: The target utilization
//     rate of the table. Amazon Keyspaces auto scaling ensures that the ratio
//     of consumed capacity to provisioned capacity stays at or near this value.
//     You define targetValue as a percentage. A double between 20 and 90. (Required)
//     disableScaleIn: A boolean that specifies if scale-in is disabled or enabled
//     for the table. This parameter is disabled by default. To turn on scale-in,
//     set the boolean value to FALSE. This means that capacity for a table can
//     be automatically scaled down on your behalf. (Optional) scaleInCooldown:
//     A cooldown period in seconds between scaling activities that lets the
//     table stabilize before another scale in activity starts. If no value is
//     provided, the default is 0. (Optional) scaleOutCooldown: A cooldown period
//     in seconds between scaling activities that lets the table stabilize before
//     another scale out activity starts. If no value is provided, the default
//     is 0. (Optional)
//
// For more information, see Managing throughput capacity automatically with
// Amazon Keyspaces auto scaling (https://docs.aws.amazon.com/keyspaces/latest/devguide/autoscaling.html)
// in the Amazon Keyspaces Developer Guide.
type AutoScalingSettings struct {
	_ struct{} `type:"structure"`

	// This optional parameter enables auto scaling for the table if set to false.
	AutoScalingDisabled *bool `locationName:"autoScalingDisabled" type:"boolean"`

	// Manage costs by specifying the maximum amount of throughput to provision.
	// The value must be between 1 and the max throughput per second quota for your
	// account (40,000 by default).
	MaximumUnits *int64 `locationName:"maximumUnits" min:"1" type:"long"`

	// The minimum level of throughput the table should always be ready to support.
	// The value must be between 1 and the max throughput per second quota for your
	// account (40,000 by default).
	MinimumUnits *int64 `locationName:"minimumUnits" min:"1" type:"long"`

	// Amazon Keyspaces supports the target tracking auto scaling policy. With this
	// policy, Amazon Keyspaces auto scaling ensures that the table's ratio of consumed
	// to provisioned capacity stays at or near the target value that you specify.
	// You define the target value as a percentage between 20 and 90.
	ScalingPolicy *AutoScalingPolicy `locationName:"scalingPolicy" type:"structure"`
}

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

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

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

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

// SetAutoScalingDisabled sets the AutoScalingDisabled field's value.
func (s *AutoScalingSettings) SetAutoScalingDisabled(v bool) *AutoScalingSettings {
	s.AutoScalingDisabled = &v
	return s
}

// SetMaximumUnits sets the MaximumUnits field's value.
func (s *AutoScalingSettings) SetMaximumUnits(v int64) *AutoScalingSettings {
	s.MaximumUnits = &v
	return s
}

// SetMinimumUnits sets the MinimumUnits field's value.
func (s *AutoScalingSettings) SetMinimumUnits(v int64) *AutoScalingSettings {
	s.MinimumUnits = &v
	return s
}

// SetScalingPolicy sets the ScalingPolicy field's value.
func (s *AutoScalingSettings) SetScalingPolicy(v *AutoScalingPolicy) *AutoScalingSettings {
	s.ScalingPolicy = v
	return s
}

// The optional auto scaling capacity settings for a table in provisioned capacity
// mode.
type AutoScalingSpecification struct {
	_ struct{} `type:"structure"`

	// The auto scaling settings for the table's read capacity.
	ReadCapacityAutoScaling *AutoScalingSettings `locationName:"readCapacityAutoScaling" type:"structure"`

	// The auto scaling settings for the table's write capacity.
	WriteCapacityAutoScaling *AutoScalingSettings `locationName:"writeCapacityAutoScaling" type:"structure"`
}

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

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

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

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

// SetReadCapacityAutoScaling sets the ReadCapacityAutoScaling field's value.
func (s *AutoScalingSpecification) SetReadCapacityAutoScaling(v *AutoScalingSettings) *AutoScalingSpecification {
	s.ReadCapacityAutoScaling = v
	return s
}

// SetWriteCapacityAutoScaling sets the WriteCapacityAutoScaling field's value.
func (s *AutoScalingSpecification) SetWriteCapacityAutoScaling(v *AutoScalingSettings) *AutoScalingSpecification {
	s.WriteCapacityAutoScaling = v
	return s
}

// Amazon Keyspaces has two read/write capacity modes for processing reads and
// writes on your tables:
//
//   - On-demand (default)
//
//   - Provisioned
//
// The read/write capacity mode that you choose controls how you are charged
// for read and write throughput and how table throughput capacity is managed.
//
// For more information, see Read/write capacity modes (https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html)
// in the Amazon Keyspaces Developer Guide.
type CapacitySpecification struct {
	_ struct{} `type:"structure"`

	// The throughput capacity specified for read operations defined in read capacity
	// units (RCUs).
	ReadCapacityUnits *int64 `locationName:"readCapacityUnits" min:"1" type:"long"`

	// The read/write throughput capacity mode for a table. The options are:
	//
	//    * throughputMode:PAY_PER_REQUEST and
	//
	//    * throughputMode:PROVISIONED - Provisioned capacity mode requires readCapacityUnits
	//    and writeCapacityUnits as input.
	//
	// The default is throughput_mode:PAY_PER_REQUEST.
	//
	// For more information, see Read/write capacity modes (https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html)
	// in the Amazon Keyspaces Developer Guide.
	//
	// ThroughputMode is a required field
	ThroughputMode *string `locationName:"throughputMode" type:"string" required:"true" enum:"ThroughputMode"`

	// The throughput capacity specified for write operations defined in write capacity
	// units (WCUs).
	WriteCapacityUnits *int64 `locationName:"writeCapacityUnits" min:"1" type:"long"`
}

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

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

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

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

// SetReadCapacityUnits sets the ReadCapacityUnits field's value.
func (s *CapacitySpecification) SetReadCapacityUnits(v int64) *CapacitySpecification {
	s.ReadCapacityUnits = &v
	return s
}

// SetThroughputMode sets the ThroughputMode field's value.
func (s *CapacitySpecification) SetThroughputMode(v string) *CapacitySpecification {
	s.ThroughputMode = &v
	return s
}

// SetWriteCapacityUnits sets the WriteCapacityUnits field's value.
func (s *CapacitySpecification) SetWriteCapacityUnits(v int64) *CapacitySpecification {
	s.WriteCapacityUnits = &v
	return s
}

// The read/write throughput capacity mode for a table. The options are:
//
//   - throughputMode:PAY_PER_REQUEST and
//
//   - throughputMode:PROVISIONED.
//
// For more information, see Read/write capacity modes (https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html)
// in the Amazon Keyspaces Developer Guide.
type CapacitySpecificationSummary struct {
	_ struct{} `type:"structure"`

	// The timestamp of the last operation that changed the provisioned throughput
	// capacity of a table.
	LastUpdateToPayPerRequestTimestamp *time.Time `locationName:"lastUpdateToPayPerRequestTimestamp" type:"timestamp"`

	// The throughput capacity specified for read operations defined in read capacity
	// units (RCUs).
	ReadCapacityUnits *int64 `locationName:"readCapacityUnits" min:"1" type:"long"`

	// The read/write throughput capacity mode for a table. The options are:
	//
	//    * throughputMode:PAY_PER_REQUEST and
	//
	//    * throughputMode:PROVISIONED - Provisioned capacity mode requires readCapacityUnits
	//    and writeCapacityUnits as input.
	//
	// The default is throughput_mode:PAY_PER_REQUEST.
	//
	// For more information, see Read/write capacity modes (https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html)
	// in the Amazon Keyspaces Developer Guide.
	//
	// ThroughputMode is a required field
	ThroughputMode *string `locationName:"throughputMode" type:"string" required:"true" enum:"ThroughputMode"`

	// The throughput capacity specified for write operations defined in write capacity
	// units (WCUs).
	WriteCapacityUnits *int64 `locationName:"writeCapacityUnits" min:"1" type:"long"`
}

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

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

// SetLastUpdateToPayPerRequestTimestamp sets the LastUpdateToPayPerRequestTimestamp field's value.
func (s *CapacitySpecificationSummary) SetLastUpdateToPayPerRequestTimestamp(v time.Time) *CapacitySpecificationSummary {
	s.LastUpdateToPayPerRequestTimestamp = &v
	return s
}

// SetReadCapacityUnits sets the ReadCapacityUnits field's value.
func (s *CapacitySpecificationSummary) SetReadCapacityUnits(v int64) *CapacitySpecificationSummary {
	s.ReadCapacityUnits = &v
	return s
}

// SetThroughputMode sets the ThroughputMode field's value.
func (s *CapacitySpecificationSummary) SetThroughputMode(v string) *CapacitySpecificationSummary {
	s.ThroughputMode = &v
	return s
}

// SetWriteCapacityUnits sets the WriteCapacityUnits field's value.
func (s *CapacitySpecificationSummary) SetWriteCapacityUnits(v int64) *CapacitySpecificationSummary {
	s.WriteCapacityUnits = &v
	return s
}

// The client-side timestamp setting of the table.
//
// For more information, see How it works: Amazon Keyspaces client-side timestamps
// (https://docs.aws.amazon.com/keyspaces/latest/devguide/client-side-timestamps-how-it-works.html)
// in the Amazon Keyspaces Developer Guide.
type ClientSideTimestamps struct {
	_ struct{} `type:"structure"`

	// Shows how to enable client-side timestamps settings for the specified table.
	//
	// Status is a required field
	Status *string `locationName:"status" type:"string" required:"true" enum:"ClientSideTimestampsStatus"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ClientSideTimestamps) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ClientSideTimestamps"}
	if s.Status == nil {
		invalidParams.Add(request.NewErrParamRequired("Status"))
	}

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

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

// The optional clustering column portion of your primary key determines how
// the data is clustered and sorted within each partition.
type ClusteringKey struct {
	_ struct{} `type:"structure"`

	// The name(s) of the clustering column(s).
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`

	// Sets the ascendant (ASC) or descendant (DESC) order modifier.
	//
	// OrderBy is a required field
	OrderBy *string `locationName:"orderBy" type:"string" required:"true" enum:"SortOrder"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ClusteringKey) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ClusteringKey"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.OrderBy == nil {
		invalidParams.Add(request.NewErrParamRequired("OrderBy"))
	}

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

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

// SetOrderBy sets the OrderBy field's value.
func (s *ClusteringKey) SetOrderBy(v string) *ClusteringKey {
	s.OrderBy = &v
	return s
}

// The names and data types of regular columns.
type ColumnDefinition struct {
	_ struct{} `type:"structure"`

	// The name of the column.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`

	// The data type of the column. For a list of available data types, see Data
	// types (https://docs.aws.amazon.com/keyspaces/latest/devguide/cql.elements.html#cql.data-types)
	// in the Amazon Keyspaces Developer Guide.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ColumnDefinition) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ColumnDefinition"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}

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

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

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

// An optional comment that describes the table.
type Comment struct {
	_ struct{} `type:"structure"`

	// An optional description of the table.
	//
	// Message is a required field
	Message *string `locationName:"message" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *Comment) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Comment"}
	if s.Message == nil {
		invalidParams.Add(request.NewErrParamRequired("Message"))
	}

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

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

// Amazon Keyspaces couldn't complete the requested action. This error may occur
// if you try to perform an action and the same or a different action is already
// in progress, or if you try to create a resource that already exists.
type ConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// Description of the error.
	Message_ *string `locationName:"message" type:"string"`
}

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

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

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

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

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

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

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

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

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

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

	// The name of the keyspace to be created.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`

	// The replication specification of the keyspace includes:
	//
	//    * replicationStrategy - the required value is SINGLE_REGION or MULTI_REGION.
	//
	//    * regionList - if the replicationStrategy is MULTI_REGION, the regionList
	//    requires the current Region and at least one additional Amazon Web Services
	//    Region where the keyspace is going to be replicated in. The maximum number
	//    of supported replication Regions including the current Region is six.
	ReplicationSpecification *ReplicationSpecification `locationName:"replicationSpecification" type:"structure"`

	// A list of key-value pair tags to be attached to the keyspace.
	//
	// For more information, see Adding tags and labels to Amazon Keyspaces resources
	// (https://docs.aws.amazon.com/keyspaces/latest/devguide/tagging-keyspaces.html)
	// in the Amazon Keyspaces Developer Guide.
	Tags []*Tag `locationName:"tags" min:"1" type:"list"`
}

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

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

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

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

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *CreateKeyspaceInput) SetKeyspaceName(v string) *CreateKeyspaceInput {
	s.KeyspaceName = &v
	return s
}

// SetReplicationSpecification sets the ReplicationSpecification field's value.
func (s *CreateKeyspaceInput) SetReplicationSpecification(v *ReplicationSpecification) *CreateKeyspaceInput {
	s.ReplicationSpecification = v
	return s
}

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

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

	// The unique identifier of the keyspace in the format of an Amazon Resource
	// Name (ARN).
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" min:"20" type:"string" required:"true"`
}

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

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

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

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

	// The optional auto scaling settings for a table in provisioned capacity mode.
	// Specifies if the service can manage throughput capacity automatically on
	// your behalf.
	//
	// Auto scaling helps you provision throughput capacity for variable workloads
	// efficiently by increasing and decreasing your table's read and write capacity
	// automatically in response to application traffic. For more information, see
	// Managing throughput capacity automatically with Amazon Keyspaces auto scaling
	// (https://docs.aws.amazon.com/keyspaces/latest/devguide/autoscaling.html)
	// in the Amazon Keyspaces Developer Guide.
	//
	// By default, auto scaling is disabled for a table.
	AutoScalingSpecification *AutoScalingSpecification `locationName:"autoScalingSpecification" type:"structure"`

	// Specifies the read/write throughput capacity mode for the table. The options
	// are:
	//
	//    * throughputMode:PAY_PER_REQUEST and
	//
	//    * throughputMode:PROVISIONED - Provisioned capacity mode requires readCapacityUnits
	//    and writeCapacityUnits as input.
	//
	// The default is throughput_mode:PAY_PER_REQUEST.
	//
	// For more information, see Read/write capacity modes (https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html)
	// in the Amazon Keyspaces Developer Guide.
	CapacitySpecification *CapacitySpecification `locationName:"capacitySpecification" type:"structure"`

	// Enables client-side timestamps for the table. By default, the setting is
	// disabled. You can enable client-side timestamps with the following option:
	//
	//    * status: "enabled"
	//
	// Once client-side timestamps are enabled for a table, this setting cannot
	// be disabled.
	ClientSideTimestamps *ClientSideTimestamps `locationName:"clientSideTimestamps" type:"structure"`

	// This parameter allows to enter a description of the table.
	Comment *Comment `locationName:"comment" type:"structure"`

	// The default Time to Live setting in seconds for the table.
	//
	// For more information, see Setting the default TTL value for a table (https://docs.aws.amazon.com/keyspaces/latest/devguide/TTL-how-it-works.html#ttl-howitworks_default_ttl)
	// in the Amazon Keyspaces Developer Guide.
	DefaultTimeToLive *int64 `locationName:"defaultTimeToLive" type:"integer"`

	// Specifies how the encryption key for encryption at rest is managed for the
	// table. You can choose one of the following KMS key (KMS key):
	//
	//    * type:AWS_OWNED_KMS_KEY - This key is owned by Amazon Keyspaces.
	//
	//    * type:CUSTOMER_MANAGED_KMS_KEY - This key is stored in your account and
	//    is created, owned, and managed by you. This option requires the kms_key_identifier
	//    of the KMS key in Amazon Resource Name (ARN) format as input.
	//
	// The default is type:AWS_OWNED_KMS_KEY.
	//
	// For more information, see Encryption at rest (https://docs.aws.amazon.com/keyspaces/latest/devguide/EncryptionAtRest.html)
	// in the Amazon Keyspaces Developer Guide.
	EncryptionSpecification *EncryptionSpecification `locationName:"encryptionSpecification" type:"structure"`

	// The name of the keyspace that the table is going to be created in.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`

	// Specifies if pointInTimeRecovery is enabled or disabled for the table. The
	// options are:
	//
	//    * status=ENABLED
	//
	//    * status=DISABLED
	//
	// If it's not specified, the default is status=DISABLED.
	//
	// For more information, see Point-in-time recovery (https://docs.aws.amazon.com/keyspaces/latest/devguide/PointInTimeRecovery.html)
	// in the Amazon Keyspaces Developer Guide.
	PointInTimeRecovery *PointInTimeRecovery `locationName:"pointInTimeRecovery" type:"structure"`

	// The optional Amazon Web Services Region specific settings of a multi-Region
	// table. These settings overwrite the general settings of the table for the
	// specified Region.
	//
	// For a multi-Region table in provisioned capacity mode, you can configure
	// the table's read capacity differently for each Region's replica. The write
	// capacity, however, remains synchronized between all replicas to ensure that
	// there's enough capacity to replicate writes across all Regions. To define
	// the read capacity for a table replica in a specific Region, you can do so
	// by configuring the following parameters.
	//
	//    * region: The Region where these settings are applied. (Required)
	//
	//    * readCapacityUnits: The provisioned read capacity units. (Optional)
	//
	//    * readCapacityAutoScaling: The read capacity auto scaling settings for
	//    the table. (Optional)
	ReplicaSpecifications []*ReplicaSpecification `locationName:"replicaSpecifications" min:"1" type:"list"`

	// The schemaDefinition consists of the following parameters.
	//
	// For each column to be created:
	//
	//    * name - The name of the column.
	//
	//    * type - An Amazon Keyspaces data type. For more information, see Data
	//    types (https://docs.aws.amazon.com/keyspaces/latest/devguide/cql.elements.html#cql.data-types)
	//    in the Amazon Keyspaces Developer Guide.
	//
	// The primary key of the table consists of the following columns:
	//
	//    * partitionKeys - The partition key can be a single column, or it can
	//    be a compound value composed of two or more columns. The partition key
	//    portion of the primary key is required and determines how Amazon Keyspaces
	//    stores your data.
	//
	//    * name - The name of each partition key column.
	//
	//    * clusteringKeys - The optional clustering column portion of your primary
	//    key determines how the data is clustered and sorted within each partition.
	//
	//    * name - The name of the clustering column.
	//
	//    * orderBy - Sets the ascendant (ASC) or descendant (DESC) order modifier.
	//    To define a column as static use staticColumns - Static columns store
	//    values that are shared by all rows in the same partition:
	//
	//    * name - The name of the column.
	//
	//    * type - An Amazon Keyspaces data type.
	//
	// SchemaDefinition is a required field
	SchemaDefinition *SchemaDefinition `locationName:"schemaDefinition" type:"structure" required:"true"`

	// The name of the table.
	//
	// TableName is a required field
	TableName *string `locationName:"tableName" min:"1" type:"string" required:"true"`

	// A list of key-value pair tags to be attached to the resource.
	//
	// For more information, see Adding tags and labels to Amazon Keyspaces resources
	// (https://docs.aws.amazon.com/keyspaces/latest/devguide/tagging-keyspaces.html)
	// in the Amazon Keyspaces Developer Guide.
	Tags []*Tag `locationName:"tags" min:"1" type:"list"`

	// Enables Time to Live custom settings for the table. The options are:
	//
	//    * status:enabled
	//
	//    * status:disabled
	//
	// The default is status:disabled. After ttl is enabled, you can't disable it
	// for the table.
	//
	// For more information, see Expiring data by using Amazon Keyspaces Time to
	// Live (TTL) (https://docs.aws.amazon.com/keyspaces/latest/devguide/TTL.html)
	// in the Amazon Keyspaces Developer Guide.
	Ttl *TimeToLive `locationName:"ttl" type:"structure"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateTableInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateTableInput"}
	if s.KeyspaceName == nil {
		invalidParams.Add(request.NewErrParamRequired("KeyspaceName"))
	}
	if s.KeyspaceName != nil && len(*s.KeyspaceName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("KeyspaceName", 1))
	}
	if s.ReplicaSpecifications != nil && len(s.ReplicaSpecifications) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ReplicaSpecifications", 1))
	}
	if s.SchemaDefinition == nil {
		invalidParams.Add(request.NewErrParamRequired("SchemaDefinition"))
	}
	if s.TableName == nil {
		invalidParams.Add(request.NewErrParamRequired("TableName"))
	}
	if s.TableName != nil && len(*s.TableName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TableName", 1))
	}
	if s.Tags != nil && len(s.Tags) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Tags", 1))
	}
	if s.AutoScalingSpecification != nil {
		if err := s.AutoScalingSpecification.Validate(); err != nil {
			invalidParams.AddNested("AutoScalingSpecification", err.(request.ErrInvalidParams))
		}
	}
	if s.CapacitySpecification != nil {
		if err := s.CapacitySpecification.Validate(); err != nil {
			invalidParams.AddNested("CapacitySpecification", err.(request.ErrInvalidParams))
		}
	}
	if s.ClientSideTimestamps != nil {
		if err := s.ClientSideTimestamps.Validate(); err != nil {
			invalidParams.AddNested("ClientSideTimestamps", err.(request.ErrInvalidParams))
		}
	}
	if s.Comment != nil {
		if err := s.Comment.Validate(); err != nil {
			invalidParams.AddNested("Comment", err.(request.ErrInvalidParams))
		}
	}
	if s.EncryptionSpecification != nil {
		if err := s.EncryptionSpecification.Validate(); err != nil {
			invalidParams.AddNested("EncryptionSpecification", err.(request.ErrInvalidParams))
		}
	}
	if s.PointInTimeRecovery != nil {
		if err := s.PointInTimeRecovery.Validate(); err != nil {
			invalidParams.AddNested("PointInTimeRecovery", err.(request.ErrInvalidParams))
		}
	}
	if s.ReplicaSpecifications != nil {
		for i, v := range s.ReplicaSpecifications {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ReplicaSpecifications", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.SchemaDefinition != nil {
		if err := s.SchemaDefinition.Validate(); err != nil {
			invalidParams.AddNested("SchemaDefinition", err.(request.ErrInvalidParams))
		}
	}
	if s.Tags != nil {
		for i, v := range s.Tags {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Ttl != nil {
		if err := s.Ttl.Validate(); err != nil {
			invalidParams.AddNested("Ttl", err.(request.ErrInvalidParams))
		}
	}

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

// SetAutoScalingSpecification sets the AutoScalingSpecification field's value.
func (s *CreateTableInput) SetAutoScalingSpecification(v *AutoScalingSpecification) *CreateTableInput {
	s.AutoScalingSpecification = v
	return s
}

// SetCapacitySpecification sets the CapacitySpecification field's value.
func (s *CreateTableInput) SetCapacitySpecification(v *CapacitySpecification) *CreateTableInput {
	s.CapacitySpecification = v
	return s
}

// SetClientSideTimestamps sets the ClientSideTimestamps field's value.
func (s *CreateTableInput) SetClientSideTimestamps(v *ClientSideTimestamps) *CreateTableInput {
	s.ClientSideTimestamps = v
	return s
}

// SetComment sets the Comment field's value.
func (s *CreateTableInput) SetComment(v *Comment) *CreateTableInput {
	s.Comment = v
	return s
}

// SetDefaultTimeToLive sets the DefaultTimeToLive field's value.
func (s *CreateTableInput) SetDefaultTimeToLive(v int64) *CreateTableInput {
	s.DefaultTimeToLive = &v
	return s
}

// SetEncryptionSpecification sets the EncryptionSpecification field's value.
func (s *CreateTableInput) SetEncryptionSpecification(v *EncryptionSpecification) *CreateTableInput {
	s.EncryptionSpecification = v
	return s
}

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *CreateTableInput) SetKeyspaceName(v string) *CreateTableInput {
	s.KeyspaceName = &v
	return s
}

// SetPointInTimeRecovery sets the PointInTimeRecovery field's value.
func (s *CreateTableInput) SetPointInTimeRecovery(v *PointInTimeRecovery) *CreateTableInput {
	s.PointInTimeRecovery = v
	return s
}

// SetReplicaSpecifications sets the ReplicaSpecifications field's value.
func (s *CreateTableInput) SetReplicaSpecifications(v []*ReplicaSpecification) *CreateTableInput {
	s.ReplicaSpecifications = v
	return s
}

// SetSchemaDefinition sets the SchemaDefinition field's value.
func (s *CreateTableInput) SetSchemaDefinition(v *SchemaDefinition) *CreateTableInput {
	s.SchemaDefinition = v
	return s
}

// SetTableName sets the TableName field's value.
func (s *CreateTableInput) SetTableName(v string) *CreateTableInput {
	s.TableName = &v
	return s
}

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

// SetTtl sets the Ttl field's value.
func (s *CreateTableInput) SetTtl(v *TimeToLive) *CreateTableInput {
	s.Ttl = v
	return s
}

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

	// The unique identifier of the table in the format of an Amazon Resource Name
	// (ARN).
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" min:"20" type:"string" required:"true"`
}

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

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

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

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

	// The name of the keyspace to be deleted.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *DeleteKeyspaceInput) SetKeyspaceName(v string) *DeleteKeyspaceInput {
	s.KeyspaceName = &v
	return s
}

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

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

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

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

	// The name of the keyspace of the to be deleted table.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`

	// The name of the table to be deleted.
	//
	// TableName is a required field
	TableName *string `locationName:"tableName" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *DeleteTableInput) SetKeyspaceName(v string) *DeleteTableInput {
	s.KeyspaceName = &v
	return s
}

// SetTableName sets the TableName field's value.
func (s *DeleteTableInput) SetTableName(v string) *DeleteTableInput {
	s.TableName = &v
	return s
}

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

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

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

// Amazon Keyspaces encrypts and decrypts the table data at rest transparently
// and integrates with Key Management Service for storing and managing the encryption
// key. You can choose one of the following KMS keys (KMS keys):
//
//   - Amazon Web Services owned key - This is the default encryption type.
//     The key is owned by Amazon Keyspaces (no additional charge).
//
//   - Customer managed key - This key is stored in your account and is created,
//     owned, and managed by you. You have full control over the customer managed
//     key (KMS charges apply).
//
// For more information about encryption at rest in Amazon Keyspaces, see Encryption
// at rest (https://docs.aws.amazon.com/keyspaces/latest/devguide/EncryptionAtRest.html)
// in the Amazon Keyspaces Developer Guide.
//
// For more information about KMS, see KMS management service concepts (https://docs.aws.amazon.com/keyspaces/latest/devguide/EncryptionAtRest.html)
// in the Key Management Service Developer Guide.
type EncryptionSpecification struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the customer managed KMS key, for example
	// kms_key_identifier:ARN.
	KmsKeyIdentifier *string `locationName:"kmsKeyIdentifier" min:"1" type:"string"`

	// The encryption option specified for the table. You can choose one of the
	// following KMS keys (KMS keys):
	//
	//    * type:AWS_OWNED_KMS_KEY - This key is owned by Amazon Keyspaces.
	//
	//    * type:CUSTOMER_MANAGED_KMS_KEY - This key is stored in your account and
	//    is created, owned, and managed by you. This option requires the kms_key_identifier
	//    of the KMS key in Amazon Resource Name (ARN) format as input.
	//
	// The default is type:AWS_OWNED_KMS_KEY.
	//
	// For more information, see Encryption at rest (https://docs.aws.amazon.com/keyspaces/latest/devguide/EncryptionAtRest.html)
	// in the Amazon Keyspaces Developer Guide.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true" enum:"EncryptionType"`
}

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

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

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

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

// SetKmsKeyIdentifier sets the KmsKeyIdentifier field's value.
func (s *EncryptionSpecification) SetKmsKeyIdentifier(v string) *EncryptionSpecification {
	s.KmsKeyIdentifier = &v
	return s
}

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

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

	// The name of the keyspace.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *GetKeyspaceInput) SetKeyspaceName(v string) *GetKeyspaceInput {
	s.KeyspaceName = &v
	return s
}

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

	// The name of the keyspace.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`

	// If the replicationStrategy of the keyspace is MULTI_REGION, a list of replication
	// Regions is returned.
	ReplicationRegions []*string `locationName:"replicationRegions" min:"2" type:"list"`

	// Returns the replication strategy of the keyspace. The options are SINGLE_REGION
	// or MULTI_REGION.
	//
	// ReplicationStrategy is a required field
	ReplicationStrategy *string `locationName:"replicationStrategy" min:"1" type:"string" required:"true" enum:"Rs"`

	// Returns the ARN of the keyspace.
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" min:"20" type:"string" required:"true"`
}

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

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

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *GetKeyspaceOutput) SetKeyspaceName(v string) *GetKeyspaceOutput {
	s.KeyspaceName = &v
	return s
}

// SetReplicationRegions sets the ReplicationRegions field's value.
func (s *GetKeyspaceOutput) SetReplicationRegions(v []*string) *GetKeyspaceOutput {
	s.ReplicationRegions = v
	return s
}

// SetReplicationStrategy sets the ReplicationStrategy field's value.
func (s *GetKeyspaceOutput) SetReplicationStrategy(v string) *GetKeyspaceOutput {
	s.ReplicationStrategy = &v
	return s
}

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

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

	// The name of the keyspace.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`

	// The name of the table.
	//
	// TableName is a required field
	TableName *string `locationName:"tableName" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *GetTableAutoScalingSettingsInput) SetKeyspaceName(v string) *GetTableAutoScalingSettingsInput {
	s.KeyspaceName = &v
	return s
}

// SetTableName sets the TableName field's value.
func (s *GetTableAutoScalingSettingsInput) SetTableName(v string) *GetTableAutoScalingSettingsInput {
	s.TableName = &v
	return s
}

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

	// The auto scaling settings of the table.
	AutoScalingSpecification *AutoScalingSpecification `locationName:"autoScalingSpecification" type:"structure"`

	// The name of the keyspace.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`

	// The Amazon Web Services Region specific settings of a multi-Region table.
	// Returns the settings for all Regions the table is replicated in.
	ReplicaSpecifications []*ReplicaAutoScalingSpecification `locationName:"replicaSpecifications" type:"list"`

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

	// The name of the table.
	//
	// TableName is a required field
	TableName *string `locationName:"tableName" min:"1" type:"string" required:"true"`
}

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

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

// SetAutoScalingSpecification sets the AutoScalingSpecification field's value.
func (s *GetTableAutoScalingSettingsOutput) SetAutoScalingSpecification(v *AutoScalingSpecification) *GetTableAutoScalingSettingsOutput {
	s.AutoScalingSpecification = v
	return s
}

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *GetTableAutoScalingSettingsOutput) SetKeyspaceName(v string) *GetTableAutoScalingSettingsOutput {
	s.KeyspaceName = &v
	return s
}

// SetReplicaSpecifications sets the ReplicaSpecifications field's value.
func (s *GetTableAutoScalingSettingsOutput) SetReplicaSpecifications(v []*ReplicaAutoScalingSpecification) *GetTableAutoScalingSettingsOutput {
	s.ReplicaSpecifications = v
	return s
}

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

// SetTableName sets the TableName field's value.
func (s *GetTableAutoScalingSettingsOutput) SetTableName(v string) *GetTableAutoScalingSettingsOutput {
	s.TableName = &v
	return s
}

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

	// The name of the keyspace that the table is stored in.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`

	// The name of the table.
	//
	// TableName is a required field
	TableName *string `locationName:"tableName" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *GetTableInput) SetKeyspaceName(v string) *GetTableInput {
	s.KeyspaceName = &v
	return s
}

// SetTableName sets the TableName field's value.
func (s *GetTableInput) SetTableName(v string) *GetTableInput {
	s.TableName = &v
	return s
}

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

	// The read/write throughput capacity mode for a table. The options are:
	//
	//    * throughputMode:PAY_PER_REQUEST
	//
	//    * throughputMode:PROVISIONED
	CapacitySpecification *CapacitySpecificationSummary `locationName:"capacitySpecification" type:"structure"`

	// The client-side timestamps setting of the table.
	ClientSideTimestamps *ClientSideTimestamps `locationName:"clientSideTimestamps" type:"structure"`

	// The the description of the specified table.
	Comment *Comment `locationName:"comment" type:"structure"`

	// The creation timestamp of the specified table.
	CreationTimestamp *time.Time `locationName:"creationTimestamp" type:"timestamp"`

	// The default Time to Live settings in seconds of the specified table.
	DefaultTimeToLive *int64 `locationName:"defaultTimeToLive" type:"integer"`

	// The encryption settings of the specified table.
	EncryptionSpecification *EncryptionSpecification `locationName:"encryptionSpecification" type:"structure"`

	// The name of the keyspace that the specified table is stored in.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`

	// The point-in-time recovery status of the specified table.
	PointInTimeRecovery *PointInTimeRecoverySummary `locationName:"pointInTimeRecovery" type:"structure"`

	// Returns the Amazon Web Services Region specific settings of all Regions a
	// multi-Region table is replicated in.
	ReplicaSpecifications []*ReplicaSpecificationSummary `locationName:"replicaSpecifications" type:"list"`

	// The Amazon Resource Name (ARN) of the specified table.
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" min:"20" type:"string" required:"true"`

	// The schema definition of the specified table.
	SchemaDefinition *SchemaDefinition `locationName:"schemaDefinition" type:"structure"`

	// The current status of the specified table.
	Status *string `locationName:"status" type:"string" enum:"TableStatus"`

	// The name of the specified table.
	//
	// TableName is a required field
	TableName *string `locationName:"tableName" min:"1" type:"string" required:"true"`

	// The custom Time to Live settings of the specified table.
	Ttl *TimeToLive `locationName:"ttl" type:"structure"`
}

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

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

// SetCapacitySpecification sets the CapacitySpecification field's value.
func (s *GetTableOutput) SetCapacitySpecification(v *CapacitySpecificationSummary) *GetTableOutput {
	s.CapacitySpecification = v
	return s
}

// SetClientSideTimestamps sets the ClientSideTimestamps field's value.
func (s *GetTableOutput) SetClientSideTimestamps(v *ClientSideTimestamps) *GetTableOutput {
	s.ClientSideTimestamps = v
	return s
}

// SetComment sets the Comment field's value.
func (s *GetTableOutput) SetComment(v *Comment) *GetTableOutput {
	s.Comment = v
	return s
}

// SetCreationTimestamp sets the CreationTimestamp field's value.
func (s *GetTableOutput) SetCreationTimestamp(v time.Time) *GetTableOutput {
	s.CreationTimestamp = &v
	return s
}

// SetDefaultTimeToLive sets the DefaultTimeToLive field's value.
func (s *GetTableOutput) SetDefaultTimeToLive(v int64) *GetTableOutput {
	s.DefaultTimeToLive = &v
	return s
}

// SetEncryptionSpecification sets the EncryptionSpecification field's value.
func (s *GetTableOutput) SetEncryptionSpecification(v *EncryptionSpecification) *GetTableOutput {
	s.EncryptionSpecification = v
	return s
}

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *GetTableOutput) SetKeyspaceName(v string) *GetTableOutput {
	s.KeyspaceName = &v
	return s
}

// SetPointInTimeRecovery sets the PointInTimeRecovery field's value.
func (s *GetTableOutput) SetPointInTimeRecovery(v *PointInTimeRecoverySummary) *GetTableOutput {
	s.PointInTimeRecovery = v
	return s
}

// SetReplicaSpecifications sets the ReplicaSpecifications field's value.
func (s *GetTableOutput) SetReplicaSpecifications(v []*ReplicaSpecificationSummary) *GetTableOutput {
	s.ReplicaSpecifications = v
	return s
}

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

// SetSchemaDefinition sets the SchemaDefinition field's value.
func (s *GetTableOutput) SetSchemaDefinition(v *SchemaDefinition) *GetTableOutput {
	s.SchemaDefinition = v
	return s
}

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

// SetTableName sets the TableName field's value.
func (s *GetTableOutput) SetTableName(v string) *GetTableOutput {
	s.TableName = &v
	return s
}

// SetTtl sets the Ttl field's value.
func (s *GetTableOutput) SetTtl(v *TimeToLive) *GetTableOutput {
	s.Ttl = v
	return s
}

// Amazon Keyspaces was unable to fully process this request because of an internal
// server error.
type InternalServerException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// Description of the error.
	Message_ *string `locationName:"message" type:"string"`
}

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

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

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

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

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

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

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

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

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

// Represents the properties of a keyspace.
type KeyspaceSummary struct {
	_ struct{} `type:"structure"`

	// The name of the keyspace.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`

	// If the replicationStrategy of the keyspace is MULTI_REGION, a list of replication
	// Regions is returned.
	ReplicationRegions []*string `locationName:"replicationRegions" min:"2" type:"list"`

	// This property specifies if a keyspace is a single Region keyspace or a multi-Region
	// keyspace. The available values are SINGLE_REGION or MULTI_REGION.
	//
	// ReplicationStrategy is a required field
	ReplicationStrategy *string `locationName:"replicationStrategy" min:"1" type:"string" required:"true" enum:"Rs"`

	// The unique identifier of the keyspace in the format of an Amazon Resource
	// Name (ARN).
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" min:"20" type:"string" required:"true"`
}

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

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

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *KeyspaceSummary) SetKeyspaceName(v string) *KeyspaceSummary {
	s.KeyspaceName = &v
	return s
}

// SetReplicationRegions sets the ReplicationRegions field's value.
func (s *KeyspaceSummary) SetReplicationRegions(v []*string) *KeyspaceSummary {
	s.ReplicationRegions = v
	return s
}

// SetReplicationStrategy sets the ReplicationStrategy field's value.
func (s *KeyspaceSummary) SetReplicationStrategy(v string) *KeyspaceSummary {
	s.ReplicationStrategy = &v
	return s
}

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

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

	// The total number of keyspaces to return in the output. If the total number
	// of keyspaces available is more than the value specified, a NextToken is provided
	// in the output. To resume pagination, provide the NextToken value as an argument
	// of a subsequent API invocation.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// The pagination token. To resume pagination, provide the NextToken value as
	// argument of a subsequent API invocation.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

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

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

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

	// A list of keyspaces.
	//
	// Keyspaces is a required field
	Keyspaces []*KeyspaceSummary `locationName:"keyspaces" type:"list" required:"true"`

	// A token to specify where to start paginating. This is the NextToken from
	// a previously truncated response.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

// SetKeyspaces sets the Keyspaces field's value.
func (s *ListKeyspacesOutput) SetKeyspaces(v []*KeyspaceSummary) *ListKeyspacesOutput {
	s.Keyspaces = v
	return s
}

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

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

	// The name of the keyspace.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`

	// The total number of tables to return in the output. If the total number of
	// tables available is more than the value specified, a NextToken is provided
	// in the output. To resume pagination, provide the NextToken value as an argument
	// of a subsequent API invocation.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// The pagination token. To resume pagination, provide the NextToken value as
	// an argument of a subsequent API invocation.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`
}

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

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

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

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

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *ListTablesInput) SetKeyspaceName(v string) *ListTablesInput {
	s.KeyspaceName = &v
	return s
}

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

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

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

	// A token to specify where to start paginating. This is the NextToken from
	// a previously truncated response.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// A list of tables.
	Tables []*TableSummary `locationName:"tables" type:"list"`
}

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

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

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

// SetTables sets the Tables field's value.
func (s *ListTablesOutput) SetTables(v []*TableSummary) *ListTablesOutput {
	s.Tables = v
	return s
}

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

	// The total number of tags to return in the output. If the total number of
	// tags available is more than the value specified, a NextToken is provided
	// in the output. To resume pagination, provide the NextToken value as an argument
	// of a subsequent API invocation.
	MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"`

	// The pagination token. To resume pagination, provide the NextToken value as
	// argument of a subsequent API invocation.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

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

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

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

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

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

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

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

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

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

	// A token to specify where to start paginating. This is the NextToken from
	// a previously truncated response.
	NextToken *string `locationName:"nextToken" min:"1" type:"string"`

	// A list of tags.
	Tags []*Tag `locationName:"tags" min:"1" type:"list"`
}

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

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

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

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

// The partition key portion of the primary key is required and determines how
// Amazon Keyspaces stores the data. The partition key can be a single column,
// or it can be a compound value composed of two or more columns.
type PartitionKey struct {
	_ struct{} `type:"structure"`

	// The name(s) of the partition key column(s).
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *PartitionKey) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PartitionKey"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}

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

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

// Point-in-time recovery (PITR) helps protect your Amazon Keyspaces tables
// from accidental write or delete operations by providing you continuous backups
// of your table data.
//
// For more information, see Point-in-time recovery (https://docs.aws.amazon.com/keyspaces/latest/devguide/PointInTimeRecovery.html)
// in the Amazon Keyspaces Developer Guide.
type PointInTimeRecovery struct {
	_ struct{} `type:"structure"`

	// The options are:
	//
	//    * status=ENABLED
	//
	//    * status=DISABLED
	//
	// Status is a required field
	Status *string `locationName:"status" type:"string" required:"true" enum:"PointInTimeRecoveryStatus"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *PointInTimeRecovery) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PointInTimeRecovery"}
	if s.Status == nil {
		invalidParams.Add(request.NewErrParamRequired("Status"))
	}

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

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

// The point-in-time recovery status of the specified table.
type PointInTimeRecoverySummary struct {
	_ struct{} `type:"structure"`

	// Specifies the earliest possible restore point of the table in ISO 8601 format.
	EarliestRestorableTimestamp *time.Time `locationName:"earliestRestorableTimestamp" type:"timestamp"`

	// Shows if point-in-time recovery is enabled or disabled for the specified
	// table.
	//
	// Status is a required field
	Status *string `locationName:"status" type:"string" required:"true" enum:"PointInTimeRecoveryStatus"`
}

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

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

// SetEarliestRestorableTimestamp sets the EarliestRestorableTimestamp field's value.
func (s *PointInTimeRecoverySummary) SetEarliestRestorableTimestamp(v time.Time) *PointInTimeRecoverySummary {
	s.EarliestRestorableTimestamp = &v
	return s
}

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

// The auto scaling settings of a multi-Region table in the specified Amazon
// Web Services Region.
type ReplicaAutoScalingSpecification struct {
	_ struct{} `type:"structure"`

	// The auto scaling settings for a multi-Region table in the specified Amazon
	// Web Services Region.
	AutoScalingSpecification *AutoScalingSpecification `locationName:"autoScalingSpecification" type:"structure"`

	// The Amazon Web Services Region.
	Region *string `locationName:"region" min:"2" type:"string"`
}

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

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

// SetAutoScalingSpecification sets the AutoScalingSpecification field's value.
func (s *ReplicaAutoScalingSpecification) SetAutoScalingSpecification(v *AutoScalingSpecification) *ReplicaAutoScalingSpecification {
	s.AutoScalingSpecification = v
	return s
}

// SetRegion sets the Region field's value.
func (s *ReplicaAutoScalingSpecification) SetRegion(v string) *ReplicaAutoScalingSpecification {
	s.Region = &v
	return s
}

// The Amazon Web Services Region specific settings of a multi-Region table.
//
// For a multi-Region table, you can configure the table's read capacity differently
// per Amazon Web Services Region. You can do this by configuring the following
// parameters.
//
//   - region: The Region where these settings are applied. (Required)
//
//   - readCapacityUnits: The provisioned read capacity units. (Optional)
//
//   - readCapacityAutoScaling: The read capacity auto scaling settings for
//     the table. (Optional)
type ReplicaSpecification struct {
	_ struct{} `type:"structure"`

	// The read capacity auto scaling settings for the multi-Region table in the
	// specified Amazon Web Services Region.
	ReadCapacityAutoScaling *AutoScalingSettings `locationName:"readCapacityAutoScaling" type:"structure"`

	// The provisioned read capacity units for the multi-Region table in the specified
	// Amazon Web Services Region.
	ReadCapacityUnits *int64 `locationName:"readCapacityUnits" min:"1" type:"long"`

	// The Amazon Web Services Region.
	//
	// Region is a required field
	Region *string `locationName:"region" min:"2" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ReplicaSpecification) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ReplicaSpecification"}
	if s.ReadCapacityUnits != nil && *s.ReadCapacityUnits < 1 {
		invalidParams.Add(request.NewErrParamMinValue("ReadCapacityUnits", 1))
	}
	if s.Region == nil {
		invalidParams.Add(request.NewErrParamRequired("Region"))
	}
	if s.Region != nil && len(*s.Region) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("Region", 2))
	}
	if s.ReadCapacityAutoScaling != nil {
		if err := s.ReadCapacityAutoScaling.Validate(); err != nil {
			invalidParams.AddNested("ReadCapacityAutoScaling", err.(request.ErrInvalidParams))
		}
	}

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

// SetReadCapacityAutoScaling sets the ReadCapacityAutoScaling field's value.
func (s *ReplicaSpecification) SetReadCapacityAutoScaling(v *AutoScalingSettings) *ReplicaSpecification {
	s.ReadCapacityAutoScaling = v
	return s
}

// SetReadCapacityUnits sets the ReadCapacityUnits field's value.
func (s *ReplicaSpecification) SetReadCapacityUnits(v int64) *ReplicaSpecification {
	s.ReadCapacityUnits = &v
	return s
}

// SetRegion sets the Region field's value.
func (s *ReplicaSpecification) SetRegion(v string) *ReplicaSpecification {
	s.Region = &v
	return s
}

// The Region-specific settings of a multi-Region table in the specified Amazon
// Web Services Region.
//
// If the multi-Region table is using provisioned capacity and has optional
// auto scaling policies configured, note that the Region specific summary returns
// both read and write capacity settings. But only Region specific read capacity
// settings can be configured for a multi-Region table. In a multi-Region table,
// your write capacity units will be synced across all Amazon Web Services Regions
// to ensure that there is enough capacity to replicate write events across
// Regions.
type ReplicaSpecificationSummary struct {
	_ struct{} `type:"structure"`

	// The read/write throughput capacity mode for a table. The options are:
	//
	//    * throughputMode:PAY_PER_REQUEST and
	//
	//    * throughputMode:PROVISIONED.
	//
	// For more information, see Read/write capacity modes (https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html)
	// in the Amazon Keyspaces Developer Guide.
	CapacitySpecification *CapacitySpecificationSummary `locationName:"capacitySpecification" type:"structure"`

	// The Amazon Web Services Region.
	Region *string `locationName:"region" min:"2" type:"string"`

	// The status of the multi-Region table in the specified Amazon Web Services
	// Region.
	Status *string `locationName:"status" type:"string" enum:"TableStatus"`
}

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

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

// SetCapacitySpecification sets the CapacitySpecification field's value.
func (s *ReplicaSpecificationSummary) SetCapacitySpecification(v *CapacitySpecificationSummary) *ReplicaSpecificationSummary {
	s.CapacitySpecification = v
	return s
}

// SetRegion sets the Region field's value.
func (s *ReplicaSpecificationSummary) SetRegion(v string) *ReplicaSpecificationSummary {
	s.Region = &v
	return s
}

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

// The replication specification of the keyspace includes:
//
//   - regionList - up to six Amazon Web Services Regions where the keyspace
//     is replicated in.
//
//   - replicationStrategy - the required value is SINGLE_REGION or MULTI_REGION.
type ReplicationSpecification struct {
	_ struct{} `type:"structure"`

	// The regionList can contain up to six Amazon Web Services Regions where the
	// keyspace is replicated in.
	RegionList []*string `locationName:"regionList" min:"2" type:"list"`

	// The replicationStrategy of a keyspace, the required value is SINGLE_REGION
	// or MULTI_REGION.
	//
	// ReplicationStrategy is a required field
	ReplicationStrategy *string `locationName:"replicationStrategy" min:"1" type:"string" required:"true" enum:"Rs"`
}

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

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

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

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

// SetRegionList sets the RegionList field's value.
func (s *ReplicationSpecification) SetRegionList(v []*string) *ReplicationSpecification {
	s.RegionList = v
	return s
}

// SetReplicationStrategy sets the ReplicationStrategy field's value.
func (s *ReplicationSpecification) SetReplicationStrategy(v string) *ReplicationSpecification {
	s.ReplicationStrategy = &v
	return s
}

// The operation tried to access a keyspace or table that doesn't exist. The
// resource might not be specified correctly, or its status might not be ACTIVE.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// Description of the error.
	Message_ *string `locationName:"message" type:"string"`

	// The unique identifier in the format of Amazon Resource Name (ARN), for the
	// resource not found.
	ResourceArn *string `locationName:"resourceArn" min:"20" type:"string"`
}

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

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

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

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

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

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

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

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

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

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

	// The optional auto scaling settings for the restored table in provisioned
	// capacity mode. Specifies if the service can manage throughput capacity of
	// a provisioned table automatically on your behalf. Amazon Keyspaces auto scaling
	// helps you provision throughput capacity for variable workloads efficiently
	// by increasing and decreasing your table's read and write capacity automatically
	// in response to application traffic.
	//
	// For more information, see Managing throughput capacity automatically with
	// Amazon Keyspaces auto scaling (https://docs.aws.amazon.com/keyspaces/latest/devguide/autoscaling.html)
	// in the Amazon Keyspaces Developer Guide.
	AutoScalingSpecification *AutoScalingSpecification `locationName:"autoScalingSpecification" type:"structure"`

	// Specifies the read/write throughput capacity mode for the target table. The
	// options are:
	//
	//    * throughputMode:PAY_PER_REQUEST
	//
	//    * throughputMode:PROVISIONED - Provisioned capacity mode requires readCapacityUnits
	//    and writeCapacityUnits as input.
	//
	// The default is throughput_mode:PAY_PER_REQUEST.
	//
	// For more information, see Read/write capacity modes (https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html)
	// in the Amazon Keyspaces Developer Guide.
	CapacitySpecificationOverride *CapacitySpecification `locationName:"capacitySpecificationOverride" type:"structure"`

	// Specifies the encryption settings for the target table. You can choose one
	// of the following KMS key (KMS key):
	//
	//    * type:AWS_OWNED_KMS_KEY - This key is owned by Amazon Keyspaces.
	//
	//    * type:CUSTOMER_MANAGED_KMS_KEY - This key is stored in your account and
	//    is created, owned, and managed by you. This option requires the kms_key_identifier
	//    of the KMS key in Amazon Resource Name (ARN) format as input.
	//
	// The default is type:AWS_OWNED_KMS_KEY.
	//
	// For more information, see Encryption at rest (https://docs.aws.amazon.com/keyspaces/latest/devguide/EncryptionAtRest.html)
	// in the Amazon Keyspaces Developer Guide.
	EncryptionSpecificationOverride *EncryptionSpecification `locationName:"encryptionSpecificationOverride" type:"structure"`

	// Specifies the pointInTimeRecovery settings for the target table. The options
	// are:
	//
	//    * status=ENABLED
	//
	//    * status=DISABLED
	//
	// If it's not specified, the default is status=DISABLED.
	//
	// For more information, see Point-in-time recovery (https://docs.aws.amazon.com/keyspaces/latest/devguide/PointInTimeRecovery.html)
	// in the Amazon Keyspaces Developer Guide.
	PointInTimeRecoveryOverride *PointInTimeRecovery `locationName:"pointInTimeRecoveryOverride" type:"structure"`

	// The optional Region specific settings of a multi-Regional table.
	ReplicaSpecifications []*ReplicaSpecification `locationName:"replicaSpecifications" min:"1" type:"list"`

	// The restore timestamp in ISO 8601 format.
	RestoreTimestamp *time.Time `locationName:"restoreTimestamp" type:"timestamp"`

	// The keyspace name of the source table.
	//
	// SourceKeyspaceName is a required field
	SourceKeyspaceName *string `locationName:"sourceKeyspaceName" min:"1" type:"string" required:"true"`

	// The name of the source table.
	//
	// SourceTableName is a required field
	SourceTableName *string `locationName:"sourceTableName" min:"1" type:"string" required:"true"`

	// A list of key-value pair tags to be attached to the restored table.
	//
	// For more information, see Adding tags and labels to Amazon Keyspaces resources
	// (https://docs.aws.amazon.com/keyspaces/latest/devguide/tagging-keyspaces.html)
	// in the Amazon Keyspaces Developer Guide.
	TagsOverride []*Tag `locationName:"tagsOverride" min:"1" type:"list"`

	// The name of the target keyspace.
	//
	// TargetKeyspaceName is a required field
	TargetKeyspaceName *string `locationName:"targetKeyspaceName" min:"1" type:"string" required:"true"`

	// The name of the target table.
	//
	// TargetTableName is a required field
	TargetTableName *string `locationName:"targetTableName" min:"1" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *RestoreTableInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RestoreTableInput"}
	if s.ReplicaSpecifications != nil && len(s.ReplicaSpecifications) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ReplicaSpecifications", 1))
	}
	if s.SourceKeyspaceName == nil {
		invalidParams.Add(request.NewErrParamRequired("SourceKeyspaceName"))
	}
	if s.SourceKeyspaceName != nil && len(*s.SourceKeyspaceName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SourceKeyspaceName", 1))
	}
	if s.SourceTableName == nil {
		invalidParams.Add(request.NewErrParamRequired("SourceTableName"))
	}
	if s.SourceTableName != nil && len(*s.SourceTableName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("SourceTableName", 1))
	}
	if s.TagsOverride != nil && len(s.TagsOverride) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TagsOverride", 1))
	}
	if s.TargetKeyspaceName == nil {
		invalidParams.Add(request.NewErrParamRequired("TargetKeyspaceName"))
	}
	if s.TargetKeyspaceName != nil && len(*s.TargetKeyspaceName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TargetKeyspaceName", 1))
	}
	if s.TargetTableName == nil {
		invalidParams.Add(request.NewErrParamRequired("TargetTableName"))
	}
	if s.TargetTableName != nil && len(*s.TargetTableName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TargetTableName", 1))
	}
	if s.AutoScalingSpecification != nil {
		if err := s.AutoScalingSpecification.Validate(); err != nil {
			invalidParams.AddNested("AutoScalingSpecification", err.(request.ErrInvalidParams))
		}
	}
	if s.CapacitySpecificationOverride != nil {
		if err := s.CapacitySpecificationOverride.Validate(); err != nil {
			invalidParams.AddNested("CapacitySpecificationOverride", err.(request.ErrInvalidParams))
		}
	}
	if s.EncryptionSpecificationOverride != nil {
		if err := s.EncryptionSpecificationOverride.Validate(); err != nil {
			invalidParams.AddNested("EncryptionSpecificationOverride", err.(request.ErrInvalidParams))
		}
	}
	if s.PointInTimeRecoveryOverride != nil {
		if err := s.PointInTimeRecoveryOverride.Validate(); err != nil {
			invalidParams.AddNested("PointInTimeRecoveryOverride", err.(request.ErrInvalidParams))
		}
	}
	if s.ReplicaSpecifications != nil {
		for i, v := range s.ReplicaSpecifications {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ReplicaSpecifications", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.TagsOverride != nil {
		for i, v := range s.TagsOverride {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "TagsOverride", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetAutoScalingSpecification sets the AutoScalingSpecification field's value.
func (s *RestoreTableInput) SetAutoScalingSpecification(v *AutoScalingSpecification) *RestoreTableInput {
	s.AutoScalingSpecification = v
	return s
}

// SetCapacitySpecificationOverride sets the CapacitySpecificationOverride field's value.
func (s *RestoreTableInput) SetCapacitySpecificationOverride(v *CapacitySpecification) *RestoreTableInput {
	s.CapacitySpecificationOverride = v
	return s
}

// SetEncryptionSpecificationOverride sets the EncryptionSpecificationOverride field's value.
func (s *RestoreTableInput) SetEncryptionSpecificationOverride(v *EncryptionSpecification) *RestoreTableInput {
	s.EncryptionSpecificationOverride = v
	return s
}

// SetPointInTimeRecoveryOverride sets the PointInTimeRecoveryOverride field's value.
func (s *RestoreTableInput) SetPointInTimeRecoveryOverride(v *PointInTimeRecovery) *RestoreTableInput {
	s.PointInTimeRecoveryOverride = v
	return s
}

// SetReplicaSpecifications sets the ReplicaSpecifications field's value.
func (s *RestoreTableInput) SetReplicaSpecifications(v []*ReplicaSpecification) *RestoreTableInput {
	s.ReplicaSpecifications = v
	return s
}

// SetRestoreTimestamp sets the RestoreTimestamp field's value.
func (s *RestoreTableInput) SetRestoreTimestamp(v time.Time) *RestoreTableInput {
	s.RestoreTimestamp = &v
	return s
}

// SetSourceKeyspaceName sets the SourceKeyspaceName field's value.
func (s *RestoreTableInput) SetSourceKeyspaceName(v string) *RestoreTableInput {
	s.SourceKeyspaceName = &v
	return s
}

// SetSourceTableName sets the SourceTableName field's value.
func (s *RestoreTableInput) SetSourceTableName(v string) *RestoreTableInput {
	s.SourceTableName = &v
	return s
}

// SetTagsOverride sets the TagsOverride field's value.
func (s *RestoreTableInput) SetTagsOverride(v []*Tag) *RestoreTableInput {
	s.TagsOverride = v
	return s
}

// SetTargetKeyspaceName sets the TargetKeyspaceName field's value.
func (s *RestoreTableInput) SetTargetKeyspaceName(v string) *RestoreTableInput {
	s.TargetKeyspaceName = &v
	return s
}

// SetTargetTableName sets the TargetTableName field's value.
func (s *RestoreTableInput) SetTargetTableName(v string) *RestoreTableInput {
	s.TargetTableName = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the restored table.
	//
	// RestoredTableARN is a required field
	RestoredTableARN *string `locationName:"restoredTableARN" min:"20" type:"string" required:"true"`
}

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

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

// SetRestoredTableARN sets the RestoredTableARN field's value.
func (s *RestoreTableOutput) SetRestoredTableARN(v string) *RestoreTableOutput {
	s.RestoredTableARN = &v
	return s
}

// Describes the schema of the table.
type SchemaDefinition struct {
	_ struct{} `type:"structure"`

	// The regular columns of the table.
	//
	// AllColumns is a required field
	AllColumns []*ColumnDefinition `locationName:"allColumns" min:"1" type:"list" required:"true"`

	// The columns that are part of the clustering key of the table.
	ClusteringKeys []*ClusteringKey `locationName:"clusteringKeys" type:"list"`

	// The columns that are part of the partition key of the table .
	//
	// PartitionKeys is a required field
	PartitionKeys []*PartitionKey `locationName:"partitionKeys" min:"1" type:"list" required:"true"`

	// The columns that have been defined as STATIC. Static columns store values
	// that are shared by all rows in the same partition.
	StaticColumns []*StaticColumn `locationName:"staticColumns" type:"list"`
}

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

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

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

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

// SetAllColumns sets the AllColumns field's value.
func (s *SchemaDefinition) SetAllColumns(v []*ColumnDefinition) *SchemaDefinition {
	s.AllColumns = v
	return s
}

// SetClusteringKeys sets the ClusteringKeys field's value.
func (s *SchemaDefinition) SetClusteringKeys(v []*ClusteringKey) *SchemaDefinition {
	s.ClusteringKeys = v
	return s
}

// SetPartitionKeys sets the PartitionKeys field's value.
func (s *SchemaDefinition) SetPartitionKeys(v []*PartitionKey) *SchemaDefinition {
	s.PartitionKeys = v
	return s
}

// SetStaticColumns sets the StaticColumns field's value.
func (s *SchemaDefinition) SetStaticColumns(v []*StaticColumn) *SchemaDefinition {
	s.StaticColumns = v
	return s
}

// The operation exceeded the service quota for this resource. For more information
// on service quotas, see Quotas (https://docs.aws.amazon.com/keyspaces/latest/devguide/quotas.html)
// in the Amazon Keyspaces Developer Guide.
type ServiceQuotaExceededException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// Description of the error.
	Message_ *string `locationName:"message" type:"string"`
}

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

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

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

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

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

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

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

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

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

// The static columns of the table. Static columns store values that are shared
// by all rows in the same partition.
type StaticColumn struct {
	_ struct{} `type:"structure"`

	// The name of the static column.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *StaticColumn) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StaticColumn"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}

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

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

// Returns the name of the specified table, the keyspace it is stored in, and
// the unique identifier in the format of an Amazon Resource Name (ARN).
type TableSummary struct {
	_ struct{} `type:"structure"`

	// The name of the keyspace that the table is stored in.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`

	// The unique identifier of the table in the format of an Amazon Resource Name
	// (ARN).
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" min:"20" type:"string" required:"true"`

	// The name of the table.
	//
	// TableName is a required field
	TableName *string `locationName:"tableName" min:"1" type:"string" required:"true"`
}

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

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

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *TableSummary) SetKeyspaceName(v string) *TableSummary {
	s.KeyspaceName = &v
	return s
}

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

// SetTableName sets the TableName field's value.
func (s *TableSummary) SetTableName(v string) *TableSummary {
	s.TableName = &v
	return s
}

// Describes a tag. A tag is a key-value pair. You can add up to 50 tags to
// a single Amazon Keyspaces resource.
//
// Amazon Web Services-assigned tag names and values are automatically assigned
// the aws: prefix, which the user cannot assign. Amazon Web Services-assigned
// tag names do not count towards the tag limit of 50. User-assigned tag names
// have the prefix user: in the Cost Allocation Report. You cannot backdate
// the application of a tag.
//
// For more information, see Adding tags and labels to Amazon Keyspaces resources
// (https://docs.aws.amazon.com/keyspaces/latest/devguide/tagging-keyspaces.html)
// in the Amazon Keyspaces Developer Guide.
type Tag struct {
	_ struct{} `type:"structure"`

	// The key of the tag. Tag keys are case sensitive. Each Amazon Keyspaces resource
	// can only have up to one tag with the same key. If you try to add an existing
	// tag (same key), the existing tag value will be updated to the new value.
	//
	// Key is a required field
	Key *string `locationName:"key" min:"1" type:"string" required:"true"`

	// The value of the tag. Tag values are case-sensitive and can be null.
	//
	// Value is a required field
	Value *string `locationName:"value" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

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

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

	// The Amazon Resource Name (ARN) of the Amazon Keyspaces resource to which
	// to add tags.
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" min:"20" type:"string" required:"true"`

	// The tags to be assigned to the Amazon Keyspaces resource.
	//
	// Tags is a required field
	Tags []*Tag `locationName:"tags" min:"1" type:"list" required:"true"`
}

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

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

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

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

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

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

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

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

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

// The auto scaling policy that scales a table based on the ratio of consumed
// to provisioned capacity.
type TargetTrackingScalingPolicyConfiguration struct {
	_ struct{} `type:"structure"`

	// Specifies if scale-in is enabled.
	//
	// When auto scaling automatically decreases capacity for a table, the table
	// scales in. When scaling policies are set, they can't scale in the table lower
	// than its minimum capacity.
	DisableScaleIn *bool `locationName:"disableScaleIn" type:"boolean"`

	// Specifies a scale-in cool down period.
	//
	// A cooldown period in seconds between scaling activities that lets the table
	// stabilize before another scaling activity starts.
	ScaleInCooldown *int64 `locationName:"scaleInCooldown" type:"integer"`

	// Specifies a scale out cool down period.
	//
	// A cooldown period in seconds between scaling activities that lets the table
	// stabilize before another scaling activity starts.
	ScaleOutCooldown *int64 `locationName:"scaleOutCooldown" type:"integer"`

	// Specifies the target value for the target tracking auto scaling policy.
	//
	// Amazon Keyspaces auto scaling scales up capacity automatically when traffic
	// exceeds this target utilization rate, and then back down when it falls below
	// the target. This ensures that the ratio of consumed capacity to provisioned
	// capacity stays at or near this value. You define targetValue as a percentage.
	// A double between 20 and 90.
	//
	// TargetValue is a required field
	TargetValue *float64 `locationName:"targetValue" type:"double" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *TargetTrackingScalingPolicyConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TargetTrackingScalingPolicyConfiguration"}
	if s.TargetValue == nil {
		invalidParams.Add(request.NewErrParamRequired("TargetValue"))
	}

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

// SetDisableScaleIn sets the DisableScaleIn field's value.
func (s *TargetTrackingScalingPolicyConfiguration) SetDisableScaleIn(v bool) *TargetTrackingScalingPolicyConfiguration {
	s.DisableScaleIn = &v
	return s
}

// SetScaleInCooldown sets the ScaleInCooldown field's value.
func (s *TargetTrackingScalingPolicyConfiguration) SetScaleInCooldown(v int64) *TargetTrackingScalingPolicyConfiguration {
	s.ScaleInCooldown = &v
	return s
}

// SetScaleOutCooldown sets the ScaleOutCooldown field's value.
func (s *TargetTrackingScalingPolicyConfiguration) SetScaleOutCooldown(v int64) *TargetTrackingScalingPolicyConfiguration {
	s.ScaleOutCooldown = &v
	return s
}

// SetTargetValue sets the TargetValue field's value.
func (s *TargetTrackingScalingPolicyConfiguration) SetTargetValue(v float64) *TargetTrackingScalingPolicyConfiguration {
	s.TargetValue = &v
	return s
}

// Enable custom Time to Live (TTL) settings for rows and columns without setting
// a TTL default for the specified table.
//
// For more information, see Enabling TTL on tables (https://docs.aws.amazon.com/keyspaces/latest/devguide/TTL-how-it-works.html#ttl-howitworks_enabling)
// in the Amazon Keyspaces Developer Guide.
type TimeToLive struct {
	_ struct{} `type:"structure"`

	// Shows how to enable custom Time to Live (TTL) settings for the specified
	// table.
	//
	// Status is a required field
	Status *string `locationName:"status" type:"string" required:"true" enum:"TimeToLiveStatus"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *TimeToLive) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TimeToLive"}
	if s.Status == nil {
		invalidParams.Add(request.NewErrParamRequired("Status"))
	}

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

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

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

	// The Amazon Keyspaces resource that the tags will be removed from. This value
	// is an Amazon Resource Name (ARN).
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" min:"20" type:"string" required:"true"`

	// A list of existing tags to be removed from the Amazon Keyspaces resource.
	//
	// Tags is a required field
	Tags []*Tag `locationName:"tags" min:"1" type:"list" required:"true"`
}

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

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

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

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

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

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

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

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

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

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

	// For each column to be added to the specified table:
	//
	//    * name - The name of the column.
	//
	//    * type - An Amazon Keyspaces data type. For more information, see Data
	//    types (https://docs.aws.amazon.com/keyspaces/latest/devguide/cql.elements.html#cql.data-types)
	//    in the Amazon Keyspaces Developer Guide.
	AddColumns []*ColumnDefinition `locationName:"addColumns" min:"1" type:"list"`

	// The optional auto scaling settings to update for a table in provisioned capacity
	// mode. Specifies if the service can manage throughput capacity of a provisioned
	// table automatically on your behalf. Amazon Keyspaces auto scaling helps you
	// provision throughput capacity for variable workloads efficiently by increasing
	// and decreasing your table's read and write capacity automatically in response
	// to application traffic.
	//
	// If auto scaling is already enabled for the table, you can use UpdateTable
	// to update the minimum and maximum values or the auto scaling policy settings
	// independently.
	//
	// For more information, see Managing throughput capacity automatically with
	// Amazon Keyspaces auto scaling (https://docs.aws.amazon.com/keyspaces/latest/devguide/autoscaling.html)
	// in the Amazon Keyspaces Developer Guide.
	AutoScalingSpecification *AutoScalingSpecification `locationName:"autoScalingSpecification" type:"structure"`

	// Modifies the read/write throughput capacity mode for the table. The options
	// are:
	//
	//    * throughputMode:PAY_PER_REQUEST and
	//
	//    * throughputMode:PROVISIONED - Provisioned capacity mode requires readCapacityUnits
	//    and writeCapacityUnits as input.
	//
	// The default is throughput_mode:PAY_PER_REQUEST.
	//
	// For more information, see Read/write capacity modes (https://docs.aws.amazon.com/keyspaces/latest/devguide/ReadWriteCapacityMode.html)
	// in the Amazon Keyspaces Developer Guide.
	CapacitySpecification *CapacitySpecification `locationName:"capacitySpecification" type:"structure"`

	// Enables client-side timestamps for the table. By default, the setting is
	// disabled. You can enable client-side timestamps with the following option:
	//
	//    * status: "enabled"
	//
	// Once client-side timestamps are enabled for a table, this setting cannot
	// be disabled.
	ClientSideTimestamps *ClientSideTimestamps `locationName:"clientSideTimestamps" type:"structure"`

	// The default Time to Live setting in seconds for the table.
	//
	// For more information, see Setting the default TTL value for a table (https://docs.aws.amazon.com/keyspaces/latest/devguide/TTL-how-it-works.html#ttl-howitworks_default_ttl)
	// in the Amazon Keyspaces Developer Guide.
	DefaultTimeToLive *int64 `locationName:"defaultTimeToLive" type:"integer"`

	// Modifies the encryption settings of the table. You can choose one of the
	// following KMS key (KMS key):
	//
	//    * type:AWS_OWNED_KMS_KEY - This key is owned by Amazon Keyspaces.
	//
	//    * type:CUSTOMER_MANAGED_KMS_KEY - This key is stored in your account and
	//    is created, owned, and managed by you. This option requires the kms_key_identifier
	//    of the KMS key in Amazon Resource Name (ARN) format as input.
	//
	// The default is AWS_OWNED_KMS_KEY.
	//
	// For more information, see Encryption at rest (https://docs.aws.amazon.com/keyspaces/latest/devguide/EncryptionAtRest.html)
	// in the Amazon Keyspaces Developer Guide.
	EncryptionSpecification *EncryptionSpecification `locationName:"encryptionSpecification" type:"structure"`

	// The name of the keyspace the specified table is stored in.
	//
	// KeyspaceName is a required field
	KeyspaceName *string `locationName:"keyspaceName" min:"1" type:"string" required:"true"`

	// Modifies the pointInTimeRecovery settings of the table. The options are:
	//
	//    * status=ENABLED
	//
	//    * status=DISABLED
	//
	// If it's not specified, the default is status=DISABLED.
	//
	// For more information, see Point-in-time recovery (https://docs.aws.amazon.com/keyspaces/latest/devguide/PointInTimeRecovery.html)
	// in the Amazon Keyspaces Developer Guide.
	PointInTimeRecovery *PointInTimeRecovery `locationName:"pointInTimeRecovery" type:"structure"`

	// The Region specific settings of a multi-Regional table.
	ReplicaSpecifications []*ReplicaSpecification `locationName:"replicaSpecifications" min:"1" type:"list"`

	// The name of the table.
	//
	// TableName is a required field
	TableName *string `locationName:"tableName" min:"1" type:"string" required:"true"`

	// Modifies Time to Live custom settings for the table. The options are:
	//
	//    * status:enabled
	//
	//    * status:disabled
	//
	// The default is status:disabled. After ttl is enabled, you can't disable it
	// for the table.
	//
	// For more information, see Expiring data by using Amazon Keyspaces Time to
	// Live (TTL) (https://docs.aws.amazon.com/keyspaces/latest/devguide/TTL.html)
	// in the Amazon Keyspaces Developer Guide.
	Ttl *TimeToLive `locationName:"ttl" type:"structure"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateTableInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateTableInput"}
	if s.AddColumns != nil && len(s.AddColumns) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AddColumns", 1))
	}
	if s.KeyspaceName == nil {
		invalidParams.Add(request.NewErrParamRequired("KeyspaceName"))
	}
	if s.KeyspaceName != nil && len(*s.KeyspaceName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("KeyspaceName", 1))
	}
	if s.ReplicaSpecifications != nil && len(s.ReplicaSpecifications) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ReplicaSpecifications", 1))
	}
	if s.TableName == nil {
		invalidParams.Add(request.NewErrParamRequired("TableName"))
	}
	if s.TableName != nil && len(*s.TableName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TableName", 1))
	}
	if s.AddColumns != nil {
		for i, v := range s.AddColumns {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "AddColumns", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.AutoScalingSpecification != nil {
		if err := s.AutoScalingSpecification.Validate(); err != nil {
			invalidParams.AddNested("AutoScalingSpecification", err.(request.ErrInvalidParams))
		}
	}
	if s.CapacitySpecification != nil {
		if err := s.CapacitySpecification.Validate(); err != nil {
			invalidParams.AddNested("CapacitySpecification", err.(request.ErrInvalidParams))
		}
	}
	if s.ClientSideTimestamps != nil {
		if err := s.ClientSideTimestamps.Validate(); err != nil {
			invalidParams.AddNested("ClientSideTimestamps", err.(request.ErrInvalidParams))
		}
	}
	if s.EncryptionSpecification != nil {
		if err := s.EncryptionSpecification.Validate(); err != nil {
			invalidParams.AddNested("EncryptionSpecification", err.(request.ErrInvalidParams))
		}
	}
	if s.PointInTimeRecovery != nil {
		if err := s.PointInTimeRecovery.Validate(); err != nil {
			invalidParams.AddNested("PointInTimeRecovery", err.(request.ErrInvalidParams))
		}
	}
	if s.ReplicaSpecifications != nil {
		for i, v := range s.ReplicaSpecifications {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ReplicaSpecifications", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Ttl != nil {
		if err := s.Ttl.Validate(); err != nil {
			invalidParams.AddNested("Ttl", err.(request.ErrInvalidParams))
		}
	}

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

// SetAddColumns sets the AddColumns field's value.
func (s *UpdateTableInput) SetAddColumns(v []*ColumnDefinition) *UpdateTableInput {
	s.AddColumns = v
	return s
}

// SetAutoScalingSpecification sets the AutoScalingSpecification field's value.
func (s *UpdateTableInput) SetAutoScalingSpecification(v *AutoScalingSpecification) *UpdateTableInput {
	s.AutoScalingSpecification = v
	return s
}

// SetCapacitySpecification sets the CapacitySpecification field's value.
func (s *UpdateTableInput) SetCapacitySpecification(v *CapacitySpecification) *UpdateTableInput {
	s.CapacitySpecification = v
	return s
}

// SetClientSideTimestamps sets the ClientSideTimestamps field's value.
func (s *UpdateTableInput) SetClientSideTimestamps(v *ClientSideTimestamps) *UpdateTableInput {
	s.ClientSideTimestamps = v
	return s
}

// SetDefaultTimeToLive sets the DefaultTimeToLive field's value.
func (s *UpdateTableInput) SetDefaultTimeToLive(v int64) *UpdateTableInput {
	s.DefaultTimeToLive = &v
	return s
}

// SetEncryptionSpecification sets the EncryptionSpecification field's value.
func (s *UpdateTableInput) SetEncryptionSpecification(v *EncryptionSpecification) *UpdateTableInput {
	s.EncryptionSpecification = v
	return s
}

// SetKeyspaceName sets the KeyspaceName field's value.
func (s *UpdateTableInput) SetKeyspaceName(v string) *UpdateTableInput {
	s.KeyspaceName = &v
	return s
}

// SetPointInTimeRecovery sets the PointInTimeRecovery field's value.
func (s *UpdateTableInput) SetPointInTimeRecovery(v *PointInTimeRecovery) *UpdateTableInput {
	s.PointInTimeRecovery = v
	return s
}

// SetReplicaSpecifications sets the ReplicaSpecifications field's value.
func (s *UpdateTableInput) SetReplicaSpecifications(v []*ReplicaSpecification) *UpdateTableInput {
	s.ReplicaSpecifications = v
	return s
}

// SetTableName sets the TableName field's value.
func (s *UpdateTableInput) SetTableName(v string) *UpdateTableInput {
	s.TableName = &v
	return s
}

// SetTtl sets the Ttl field's value.
func (s *UpdateTableInput) SetTtl(v *TimeToLive) *UpdateTableInput {
	s.Ttl = v
	return s
}

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

	// The Amazon Resource Name (ARN) of the modified table.
	//
	// ResourceArn is a required field
	ResourceArn *string `locationName:"resourceArn" min:"20" type:"string" required:"true"`
}

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

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

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

// The operation failed due to an invalid or malformed request.
type ValidationException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// Description of the error.
	Message_ *string `locationName:"message" type:"string"`
}

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

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

func newErrorValidationException(v protocol.ResponseMetadata) error {
	return &ValidationException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

const (
	// ClientSideTimestampsStatusEnabled is a ClientSideTimestampsStatus enum value
	ClientSideTimestampsStatusEnabled = "ENABLED"
)

// ClientSideTimestampsStatus_Values returns all elements of the ClientSideTimestampsStatus enum
func ClientSideTimestampsStatus_Values() []string {
	return []string{
		ClientSideTimestampsStatusEnabled,
	}
}

const (
	// EncryptionTypeCustomerManagedKmsKey is a EncryptionType enum value
	EncryptionTypeCustomerManagedKmsKey = "CUSTOMER_MANAGED_KMS_KEY"

	// EncryptionTypeAwsOwnedKmsKey is a EncryptionType enum value
	EncryptionTypeAwsOwnedKmsKey = "AWS_OWNED_KMS_KEY"
)

// EncryptionType_Values returns all elements of the EncryptionType enum
func EncryptionType_Values() []string {
	return []string{
		EncryptionTypeCustomerManagedKmsKey,
		EncryptionTypeAwsOwnedKmsKey,
	}
}

const (
	// PointInTimeRecoveryStatusEnabled is a PointInTimeRecoveryStatus enum value
	PointInTimeRecoveryStatusEnabled = "ENABLED"

	// PointInTimeRecoveryStatusDisabled is a PointInTimeRecoveryStatus enum value
	PointInTimeRecoveryStatusDisabled = "DISABLED"
)

// PointInTimeRecoveryStatus_Values returns all elements of the PointInTimeRecoveryStatus enum
func PointInTimeRecoveryStatus_Values() []string {
	return []string{
		PointInTimeRecoveryStatusEnabled,
		PointInTimeRecoveryStatusDisabled,
	}
}

const (
	// RsSingleRegion is a Rs enum value
	RsSingleRegion = "SINGLE_REGION"

	// RsMultiRegion is a Rs enum value
	RsMultiRegion = "MULTI_REGION"
)

// Rs_Values returns all elements of the Rs enum
func Rs_Values() []string {
	return []string{
		RsSingleRegion,
		RsMultiRegion,
	}
}

const (
	// SortOrderAsc is a SortOrder enum value
	SortOrderAsc = "ASC"

	// SortOrderDesc is a SortOrder enum value
	SortOrderDesc = "DESC"
)

// SortOrder_Values returns all elements of the SortOrder enum
func SortOrder_Values() []string {
	return []string{
		SortOrderAsc,
		SortOrderDesc,
	}
}

const (
	// TableStatusActive is a TableStatus enum value
	TableStatusActive = "ACTIVE"

	// TableStatusCreating is a TableStatus enum value
	TableStatusCreating = "CREATING"

	// TableStatusUpdating is a TableStatus enum value
	TableStatusUpdating = "UPDATING"

	// TableStatusDeleting is a TableStatus enum value
	TableStatusDeleting = "DELETING"

	// TableStatusDeleted is a TableStatus enum value
	TableStatusDeleted = "DELETED"

	// TableStatusRestoring is a TableStatus enum value
	TableStatusRestoring = "RESTORING"

	// TableStatusInaccessibleEncryptionCredentials is a TableStatus enum value
	TableStatusInaccessibleEncryptionCredentials = "INACCESSIBLE_ENCRYPTION_CREDENTIALS"
)

// TableStatus_Values returns all elements of the TableStatus enum
func TableStatus_Values() []string {
	return []string{
		TableStatusActive,
		TableStatusCreating,
		TableStatusUpdating,
		TableStatusDeleting,
		TableStatusDeleted,
		TableStatusRestoring,
		TableStatusInaccessibleEncryptionCredentials,
	}
}

const (
	// ThroughputModePayPerRequest is a ThroughputMode enum value
	ThroughputModePayPerRequest = "PAY_PER_REQUEST"

	// ThroughputModeProvisioned is a ThroughputMode enum value
	ThroughputModeProvisioned = "PROVISIONED"
)

// ThroughputMode_Values returns all elements of the ThroughputMode enum
func ThroughputMode_Values() []string {
	return []string{
		ThroughputModePayPerRequest,
		ThroughputModeProvisioned,
	}
}

const (
	// TimeToLiveStatusEnabled is a TimeToLiveStatus enum value
	TimeToLiveStatusEnabled = "ENABLED"
)

// TimeToLiveStatus_Values returns all elements of the TimeToLiveStatus enum
func TimeToLiveStatus_Values() []string {
	return []string{
		TimeToLiveStatusEnabled,
	}
}
