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

package amplifyuibuilder

import (
	"fmt"
	"time"

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

const opCreateComponent = "CreateComponent"

// CreateComponentRequest generates a "aws/request.Request" representing the
// client's request for the CreateComponent 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 CreateComponent for more information on using the CreateComponent
// 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 CreateComponentRequest method.
//	req, resp := client.CreateComponentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/CreateComponent
func (c *AmplifyUIBuilder) CreateComponentRequest(input *CreateComponentInput) (req *request.Request, output *CreateComponentOutput) {
	op := &request.Operation{
		Name:       opCreateComponent,
		HTTPMethod: "POST",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/components",
	}

	if input == nil {
		input = &CreateComponentInput{}
	}

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

// CreateComponent API operation for AWS Amplify UI Builder.
//
// Creates a new component for an Amplify app.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation CreateComponent for usage and error information.
//
// Returned Error Types:
//
//   - ServiceQuotaExceededException
//     You exceeded your service quota. Service quotas, also referred to as limits,
//     are the maximum number of service resources or operations for your Amazon
//     Web Services account.
//
//   - ResourceConflictException
//     The resource specified in the request conflicts with an existing resource.
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/CreateComponent
func (c *AmplifyUIBuilder) CreateComponent(input *CreateComponentInput) (*CreateComponentOutput, error) {
	req, out := c.CreateComponentRequest(input)
	return out, req.Send()
}

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

const opCreateForm = "CreateForm"

// CreateFormRequest generates a "aws/request.Request" representing the
// client's request for the CreateForm 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 CreateForm for more information on using the CreateForm
// 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 CreateFormRequest method.
//	req, resp := client.CreateFormRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/CreateForm
func (c *AmplifyUIBuilder) CreateFormRequest(input *CreateFormInput) (req *request.Request, output *CreateFormOutput) {
	op := &request.Operation{
		Name:       opCreateForm,
		HTTPMethod: "POST",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/forms",
	}

	if input == nil {
		input = &CreateFormInput{}
	}

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

// CreateForm API operation for AWS Amplify UI Builder.
//
// Creates a new form for an Amplify app.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation CreateForm for usage and error information.
//
// Returned Error Types:
//
//   - ServiceQuotaExceededException
//     You exceeded your service quota. Service quotas, also referred to as limits,
//     are the maximum number of service resources or operations for your Amazon
//     Web Services account.
//
//   - ResourceConflictException
//     The resource specified in the request conflicts with an existing resource.
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/CreateForm
func (c *AmplifyUIBuilder) CreateForm(input *CreateFormInput) (*CreateFormOutput, error) {
	req, out := c.CreateFormRequest(input)
	return out, req.Send()
}

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

const opCreateTheme = "CreateTheme"

// CreateThemeRequest generates a "aws/request.Request" representing the
// client's request for the CreateTheme 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 CreateTheme for more information on using the CreateTheme
// 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 CreateThemeRequest method.
//	req, resp := client.CreateThemeRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/CreateTheme
func (c *AmplifyUIBuilder) CreateThemeRequest(input *CreateThemeInput) (req *request.Request, output *CreateThemeOutput) {
	op := &request.Operation{
		Name:       opCreateTheme,
		HTTPMethod: "POST",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/themes",
	}

	if input == nil {
		input = &CreateThemeInput{}
	}

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

// CreateTheme API operation for AWS Amplify UI Builder.
//
// Creates a theme to apply to the components in an Amplify app.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation CreateTheme for usage and error information.
//
// Returned Error Types:
//
//   - ServiceQuotaExceededException
//     You exceeded your service quota. Service quotas, also referred to as limits,
//     are the maximum number of service resources or operations for your Amazon
//     Web Services account.
//
//   - ResourceConflictException
//     The resource specified in the request conflicts with an existing resource.
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/CreateTheme
func (c *AmplifyUIBuilder) CreateTheme(input *CreateThemeInput) (*CreateThemeOutput, error) {
	req, out := c.CreateThemeRequest(input)
	return out, req.Send()
}

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

const opDeleteComponent = "DeleteComponent"

// DeleteComponentRequest generates a "aws/request.Request" representing the
// client's request for the DeleteComponent 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 DeleteComponent for more information on using the DeleteComponent
// 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 DeleteComponentRequest method.
//	req, resp := client.DeleteComponentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/DeleteComponent
func (c *AmplifyUIBuilder) DeleteComponentRequest(input *DeleteComponentInput) (req *request.Request, output *DeleteComponentOutput) {
	op := &request.Operation{
		Name:       opDeleteComponent,
		HTTPMethod: "DELETE",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/components/{id}",
	}

	if input == nil {
		input = &DeleteComponentInput{}
	}

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

// DeleteComponent API operation for AWS Amplify UI Builder.
//
// Deletes a component from an Amplify app.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation DeleteComponent for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
//   - ResourceNotFoundException
//     The requested resource does not exist, or access was denied.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/DeleteComponent
func (c *AmplifyUIBuilder) DeleteComponent(input *DeleteComponentInput) (*DeleteComponentOutput, error) {
	req, out := c.DeleteComponentRequest(input)
	return out, req.Send()
}

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

const opDeleteForm = "DeleteForm"

// DeleteFormRequest generates a "aws/request.Request" representing the
// client's request for the DeleteForm 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 DeleteForm for more information on using the DeleteForm
// 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 DeleteFormRequest method.
//	req, resp := client.DeleteFormRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/DeleteForm
func (c *AmplifyUIBuilder) DeleteFormRequest(input *DeleteFormInput) (req *request.Request, output *DeleteFormOutput) {
	op := &request.Operation{
		Name:       opDeleteForm,
		HTTPMethod: "DELETE",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/forms/{id}",
	}

	if input == nil {
		input = &DeleteFormInput{}
	}

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

// DeleteForm API operation for AWS Amplify UI Builder.
//
// Deletes a form from an Amplify app.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation DeleteForm for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
//   - ResourceNotFoundException
//     The requested resource does not exist, or access was denied.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/DeleteForm
func (c *AmplifyUIBuilder) DeleteForm(input *DeleteFormInput) (*DeleteFormOutput, error) {
	req, out := c.DeleteFormRequest(input)
	return out, req.Send()
}

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

const opDeleteTheme = "DeleteTheme"

// DeleteThemeRequest generates a "aws/request.Request" representing the
// client's request for the DeleteTheme 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 DeleteTheme for more information on using the DeleteTheme
// 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 DeleteThemeRequest method.
//	req, resp := client.DeleteThemeRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/DeleteTheme
func (c *AmplifyUIBuilder) DeleteThemeRequest(input *DeleteThemeInput) (req *request.Request, output *DeleteThemeOutput) {
	op := &request.Operation{
		Name:       opDeleteTheme,
		HTTPMethod: "DELETE",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/themes/{id}",
	}

	if input == nil {
		input = &DeleteThemeInput{}
	}

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

// DeleteTheme API operation for AWS Amplify UI Builder.
//
// Deletes a theme from an Amplify app.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation DeleteTheme for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
//   - ResourceNotFoundException
//     The requested resource does not exist, or access was denied.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/DeleteTheme
func (c *AmplifyUIBuilder) DeleteTheme(input *DeleteThemeInput) (*DeleteThemeOutput, error) {
	req, out := c.DeleteThemeRequest(input)
	return out, req.Send()
}

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

const opExchangeCodeForToken = "ExchangeCodeForToken"

// ExchangeCodeForTokenRequest generates a "aws/request.Request" representing the
// client's request for the ExchangeCodeForToken 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 ExchangeCodeForToken for more information on using the ExchangeCodeForToken
// 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 ExchangeCodeForTokenRequest method.
//	req, resp := client.ExchangeCodeForTokenRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ExchangeCodeForToken
func (c *AmplifyUIBuilder) ExchangeCodeForTokenRequest(input *ExchangeCodeForTokenInput) (req *request.Request, output *ExchangeCodeForTokenOutput) {
	op := &request.Operation{
		Name:       opExchangeCodeForToken,
		HTTPMethod: "POST",
		HTTPPath:   "/tokens/{provider}",
	}

	if input == nil {
		input = &ExchangeCodeForTokenInput{}
	}

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

// ExchangeCodeForToken API operation for AWS Amplify UI Builder.
//
// Exchanges an access code for a token.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation ExchangeCodeForToken for usage and error information.
//
// Returned Error Types:
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ExchangeCodeForToken
func (c *AmplifyUIBuilder) ExchangeCodeForToken(input *ExchangeCodeForTokenInput) (*ExchangeCodeForTokenOutput, error) {
	req, out := c.ExchangeCodeForTokenRequest(input)
	return out, req.Send()
}

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

const opExportComponents = "ExportComponents"

// ExportComponentsRequest generates a "aws/request.Request" representing the
// client's request for the ExportComponents 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 ExportComponents for more information on using the ExportComponents
// 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 ExportComponentsRequest method.
//	req, resp := client.ExportComponentsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ExportComponents
func (c *AmplifyUIBuilder) ExportComponentsRequest(input *ExportComponentsInput) (req *request.Request, output *ExportComponentsOutput) {
	op := &request.Operation{
		Name:       opExportComponents,
		HTTPMethod: "GET",
		HTTPPath:   "/export/app/{appId}/environment/{environmentName}/components",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ExportComponentsInput{}
	}

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

// ExportComponents API operation for AWS Amplify UI Builder.
//
// Exports component configurations to code that is ready to integrate into
// an Amplify app.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation ExportComponents for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ExportComponents
func (c *AmplifyUIBuilder) ExportComponents(input *ExportComponentsInput) (*ExportComponentsOutput, error) {
	req, out := c.ExportComponentsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opExportForms = "ExportForms"

// ExportFormsRequest generates a "aws/request.Request" representing the
// client's request for the ExportForms 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 ExportForms for more information on using the ExportForms
// 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 ExportFormsRequest method.
//	req, resp := client.ExportFormsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ExportForms
func (c *AmplifyUIBuilder) ExportFormsRequest(input *ExportFormsInput) (req *request.Request, output *ExportFormsOutput) {
	op := &request.Operation{
		Name:       opExportForms,
		HTTPMethod: "GET",
		HTTPPath:   "/export/app/{appId}/environment/{environmentName}/forms",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ExportFormsInput{}
	}

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

// ExportForms API operation for AWS Amplify UI Builder.
//
// Exports form configurations to code that is ready to integrate into an Amplify
// app.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation ExportForms for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ExportForms
func (c *AmplifyUIBuilder) ExportForms(input *ExportFormsInput) (*ExportFormsOutput, error) {
	req, out := c.ExportFormsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opExportThemes = "ExportThemes"

// ExportThemesRequest generates a "aws/request.Request" representing the
// client's request for the ExportThemes 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 ExportThemes for more information on using the ExportThemes
// 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 ExportThemesRequest method.
//	req, resp := client.ExportThemesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ExportThemes
func (c *AmplifyUIBuilder) ExportThemesRequest(input *ExportThemesInput) (req *request.Request, output *ExportThemesOutput) {
	op := &request.Operation{
		Name:       opExportThemes,
		HTTPMethod: "GET",
		HTTPPath:   "/export/app/{appId}/environment/{environmentName}/themes",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ExportThemesInput{}
	}

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

// ExportThemes API operation for AWS Amplify UI Builder.
//
// Exports theme configurations to code that is ready to integrate into an Amplify
// app.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation ExportThemes for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ExportThemes
func (c *AmplifyUIBuilder) ExportThemes(input *ExportThemesInput) (*ExportThemesOutput, error) {
	req, out := c.ExportThemesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opGetComponent = "GetComponent"

// GetComponentRequest generates a "aws/request.Request" representing the
// client's request for the GetComponent 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 GetComponent for more information on using the GetComponent
// 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 GetComponentRequest method.
//	req, resp := client.GetComponentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/GetComponent
func (c *AmplifyUIBuilder) GetComponentRequest(input *GetComponentInput) (req *request.Request, output *GetComponentOutput) {
	op := &request.Operation{
		Name:       opGetComponent,
		HTTPMethod: "GET",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/components/{id}",
	}

	if input == nil {
		input = &GetComponentInput{}
	}

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

// GetComponent API operation for AWS Amplify UI Builder.
//
// Returns an existing component for an Amplify app.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation GetComponent for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
//   - ResourceNotFoundException
//     The requested resource does not exist, or access was denied.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/GetComponent
func (c *AmplifyUIBuilder) GetComponent(input *GetComponentInput) (*GetComponentOutput, error) {
	req, out := c.GetComponentRequest(input)
	return out, req.Send()
}

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

const opGetForm = "GetForm"

// GetFormRequest generates a "aws/request.Request" representing the
// client's request for the GetForm 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 GetForm for more information on using the GetForm
// 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 GetFormRequest method.
//	req, resp := client.GetFormRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/GetForm
func (c *AmplifyUIBuilder) GetFormRequest(input *GetFormInput) (req *request.Request, output *GetFormOutput) {
	op := &request.Operation{
		Name:       opGetForm,
		HTTPMethod: "GET",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/forms/{id}",
	}

	if input == nil {
		input = &GetFormInput{}
	}

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

// GetForm API operation for AWS Amplify UI Builder.
//
// Returns an existing form for an Amplify app.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation GetForm for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
//   - ResourceNotFoundException
//     The requested resource does not exist, or access was denied.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/GetForm
func (c *AmplifyUIBuilder) GetForm(input *GetFormInput) (*GetFormOutput, error) {
	req, out := c.GetFormRequest(input)
	return out, req.Send()
}

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

const opGetMetadata = "GetMetadata"

// GetMetadataRequest generates a "aws/request.Request" representing the
// client's request for the GetMetadata 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 GetMetadata for more information on using the GetMetadata
// 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 GetMetadataRequest method.
//	req, resp := client.GetMetadataRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/GetMetadata
func (c *AmplifyUIBuilder) GetMetadataRequest(input *GetMetadataInput) (req *request.Request, output *GetMetadataOutput) {
	op := &request.Operation{
		Name:       opGetMetadata,
		HTTPMethod: "GET",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/metadata",
	}

	if input == nil {
		input = &GetMetadataInput{}
	}

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

// GetMetadata API operation for AWS Amplify UI Builder.
//
// Returns existing metadata for an Amplify app.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation GetMetadata for usage and error information.
//
// Returned Error Types:
//
//   - UnauthorizedException
//     You don't have permission to perform this operation.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/GetMetadata
func (c *AmplifyUIBuilder) GetMetadata(input *GetMetadataInput) (*GetMetadataOutput, error) {
	req, out := c.GetMetadataRequest(input)
	return out, req.Send()
}

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

const opGetTheme = "GetTheme"

// GetThemeRequest generates a "aws/request.Request" representing the
// client's request for the GetTheme 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 GetTheme for more information on using the GetTheme
// 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 GetThemeRequest method.
//	req, resp := client.GetThemeRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/GetTheme
func (c *AmplifyUIBuilder) GetThemeRequest(input *GetThemeInput) (req *request.Request, output *GetThemeOutput) {
	op := &request.Operation{
		Name:       opGetTheme,
		HTTPMethod: "GET",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/themes/{id}",
	}

	if input == nil {
		input = &GetThemeInput{}
	}

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

// GetTheme API operation for AWS Amplify UI Builder.
//
// Returns an existing theme for an Amplify app.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation GetTheme for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
//   - ResourceNotFoundException
//     The requested resource does not exist, or access was denied.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/GetTheme
func (c *AmplifyUIBuilder) GetTheme(input *GetThemeInput) (*GetThemeOutput, error) {
	req, out := c.GetThemeRequest(input)
	return out, req.Send()
}

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

const opListComponents = "ListComponents"

// ListComponentsRequest generates a "aws/request.Request" representing the
// client's request for the ListComponents 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 ListComponents for more information on using the ListComponents
// 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 ListComponentsRequest method.
//	req, resp := client.ListComponentsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ListComponents
func (c *AmplifyUIBuilder) ListComponentsRequest(input *ListComponentsInput) (req *request.Request, output *ListComponentsOutput) {
	op := &request.Operation{
		Name:       opListComponents,
		HTTPMethod: "GET",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/components",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListComponentsInput{}
	}

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

// ListComponents API operation for AWS Amplify UI Builder.
//
// Retrieves a list of components for a specified Amplify app and backend environment.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation ListComponents for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ListComponents
func (c *AmplifyUIBuilder) ListComponents(input *ListComponentsInput) (*ListComponentsOutput, error) {
	req, out := c.ListComponentsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListForms = "ListForms"

// ListFormsRequest generates a "aws/request.Request" representing the
// client's request for the ListForms 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 ListForms for more information on using the ListForms
// 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 ListFormsRequest method.
//	req, resp := client.ListFormsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ListForms
func (c *AmplifyUIBuilder) ListFormsRequest(input *ListFormsInput) (req *request.Request, output *ListFormsOutput) {
	op := &request.Operation{
		Name:       opListForms,
		HTTPMethod: "GET",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/forms",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListFormsInput{}
	}

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

// ListForms API operation for AWS Amplify UI Builder.
//
// Retrieves a list of forms for a specified Amplify app and backend environment.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation ListForms for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ListForms
func (c *AmplifyUIBuilder) ListForms(input *ListFormsInput) (*ListFormsOutput, error) {
	req, out := c.ListFormsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListThemes = "ListThemes"

// ListThemesRequest generates a "aws/request.Request" representing the
// client's request for the ListThemes 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 ListThemes for more information on using the ListThemes
// 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 ListThemesRequest method.
//	req, resp := client.ListThemesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ListThemes
func (c *AmplifyUIBuilder) ListThemesRequest(input *ListThemesInput) (req *request.Request, output *ListThemesOutput) {
	op := &request.Operation{
		Name:       opListThemes,
		HTTPMethod: "GET",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/themes",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListThemesInput{}
	}

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

// ListThemes API operation for AWS Amplify UI Builder.
//
// Retrieves a list of themes for a specified Amplify app and backend environment.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation ListThemes for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/ListThemes
func (c *AmplifyUIBuilder) ListThemes(input *ListThemesInput) (*ListThemesOutput, error) {
	req, out := c.ListThemesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opPutMetadataFlag = "PutMetadataFlag"

// PutMetadataFlagRequest generates a "aws/request.Request" representing the
// client's request for the PutMetadataFlag 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 PutMetadataFlag for more information on using the PutMetadataFlag
// 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 PutMetadataFlagRequest method.
//	req, resp := client.PutMetadataFlagRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/PutMetadataFlag
func (c *AmplifyUIBuilder) PutMetadataFlagRequest(input *PutMetadataFlagInput) (req *request.Request, output *PutMetadataFlagOutput) {
	op := &request.Operation{
		Name:       opPutMetadataFlag,
		HTTPMethod: "PUT",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/metadata/features/{featureName}",
	}

	if input == nil {
		input = &PutMetadataFlagInput{}
	}

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

// PutMetadataFlag API operation for AWS Amplify UI Builder.
//
// Stores the metadata information about a feature on a form.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation PutMetadataFlag for usage and error information.
//
// Returned Error Types:
//
//   - UnauthorizedException
//     You don't have permission to perform this operation.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/PutMetadataFlag
func (c *AmplifyUIBuilder) PutMetadataFlag(input *PutMetadataFlagInput) (*PutMetadataFlagOutput, error) {
	req, out := c.PutMetadataFlagRequest(input)
	return out, req.Send()
}

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

const opRefreshToken = "RefreshToken"

// RefreshTokenRequest generates a "aws/request.Request" representing the
// client's request for the RefreshToken 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 RefreshToken for more information on using the RefreshToken
// 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 RefreshTokenRequest method.
//	req, resp := client.RefreshTokenRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/RefreshToken
func (c *AmplifyUIBuilder) RefreshTokenRequest(input *RefreshTokenInput) (req *request.Request, output *RefreshTokenOutput) {
	op := &request.Operation{
		Name:       opRefreshToken,
		HTTPMethod: "POST",
		HTTPPath:   "/tokens/{provider}/refresh",
	}

	if input == nil {
		input = &RefreshTokenInput{}
	}

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

// RefreshToken API operation for AWS Amplify UI Builder.
//
// Refreshes a previously issued access token that might have expired.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation RefreshToken for usage and error information.
//
// Returned Error Types:
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/RefreshToken
func (c *AmplifyUIBuilder) RefreshToken(input *RefreshTokenInput) (*RefreshTokenOutput, error) {
	req, out := c.RefreshTokenRequest(input)
	return out, req.Send()
}

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

const opUpdateComponent = "UpdateComponent"

// UpdateComponentRequest generates a "aws/request.Request" representing the
// client's request for the UpdateComponent 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 UpdateComponent for more information on using the UpdateComponent
// 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 UpdateComponentRequest method.
//	req, resp := client.UpdateComponentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/UpdateComponent
func (c *AmplifyUIBuilder) UpdateComponentRequest(input *UpdateComponentInput) (req *request.Request, output *UpdateComponentOutput) {
	op := &request.Operation{
		Name:       opUpdateComponent,
		HTTPMethod: "PATCH",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/components/{id}",
	}

	if input == nil {
		input = &UpdateComponentInput{}
	}

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

// UpdateComponent API operation for AWS Amplify UI Builder.
//
// Updates an existing component.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation UpdateComponent for usage and error information.
//
// Returned Error Types:
//
//   - ResourceConflictException
//     The resource specified in the request conflicts with an existing resource.
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/UpdateComponent
func (c *AmplifyUIBuilder) UpdateComponent(input *UpdateComponentInput) (*UpdateComponentOutput, error) {
	req, out := c.UpdateComponentRequest(input)
	return out, req.Send()
}

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

const opUpdateForm = "UpdateForm"

// UpdateFormRequest generates a "aws/request.Request" representing the
// client's request for the UpdateForm 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 UpdateForm for more information on using the UpdateForm
// 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 UpdateFormRequest method.
//	req, resp := client.UpdateFormRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/UpdateForm
func (c *AmplifyUIBuilder) UpdateFormRequest(input *UpdateFormInput) (req *request.Request, output *UpdateFormOutput) {
	op := &request.Operation{
		Name:       opUpdateForm,
		HTTPMethod: "PATCH",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/forms/{id}",
	}

	if input == nil {
		input = &UpdateFormInput{}
	}

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

// UpdateForm API operation for AWS Amplify UI Builder.
//
// Updates an existing form.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation UpdateForm for usage and error information.
//
// Returned Error Types:
//
//   - ResourceConflictException
//     The resource specified in the request conflicts with an existing resource.
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/UpdateForm
func (c *AmplifyUIBuilder) UpdateForm(input *UpdateFormInput) (*UpdateFormOutput, error) {
	req, out := c.UpdateFormRequest(input)
	return out, req.Send()
}

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

const opUpdateTheme = "UpdateTheme"

// UpdateThemeRequest generates a "aws/request.Request" representing the
// client's request for the UpdateTheme 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 UpdateTheme for more information on using the UpdateTheme
// 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 UpdateThemeRequest method.
//	req, resp := client.UpdateThemeRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/UpdateTheme
func (c *AmplifyUIBuilder) UpdateThemeRequest(input *UpdateThemeInput) (req *request.Request, output *UpdateThemeOutput) {
	op := &request.Operation{
		Name:       opUpdateTheme,
		HTTPMethod: "PATCH",
		HTTPPath:   "/app/{appId}/environment/{environmentName}/themes/{id}",
	}

	if input == nil {
		input = &UpdateThemeInput{}
	}

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

// UpdateTheme API operation for AWS Amplify UI Builder.
//
// Updates an existing theme.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Amplify UI Builder's
// API operation UpdateTheme for usage and error information.
//
// Returned Error Types:
//
//   - ResourceConflictException
//     The resource specified in the request conflicts with an existing resource.
//
//   - InternalServerException
//     An internal error has occurred. Please retry your request.
//
//   - InvalidParameterException
//     An invalid or out-of-range value was supplied for the input parameter.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/amplifyuibuilder-2021-08-11/UpdateTheme
func (c *AmplifyUIBuilder) UpdateTheme(input *UpdateThemeInput) (*UpdateThemeOutput, error) {
	req, out := c.UpdateThemeRequest(input)
	return out, req.Send()
}

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

// Represents the event action configuration for an element of a Component or
// ComponentChild. Use for the workflow feature in Amplify Studio that allows
// you to bind events and actions to components. ActionParameters defines the
// action that is performed when an event occurs on the component.
type ActionParameters struct {
	_ struct{} `type:"structure"`

	// The HTML anchor link to the location to open. Specify this value for a navigation
	// action.
	Anchor *ComponentProperty `locationName:"anchor" type:"structure"`

	// A dictionary of key-value pairs mapping Amplify Studio properties to fields
	// in a data model. Use when the action performs an operation on an Amplify
	// DataStore model.
	Fields map[string]*ComponentProperty `locationName:"fields" type:"map"`

	// Specifies whether the user should be signed out globally. Specify this value
	// for an auth sign out action.
	Global *ComponentProperty `locationName:"global" type:"structure"`

	// The unique ID of the component that the ActionParameters apply to.
	Id *ComponentProperty `locationName:"id" type:"structure"`

	// The name of the data model. Use when the action performs an operation on
	// an Amplify DataStore model.
	Model *string `locationName:"model" type:"string"`

	// A key-value pair that specifies the state property name and its initial value.
	State *MutationActionSetStateParameter `locationName:"state" type:"structure"`

	// The element within the same component to modify when the action occurs.
	Target *ComponentProperty `locationName:"target" type:"structure"`

	// The type of navigation action. Valid values are url and anchor. This value
	// is required for a navigation action.
	Type *ComponentProperty `locationName:"type" type:"structure"`

	// The URL to the location to open. Specify this value for a navigation action.
	Url *ComponentProperty `locationName:"url" 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 ActionParameters) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ActionParameters) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ActionParameters"}
	if s.Anchor != nil {
		if err := s.Anchor.Validate(); err != nil {
			invalidParams.AddNested("Anchor", err.(request.ErrInvalidParams))
		}
	}
	if s.Fields != nil {
		for i, v := range s.Fields {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Fields", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Global != nil {
		if err := s.Global.Validate(); err != nil {
			invalidParams.AddNested("Global", err.(request.ErrInvalidParams))
		}
	}
	if s.Id != nil {
		if err := s.Id.Validate(); err != nil {
			invalidParams.AddNested("Id", err.(request.ErrInvalidParams))
		}
	}
	if s.State != nil {
		if err := s.State.Validate(); err != nil {
			invalidParams.AddNested("State", err.(request.ErrInvalidParams))
		}
	}
	if s.Target != nil {
		if err := s.Target.Validate(); err != nil {
			invalidParams.AddNested("Target", err.(request.ErrInvalidParams))
		}
	}
	if s.Type != nil {
		if err := s.Type.Validate(); err != nil {
			invalidParams.AddNested("Type", err.(request.ErrInvalidParams))
		}
	}
	if s.Url != nil {
		if err := s.Url.Validate(); err != nil {
			invalidParams.AddNested("Url", err.(request.ErrInvalidParams))
		}
	}

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

// SetAnchor sets the Anchor field's value.
func (s *ActionParameters) SetAnchor(v *ComponentProperty) *ActionParameters {
	s.Anchor = v
	return s
}

// SetFields sets the Fields field's value.
func (s *ActionParameters) SetFields(v map[string]*ComponentProperty) *ActionParameters {
	s.Fields = v
	return s
}

// SetGlobal sets the Global field's value.
func (s *ActionParameters) SetGlobal(v *ComponentProperty) *ActionParameters {
	s.Global = v
	return s
}

// SetId sets the Id field's value.
func (s *ActionParameters) SetId(v *ComponentProperty) *ActionParameters {
	s.Id = v
	return s
}

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

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

// SetTarget sets the Target field's value.
func (s *ActionParameters) SetTarget(v *ComponentProperty) *ActionParameters {
	s.Target = v
	return s
}

// SetType sets the Type field's value.
func (s *ActionParameters) SetType(v *ComponentProperty) *ActionParameters {
	s.Type = v
	return s
}

// SetUrl sets the Url field's value.
func (s *ActionParameters) SetUrl(v *ComponentProperty) *ActionParameters {
	s.Url = v
	return s
}

// Contains the configuration settings for a user interface (UI) element for
// an Amplify app. A component is configured as a primary, stand-alone UI element.
// Use ComponentChild to configure an instance of a Component. A ComponentChild
// instance inherits the configuration of the main Component.
type Component struct {
	_ struct{} `type:"structure"`

	// The unique ID of the Amplify app associated with the component.
	//
	// AppId is a required field
	AppId *string `locationName:"appId" type:"string" required:"true"`

	// The information to connect a component's properties to data at runtime. You
	// can't specify tags as a valid property for bindingProperties.
	//
	// BindingProperties is a required field
	BindingProperties map[string]*ComponentBindingPropertiesValue `locationName:"bindingProperties" type:"map" required:"true"`

	// A list of the component's ComponentChild instances.
	Children []*ComponentChild `locationName:"children" type:"list"`

	// The data binding configuration for the component's properties. Use this for
	// a collection component. You can't specify tags as a valid property for collectionProperties.
	CollectionProperties map[string]*ComponentDataConfiguration `locationName:"collectionProperties" type:"map"`

	// The type of the component. This can be an Amplify custom UI component or
	// another custom component.
	//
	// ComponentType is a required field
	ComponentType *string `locationName:"componentType" min:"1" type:"string" required:"true"`

	// The time that the component was created.
	//
	// CreatedAt is a required field
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp" timestampFormat:"iso8601" required:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `locationName:"environmentName" type:"string" required:"true"`

	// Describes the events that can be raised on the component. Use for the workflow
	// feature in Amplify Studio that allows you to bind events and actions to components.
	Events map[string]*ComponentEvent `locationName:"events" type:"map"`

	// The unique ID of the component.
	//
	// Id is a required field
	Id *string `locationName:"id" type:"string" required:"true"`

	// The time that the component was modified.
	ModifiedAt *time.Time `locationName:"modifiedAt" type:"timestamp" timestampFormat:"iso8601"`

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

	// Describes the component's properties that can be overriden in a customized
	// instance of the component. You can't specify tags as a valid property for
	// overrides.
	//
	// Overrides is a required field
	Overrides map[string]map[string]*string `locationName:"overrides" type:"map" required:"true"`

	// Describes the component's properties. You can't specify tags as a valid property
	// for properties.
	//
	// Properties is a required field
	Properties map[string]*ComponentProperty `locationName:"properties" type:"map" required:"true"`

	// The schema version of the component when it was imported.
	SchemaVersion *string `locationName:"schemaVersion" type:"string"`

	// The unique ID of the component in its original source system, such as Figma.
	SourceId *string `locationName:"sourceId" type:"string"`

	// One or more key-value pairs to use when tagging the component.
	Tags map[string]*string `locationName:"tags" type:"map"`

	// A list of the component's variants. A variant is a unique style configuration
	// of a main component.
	//
	// Variants is a required field
	Variants []*ComponentVariant `locationName:"variants" 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 Component) String() string {
	return awsutil.Prettify(s)
}

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

// SetAppId sets the AppId field's value.
func (s *Component) SetAppId(v string) *Component {
	s.AppId = &v
	return s
}

// SetBindingProperties sets the BindingProperties field's value.
func (s *Component) SetBindingProperties(v map[string]*ComponentBindingPropertiesValue) *Component {
	s.BindingProperties = v
	return s
}

// SetChildren sets the Children field's value.
func (s *Component) SetChildren(v []*ComponentChild) *Component {
	s.Children = v
	return s
}

// SetCollectionProperties sets the CollectionProperties field's value.
func (s *Component) SetCollectionProperties(v map[string]*ComponentDataConfiguration) *Component {
	s.CollectionProperties = v
	return s
}

// SetComponentType sets the ComponentType field's value.
func (s *Component) SetComponentType(v string) *Component {
	s.ComponentType = &v
	return s
}

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

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *Component) SetEnvironmentName(v string) *Component {
	s.EnvironmentName = &v
	return s
}

// SetEvents sets the Events field's value.
func (s *Component) SetEvents(v map[string]*ComponentEvent) *Component {
	s.Events = v
	return s
}

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

// SetModifiedAt sets the ModifiedAt field's value.
func (s *Component) SetModifiedAt(v time.Time) *Component {
	s.ModifiedAt = &v
	return s
}

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

// SetOverrides sets the Overrides field's value.
func (s *Component) SetOverrides(v map[string]map[string]*string) *Component {
	s.Overrides = v
	return s
}

// SetProperties sets the Properties field's value.
func (s *Component) SetProperties(v map[string]*ComponentProperty) *Component {
	s.Properties = v
	return s
}

// SetSchemaVersion sets the SchemaVersion field's value.
func (s *Component) SetSchemaVersion(v string) *Component {
	s.SchemaVersion = &v
	return s
}

// SetSourceId sets the SourceId field's value.
func (s *Component) SetSourceId(v string) *Component {
	s.SourceId = &v
	return s
}

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

// SetVariants sets the Variants field's value.
func (s *Component) SetVariants(v []*ComponentVariant) *Component {
	s.Variants = v
	return s
}

// Represents the data binding configuration for a component at runtime. You
// can use ComponentBindingPropertiesValue to add exposed properties to a component
// to allow different values to be entered when a component is reused in different
// places in an app.
type ComponentBindingPropertiesValue struct {
	_ struct{} `type:"structure"`

	// Describes the properties to customize with data at runtime.
	BindingProperties *ComponentBindingPropertiesValueProperties `locationName:"bindingProperties" type:"structure"`

	// The default value of the property.
	DefaultValue *string `locationName:"defaultValue" type:"string"`

	// The property type.
	Type *string `locationName:"type" 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 ComponentBindingPropertiesValue) String() string {
	return awsutil.Prettify(s)
}

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

// SetBindingProperties sets the BindingProperties field's value.
func (s *ComponentBindingPropertiesValue) SetBindingProperties(v *ComponentBindingPropertiesValueProperties) *ComponentBindingPropertiesValue {
	s.BindingProperties = v
	return s
}

// SetDefaultValue sets the DefaultValue field's value.
func (s *ComponentBindingPropertiesValue) SetDefaultValue(v string) *ComponentBindingPropertiesValue {
	s.DefaultValue = &v
	return s
}

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

// Represents the data binding configuration for a specific property using data
// stored in Amazon Web Services. For Amazon Web Services connected properties,
// you can bind a property to data stored in an Amazon S3 bucket, an Amplify
// DataStore model or an authenticated user attribute.
type ComponentBindingPropertiesValueProperties struct {
	_ struct{} `type:"structure"`

	// An Amazon S3 bucket.
	Bucket *string `locationName:"bucket" type:"string"`

	// The default value to assign to the property.
	DefaultValue *string `locationName:"defaultValue" type:"string"`

	// The field to bind the data to.
	Field *string `locationName:"field" type:"string"`

	// The storage key for an Amazon S3 bucket.
	Key *string `locationName:"key" type:"string"`

	// An Amplify DataStore model.
	Model *string `locationName:"model" type:"string"`

	// A list of predicates for binding a component's properties to data.
	Predicates []*Predicate `locationName:"predicates" type:"list"`

	// The name of a component slot.
	SlotName *string `locationName:"slotName" type:"string"`

	// An authenticated user attribute.
	UserAttribute *string `locationName:"userAttribute" 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 ComponentBindingPropertiesValueProperties) String() string {
	return awsutil.Prettify(s)
}

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

// SetBucket sets the Bucket field's value.
func (s *ComponentBindingPropertiesValueProperties) SetBucket(v string) *ComponentBindingPropertiesValueProperties {
	s.Bucket = &v
	return s
}

// SetDefaultValue sets the DefaultValue field's value.
func (s *ComponentBindingPropertiesValueProperties) SetDefaultValue(v string) *ComponentBindingPropertiesValueProperties {
	s.DefaultValue = &v
	return s
}

// SetField sets the Field field's value.
func (s *ComponentBindingPropertiesValueProperties) SetField(v string) *ComponentBindingPropertiesValueProperties {
	s.Field = &v
	return s
}

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

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

// SetPredicates sets the Predicates field's value.
func (s *ComponentBindingPropertiesValueProperties) SetPredicates(v []*Predicate) *ComponentBindingPropertiesValueProperties {
	s.Predicates = v
	return s
}

// SetSlotName sets the SlotName field's value.
func (s *ComponentBindingPropertiesValueProperties) SetSlotName(v string) *ComponentBindingPropertiesValueProperties {
	s.SlotName = &v
	return s
}

// SetUserAttribute sets the UserAttribute field's value.
func (s *ComponentBindingPropertiesValueProperties) SetUserAttribute(v string) *ComponentBindingPropertiesValueProperties {
	s.UserAttribute = &v
	return s
}

// A nested UI configuration within a parent Component.
type ComponentChild struct {
	_ struct{} `type:"structure"`

	// The list of ComponentChild instances for this component.
	Children []*ComponentChild `locationName:"children" type:"list"`

	// The type of the child component.
	//
	// ComponentType is a required field
	ComponentType *string `locationName:"componentType" type:"string" required:"true"`

	// Describes the events that can be raised on the child component. Use for the
	// workflow feature in Amplify Studio that allows you to bind events and actions
	// to components.
	Events map[string]*ComponentEvent `locationName:"events" type:"map"`

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

	// Describes the properties of the child component. You can't specify tags as
	// a valid property for properties.
	//
	// Properties is a required field
	Properties map[string]*ComponentProperty `locationName:"properties" type:"map" required:"true"`

	// The unique ID of the child component in its original source system, such
	// as Figma.
	SourceId *string `locationName:"sourceId" 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 ComponentChild) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ComponentChild) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ComponentChild"}
	if s.ComponentType == nil {
		invalidParams.Add(request.NewErrParamRequired("ComponentType"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Properties == nil {
		invalidParams.Add(request.NewErrParamRequired("Properties"))
	}
	if s.Children != nil {
		for i, v := range s.Children {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Children", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Events != nil {
		for i, v := range s.Events {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Events", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Properties != nil {
		for i, v := range s.Properties {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Properties", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetChildren sets the Children field's value.
func (s *ComponentChild) SetChildren(v []*ComponentChild) *ComponentChild {
	s.Children = v
	return s
}

// SetComponentType sets the ComponentType field's value.
func (s *ComponentChild) SetComponentType(v string) *ComponentChild {
	s.ComponentType = &v
	return s
}

// SetEvents sets the Events field's value.
func (s *ComponentChild) SetEvents(v map[string]*ComponentEvent) *ComponentChild {
	s.Events = v
	return s
}

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

// SetProperties sets the Properties field's value.
func (s *ComponentChild) SetProperties(v map[string]*ComponentProperty) *ComponentChild {
	s.Properties = v
	return s
}

// SetSourceId sets the SourceId field's value.
func (s *ComponentChild) SetSourceId(v string) *ComponentChild {
	s.SourceId = &v
	return s
}

// Represents a conditional expression to set a component property. Use ComponentConditionProperty
// to set a property to different values conditionally, based on the value of
// another property.
type ComponentConditionProperty struct {
	_ struct{} `type:"structure"`

	// The value to assign to the property if the condition is not met.
	Else *ComponentProperty `locationName:"else" type:"structure"`

	// The name of a field. Specify this when the property is a data model.
	Field *string `locationName:"field" type:"string"`

	// The value of the property to evaluate.
	Operand *string `locationName:"operand" type:"string"`

	// The type of the property to evaluate.
	OperandType *string `locationName:"operandType" type:"string"`

	// The operator to use to perform the evaluation, such as eq to represent equals.
	Operator *string `locationName:"operator" type:"string"`

	// The name of the conditional property.
	Property *string `locationName:"property" type:"string"`

	// The value to assign to the property if the condition is met.
	Then *ComponentProperty `locationName:"then" 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 ComponentConditionProperty) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetElse sets the Else field's value.
func (s *ComponentConditionProperty) SetElse(v *ComponentProperty) *ComponentConditionProperty {
	s.Else = v
	return s
}

// SetField sets the Field field's value.
func (s *ComponentConditionProperty) SetField(v string) *ComponentConditionProperty {
	s.Field = &v
	return s
}

// SetOperand sets the Operand field's value.
func (s *ComponentConditionProperty) SetOperand(v string) *ComponentConditionProperty {
	s.Operand = &v
	return s
}

// SetOperandType sets the OperandType field's value.
func (s *ComponentConditionProperty) SetOperandType(v string) *ComponentConditionProperty {
	s.OperandType = &v
	return s
}

// SetOperator sets the Operator field's value.
func (s *ComponentConditionProperty) SetOperator(v string) *ComponentConditionProperty {
	s.Operator = &v
	return s
}

// SetProperty sets the Property field's value.
func (s *ComponentConditionProperty) SetProperty(v string) *ComponentConditionProperty {
	s.Property = &v
	return s
}

// SetThen sets the Then field's value.
func (s *ComponentConditionProperty) SetThen(v *ComponentProperty) *ComponentConditionProperty {
	s.Then = v
	return s
}

// Describes the configuration for binding a component's properties to data.
type ComponentDataConfiguration struct {
	_ struct{} `type:"structure"`

	// A list of IDs to use to bind data to a component. Use this property to bind
	// specifically chosen data, rather than data retrieved from a query.
	Identifiers []*string `locationName:"identifiers" type:"list"`

	// The name of the data model to use to bind data to a component.
	//
	// Model is a required field
	Model *string `locationName:"model" type:"string" required:"true"`

	// Represents the conditional logic to use when binding data to a component.
	// Use this property to retrieve only a subset of the data in a collection.
	Predicate *Predicate `locationName:"predicate" type:"structure"`

	// Describes how to sort the component's properties.
	Sort []*SortProperty `locationName:"sort" 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 ComponentDataConfiguration) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetIdentifiers sets the Identifiers field's value.
func (s *ComponentDataConfiguration) SetIdentifiers(v []*string) *ComponentDataConfiguration {
	s.Identifiers = v
	return s
}

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

// SetPredicate sets the Predicate field's value.
func (s *ComponentDataConfiguration) SetPredicate(v *Predicate) *ComponentDataConfiguration {
	s.Predicate = v
	return s
}

// SetSort sets the Sort field's value.
func (s *ComponentDataConfiguration) SetSort(v []*SortProperty) *ComponentDataConfiguration {
	s.Sort = v
	return s
}

// Describes the configuration of an event. You can bind an event and a corresponding
// action to a Component or a ComponentChild. A button click is an example of
// an event.
type ComponentEvent struct {
	_ struct{} `type:"structure"`

	// The action to perform when a specific event is raised.
	Action *string `locationName:"action" type:"string"`

	// Binds an event to an action on a component. When you specify a bindingEvent,
	// the event is called when the action is performed.
	BindingEvent *string `locationName:"bindingEvent" type:"string"`

	// Describes information about the action.
	Parameters *ActionParameters `locationName:"parameters" 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 ComponentEvent) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAction sets the Action field's value.
func (s *ComponentEvent) SetAction(v string) *ComponentEvent {
	s.Action = &v
	return s
}

// SetBindingEvent sets the BindingEvent field's value.
func (s *ComponentEvent) SetBindingEvent(v string) *ComponentEvent {
	s.BindingEvent = &v
	return s
}

// SetParameters sets the Parameters field's value.
func (s *ComponentEvent) SetParameters(v *ActionParameters) *ComponentEvent {
	s.Parameters = v
	return s
}

// Describes the configuration for all of a component's properties. Use ComponentProperty
// to specify the values to render or bind by default.
type ComponentProperty struct {
	_ struct{} `type:"structure"`

	// The information to bind the component property to data at runtime.
	BindingProperties *ComponentPropertyBindingProperties `locationName:"bindingProperties" type:"structure"`

	// The information to bind the component property to form data.
	Bindings map[string]*FormBindingElement `locationName:"bindings" type:"map"`

	// The information to bind the component property to data at runtime. Use this
	// for collection components.
	CollectionBindingProperties *ComponentPropertyBindingProperties `locationName:"collectionBindingProperties" type:"structure"`

	// The name of the component that is affected by an event.
	ComponentName *string `locationName:"componentName" type:"string"`

	// A list of component properties to concatenate to create the value to assign
	// to this component property.
	Concat []*ComponentProperty `locationName:"concat" type:"list"`

	// The conditional expression to use to assign a value to the component property.
	Condition *ComponentConditionProperty `locationName:"condition" type:"structure"`

	// Specifies whether the user configured the property in Amplify Studio after
	// importing it.
	Configured *bool `locationName:"configured" type:"boolean"`

	// The default value to assign to the component property.
	DefaultValue *string `locationName:"defaultValue" type:"string"`

	// An event that occurs in your app. Use this for workflow data binding.
	Event *string `locationName:"event" type:"string"`

	// The default value assigned to the property when the component is imported
	// into an app.
	ImportedValue *string `locationName:"importedValue" type:"string"`

	// The data model to use to assign a value to the component property.
	Model *string `locationName:"model" type:"string"`

	// The name of the component's property that is affected by an event.
	Property *string `locationName:"property" type:"string"`

	// The component type.
	Type *string `locationName:"type" type:"string"`

	// An authenticated user attribute to use to assign a value to the component
	// property.
	UserAttribute *string `locationName:"userAttribute" type:"string"`

	// The value to assign to the component property.
	Value *string `locationName:"value" 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 ComponentProperty) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ComponentProperty) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ComponentProperty"}
	if s.BindingProperties != nil {
		if err := s.BindingProperties.Validate(); err != nil {
			invalidParams.AddNested("BindingProperties", err.(request.ErrInvalidParams))
		}
	}
	if s.Bindings != nil {
		for i, v := range s.Bindings {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Bindings", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.CollectionBindingProperties != nil {
		if err := s.CollectionBindingProperties.Validate(); err != nil {
			invalidParams.AddNested("CollectionBindingProperties", err.(request.ErrInvalidParams))
		}
	}
	if s.Concat != nil {
		for i, v := range s.Concat {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Concat", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.Condition != nil {
		if err := s.Condition.Validate(); err != nil {
			invalidParams.AddNested("Condition", err.(request.ErrInvalidParams))
		}
	}

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

// SetBindingProperties sets the BindingProperties field's value.
func (s *ComponentProperty) SetBindingProperties(v *ComponentPropertyBindingProperties) *ComponentProperty {
	s.BindingProperties = v
	return s
}

// SetBindings sets the Bindings field's value.
func (s *ComponentProperty) SetBindings(v map[string]*FormBindingElement) *ComponentProperty {
	s.Bindings = v
	return s
}

// SetCollectionBindingProperties sets the CollectionBindingProperties field's value.
func (s *ComponentProperty) SetCollectionBindingProperties(v *ComponentPropertyBindingProperties) *ComponentProperty {
	s.CollectionBindingProperties = v
	return s
}

// SetComponentName sets the ComponentName field's value.
func (s *ComponentProperty) SetComponentName(v string) *ComponentProperty {
	s.ComponentName = &v
	return s
}

// SetConcat sets the Concat field's value.
func (s *ComponentProperty) SetConcat(v []*ComponentProperty) *ComponentProperty {
	s.Concat = v
	return s
}

// SetCondition sets the Condition field's value.
func (s *ComponentProperty) SetCondition(v *ComponentConditionProperty) *ComponentProperty {
	s.Condition = v
	return s
}

// SetConfigured sets the Configured field's value.
func (s *ComponentProperty) SetConfigured(v bool) *ComponentProperty {
	s.Configured = &v
	return s
}

// SetDefaultValue sets the DefaultValue field's value.
func (s *ComponentProperty) SetDefaultValue(v string) *ComponentProperty {
	s.DefaultValue = &v
	return s
}

// SetEvent sets the Event field's value.
func (s *ComponentProperty) SetEvent(v string) *ComponentProperty {
	s.Event = &v
	return s
}

// SetImportedValue sets the ImportedValue field's value.
func (s *ComponentProperty) SetImportedValue(v string) *ComponentProperty {
	s.ImportedValue = &v
	return s
}

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

// SetProperty sets the Property field's value.
func (s *ComponentProperty) SetProperty(v string) *ComponentProperty {
	s.Property = &v
	return s
}

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

// SetUserAttribute sets the UserAttribute field's value.
func (s *ComponentProperty) SetUserAttribute(v string) *ComponentProperty {
	s.UserAttribute = &v
	return s
}

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

// Associates a component property to a binding property. This enables exposed
// properties on the top level component to propagate data to the component's
// property values.
type ComponentPropertyBindingProperties struct {
	_ struct{} `type:"structure"`

	// The data field to bind the property to.
	Field *string `locationName:"field" type:"string"`

	// The component property to bind to the data field.
	//
	// Property is a required field
	Property *string `locationName:"property" 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 ComponentPropertyBindingProperties) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetField sets the Field field's value.
func (s *ComponentPropertyBindingProperties) SetField(v string) *ComponentPropertyBindingProperties {
	s.Field = &v
	return s
}

// SetProperty sets the Property field's value.
func (s *ComponentPropertyBindingProperties) SetProperty(v string) *ComponentPropertyBindingProperties {
	s.Property = &v
	return s
}

// Contains a summary of a component. This is a read-only data type that is
// returned by ListComponents.
type ComponentSummary struct {
	_ struct{} `type:"structure"`

	// The unique ID of the Amplify app associated with the component.
	//
	// AppId is a required field
	AppId *string `locationName:"appId" type:"string" required:"true"`

	// The component type.
	//
	// ComponentType is a required field
	ComponentType *string `locationName:"componentType" min:"1" type:"string" required:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `locationName:"environmentName" type:"string" required:"true"`

	// The unique ID of the component.
	//
	// Id is a required field
	Id *string `locationName:"id" type:"string" required:"true"`

	// The name of the component.
	//
	// Name is a required field
	Name *string `locationName:"name" 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 ComponentSummary) String() string {
	return awsutil.Prettify(s)
}

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

// SetAppId sets the AppId field's value.
func (s *ComponentSummary) SetAppId(v string) *ComponentSummary {
	s.AppId = &v
	return s
}

// SetComponentType sets the ComponentType field's value.
func (s *ComponentSummary) SetComponentType(v string) *ComponentSummary {
	s.ComponentType = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *ComponentSummary) SetEnvironmentName(v string) *ComponentSummary {
	s.EnvironmentName = &v
	return s
}

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

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

// Describes the style configuration of a unique variation of a main component.
type ComponentVariant struct {
	_ struct{} `type:"structure"`

	// The properties of the component variant that can be overriden when customizing
	// an instance of the component. You can't specify tags as a valid property
	// for overrides.
	Overrides map[string]map[string]*string `locationName:"overrides" type:"map"`

	// The combination of variants that comprise this variant. You can't specify
	// tags as a valid property for variantValues.
	VariantValues map[string]*string `locationName:"variantValues" type:"map"`
}

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

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

// SetOverrides sets the Overrides field's value.
func (s *ComponentVariant) SetOverrides(v map[string]map[string]*string) *ComponentVariant {
	s.Overrides = v
	return s
}

// SetVariantValues sets the VariantValues field's value.
func (s *ComponentVariant) SetVariantValues(v map[string]*string) *ComponentVariant {
	s.VariantValues = v
	return s
}

// Represents all of the information that is required to create a component.
type CreateComponentData struct {
	_ struct{} `type:"structure"`

	// The data binding information for the component's properties.
	//
	// BindingProperties is a required field
	BindingProperties map[string]*ComponentBindingPropertiesValue `locationName:"bindingProperties" type:"map" required:"true"`

	// A list of child components that are instances of the main component.
	Children []*ComponentChild `locationName:"children" type:"list"`

	// The data binding configuration for customizing a component's properties.
	// Use this for a collection component.
	CollectionProperties map[string]*ComponentDataConfiguration `locationName:"collectionProperties" type:"map"`

	// The component type. This can be an Amplify custom UI component or another
	// custom component.
	//
	// ComponentType is a required field
	ComponentType *string `locationName:"componentType" min:"1" type:"string" required:"true"`

	// The event configuration for the component. Use for the workflow feature in
	// Amplify Studio that allows you to bind events and actions to components.
	Events map[string]*ComponentEvent `locationName:"events" type:"map"`

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

	// Describes the component properties that can be overriden to customize an
	// instance of the component.
	//
	// Overrides is a required field
	Overrides map[string]map[string]*string `locationName:"overrides" type:"map" required:"true"`

	// Describes the component's properties.
	//
	// Properties is a required field
	Properties map[string]*ComponentProperty `locationName:"properties" type:"map" required:"true"`

	// The schema version of the component when it was imported.
	SchemaVersion *string `locationName:"schemaVersion" type:"string"`

	// The unique ID of the component in its original source system, such as Figma.
	SourceId *string `locationName:"sourceId" type:"string"`

	// One or more key-value pairs to use when tagging the component data.
	Tags map[string]*string `locationName:"tags" type:"map"`

	// A list of the unique variants of this component.
	//
	// Variants is a required field
	Variants []*ComponentVariant `locationName:"variants" 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 CreateComponentData) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetBindingProperties sets the BindingProperties field's value.
func (s *CreateComponentData) SetBindingProperties(v map[string]*ComponentBindingPropertiesValue) *CreateComponentData {
	s.BindingProperties = v
	return s
}

// SetChildren sets the Children field's value.
func (s *CreateComponentData) SetChildren(v []*ComponentChild) *CreateComponentData {
	s.Children = v
	return s
}

// SetCollectionProperties sets the CollectionProperties field's value.
func (s *CreateComponentData) SetCollectionProperties(v map[string]*ComponentDataConfiguration) *CreateComponentData {
	s.CollectionProperties = v
	return s
}

// SetComponentType sets the ComponentType field's value.
func (s *CreateComponentData) SetComponentType(v string) *CreateComponentData {
	s.ComponentType = &v
	return s
}

// SetEvents sets the Events field's value.
func (s *CreateComponentData) SetEvents(v map[string]*ComponentEvent) *CreateComponentData {
	s.Events = v
	return s
}

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

// SetOverrides sets the Overrides field's value.
func (s *CreateComponentData) SetOverrides(v map[string]map[string]*string) *CreateComponentData {
	s.Overrides = v
	return s
}

// SetProperties sets the Properties field's value.
func (s *CreateComponentData) SetProperties(v map[string]*ComponentProperty) *CreateComponentData {
	s.Properties = v
	return s
}

// SetSchemaVersion sets the SchemaVersion field's value.
func (s *CreateComponentData) SetSchemaVersion(v string) *CreateComponentData {
	s.SchemaVersion = &v
	return s
}

// SetSourceId sets the SourceId field's value.
func (s *CreateComponentData) SetSourceId(v string) *CreateComponentData {
	s.SourceId = &v
	return s
}

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

// SetVariants sets the Variants field's value.
func (s *CreateComponentData) SetVariants(v []*ComponentVariant) *CreateComponentData {
	s.Variants = v
	return s
}

type CreateComponentInput struct {
	_ struct{} `type:"structure" payload:"ComponentToCreate"`

	// The unique ID of the Amplify app to associate with the component.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The unique client token.
	ClientToken *string `location:"querystring" locationName:"clientToken" type:"string" idempotencyToken:"true"`

	// Represents the configuration of the component to create.
	//
	// ComponentToCreate is a required field
	ComponentToCreate *CreateComponentData `locationName:"componentToCreate" type:"structure" required:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" 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 CreateComponentInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *CreateComponentInput) SetAppId(v string) *CreateComponentInput {
	s.AppId = &v
	return s
}

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

// SetComponentToCreate sets the ComponentToCreate field's value.
func (s *CreateComponentInput) SetComponentToCreate(v *CreateComponentData) *CreateComponentInput {
	s.ComponentToCreate = v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *CreateComponentInput) SetEnvironmentName(v string) *CreateComponentInput {
	s.EnvironmentName = &v
	return s
}

type CreateComponentOutput struct {
	_ struct{} `type:"structure" payload:"Entity"`

	// Describes the configuration of the new component.
	Entity *Component `locationName:"entity" 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 CreateComponentOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEntity sets the Entity field's value.
func (s *CreateComponentOutput) SetEntity(v *Component) *CreateComponentOutput {
	s.Entity = v
	return s
}

// Represents all of the information that is required to create a form.
type CreateFormData struct {
	_ struct{} `type:"structure"`

	// The FormCTA object that stores the call to action configuration for the form.
	Cta *FormCTA `locationName:"cta" type:"structure"`

	// The type of data source to use to create the form.
	//
	// DataType is a required field
	DataType *FormDataTypeConfig `locationName:"dataType" type:"structure" required:"true"`

	// The configuration information for the form's fields.
	//
	// Fields is a required field
	Fields map[string]*FieldConfig `locationName:"fields" type:"map" required:"true"`

	// Specifies whether to perform a create or update action on the form.
	//
	// FormActionType is a required field
	FormActionType *string `locationName:"formActionType" type:"string" required:"true" enum:"FormActionType"`

	// Specifies an icon or decoration to display on the form.
	LabelDecorator *string `locationName:"labelDecorator" type:"string" enum:"LabelDecorator"`

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

	// The schema version of the form.
	//
	// SchemaVersion is a required field
	SchemaVersion *string `locationName:"schemaVersion" type:"string" required:"true"`

	// The configuration information for the visual helper elements for the form.
	// These elements are not associated with any data.
	//
	// SectionalElements is a required field
	SectionalElements map[string]*SectionalElement `locationName:"sectionalElements" type:"map" required:"true"`

	// The configuration for the form's style.
	//
	// Style is a required field
	Style *FormStyle `locationName:"style" type:"structure" required:"true"`

	// One or more key-value pairs to use when tagging the form data.
	Tags map[string]*string `locationName:"tags" type:"map"`
}

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

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

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

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

// SetCta sets the Cta field's value.
func (s *CreateFormData) SetCta(v *FormCTA) *CreateFormData {
	s.Cta = v
	return s
}

// SetDataType sets the DataType field's value.
func (s *CreateFormData) SetDataType(v *FormDataTypeConfig) *CreateFormData {
	s.DataType = v
	return s
}

// SetFields sets the Fields field's value.
func (s *CreateFormData) SetFields(v map[string]*FieldConfig) *CreateFormData {
	s.Fields = v
	return s
}

// SetFormActionType sets the FormActionType field's value.
func (s *CreateFormData) SetFormActionType(v string) *CreateFormData {
	s.FormActionType = &v
	return s
}

// SetLabelDecorator sets the LabelDecorator field's value.
func (s *CreateFormData) SetLabelDecorator(v string) *CreateFormData {
	s.LabelDecorator = &v
	return s
}

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

// SetSchemaVersion sets the SchemaVersion field's value.
func (s *CreateFormData) SetSchemaVersion(v string) *CreateFormData {
	s.SchemaVersion = &v
	return s
}

// SetSectionalElements sets the SectionalElements field's value.
func (s *CreateFormData) SetSectionalElements(v map[string]*SectionalElement) *CreateFormData {
	s.SectionalElements = v
	return s
}

// SetStyle sets the Style field's value.
func (s *CreateFormData) SetStyle(v *FormStyle) *CreateFormData {
	s.Style = v
	return s
}

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

type CreateFormInput struct {
	_ struct{} `type:"structure" payload:"FormToCreate"`

	// The unique ID of the Amplify app to associate with the form.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The unique client token.
	ClientToken *string `location:"querystring" locationName:"clientToken" type:"string" idempotencyToken:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// Represents the configuration of the form to create.
	//
	// FormToCreate is a required field
	FormToCreate *CreateFormData `locationName:"formToCreate" type:"structure" required:"true"`
}

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

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

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

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

// SetAppId sets the AppId field's value.
func (s *CreateFormInput) SetAppId(v string) *CreateFormInput {
	s.AppId = &v
	return s
}

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

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *CreateFormInput) SetEnvironmentName(v string) *CreateFormInput {
	s.EnvironmentName = &v
	return s
}

// SetFormToCreate sets the FormToCreate field's value.
func (s *CreateFormInput) SetFormToCreate(v *CreateFormData) *CreateFormInput {
	s.FormToCreate = v
	return s
}

type CreateFormOutput struct {
	_ struct{} `type:"structure" payload:"Entity"`

	// Describes the configuration of the new form.
	Entity *Form `locationName:"entity" 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 CreateFormOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEntity sets the Entity field's value.
func (s *CreateFormOutput) SetEntity(v *Form) *CreateFormOutput {
	s.Entity = v
	return s
}

// Represents all of the information that is required to create a theme.
type CreateThemeData struct {
	_ struct{} `type:"structure"`

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

	// Describes the properties that can be overriden to customize an instance of
	// the theme.
	Overrides []*ThemeValues `locationName:"overrides" type:"list"`

	// One or more key-value pairs to use when tagging the theme data.
	Tags map[string]*string `locationName:"tags" type:"map"`

	// A list of key-value pairs that deﬁnes the properties of the theme.
	//
	// Values is a required field
	Values []*ThemeValues `locationName:"values" 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 CreateThemeData) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

// SetOverrides sets the Overrides field's value.
func (s *CreateThemeData) SetOverrides(v []*ThemeValues) *CreateThemeData {
	s.Overrides = v
	return s
}

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

// SetValues sets the Values field's value.
func (s *CreateThemeData) SetValues(v []*ThemeValues) *CreateThemeData {
	s.Values = v
	return s
}

type CreateThemeInput struct {
	_ struct{} `type:"structure" payload:"ThemeToCreate"`

	// The unique ID of the Amplify app associated with the theme.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The unique client token.
	ClientToken *string `location:"querystring" locationName:"clientToken" type:"string" idempotencyToken:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// Represents the configuration of the theme to create.
	//
	// ThemeToCreate is a required field
	ThemeToCreate *CreateThemeData `locationName:"themeToCreate" type:"structure" required:"true"`
}

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

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

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

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

// SetAppId sets the AppId field's value.
func (s *CreateThemeInput) SetAppId(v string) *CreateThemeInput {
	s.AppId = &v
	return s
}

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

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *CreateThemeInput) SetEnvironmentName(v string) *CreateThemeInput {
	s.EnvironmentName = &v
	return s
}

// SetThemeToCreate sets the ThemeToCreate field's value.
func (s *CreateThemeInput) SetThemeToCreate(v *CreateThemeData) *CreateThemeInput {
	s.ThemeToCreate = v
	return s
}

type CreateThemeOutput struct {
	_ struct{} `type:"structure" payload:"Entity"`

	// Describes the configuration of the new theme.
	Entity *Theme `locationName:"entity" 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 CreateThemeOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEntity sets the Entity field's value.
func (s *CreateThemeOutput) SetEntity(v *Theme) *CreateThemeOutput {
	s.Entity = v
	return s
}

type DeleteComponentInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique ID of the Amplify app associated with the component to delete.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// The unique ID of the component to delete.
	//
	// Id is a required field
	Id *string `location:"uri" locationName:"id" 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 DeleteComponentInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *DeleteComponentInput) SetAppId(v string) *DeleteComponentInput {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *DeleteComponentInput) SetEnvironmentName(v string) *DeleteComponentInput {
	s.EnvironmentName = &v
	return s
}

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

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

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

type DeleteFormInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique ID of the Amplify app associated with the form to delete.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// The unique ID of the form to delete.
	//
	// Id is a required field
	Id *string `location:"uri" locationName:"id" 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 DeleteFormInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *DeleteFormInput) SetAppId(v string) *DeleteFormInput {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *DeleteFormInput) SetEnvironmentName(v string) *DeleteFormInput {
	s.EnvironmentName = &v
	return s
}

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

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

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

type DeleteThemeInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique ID of the Amplify app associated with the theme to delete.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// The unique ID of the theme to delete.
	//
	// Id is a required field
	Id *string `location:"uri" locationName:"id" 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 DeleteThemeInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *DeleteThemeInput) SetAppId(v string) *DeleteThemeInput {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *DeleteThemeInput) SetEnvironmentName(v string) *DeleteThemeInput {
	s.EnvironmentName = &v
	return s
}

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

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

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

type ExchangeCodeForTokenInput struct {
	_ struct{} `type:"structure" payload:"Request"`

	// The third-party provider for the token. The only valid value is figma.
	//
	// Provider is a required field
	Provider *string `location:"uri" locationName:"provider" type:"string" required:"true" enum:"TokenProviders"`

	// Describes the configuration of the request.
	//
	// Request is a required field
	Request *ExchangeCodeForTokenRequestBody `locationName:"request" type:"structure" required:"true"`
}

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

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

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

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

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

// SetRequest sets the Request field's value.
func (s *ExchangeCodeForTokenInput) SetRequest(v *ExchangeCodeForTokenRequestBody) *ExchangeCodeForTokenInput {
	s.Request = v
	return s
}

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

	// The access token.
	//
	// AccessToken is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ExchangeCodeForTokenOutput's
	// String and GoString methods.
	//
	// AccessToken is a required field
	AccessToken *string `locationName:"accessToken" type:"string" required:"true" sensitive:"true"`

	// The date and time when the new access token expires.
	//
	// ExpiresIn is a required field
	ExpiresIn *int64 `locationName:"expiresIn" type:"integer" required:"true"`

	// The token to use to refresh a previously issued access token that might have
	// expired.
	//
	// RefreshToken is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ExchangeCodeForTokenOutput's
	// String and GoString methods.
	//
	// RefreshToken is a required field
	RefreshToken *string `locationName:"refreshToken" type:"string" required:"true" sensitive:"true"`
}

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

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

// SetAccessToken sets the AccessToken field's value.
func (s *ExchangeCodeForTokenOutput) SetAccessToken(v string) *ExchangeCodeForTokenOutput {
	s.AccessToken = &v
	return s
}

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

// SetRefreshToken sets the RefreshToken field's value.
func (s *ExchangeCodeForTokenOutput) SetRefreshToken(v string) *ExchangeCodeForTokenOutput {
	s.RefreshToken = &v
	return s
}

// Describes the configuration of a request to exchange an access code for a
// token.
type ExchangeCodeForTokenRequestBody struct {
	_ struct{} `type:"structure"`

	// The ID of the client to request the token from.
	//
	// ClientId is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ExchangeCodeForTokenRequestBody's
	// String and GoString methods.
	ClientId *string `locationName:"clientId" type:"string" sensitive:"true"`

	// The access code to send in the request.
	//
	// Code is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ExchangeCodeForTokenRequestBody's
	// String and GoString methods.
	//
	// Code is a required field
	Code *string `locationName:"code" type:"string" required:"true" sensitive:"true"`

	// The location of the application that will receive the access code.
	//
	// RedirectUri is a required field
	RedirectUri *string `locationName:"redirectUri" 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 ExchangeCodeForTokenRequestBody) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetClientId sets the ClientId field's value.
func (s *ExchangeCodeForTokenRequestBody) SetClientId(v string) *ExchangeCodeForTokenRequestBody {
	s.ClientId = &v
	return s
}

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

// SetRedirectUri sets the RedirectUri field's value.
func (s *ExchangeCodeForTokenRequestBody) SetRedirectUri(v string) *ExchangeCodeForTokenRequestBody {
	s.RedirectUri = &v
	return s
}

type ExportComponentsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique ID of the Amplify app to export components to.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// The token to request the next page of results.
	NextToken *string `location:"querystring" locationName:"nextToken" 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 ExportComponentsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *ExportComponentsInput) SetAppId(v string) *ExportComponentsInput {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *ExportComponentsInput) SetEnvironmentName(v string) *ExportComponentsInput {
	s.EnvironmentName = &v
	return s
}

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

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

	// Represents the configuration of the exported components.
	//
	// Entities is a required field
	Entities []*Component `locationName:"entities" type:"list" required:"true"`

	// The pagination token that's included if more results are available.
	NextToken *string `locationName:"nextToken" 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 ExportComponentsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEntities sets the Entities field's value.
func (s *ExportComponentsOutput) SetEntities(v []*Component) *ExportComponentsOutput {
	s.Entities = v
	return s
}

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

type ExportFormsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique ID of the Amplify app to export forms to.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// The token to request the next page of results.
	NextToken *string `location:"querystring" locationName:"nextToken" 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 ExportFormsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *ExportFormsInput) SetAppId(v string) *ExportFormsInput {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *ExportFormsInput) SetEnvironmentName(v string) *ExportFormsInput {
	s.EnvironmentName = &v
	return s
}

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

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

	// Represents the configuration of the exported forms.
	//
	// Entities is a required field
	Entities []*Form `locationName:"entities" type:"list" required:"true"`

	// The pagination token that's included if more results are available.
	NextToken *string `locationName:"nextToken" 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 ExportFormsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEntities sets the Entities field's value.
func (s *ExportFormsOutput) SetEntities(v []*Form) *ExportFormsOutput {
	s.Entities = v
	return s
}

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

type ExportThemesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique ID of the Amplify app to export the themes to.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// The token to request the next page of results.
	NextToken *string `location:"querystring" locationName:"nextToken" 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 ExportThemesInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *ExportThemesInput) SetAppId(v string) *ExportThemesInput {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *ExportThemesInput) SetEnvironmentName(v string) *ExportThemesInput {
	s.EnvironmentName = &v
	return s
}

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

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

	// Represents the configuration of the exported themes.
	//
	// Entities is a required field
	Entities []*Theme `locationName:"entities" type:"list" required:"true"`

	// The pagination token that's included if more results are available.
	NextToken *string `locationName:"nextToken" 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 ExportThemesOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEntities sets the Entities field's value.
func (s *ExportThemesOutput) SetEntities(v []*Theme) *ExportThemesOutput {
	s.Entities = v
	return s
}

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

// Describes the configuration information for a field in a table.
type FieldConfig struct {
	_ struct{} `type:"structure"`

	// Specifies whether to hide a field.
	Excluded *bool `locationName:"excluded" type:"boolean"`

	// Describes the configuration for the default input value to display for a
	// field.
	InputType *FieldInputConfig `locationName:"inputType" type:"structure"`

	// The label for the field.
	Label *string `locationName:"label" type:"string"`

	// Specifies the field position.
	Position *FieldPosition `locationName:"position" type:"structure"`

	// The validations to perform on the value in the field.
	Validations []*FieldValidationConfiguration `locationName:"validations" 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 FieldConfig) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *FieldConfig) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "FieldConfig"}
	if s.InputType != nil {
		if err := s.InputType.Validate(); err != nil {
			invalidParams.AddNested("InputType", err.(request.ErrInvalidParams))
		}
	}
	if s.Validations != nil {
		for i, v := range s.Validations {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Validations", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetExcluded sets the Excluded field's value.
func (s *FieldConfig) SetExcluded(v bool) *FieldConfig {
	s.Excluded = &v
	return s
}

// SetInputType sets the InputType field's value.
func (s *FieldConfig) SetInputType(v *FieldInputConfig) *FieldConfig {
	s.InputType = v
	return s
}

// SetLabel sets the Label field's value.
func (s *FieldConfig) SetLabel(v string) *FieldConfig {
	s.Label = &v
	return s
}

// SetPosition sets the Position field's value.
func (s *FieldConfig) SetPosition(v *FieldPosition) *FieldConfig {
	s.Position = v
	return s
}

// SetValidations sets the Validations field's value.
func (s *FieldConfig) SetValidations(v []*FieldValidationConfiguration) *FieldConfig {
	s.Validations = v
	return s
}

// Describes the configuration for the default input values to display for a
// field.
type FieldInputConfig struct {
	_ struct{} `type:"structure"`

	// Specifies whether a field has a default value.
	DefaultChecked *bool `locationName:"defaultChecked" type:"boolean"`

	// The default country code for a phone number.
	DefaultCountryCode *string `locationName:"defaultCountryCode" type:"string"`

	// The default value for the field.
	DefaultValue *string `locationName:"defaultValue" type:"string"`

	// The text to display to describe the field.
	DescriptiveText *string `locationName:"descriptiveText" type:"string"`

	// The configuration for the file uploader field.
	FileUploaderConfig *FileUploaderFieldConfig `locationName:"fileUploaderConfig" type:"structure"`

	// Specifies whether to render the field as an array. This property is ignored
	// if the dataSourceType for the form is a Data Store.
	IsArray *bool `locationName:"isArray" type:"boolean"`

	// The maximum value to display for the field.
	MaxValue *float64 `locationName:"maxValue" type:"float"`

	// The minimum value to display for the field.
	MinValue *float64 `locationName:"minValue" type:"float"`

	// The name of the field.
	Name *string `locationName:"name" type:"string"`

	// The text to display as a placeholder for the field.
	Placeholder *string `locationName:"placeholder" type:"string"`

	// Specifies a read only field.
	ReadOnly *bool `locationName:"readOnly" type:"boolean"`

	// Specifies a field that requires input.
	Required *bool `locationName:"required" type:"boolean"`

	// The stepping increment for a numeric value in a field.
	Step *float64 `locationName:"step" type:"float"`

	// The input type for the field.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true"`

	// The value for the field.
	Value *string `locationName:"value" type:"string"`

	// The information to use to customize the input fields with data at runtime.
	ValueMappings *ValueMappings `locationName:"valueMappings" 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 FieldInputConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetDefaultChecked sets the DefaultChecked field's value.
func (s *FieldInputConfig) SetDefaultChecked(v bool) *FieldInputConfig {
	s.DefaultChecked = &v
	return s
}

// SetDefaultCountryCode sets the DefaultCountryCode field's value.
func (s *FieldInputConfig) SetDefaultCountryCode(v string) *FieldInputConfig {
	s.DefaultCountryCode = &v
	return s
}

// SetDefaultValue sets the DefaultValue field's value.
func (s *FieldInputConfig) SetDefaultValue(v string) *FieldInputConfig {
	s.DefaultValue = &v
	return s
}

// SetDescriptiveText sets the DescriptiveText field's value.
func (s *FieldInputConfig) SetDescriptiveText(v string) *FieldInputConfig {
	s.DescriptiveText = &v
	return s
}

// SetFileUploaderConfig sets the FileUploaderConfig field's value.
func (s *FieldInputConfig) SetFileUploaderConfig(v *FileUploaderFieldConfig) *FieldInputConfig {
	s.FileUploaderConfig = v
	return s
}

// SetIsArray sets the IsArray field's value.
func (s *FieldInputConfig) SetIsArray(v bool) *FieldInputConfig {
	s.IsArray = &v
	return s
}

// SetMaxValue sets the MaxValue field's value.
func (s *FieldInputConfig) SetMaxValue(v float64) *FieldInputConfig {
	s.MaxValue = &v
	return s
}

// SetMinValue sets the MinValue field's value.
func (s *FieldInputConfig) SetMinValue(v float64) *FieldInputConfig {
	s.MinValue = &v
	return s
}

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

// SetPlaceholder sets the Placeholder field's value.
func (s *FieldInputConfig) SetPlaceholder(v string) *FieldInputConfig {
	s.Placeholder = &v
	return s
}

// SetReadOnly sets the ReadOnly field's value.
func (s *FieldInputConfig) SetReadOnly(v bool) *FieldInputConfig {
	s.ReadOnly = &v
	return s
}

// SetRequired sets the Required field's value.
func (s *FieldInputConfig) SetRequired(v bool) *FieldInputConfig {
	s.Required = &v
	return s
}

// SetStep sets the Step field's value.
func (s *FieldInputConfig) SetStep(v float64) *FieldInputConfig {
	s.Step = &v
	return s
}

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

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

// SetValueMappings sets the ValueMappings field's value.
func (s *FieldInputConfig) SetValueMappings(v *ValueMappings) *FieldInputConfig {
	s.ValueMappings = v
	return s
}

// Describes the field position.
type FieldPosition struct {
	_ struct{} `type:"structure"`

	// The field position is below the field specified by the string.
	Below *string `locationName:"below" type:"string"`

	// The field position is fixed and doesn't change in relation to other fields.
	Fixed *string `locationName:"fixed" type:"string" enum:"FixedPosition"`

	// The field position is to the right of the field specified by the string.
	RightOf *string `locationName:"rightOf" 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 FieldPosition) String() string {
	return awsutil.Prettify(s)
}

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

// SetBelow sets the Below field's value.
func (s *FieldPosition) SetBelow(v string) *FieldPosition {
	s.Below = &v
	return s
}

// SetFixed sets the Fixed field's value.
func (s *FieldPosition) SetFixed(v string) *FieldPosition {
	s.Fixed = &v
	return s
}

// SetRightOf sets the RightOf field's value.
func (s *FieldPosition) SetRightOf(v string) *FieldPosition {
	s.RightOf = &v
	return s
}

// Describes the validation configuration for a field.
type FieldValidationConfiguration struct {
	_ struct{} `type:"structure"`

	// The validation to perform on a number value.
	NumValues []*int64 `locationName:"numValues" type:"list"`

	// The validation to perform on a string value.
	StrValues []*string `locationName:"strValues" type:"list"`

	// The validation to perform on an object type.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true"`

	// The validation message to display.
	ValidationMessage *string `locationName:"validationMessage" 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 FieldValidationConfiguration) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetNumValues sets the NumValues field's value.
func (s *FieldValidationConfiguration) SetNumValues(v []*int64) *FieldValidationConfiguration {
	s.NumValues = v
	return s
}

// SetStrValues sets the StrValues field's value.
func (s *FieldValidationConfiguration) SetStrValues(v []*string) *FieldValidationConfiguration {
	s.StrValues = v
	return s
}

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

// SetValidationMessage sets the ValidationMessage field's value.
func (s *FieldValidationConfiguration) SetValidationMessage(v string) *FieldValidationConfiguration {
	s.ValidationMessage = &v
	return s
}

// Describes the configuration for the file uploader field.
type FileUploaderFieldConfig struct {
	_ struct{} `type:"structure"`

	// The file types that are allowed to be uploaded by the file uploader. Provide
	// this information in an array of strings specifying the valid file extensions.
	//
	// AcceptedFileTypes is a required field
	AcceptedFileTypes []*string `locationName:"acceptedFileTypes" type:"list" required:"true"`

	// The access level to assign to the uploaded files in the Amazon S3 bucket
	// where they are stored. The valid values for this property are private, protected,
	// or public. For detailed information about the permissions associated with
	// each access level, see File access levels (https://docs.amplify.aws/lib/storage/configureaccess/q/platform/js/)
	// in the Amplify documentation.
	//
	// AccessLevel is a required field
	AccessLevel *string `locationName:"accessLevel" type:"string" required:"true" enum:"StorageAccessLevel"`

	// Allows the file upload operation to be paused and resumed. The default value
	// is false.
	//
	// When isResumable is set to true, the file uploader uses a multipart upload
	// to break the files into chunks before upload. The progress of the upload
	// isn't continuous, because the file uploader uploads a chunk at a time.
	IsResumable *bool `locationName:"isResumable" type:"boolean"`

	// Specifies the maximum number of files that can be selected to upload. The
	// default value is an unlimited number of files.
	MaxFileCount *int64 `locationName:"maxFileCount" type:"integer"`

	// The maximum file size in bytes that the file uploader will accept. The default
	// value is an unlimited file size.
	MaxSize *int64 `locationName:"maxSize" type:"integer"`

	// Specifies whether to display or hide the image preview after selecting a
	// file for upload. The default value is true to display the image preview.
	ShowThumbnails *bool `locationName:"showThumbnails" type:"boolean"`
}

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

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

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

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

// SetAcceptedFileTypes sets the AcceptedFileTypes field's value.
func (s *FileUploaderFieldConfig) SetAcceptedFileTypes(v []*string) *FileUploaderFieldConfig {
	s.AcceptedFileTypes = v
	return s
}

// SetAccessLevel sets the AccessLevel field's value.
func (s *FileUploaderFieldConfig) SetAccessLevel(v string) *FileUploaderFieldConfig {
	s.AccessLevel = &v
	return s
}

// SetIsResumable sets the IsResumable field's value.
func (s *FileUploaderFieldConfig) SetIsResumable(v bool) *FileUploaderFieldConfig {
	s.IsResumable = &v
	return s
}

// SetMaxFileCount sets the MaxFileCount field's value.
func (s *FileUploaderFieldConfig) SetMaxFileCount(v int64) *FileUploaderFieldConfig {
	s.MaxFileCount = &v
	return s
}

// SetMaxSize sets the MaxSize field's value.
func (s *FileUploaderFieldConfig) SetMaxSize(v int64) *FileUploaderFieldConfig {
	s.MaxSize = &v
	return s
}

// SetShowThumbnails sets the ShowThumbnails field's value.
func (s *FileUploaderFieldConfig) SetShowThumbnails(v bool) *FileUploaderFieldConfig {
	s.ShowThumbnails = &v
	return s
}

// Contains the configuration settings for a Form user interface (UI) element
// for an Amplify app. A form is a component you can add to your project by
// specifying a data source as the default configuration for the form.
type Form struct {
	_ struct{} `type:"structure"`

	// The unique ID of the Amplify app associated with the form.
	//
	// AppId is a required field
	AppId *string `locationName:"appId" type:"string" required:"true"`

	// Stores the call to action configuration for the form.
	Cta *FormCTA `locationName:"cta" type:"structure"`

	// The type of data source to use to create the form.
	//
	// DataType is a required field
	DataType *FormDataTypeConfig `locationName:"dataType" type:"structure" required:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `locationName:"environmentName" type:"string" required:"true"`

	// Stores the information about the form's fields.
	//
	// Fields is a required field
	Fields map[string]*FieldConfig `locationName:"fields" type:"map" required:"true"`

	// The operation to perform on the specified form.
	//
	// FormActionType is a required field
	FormActionType *string `locationName:"formActionType" type:"string" required:"true" enum:"FormActionType"`

	// The unique ID of the form.
	//
	// Id is a required field
	Id *string `locationName:"id" type:"string" required:"true"`

	// Specifies an icon or decoration to display on the form.
	LabelDecorator *string `locationName:"labelDecorator" type:"string" enum:"LabelDecorator"`

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

	// The schema version of the form when it was imported.
	//
	// SchemaVersion is a required field
	SchemaVersion *string `locationName:"schemaVersion" type:"string" required:"true"`

	// Stores the visual helper elements for the form that are not associated with
	// any data.
	//
	// SectionalElements is a required field
	SectionalElements map[string]*SectionalElement `locationName:"sectionalElements" type:"map" required:"true"`

	// Stores the configuration for the form's style.
	//
	// Style is a required field
	Style *FormStyle `locationName:"style" type:"structure" required:"true"`

	// One or more key-value pairs to use when tagging the form.
	Tags map[string]*string `locationName:"tags" type:"map"`
}

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

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

// SetAppId sets the AppId field's value.
func (s *Form) SetAppId(v string) *Form {
	s.AppId = &v
	return s
}

// SetCta sets the Cta field's value.
func (s *Form) SetCta(v *FormCTA) *Form {
	s.Cta = v
	return s
}

// SetDataType sets the DataType field's value.
func (s *Form) SetDataType(v *FormDataTypeConfig) *Form {
	s.DataType = v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *Form) SetEnvironmentName(v string) *Form {
	s.EnvironmentName = &v
	return s
}

// SetFields sets the Fields field's value.
func (s *Form) SetFields(v map[string]*FieldConfig) *Form {
	s.Fields = v
	return s
}

// SetFormActionType sets the FormActionType field's value.
func (s *Form) SetFormActionType(v string) *Form {
	s.FormActionType = &v
	return s
}

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

// SetLabelDecorator sets the LabelDecorator field's value.
func (s *Form) SetLabelDecorator(v string) *Form {
	s.LabelDecorator = &v
	return s
}

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

// SetSchemaVersion sets the SchemaVersion field's value.
func (s *Form) SetSchemaVersion(v string) *Form {
	s.SchemaVersion = &v
	return s
}

// SetSectionalElements sets the SectionalElements field's value.
func (s *Form) SetSectionalElements(v map[string]*SectionalElement) *Form {
	s.SectionalElements = v
	return s
}

// SetStyle sets the Style field's value.
func (s *Form) SetStyle(v *FormStyle) *Form {
	s.Style = v
	return s
}

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

// Describes how to bind a component property to form data.
type FormBindingElement struct {
	_ struct{} `type:"structure"`

	// The name of the component to retrieve a value from.
	//
	// Element is a required field
	Element *string `locationName:"element" type:"string" required:"true"`

	// The property to retrieve a value from.
	//
	// Property is a required field
	Property *string `locationName:"property" 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 FormBindingElement) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetElement sets the Element field's value.
func (s *FormBindingElement) SetElement(v string) *FormBindingElement {
	s.Element = &v
	return s
}

// SetProperty sets the Property field's value.
func (s *FormBindingElement) SetProperty(v string) *FormBindingElement {
	s.Property = &v
	return s
}

// Describes the configuration for a button UI element that is a part of a form.
type FormButton struct {
	_ struct{} `type:"structure"`

	// Describes the button's properties.
	Children *string `locationName:"children" type:"string"`

	// Specifies whether the button is visible on the form.
	Excluded *bool `locationName:"excluded" type:"boolean"`

	// The position of the button.
	Position *FieldPosition `locationName:"position" 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 FormButton) String() string {
	return awsutil.Prettify(s)
}

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

// SetChildren sets the Children field's value.
func (s *FormButton) SetChildren(v string) *FormButton {
	s.Children = &v
	return s
}

// SetExcluded sets the Excluded field's value.
func (s *FormButton) SetExcluded(v bool) *FormButton {
	s.Excluded = &v
	return s
}

// SetPosition sets the Position field's value.
func (s *FormButton) SetPosition(v *FieldPosition) *FormButton {
	s.Position = v
	return s
}

// Describes the call to action button configuration for the form.
type FormCTA struct {
	_ struct{} `type:"structure"`

	// Displays a cancel button.
	Cancel *FormButton `locationName:"cancel" type:"structure"`

	// Displays a clear button.
	Clear *FormButton `locationName:"clear" type:"structure"`

	// The position of the button.
	Position *string `locationName:"position" type:"string" enum:"FormButtonsPosition"`

	// Displays a submit button.
	Submit *FormButton `locationName:"submit" 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 FormCTA) String() string {
	return awsutil.Prettify(s)
}

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

// SetCancel sets the Cancel field's value.
func (s *FormCTA) SetCancel(v *FormButton) *FormCTA {
	s.Cancel = v
	return s
}

// SetClear sets the Clear field's value.
func (s *FormCTA) SetClear(v *FormButton) *FormCTA {
	s.Clear = v
	return s
}

// SetPosition sets the Position field's value.
func (s *FormCTA) SetPosition(v string) *FormCTA {
	s.Position = &v
	return s
}

// SetSubmit sets the Submit field's value.
func (s *FormCTA) SetSubmit(v *FormButton) *FormCTA {
	s.Submit = v
	return s
}

// Describes the data type configuration for the data source associated with
// a form.
type FormDataTypeConfig struct {
	_ struct{} `type:"structure"`

	// The data source type, either an Amplify DataStore model or a custom data
	// type.
	//
	// DataSourceType is a required field
	DataSourceType *string `locationName:"dataSourceType" type:"string" required:"true" enum:"FormDataSourceType"`

	// The unique name of the data type you are using as the data source for the
	// form.
	//
	// DataTypeName is a required field
	DataTypeName *string `locationName:"dataTypeName" 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 FormDataTypeConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetDataSourceType sets the DataSourceType field's value.
func (s *FormDataTypeConfig) SetDataSourceType(v string) *FormDataTypeConfig {
	s.DataSourceType = &v
	return s
}

// SetDataTypeName sets the DataTypeName field's value.
func (s *FormDataTypeConfig) SetDataTypeName(v string) *FormDataTypeConfig {
	s.DataTypeName = &v
	return s
}

// Represents the data binding configuration for a form's input fields at runtime.You
// can use FormInputBindingPropertiesValue to add exposed properties to a form
// to allow different values to be entered when a form is reused in different
// places in an app.
type FormInputBindingPropertiesValue struct {
	_ struct{} `type:"structure"`

	// Describes the properties to customize with data at runtime.
	BindingProperties *FormInputBindingPropertiesValueProperties `locationName:"bindingProperties" type:"structure"`

	// The property type.
	Type *string `locationName:"type" 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 FormInputBindingPropertiesValue) String() string {
	return awsutil.Prettify(s)
}

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

// SetBindingProperties sets the BindingProperties field's value.
func (s *FormInputBindingPropertiesValue) SetBindingProperties(v *FormInputBindingPropertiesValueProperties) *FormInputBindingPropertiesValue {
	s.BindingProperties = v
	return s
}

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

// Represents the data binding configuration for a specific property using data
// stored in Amazon Web Services. For Amazon Web Services connected properties,
// you can bind a property to data stored in an Amplify DataStore model.
type FormInputBindingPropertiesValueProperties struct {
	_ struct{} `type:"structure"`

	// An Amplify DataStore model.
	Model *string `locationName:"model" 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 FormInputBindingPropertiesValueProperties) String() string {
	return awsutil.Prettify(s)
}

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

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

// Describes the configuration for an input field on a form. Use FormInputValueProperty
// to specify the values to render or bind by default.
type FormInputValueProperty struct {
	_ struct{} `type:"structure"`

	// The information to bind fields to data at runtime.
	BindingProperties *FormInputValuePropertyBindingProperties `locationName:"bindingProperties" type:"structure"`

	// A list of form properties to concatenate to create the value to assign to
	// this field property.
	Concat []*FormInputValueProperty `locationName:"concat" type:"list"`

	// The value to assign to the input field.
	Value *string `locationName:"value" 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 FormInputValueProperty) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *FormInputValueProperty) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "FormInputValueProperty"}
	if s.BindingProperties != nil {
		if err := s.BindingProperties.Validate(); err != nil {
			invalidParams.AddNested("BindingProperties", err.(request.ErrInvalidParams))
		}
	}
	if s.Concat != nil {
		for i, v := range s.Concat {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Concat", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

// SetBindingProperties sets the BindingProperties field's value.
func (s *FormInputValueProperty) SetBindingProperties(v *FormInputValuePropertyBindingProperties) *FormInputValueProperty {
	s.BindingProperties = v
	return s
}

// SetConcat sets the Concat field's value.
func (s *FormInputValueProperty) SetConcat(v []*FormInputValueProperty) *FormInputValueProperty {
	s.Concat = v
	return s
}

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

// Associates a form property to a binding property. This enables exposed properties
// on the top level form to propagate data to the form's property values.
type FormInputValuePropertyBindingProperties struct {
	_ struct{} `type:"structure"`

	// The data field to bind the property to.
	Field *string `locationName:"field" type:"string"`

	// The form property to bind to the data field.
	//
	// Property is a required field
	Property *string `locationName:"property" 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 FormInputValuePropertyBindingProperties) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetField sets the Field field's value.
func (s *FormInputValuePropertyBindingProperties) SetField(v string) *FormInputValuePropertyBindingProperties {
	s.Field = &v
	return s
}

// SetProperty sets the Property field's value.
func (s *FormInputValuePropertyBindingProperties) SetProperty(v string) *FormInputValuePropertyBindingProperties {
	s.Property = &v
	return s
}

// Describes the configuration for the form's style.
type FormStyle struct {
	_ struct{} `type:"structure"`

	// The spacing for the horizontal gap.
	HorizontalGap *FormStyleConfig `locationName:"horizontalGap" type:"structure"`

	// The size of the outer padding for the form.
	OuterPadding *FormStyleConfig `locationName:"outerPadding" type:"structure"`

	// The spacing for the vertical gap.
	VerticalGap *FormStyleConfig `locationName:"verticalGap" 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 FormStyle) String() string {
	return awsutil.Prettify(s)
}

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

// SetHorizontalGap sets the HorizontalGap field's value.
func (s *FormStyle) SetHorizontalGap(v *FormStyleConfig) *FormStyle {
	s.HorizontalGap = v
	return s
}

// SetOuterPadding sets the OuterPadding field's value.
func (s *FormStyle) SetOuterPadding(v *FormStyleConfig) *FormStyle {
	s.OuterPadding = v
	return s
}

// SetVerticalGap sets the VerticalGap field's value.
func (s *FormStyle) SetVerticalGap(v *FormStyleConfig) *FormStyle {
	s.VerticalGap = v
	return s
}

// Describes the configuration settings for the form's style properties.
type FormStyleConfig struct {
	_ struct{} `type:"structure"`

	// A reference to a design token to use to bind the form's style properties
	// to an existing theme.
	TokenReference *string `locationName:"tokenReference" type:"string"`

	// The value of the style setting.
	Value *string `locationName:"value" 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 FormStyleConfig) String() string {
	return awsutil.Prettify(s)
}

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

// SetTokenReference sets the TokenReference field's value.
func (s *FormStyleConfig) SetTokenReference(v string) *FormStyleConfig {
	s.TokenReference = &v
	return s
}

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

// Describes the basic information about a form.
type FormSummary struct {
	_ struct{} `type:"structure"`

	// The unique ID for the app associated with the form summary.
	//
	// AppId is a required field
	AppId *string `locationName:"appId" type:"string" required:"true"`

	// The form's data source type.
	//
	// DataType is a required field
	DataType *FormDataTypeConfig `locationName:"dataType" type:"structure" required:"true"`

	// The name of the backend environment that is part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `locationName:"environmentName" type:"string" required:"true"`

	// The type of operation to perform on the form.
	//
	// FormActionType is a required field
	FormActionType *string `locationName:"formActionType" type:"string" required:"true" enum:"FormActionType"`

	// The ID of the form.
	//
	// Id is a required field
	Id *string `locationName:"id" type:"string" required:"true"`

	// The name of the form.
	//
	// Name is a required field
	Name *string `locationName:"name" 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 FormSummary) String() string {
	return awsutil.Prettify(s)
}

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

// SetAppId sets the AppId field's value.
func (s *FormSummary) SetAppId(v string) *FormSummary {
	s.AppId = &v
	return s
}

// SetDataType sets the DataType field's value.
func (s *FormSummary) SetDataType(v *FormDataTypeConfig) *FormSummary {
	s.DataType = v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *FormSummary) SetEnvironmentName(v string) *FormSummary {
	s.EnvironmentName = &v
	return s
}

// SetFormActionType sets the FormActionType field's value.
func (s *FormSummary) SetFormActionType(v string) *FormSummary {
	s.FormActionType = &v
	return s
}

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

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

type GetComponentInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique ID of the Amplify app.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// The unique ID of the component.
	//
	// Id is a required field
	Id *string `location:"uri" locationName:"id" 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 GetComponentInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *GetComponentInput) SetAppId(v string) *GetComponentInput {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *GetComponentInput) SetEnvironmentName(v string) *GetComponentInput {
	s.EnvironmentName = &v
	return s
}

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

type GetComponentOutput struct {
	_ struct{} `type:"structure" payload:"Component"`

	// Represents the configuration settings for the component.
	Component *Component `locationName:"component" 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 GetComponentOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetComponent sets the Component field's value.
func (s *GetComponentOutput) SetComponent(v *Component) *GetComponentOutput {
	s.Component = v
	return s
}

type GetFormInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique ID of the Amplify app.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// The unique ID of the form.
	//
	// Id is a required field
	Id *string `location:"uri" locationName:"id" 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 GetFormInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *GetFormInput) SetAppId(v string) *GetFormInput {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *GetFormInput) SetEnvironmentName(v string) *GetFormInput {
	s.EnvironmentName = &v
	return s
}

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

type GetFormOutput struct {
	_ struct{} `type:"structure" payload:"Form"`

	// Represents the configuration settings for the form.
	Form *Form `locationName:"form" 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 GetFormOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetForm sets the Form field's value.
func (s *GetFormOutput) SetForm(v *Form) *GetFormOutput {
	s.Form = v
	return s
}

type GetMetadataInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique ID of the Amplify app.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" 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 GetMetadataInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *GetMetadataInput) SetAppId(v string) *GetMetadataInput {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *GetMetadataInput) SetEnvironmentName(v string) *GetMetadataInput {
	s.EnvironmentName = &v
	return s
}

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

	// Represents the configuration settings for the features metadata.
	//
	// Features is a required field
	Features map[string]*string `locationName:"features" type:"map" 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 GetMetadataOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetFeatures sets the Features field's value.
func (s *GetMetadataOutput) SetFeatures(v map[string]*string) *GetMetadataOutput {
	s.Features = v
	return s
}

type GetThemeInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique ID of the Amplify app.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// The unique ID for the theme.
	//
	// Id is a required field
	Id *string `location:"uri" locationName:"id" 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 GetThemeInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *GetThemeInput) SetAppId(v string) *GetThemeInput {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *GetThemeInput) SetEnvironmentName(v string) *GetThemeInput {
	s.EnvironmentName = &v
	return s
}

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

type GetThemeOutput struct {
	_ struct{} `type:"structure" payload:"Theme"`

	// Represents the configuration settings for the theme.
	Theme *Theme `locationName:"theme" 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 GetThemeOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetTheme sets the Theme field's value.
func (s *GetThemeOutput) SetTheme(v *Theme) *GetThemeOutput {
	s.Theme = v
	return s
}

// An internal error has occurred. Please retry your request.
type InternalServerException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s 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
}

// An invalid or out-of-range value was supplied for the input parameter.
type InvalidParameterException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

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

func newErrorInvalidParameterException(v protocol.ResponseMetadata) error {
	return &InvalidParameterException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

type ListComponentsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique ID for the Amplify app.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

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

	// The token to request the next page of results.
	NextToken *string `location:"querystring" locationName:"nextToken" 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 ListComponentsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *ListComponentsInput) SetAppId(v string) *ListComponentsInput {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *ListComponentsInput) SetEnvironmentName(v string) *ListComponentsInput {
	s.EnvironmentName = &v
	return s
}

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

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

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

	// The list of components for the Amplify app.
	//
	// Entities is a required field
	Entities []*ComponentSummary `locationName:"entities" type:"list" required:"true"`

	// The pagination token that's included if more results are available.
	NextToken *string `locationName:"nextToken" 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 ListComponentsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEntities sets the Entities field's value.
func (s *ListComponentsOutput) SetEntities(v []*ComponentSummary) *ListComponentsOutput {
	s.Entities = v
	return s
}

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

type ListFormsInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique ID for the Amplify app.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

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

	// The token to request the next page of results.
	NextToken *string `location:"querystring" locationName:"nextToken" 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 ListFormsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *ListFormsInput) SetAppId(v string) *ListFormsInput {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *ListFormsInput) SetEnvironmentName(v string) *ListFormsInput {
	s.EnvironmentName = &v
	return s
}

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

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

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

	// The list of forms for the Amplify app.
	//
	// Entities is a required field
	Entities []*FormSummary `locationName:"entities" type:"list" required:"true"`

	// The pagination token that's included if more results are available.
	NextToken *string `locationName:"nextToken" 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 ListFormsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEntities sets the Entities field's value.
func (s *ListFormsOutput) SetEntities(v []*FormSummary) *ListFormsOutput {
	s.Entities = v
	return s
}

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

type ListThemesInput struct {
	_ struct{} `type:"structure" nopayload:"true"`

	// The unique ID for the Amplify app.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

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

	// The token to request the next page of results.
	NextToken *string `location:"querystring" locationName:"nextToken" 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 ListThemesInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppId sets the AppId field's value.
func (s *ListThemesInput) SetAppId(v string) *ListThemesInput {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *ListThemesInput) SetEnvironmentName(v string) *ListThemesInput {
	s.EnvironmentName = &v
	return s
}

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

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

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

	// The list of themes for the Amplify app.
	//
	// Entities is a required field
	Entities []*ThemeSummary `locationName:"entities" type:"list" required:"true"`

	// The pagination token that's returned if more results are available.
	NextToken *string `locationName:"nextToken" 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 ListThemesOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEntities sets the Entities field's value.
func (s *ListThemesOutput) SetEntities(v []*ThemeSummary) *ListThemesOutput {
	s.Entities = v
	return s
}

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

// Represents the state configuration when an action modifies a property of
// another element within the same component.
type MutationActionSetStateParameter struct {
	_ struct{} `type:"structure"`

	// The name of the component that is being modified.
	//
	// ComponentName is a required field
	ComponentName *string `locationName:"componentName" type:"string" required:"true"`

	// The name of the component property to apply the state configuration to.
	//
	// Property is a required field
	Property *string `locationName:"property" type:"string" required:"true"`

	// The state configuration to assign to the property.
	//
	// Set is a required field
	Set *ComponentProperty `locationName:"set" type:"structure" required:"true"`
}

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

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

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

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

// SetComponentName sets the ComponentName field's value.
func (s *MutationActionSetStateParameter) SetComponentName(v string) *MutationActionSetStateParameter {
	s.ComponentName = &v
	return s
}

// SetProperty sets the Property field's value.
func (s *MutationActionSetStateParameter) SetProperty(v string) *MutationActionSetStateParameter {
	s.Property = &v
	return s
}

// SetSet sets the Set field's value.
func (s *MutationActionSetStateParameter) SetSet(v *ComponentProperty) *MutationActionSetStateParameter {
	s.Set = v
	return s
}

// Stores information for generating Amplify DataStore queries. Use a Predicate
// to retrieve a subset of the data in a collection.
type Predicate struct {
	_ struct{} `type:"structure"`

	// A list of predicates to combine logically.
	And []*Predicate `locationName:"and" type:"list"`

	// The field to query.
	Field *string `locationName:"field" type:"string"`

	// The value to use when performing the evaluation.
	Operand *string `locationName:"operand" type:"string"`

	// The type of value to use when performing the evaluation.
	OperandType *string `locationName:"operandType" type:"string"`

	// The operator to use to perform the evaluation.
	Operator *string `locationName:"operator" type:"string"`

	// A list of predicates to combine logically.
	Or []*Predicate `locationName:"or" 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 Predicate) String() string {
	return awsutil.Prettify(s)
}

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

// SetAnd sets the And field's value.
func (s *Predicate) SetAnd(v []*Predicate) *Predicate {
	s.And = v
	return s
}

// SetField sets the Field field's value.
func (s *Predicate) SetField(v string) *Predicate {
	s.Field = &v
	return s
}

// SetOperand sets the Operand field's value.
func (s *Predicate) SetOperand(v string) *Predicate {
	s.Operand = &v
	return s
}

// SetOperandType sets the OperandType field's value.
func (s *Predicate) SetOperandType(v string) *Predicate {
	s.OperandType = &v
	return s
}

// SetOperator sets the Operator field's value.
func (s *Predicate) SetOperator(v string) *Predicate {
	s.Operator = &v
	return s
}

// SetOr sets the Or field's value.
func (s *Predicate) SetOr(v []*Predicate) *Predicate {
	s.Or = v
	return s
}

// Stores the metadata information about a feature on a form.
type PutMetadataFlagBody struct {
	_ struct{} `type:"structure"`

	// The new information to store.
	//
	// NewValue is a required field
	NewValue *string `locationName:"newValue" 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 PutMetadataFlagBody) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetNewValue sets the NewValue field's value.
func (s *PutMetadataFlagBody) SetNewValue(v string) *PutMetadataFlagBody {
	s.NewValue = &v
	return s
}

type PutMetadataFlagInput struct {
	_ struct{} `type:"structure" payload:"Body"`

	// The unique ID for the Amplify app.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The metadata information to store.
	//
	// Body is a required field
	Body *PutMetadataFlagBody `locationName:"body" type:"structure" required:"true"`

	// The name of the backend environment that is part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// The name of the feature associated with the metadata.
	//
	// FeatureName is a required field
	FeatureName *string `location:"uri" locationName:"featureName" 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 PutMetadataFlagInput) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *PutMetadataFlagInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PutMetadataFlagInput"}
	if s.AppId == nil {
		invalidParams.Add(request.NewErrParamRequired("AppId"))
	}
	if s.AppId != nil && len(*s.AppId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AppId", 1))
	}
	if s.Body == nil {
		invalidParams.Add(request.NewErrParamRequired("Body"))
	}
	if s.EnvironmentName == nil {
		invalidParams.Add(request.NewErrParamRequired("EnvironmentName"))
	}
	if s.EnvironmentName != nil && len(*s.EnvironmentName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("EnvironmentName", 1))
	}
	if s.FeatureName == nil {
		invalidParams.Add(request.NewErrParamRequired("FeatureName"))
	}
	if s.FeatureName != nil && len(*s.FeatureName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("FeatureName", 1))
	}
	if s.Body != nil {
		if err := s.Body.Validate(); err != nil {
			invalidParams.AddNested("Body", err.(request.ErrInvalidParams))
		}
	}

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

// SetAppId sets the AppId field's value.
func (s *PutMetadataFlagInput) SetAppId(v string) *PutMetadataFlagInput {
	s.AppId = &v
	return s
}

// SetBody sets the Body field's value.
func (s *PutMetadataFlagInput) SetBody(v *PutMetadataFlagBody) *PutMetadataFlagInput {
	s.Body = v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *PutMetadataFlagInput) SetEnvironmentName(v string) *PutMetadataFlagInput {
	s.EnvironmentName = &v
	return s
}

// SetFeatureName sets the FeatureName field's value.
func (s *PutMetadataFlagInput) SetFeatureName(v string) *PutMetadataFlagInput {
	s.FeatureName = &v
	return s
}

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

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

type RefreshTokenInput struct {
	_ struct{} `type:"structure" payload:"RefreshTokenBody"`

	// The third-party provider for the token. The only valid value is figma.
	//
	// Provider is a required field
	Provider *string `location:"uri" locationName:"provider" type:"string" required:"true" enum:"TokenProviders"`

	// Information about the refresh token request.
	//
	// RefreshTokenBody is a required field
	RefreshTokenBody *RefreshTokenRequestBody `locationName:"refreshTokenBody" type:"structure" required:"true"`
}

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

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

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

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

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

// SetRefreshTokenBody sets the RefreshTokenBody field's value.
func (s *RefreshTokenInput) SetRefreshTokenBody(v *RefreshTokenRequestBody) *RefreshTokenInput {
	s.RefreshTokenBody = v
	return s
}

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

	// The access token.
	//
	// AccessToken is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by RefreshTokenOutput's
	// String and GoString methods.
	//
	// AccessToken is a required field
	AccessToken *string `locationName:"accessToken" type:"string" required:"true" sensitive:"true"`

	// The date and time when the new access token expires.
	//
	// ExpiresIn is a required field
	ExpiresIn *int64 `locationName:"expiresIn" type:"integer" 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 RefreshTokenOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetAccessToken sets the AccessToken field's value.
func (s *RefreshTokenOutput) SetAccessToken(v string) *RefreshTokenOutput {
	s.AccessToken = &v
	return s
}

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

// Describes a refresh token.
type RefreshTokenRequestBody struct {
	_ struct{} `type:"structure"`

	// The ID of the client to request the token from.
	//
	// ClientId is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by RefreshTokenRequestBody's
	// String and GoString methods.
	ClientId *string `locationName:"clientId" type:"string" sensitive:"true"`

	// The token to use to refresh a previously issued access token that might have
	// expired.
	//
	// Token is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by RefreshTokenRequestBody's
	// String and GoString methods.
	//
	// Token is a required field
	Token *string `locationName:"token" type:"string" required:"true" sensitive:"true"`
}

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

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

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

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

// SetClientId sets the ClientId field's value.
func (s *RefreshTokenRequestBody) SetClientId(v string) *RefreshTokenRequestBody {
	s.ClientId = &v
	return s
}

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

// The resource specified in the request conflicts with an existing resource.
type ResourceConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

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

func newErrorResourceConflictException(v protocol.ResponseMetadata) error {
	return &ResourceConflictException{
		RespMetadata: v,
	}
}

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

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

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

func (s *ResourceConflictException) 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 *ResourceConflictException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// The requested resource does not exist, or access was denied.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

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

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

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

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

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

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

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

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

// Stores the configuration information for a visual helper element for a form.
// A sectional element can be a header, a text block, or a divider. These elements
// are static and not associated with any data.
type SectionalElement struct {
	_ struct{} `type:"structure"`

	// Excludes a sectional element that was generated by default for a specified
	// data model.
	Excluded *bool `locationName:"excluded" type:"boolean"`

	// Specifies the size of the font for a Heading sectional element. Valid values
	// are 1 | 2 | 3 | 4 | 5 | 6.
	Level *int64 `locationName:"level" type:"integer"`

	// Specifies the orientation for a Divider sectional element. Valid values are
	// horizontal or vertical.
	Orientation *string `locationName:"orientation" type:"string"`

	// Specifies the position of the text in a field for a Text sectional element.
	Position *FieldPosition `locationName:"position" type:"structure"`

	// The text for a Text sectional element.
	Text *string `locationName:"text" type:"string"`

	// The type of sectional element. Valid values are Heading, Text, and Divider.
	//
	// 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 SectionalElement) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetExcluded sets the Excluded field's value.
func (s *SectionalElement) SetExcluded(v bool) *SectionalElement {
	s.Excluded = &v
	return s
}

// SetLevel sets the Level field's value.
func (s *SectionalElement) SetLevel(v int64) *SectionalElement {
	s.Level = &v
	return s
}

// SetOrientation sets the Orientation field's value.
func (s *SectionalElement) SetOrientation(v string) *SectionalElement {
	s.Orientation = &v
	return s
}

// SetPosition sets the Position field's value.
func (s *SectionalElement) SetPosition(v *FieldPosition) *SectionalElement {
	s.Position = v
	return s
}

// SetText sets the Text field's value.
func (s *SectionalElement) SetText(v string) *SectionalElement {
	s.Text = &v
	return s
}

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

// You exceeded your service quota. Service quotas, also referred to as limits,
// are the maximum number of service resources or operations for your Amazon
// Web Services account.
type ServiceQuotaExceededException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s 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
}

// Describes how to sort the data that you bind to a component.
type SortProperty struct {
	_ struct{} `type:"structure"`

	// The direction of the sort, either ascending or descending.
	//
	// Direction is a required field
	Direction *string `locationName:"direction" type:"string" required:"true" enum:"SortDirection"`

	// The field to perform the sort on.
	//
	// Field is a required field
	Field *string `locationName:"field" 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 SortProperty) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetDirection sets the Direction field's value.
func (s *SortProperty) SetDirection(v string) *SortProperty {
	s.Direction = &v
	return s
}

// SetField sets the Field field's value.
func (s *SortProperty) SetField(v string) *SortProperty {
	s.Field = &v
	return s
}

// A theme is a collection of style settings that apply globally to the components
// associated with an Amplify application.
type Theme struct {
	_ struct{} `type:"structure"`

	// The unique ID for the Amplify app associated with the theme.
	//
	// AppId is a required field
	AppId *string `locationName:"appId" type:"string" required:"true"`

	// The time that the theme was created.
	//
	// CreatedAt is a required field
	CreatedAt *time.Time `locationName:"createdAt" type:"timestamp" timestampFormat:"iso8601" required:"true"`

	// The name of the backend environment that is a part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `locationName:"environmentName" type:"string" required:"true"`

	// The ID for the theme.
	//
	// Id is a required field
	Id *string `locationName:"id" type:"string" required:"true"`

	// The time that the theme was modified.
	ModifiedAt *time.Time `locationName:"modifiedAt" type:"timestamp" timestampFormat:"iso8601"`

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

	// Describes the properties that can be overriden to customize a theme.
	Overrides []*ThemeValues `locationName:"overrides" type:"list"`

	// One or more key-value pairs to use when tagging the theme.
	Tags map[string]*string `locationName:"tags" type:"map"`

	// A list of key-value pairs that defines the properties of the theme.
	//
	// Values is a required field
	Values []*ThemeValues `locationName:"values" 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 Theme) String() string {
	return awsutil.Prettify(s)
}

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

// SetAppId sets the AppId field's value.
func (s *Theme) SetAppId(v string) *Theme {
	s.AppId = &v
	return s
}

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

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *Theme) SetEnvironmentName(v string) *Theme {
	s.EnvironmentName = &v
	return s
}

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

// SetModifiedAt sets the ModifiedAt field's value.
func (s *Theme) SetModifiedAt(v time.Time) *Theme {
	s.ModifiedAt = &v
	return s
}

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

// SetOverrides sets the Overrides field's value.
func (s *Theme) SetOverrides(v []*ThemeValues) *Theme {
	s.Overrides = v
	return s
}

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

// SetValues sets the Values field's value.
func (s *Theme) SetValues(v []*ThemeValues) *Theme {
	s.Values = v
	return s
}

// Describes the basic information about a theme.
type ThemeSummary struct {
	_ struct{} `type:"structure"`

	// The unique ID for the app associated with the theme summary.
	//
	// AppId is a required field
	AppId *string `locationName:"appId" type:"string" required:"true"`

	// The name of the backend environment that is part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `locationName:"environmentName" type:"string" required:"true"`

	// The ID of the theme.
	//
	// Id is a required field
	Id *string `locationName:"id" type:"string" required:"true"`

	// The name of the theme.
	//
	// Name is a required field
	Name *string `locationName:"name" 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 ThemeSummary) String() string {
	return awsutil.Prettify(s)
}

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

// SetAppId sets the AppId field's value.
func (s *ThemeSummary) SetAppId(v string) *ThemeSummary {
	s.AppId = &v
	return s
}

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *ThemeSummary) SetEnvironmentName(v string) *ThemeSummary {
	s.EnvironmentName = &v
	return s
}

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

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

// Describes the configuration of a theme's properties.
type ThemeValue struct {
	_ struct{} `type:"structure"`

	// A list of key-value pairs that define the theme's properties.
	Children []*ThemeValues `locationName:"children" type:"list"`

	// The value of a theme property.
	Value *string `locationName:"value" 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 ThemeValue) String() string {
	return awsutil.Prettify(s)
}

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

// SetChildren sets the Children field's value.
func (s *ThemeValue) SetChildren(v []*ThemeValues) *ThemeValue {
	s.Children = v
	return s
}

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

// A key-value pair that defines a property of a theme.
type ThemeValues struct {
	_ struct{} `type:"structure"`

	// The name of the property.
	Key *string `locationName:"key" type:"string"`

	// The value of the property.
	Value *ThemeValue `locationName:"value" 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 ThemeValues) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetValue sets the Value field's value.
func (s *ThemeValues) SetValue(v *ThemeValue) *ThemeValues {
	s.Value = v
	return s
}

// You don't have permission to perform this operation.
type UnauthorizedException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

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

func newErrorUnauthorizedException(v protocol.ResponseMetadata) error {
	return &UnauthorizedException{
		RespMetadata: v,
	}
}

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

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

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

func (s *UnauthorizedException) 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 *UnauthorizedException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// Updates and saves all of the information about a component, based on component
// ID.
type UpdateComponentData struct {
	_ struct{} `type:"structure"`

	// The data binding information for the component's properties.
	BindingProperties map[string]*ComponentBindingPropertiesValue `locationName:"bindingProperties" type:"map"`

	// The components that are instances of the main component.
	Children []*ComponentChild `locationName:"children" type:"list"`

	// The configuration for binding a component's properties to a data model. Use
	// this for a collection component.
	CollectionProperties map[string]*ComponentDataConfiguration `locationName:"collectionProperties" type:"map"`

	// The type of the component. This can be an Amplify custom UI component or
	// another custom component.
	ComponentType *string `locationName:"componentType" min:"1" type:"string"`

	// The event configuration for the component. Use for the workflow feature in
	// Amplify Studio that allows you to bind events and actions to components.
	Events map[string]*ComponentEvent `locationName:"events" type:"map"`

	// The unique ID of the component to update.
	Id *string `locationName:"id" type:"string"`

	// The name of the component to update.
	Name *string `locationName:"name" min:"1" type:"string"`

	// Describes the properties that can be overriden to customize the component.
	Overrides map[string]map[string]*string `locationName:"overrides" type:"map"`

	// Describes the component's properties.
	Properties map[string]*ComponentProperty `locationName:"properties" type:"map"`

	// The schema version of the component when it was imported.
	SchemaVersion *string `locationName:"schemaVersion" type:"string"`

	// The unique ID of the component in its original source system, such as Figma.
	SourceId *string `locationName:"sourceId" type:"string"`

	// A list of the unique variants of the main component being updated.
	Variants []*ComponentVariant `locationName:"variants" 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 UpdateComponentData) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetBindingProperties sets the BindingProperties field's value.
func (s *UpdateComponentData) SetBindingProperties(v map[string]*ComponentBindingPropertiesValue) *UpdateComponentData {
	s.BindingProperties = v
	return s
}

// SetChildren sets the Children field's value.
func (s *UpdateComponentData) SetChildren(v []*ComponentChild) *UpdateComponentData {
	s.Children = v
	return s
}

// SetCollectionProperties sets the CollectionProperties field's value.
func (s *UpdateComponentData) SetCollectionProperties(v map[string]*ComponentDataConfiguration) *UpdateComponentData {
	s.CollectionProperties = v
	return s
}

// SetComponentType sets the ComponentType field's value.
func (s *UpdateComponentData) SetComponentType(v string) *UpdateComponentData {
	s.ComponentType = &v
	return s
}

// SetEvents sets the Events field's value.
func (s *UpdateComponentData) SetEvents(v map[string]*ComponentEvent) *UpdateComponentData {
	s.Events = v
	return s
}

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

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

// SetOverrides sets the Overrides field's value.
func (s *UpdateComponentData) SetOverrides(v map[string]map[string]*string) *UpdateComponentData {
	s.Overrides = v
	return s
}

// SetProperties sets the Properties field's value.
func (s *UpdateComponentData) SetProperties(v map[string]*ComponentProperty) *UpdateComponentData {
	s.Properties = v
	return s
}

// SetSchemaVersion sets the SchemaVersion field's value.
func (s *UpdateComponentData) SetSchemaVersion(v string) *UpdateComponentData {
	s.SchemaVersion = &v
	return s
}

// SetSourceId sets the SourceId field's value.
func (s *UpdateComponentData) SetSourceId(v string) *UpdateComponentData {
	s.SourceId = &v
	return s
}

// SetVariants sets the Variants field's value.
func (s *UpdateComponentData) SetVariants(v []*ComponentVariant) *UpdateComponentData {
	s.Variants = v
	return s
}

type UpdateComponentInput struct {
	_ struct{} `type:"structure" payload:"UpdatedComponent"`

	// The unique ID for the Amplify app.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The unique client token.
	ClientToken *string `location:"querystring" locationName:"clientToken" type:"string" idempotencyToken:"true"`

	// The name of the backend environment that is part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// The unique ID for the component.
	//
	// Id is a required field
	Id *string `location:"uri" locationName:"id" type:"string" required:"true"`

	// The configuration of the updated component.
	//
	// UpdatedComponent is a required field
	UpdatedComponent *UpdateComponentData `locationName:"updatedComponent" type:"structure" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateComponentInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateComponentInput"}
	if s.AppId == nil {
		invalidParams.Add(request.NewErrParamRequired("AppId"))
	}
	if s.AppId != nil && len(*s.AppId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AppId", 1))
	}
	if s.EnvironmentName == nil {
		invalidParams.Add(request.NewErrParamRequired("EnvironmentName"))
	}
	if s.EnvironmentName != nil && len(*s.EnvironmentName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("EnvironmentName", 1))
	}
	if s.Id == nil {
		invalidParams.Add(request.NewErrParamRequired("Id"))
	}
	if s.Id != nil && len(*s.Id) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Id", 1))
	}
	if s.UpdatedComponent == nil {
		invalidParams.Add(request.NewErrParamRequired("UpdatedComponent"))
	}
	if s.UpdatedComponent != nil {
		if err := s.UpdatedComponent.Validate(); err != nil {
			invalidParams.AddNested("UpdatedComponent", err.(request.ErrInvalidParams))
		}
	}

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

// SetAppId sets the AppId field's value.
func (s *UpdateComponentInput) SetAppId(v string) *UpdateComponentInput {
	s.AppId = &v
	return s
}

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

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *UpdateComponentInput) SetEnvironmentName(v string) *UpdateComponentInput {
	s.EnvironmentName = &v
	return s
}

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

// SetUpdatedComponent sets the UpdatedComponent field's value.
func (s *UpdateComponentInput) SetUpdatedComponent(v *UpdateComponentData) *UpdateComponentInput {
	s.UpdatedComponent = v
	return s
}

type UpdateComponentOutput struct {
	_ struct{} `type:"structure" payload:"Entity"`

	// Describes the configuration of the updated component.
	Entity *Component `locationName:"entity" 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 UpdateComponentOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEntity sets the Entity field's value.
func (s *UpdateComponentOutput) SetEntity(v *Component) *UpdateComponentOutput {
	s.Entity = v
	return s
}

// Updates and saves all of the information about a form, based on form ID.
type UpdateFormData struct {
	_ struct{} `type:"structure"`

	// The FormCTA object that stores the call to action configuration for the form.
	Cta *FormCTA `locationName:"cta" type:"structure"`

	// The type of data source to use to create the form.
	DataType *FormDataTypeConfig `locationName:"dataType" type:"structure"`

	// The configuration information for the form's fields.
	Fields map[string]*FieldConfig `locationName:"fields" type:"map"`

	// Specifies whether to perform a create or update action on the form.
	FormActionType *string `locationName:"formActionType" type:"string" enum:"FormActionType"`

	// Specifies an icon or decoration to display on the form.
	LabelDecorator *string `locationName:"labelDecorator" type:"string" enum:"LabelDecorator"`

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

	// The schema version of the form.
	SchemaVersion *string `locationName:"schemaVersion" type:"string"`

	// The configuration information for the visual helper elements for the form.
	// These elements are not associated with any data.
	SectionalElements map[string]*SectionalElement `locationName:"sectionalElements" type:"map"`

	// The configuration for the form's style.
	Style *FormStyle `locationName:"style" 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 UpdateFormData) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetCta sets the Cta field's value.
func (s *UpdateFormData) SetCta(v *FormCTA) *UpdateFormData {
	s.Cta = v
	return s
}

// SetDataType sets the DataType field's value.
func (s *UpdateFormData) SetDataType(v *FormDataTypeConfig) *UpdateFormData {
	s.DataType = v
	return s
}

// SetFields sets the Fields field's value.
func (s *UpdateFormData) SetFields(v map[string]*FieldConfig) *UpdateFormData {
	s.Fields = v
	return s
}

// SetFormActionType sets the FormActionType field's value.
func (s *UpdateFormData) SetFormActionType(v string) *UpdateFormData {
	s.FormActionType = &v
	return s
}

// SetLabelDecorator sets the LabelDecorator field's value.
func (s *UpdateFormData) SetLabelDecorator(v string) *UpdateFormData {
	s.LabelDecorator = &v
	return s
}

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

// SetSchemaVersion sets the SchemaVersion field's value.
func (s *UpdateFormData) SetSchemaVersion(v string) *UpdateFormData {
	s.SchemaVersion = &v
	return s
}

// SetSectionalElements sets the SectionalElements field's value.
func (s *UpdateFormData) SetSectionalElements(v map[string]*SectionalElement) *UpdateFormData {
	s.SectionalElements = v
	return s
}

// SetStyle sets the Style field's value.
func (s *UpdateFormData) SetStyle(v *FormStyle) *UpdateFormData {
	s.Style = v
	return s
}

type UpdateFormInput struct {
	_ struct{} `type:"structure" payload:"UpdatedForm"`

	// The unique ID for the Amplify app.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The unique client token.
	ClientToken *string `location:"querystring" locationName:"clientToken" type:"string" idempotencyToken:"true"`

	// The name of the backend environment that is part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// The unique ID for the form.
	//
	// Id is a required field
	Id *string `location:"uri" locationName:"id" type:"string" required:"true"`

	// The request accepts the following data in JSON format.
	//
	// UpdatedForm is a required field
	UpdatedForm *UpdateFormData `locationName:"updatedForm" type:"structure" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateFormInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateFormInput"}
	if s.AppId == nil {
		invalidParams.Add(request.NewErrParamRequired("AppId"))
	}
	if s.AppId != nil && len(*s.AppId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AppId", 1))
	}
	if s.EnvironmentName == nil {
		invalidParams.Add(request.NewErrParamRequired("EnvironmentName"))
	}
	if s.EnvironmentName != nil && len(*s.EnvironmentName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("EnvironmentName", 1))
	}
	if s.Id == nil {
		invalidParams.Add(request.NewErrParamRequired("Id"))
	}
	if s.Id != nil && len(*s.Id) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Id", 1))
	}
	if s.UpdatedForm == nil {
		invalidParams.Add(request.NewErrParamRequired("UpdatedForm"))
	}
	if s.UpdatedForm != nil {
		if err := s.UpdatedForm.Validate(); err != nil {
			invalidParams.AddNested("UpdatedForm", err.(request.ErrInvalidParams))
		}
	}

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

// SetAppId sets the AppId field's value.
func (s *UpdateFormInput) SetAppId(v string) *UpdateFormInput {
	s.AppId = &v
	return s
}

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

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *UpdateFormInput) SetEnvironmentName(v string) *UpdateFormInput {
	s.EnvironmentName = &v
	return s
}

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

// SetUpdatedForm sets the UpdatedForm field's value.
func (s *UpdateFormInput) SetUpdatedForm(v *UpdateFormData) *UpdateFormInput {
	s.UpdatedForm = v
	return s
}

type UpdateFormOutput struct {
	_ struct{} `type:"structure" payload:"Entity"`

	// Describes the configuration of the updated form.
	Entity *Form `locationName:"entity" 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 UpdateFormOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEntity sets the Entity field's value.
func (s *UpdateFormOutput) SetEntity(v *Form) *UpdateFormOutput {
	s.Entity = v
	return s
}

// Saves the data binding information for a theme.
type UpdateThemeData struct {
	_ struct{} `type:"structure"`

	// The unique ID of the theme to update.
	Id *string `locationName:"id" type:"string"`

	// The name of the theme to update.
	Name *string `locationName:"name" min:"1" type:"string"`

	// Describes the properties that can be overriden to customize the theme.
	Overrides []*ThemeValues `locationName:"overrides" type:"list"`

	// A list of key-value pairs that define the theme's properties.
	//
	// Values is a required field
	Values []*ThemeValues `locationName:"values" 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 UpdateThemeData) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

// SetOverrides sets the Overrides field's value.
func (s *UpdateThemeData) SetOverrides(v []*ThemeValues) *UpdateThemeData {
	s.Overrides = v
	return s
}

// SetValues sets the Values field's value.
func (s *UpdateThemeData) SetValues(v []*ThemeValues) *UpdateThemeData {
	s.Values = v
	return s
}

type UpdateThemeInput struct {
	_ struct{} `type:"structure" payload:"UpdatedTheme"`

	// The unique ID for the Amplify app.
	//
	// AppId is a required field
	AppId *string `location:"uri" locationName:"appId" type:"string" required:"true"`

	// The unique client token.
	ClientToken *string `location:"querystring" locationName:"clientToken" type:"string" idempotencyToken:"true"`

	// The name of the backend environment that is part of the Amplify app.
	//
	// EnvironmentName is a required field
	EnvironmentName *string `location:"uri" locationName:"environmentName" type:"string" required:"true"`

	// The unique ID for the theme.
	//
	// Id is a required field
	Id *string `location:"uri" locationName:"id" type:"string" required:"true"`

	// The configuration of the updated theme.
	//
	// UpdatedTheme is a required field
	UpdatedTheme *UpdateThemeData `locationName:"updatedTheme" type:"structure" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateThemeInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateThemeInput"}
	if s.AppId == nil {
		invalidParams.Add(request.NewErrParamRequired("AppId"))
	}
	if s.AppId != nil && len(*s.AppId) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("AppId", 1))
	}
	if s.EnvironmentName == nil {
		invalidParams.Add(request.NewErrParamRequired("EnvironmentName"))
	}
	if s.EnvironmentName != nil && len(*s.EnvironmentName) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("EnvironmentName", 1))
	}
	if s.Id == nil {
		invalidParams.Add(request.NewErrParamRequired("Id"))
	}
	if s.Id != nil && len(*s.Id) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Id", 1))
	}
	if s.UpdatedTheme == nil {
		invalidParams.Add(request.NewErrParamRequired("UpdatedTheme"))
	}
	if s.UpdatedTheme != nil {
		if err := s.UpdatedTheme.Validate(); err != nil {
			invalidParams.AddNested("UpdatedTheme", err.(request.ErrInvalidParams))
		}
	}

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

// SetAppId sets the AppId field's value.
func (s *UpdateThemeInput) SetAppId(v string) *UpdateThemeInput {
	s.AppId = &v
	return s
}

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

// SetEnvironmentName sets the EnvironmentName field's value.
func (s *UpdateThemeInput) SetEnvironmentName(v string) *UpdateThemeInput {
	s.EnvironmentName = &v
	return s
}

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

// SetUpdatedTheme sets the UpdatedTheme field's value.
func (s *UpdateThemeInput) SetUpdatedTheme(v *UpdateThemeData) *UpdateThemeInput {
	s.UpdatedTheme = v
	return s
}

type UpdateThemeOutput struct {
	_ struct{} `type:"structure" payload:"Entity"`

	// Describes the configuration of the updated theme.
	Entity *Theme `locationName:"entity" 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 UpdateThemeOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEntity sets the Entity field's value.
func (s *UpdateThemeOutput) SetEntity(v *Theme) *UpdateThemeOutput {
	s.Entity = v
	return s
}

// Associates a complex object with a display value. Use ValueMapping to store
// how to represent complex objects when they are displayed.
type ValueMapping struct {
	_ struct{} `type:"structure"`

	// The value to display for the complex object.
	DisplayValue *FormInputValueProperty `locationName:"displayValue" type:"structure"`

	// The complex object.
	//
	// Value is a required field
	Value *FormInputValueProperty `locationName:"value" type:"structure" required:"true"`
}

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

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

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

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

// SetDisplayValue sets the DisplayValue field's value.
func (s *ValueMapping) SetDisplayValue(v *FormInputValueProperty) *ValueMapping {
	s.DisplayValue = v
	return s
}

// SetValue sets the Value field's value.
func (s *ValueMapping) SetValue(v *FormInputValueProperty) *ValueMapping {
	s.Value = v
	return s
}

// Represents the data binding configuration for a value map.
type ValueMappings struct {
	_ struct{} `type:"structure"`

	// The information to bind fields to data at runtime.
	BindingProperties map[string]*FormInputBindingPropertiesValue `locationName:"bindingProperties" type:"map"`

	// The value and display value pairs.
	//
	// Values is a required field
	Values []*ValueMapping `locationName:"values" 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 ValueMappings) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetBindingProperties sets the BindingProperties field's value.
func (s *ValueMappings) SetBindingProperties(v map[string]*FormInputBindingPropertiesValue) *ValueMappings {
	s.BindingProperties = v
	return s
}

// SetValues sets the Values field's value.
func (s *ValueMappings) SetValues(v []*ValueMapping) *ValueMappings {
	s.Values = v
	return s
}

const (
	// FixedPositionFirst is a FixedPosition enum value
	FixedPositionFirst = "first"
)

// FixedPosition_Values returns all elements of the FixedPosition enum
func FixedPosition_Values() []string {
	return []string{
		FixedPositionFirst,
	}
}

const (
	// FormActionTypeCreate is a FormActionType enum value
	FormActionTypeCreate = "create"

	// FormActionTypeUpdate is a FormActionType enum value
	FormActionTypeUpdate = "update"
)

// FormActionType_Values returns all elements of the FormActionType enum
func FormActionType_Values() []string {
	return []string{
		FormActionTypeCreate,
		FormActionTypeUpdate,
	}
}

const (
	// FormButtonsPositionTop is a FormButtonsPosition enum value
	FormButtonsPositionTop = "top"

	// FormButtonsPositionBottom is a FormButtonsPosition enum value
	FormButtonsPositionBottom = "bottom"

	// FormButtonsPositionTopAndBottom is a FormButtonsPosition enum value
	FormButtonsPositionTopAndBottom = "top_and_bottom"
)

// FormButtonsPosition_Values returns all elements of the FormButtonsPosition enum
func FormButtonsPosition_Values() []string {
	return []string{
		FormButtonsPositionTop,
		FormButtonsPositionBottom,
		FormButtonsPositionTopAndBottom,
	}
}

const (
	// FormDataSourceTypeDataStore is a FormDataSourceType enum value
	FormDataSourceTypeDataStore = "DataStore"

	// FormDataSourceTypeCustom is a FormDataSourceType enum value
	FormDataSourceTypeCustom = "Custom"
)

// FormDataSourceType_Values returns all elements of the FormDataSourceType enum
func FormDataSourceType_Values() []string {
	return []string{
		FormDataSourceTypeDataStore,
		FormDataSourceTypeCustom,
	}
}

const (
	// LabelDecoratorRequired is a LabelDecorator enum value
	LabelDecoratorRequired = "required"

	// LabelDecoratorOptional is a LabelDecorator enum value
	LabelDecoratorOptional = "optional"

	// LabelDecoratorNone is a LabelDecorator enum value
	LabelDecoratorNone = "none"
)

// LabelDecorator_Values returns all elements of the LabelDecorator enum
func LabelDecorator_Values() []string {
	return []string{
		LabelDecoratorRequired,
		LabelDecoratorOptional,
		LabelDecoratorNone,
	}
}

const (
	// SortDirectionAsc is a SortDirection enum value
	SortDirectionAsc = "ASC"

	// SortDirectionDesc is a SortDirection enum value
	SortDirectionDesc = "DESC"
)

// SortDirection_Values returns all elements of the SortDirection enum
func SortDirection_Values() []string {
	return []string{
		SortDirectionAsc,
		SortDirectionDesc,
	}
}

const (
	// StorageAccessLevelPublic is a StorageAccessLevel enum value
	StorageAccessLevelPublic = "public"

	// StorageAccessLevelProtected is a StorageAccessLevel enum value
	StorageAccessLevelProtected = "protected"

	// StorageAccessLevelPrivate is a StorageAccessLevel enum value
	StorageAccessLevelPrivate = "private"
)

// StorageAccessLevel_Values returns all elements of the StorageAccessLevel enum
func StorageAccessLevel_Values() []string {
	return []string{
		StorageAccessLevelPublic,
		StorageAccessLevelProtected,
		StorageAccessLevelPrivate,
	}
}

const (
	// TokenProvidersFigma is a TokenProviders enum value
	TokenProvidersFigma = "figma"
)

// TokenProviders_Values returns all elements of the TokenProviders enum
func TokenProviders_Values() []string {
	return []string{
		TokenProvidersFigma,
	}
}
