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

package ssmsap

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 opDeleteResourcePermission = "DeleteResourcePermission"

// DeleteResourcePermissionRequest generates a "aws/request.Request" representing the
// client's request for the DeleteResourcePermission 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 DeleteResourcePermission for more information on using the DeleteResourcePermission
// 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 DeleteResourcePermissionRequest method.
//	req, resp := client.DeleteResourcePermissionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/DeleteResourcePermission
func (c *SsmSap) DeleteResourcePermissionRequest(input *DeleteResourcePermissionInput) (req *request.Request, output *DeleteResourcePermissionOutput) {
	op := &request.Operation{
		Name:       opDeleteResourcePermission,
		HTTPMethod: "POST",
		HTTPPath:   "/delete-resource-permission",
	}

	if input == nil {
		input = &DeleteResourcePermissionInput{}
	}

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

// DeleteResourcePermission API operation for AWS Systems Manager for SAP.
//
// Removes permissions associated with the target database.
//
// 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 Systems Manager for SAP's
// API operation DeleteResourcePermission for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The resource is not available.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/DeleteResourcePermission
func (c *SsmSap) DeleteResourcePermission(input *DeleteResourcePermissionInput) (*DeleteResourcePermissionOutput, error) {
	req, out := c.DeleteResourcePermissionRequest(input)
	return out, req.Send()
}

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

const opDeregisterApplication = "DeregisterApplication"

// DeregisterApplicationRequest generates a "aws/request.Request" representing the
// client's request for the DeregisterApplication 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 DeregisterApplication for more information on using the DeregisterApplication
// 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 DeregisterApplicationRequest method.
//	req, resp := client.DeregisterApplicationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/DeregisterApplication
func (c *SsmSap) DeregisterApplicationRequest(input *DeregisterApplicationInput) (req *request.Request, output *DeregisterApplicationOutput) {
	op := &request.Operation{
		Name:       opDeregisterApplication,
		HTTPMethod: "POST",
		HTTPPath:   "/deregister-application",
	}

	if input == nil {
		input = &DeregisterApplicationInput{}
	}

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

// DeregisterApplication API operation for AWS Systems Manager for SAP.
//
// Deregister an SAP application with AWS Systems Manager for SAP. This action
// does not aﬀect the existing setup of your SAP workloads on Amazon EC2.
//
// 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 Systems Manager for SAP's
// API operation DeregisterApplication for usage and error information.
//
// Returned Error Types:
//
//   - UnauthorizedException
//     The request is not authorized.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/DeregisterApplication
func (c *SsmSap) DeregisterApplication(input *DeregisterApplicationInput) (*DeregisterApplicationOutput, error) {
	req, out := c.DeregisterApplicationRequest(input)
	return out, req.Send()
}

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

const opGetApplication = "GetApplication"

// GetApplicationRequest generates a "aws/request.Request" representing the
// client's request for the GetApplication 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 GetApplication for more information on using the GetApplication
// 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 GetApplicationRequest method.
//	req, resp := client.GetApplicationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/GetApplication
func (c *SsmSap) GetApplicationRequest(input *GetApplicationInput) (req *request.Request, output *GetApplicationOutput) {
	op := &request.Operation{
		Name:       opGetApplication,
		HTTPMethod: "POST",
		HTTPPath:   "/get-application",
	}

	if input == nil {
		input = &GetApplicationInput{}
	}

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

// GetApplication API operation for AWS Systems Manager for SAP.
//
// Gets an application registered with AWS Systems Manager for SAP. It also
// returns the components of the application.
//
// 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 Systems Manager for SAP's
// API operation GetApplication for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/GetApplication
func (c *SsmSap) GetApplication(input *GetApplicationInput) (*GetApplicationOutput, error) {
	req, out := c.GetApplicationRequest(input)
	return out, req.Send()
}

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

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/ssm-sap-2018-05-10/GetComponent
func (c *SsmSap) GetComponentRequest(input *GetComponentInput) (req *request.Request, output *GetComponentOutput) {
	op := &request.Operation{
		Name:       opGetComponent,
		HTTPMethod: "POST",
		HTTPPath:   "/get-component",
	}

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

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

// GetComponent API operation for AWS Systems Manager for SAP.
//
// Gets the component of an application registered with AWS Systems Manager
// for SAP.
//
// 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 Systems Manager for SAP's
// API operation GetComponent for usage and error information.
//
// Returned Error Types:
//
//   - UnauthorizedException
//     The request is not authorized.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/GetComponent
func (c *SsmSap) 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 *SsmSap) 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 opGetDatabase = "GetDatabase"

// GetDatabaseRequest generates a "aws/request.Request" representing the
// client's request for the GetDatabase 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 GetDatabase for more information on using the GetDatabase
// 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 GetDatabaseRequest method.
//	req, resp := client.GetDatabaseRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/GetDatabase
func (c *SsmSap) GetDatabaseRequest(input *GetDatabaseInput) (req *request.Request, output *GetDatabaseOutput) {
	op := &request.Operation{
		Name:       opGetDatabase,
		HTTPMethod: "POST",
		HTTPPath:   "/get-database",
	}

	if input == nil {
		input = &GetDatabaseInput{}
	}

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

// GetDatabase API operation for AWS Systems Manager for SAP.
//
// Gets the SAP HANA database of an application registered with AWS Systems
// Manager for SAP.
//
// 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 Systems Manager for SAP's
// API operation GetDatabase for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/GetDatabase
func (c *SsmSap) GetDatabase(input *GetDatabaseInput) (*GetDatabaseOutput, error) {
	req, out := c.GetDatabaseRequest(input)
	return out, req.Send()
}

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

const opGetOperation = "GetOperation"

// GetOperationRequest generates a "aws/request.Request" representing the
// client's request for the GetOperation 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 GetOperation for more information on using the GetOperation
// 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 GetOperationRequest method.
//	req, resp := client.GetOperationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/GetOperation
func (c *SsmSap) GetOperationRequest(input *GetOperationInput) (req *request.Request, output *GetOperationOutput) {
	op := &request.Operation{
		Name:       opGetOperation,
		HTTPMethod: "POST",
		HTTPPath:   "/get-operation",
	}

	if input == nil {
		input = &GetOperationInput{}
	}

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

// GetOperation API operation for AWS Systems Manager for SAP.
//
// Gets the details of an operation by specifying the operation ID.
//
// 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 Systems Manager for SAP's
// API operation GetOperation for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/GetOperation
func (c *SsmSap) GetOperation(input *GetOperationInput) (*GetOperationOutput, error) {
	req, out := c.GetOperationRequest(input)
	return out, req.Send()
}

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

const opGetResourcePermission = "GetResourcePermission"

// GetResourcePermissionRequest generates a "aws/request.Request" representing the
// client's request for the GetResourcePermission 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 GetResourcePermission for more information on using the GetResourcePermission
// 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 GetResourcePermissionRequest method.
//	req, resp := client.GetResourcePermissionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/GetResourcePermission
func (c *SsmSap) GetResourcePermissionRequest(input *GetResourcePermissionInput) (req *request.Request, output *GetResourcePermissionOutput) {
	op := &request.Operation{
		Name:       opGetResourcePermission,
		HTTPMethod: "POST",
		HTTPPath:   "/get-resource-permission",
	}

	if input == nil {
		input = &GetResourcePermissionInput{}
	}

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

// GetResourcePermission API operation for AWS Systems Manager for SAP.
//
// Gets permissions associated with the target database.
//
// 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 Systems Manager for SAP's
// API operation GetResourcePermission for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The resource is not available.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/GetResourcePermission
func (c *SsmSap) GetResourcePermission(input *GetResourcePermissionInput) (*GetResourcePermissionOutput, error) {
	req, out := c.GetResourcePermissionRequest(input)
	return out, req.Send()
}

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

const opListApplications = "ListApplications"

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

	if input == nil {
		input = &ListApplicationsInput{}
	}

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

// ListApplications API operation for AWS Systems Manager for SAP.
//
// Lists all the applications registered with AWS Systems Manager for SAP.
//
// 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 Systems Manager for SAP's
// API operation ListApplications for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The resource is not available.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/ListApplications
func (c *SsmSap) ListApplications(input *ListApplicationsInput) (*ListApplicationsOutput, error) {
	req, out := c.ListApplicationsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

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/ssm-sap-2018-05-10/ListComponents
func (c *SsmSap) ListComponentsRequest(input *ListComponentsInput) (req *request.Request, output *ListComponentsOutput) {
	op := &request.Operation{
		Name:       opListComponents,
		HTTPMethod: "POST",
		HTTPPath:   "/list-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 Systems Manager for SAP.
//
// Lists all the components registered with AWS Systems Manager for SAP.
//
// 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 Systems Manager for SAP's
// API operation ListComponents for usage and error information.
//
// Returned Error Types:
//
//   - UnauthorizedException
//     The request is not authorized.
//
//   - ResourceNotFoundException
//     The resource is not available.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/ListComponents
func (c *SsmSap) 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 *SsmSap) 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 *ssmsap.ListComponentsOutput, lastPage bool) bool {
//	        pageNum++
//	        fmt.Println(page)
//	        return pageNum <= 3
//	    })
func (c *SsmSap) 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 *SsmSap) 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 opListDatabases = "ListDatabases"

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

	if input == nil {
		input = &ListDatabasesInput{}
	}

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

// ListDatabases API operation for AWS Systems Manager for SAP.
//
// Lists the SAP HANA databases of an application registered with AWS Systems
// Manager for SAP.
//
// 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 Systems Manager for SAP's
// API operation ListDatabases for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The resource is not available.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/ListDatabases
func (c *SsmSap) ListDatabases(input *ListDatabasesInput) (*ListDatabasesOutput, error) {
	req, out := c.ListDatabasesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListOperations = "ListOperations"

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

	if input == nil {
		input = &ListOperationsInput{}
	}

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

// ListOperations API operation for AWS Systems Manager for SAP.
//
// Lists the operations performed by AWS Systems Manager for SAP.
//
// 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 Systems Manager for SAP's
// API operation ListOperations for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/ListOperations
func (c *SsmSap) ListOperations(input *ListOperationsInput) (*ListOperationsOutput, error) {
	req, out := c.ListOperationsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListTagsForResource = "ListTagsForResource"

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

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

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

// ListTagsForResource API operation for AWS Systems Manager for SAP.
//
// Lists all tags on an SAP HANA application and/or database registered with
// AWS Systems Manager for SAP.
//
// 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 Systems Manager for SAP's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The resource is not available.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - ConflictException
//     A conflict has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/ListTagsForResource
func (c *SsmSap) ListTagsForResource(input *ListTagsForResourceInput) (*ListTagsForResourceOutput, error) {
	req, out := c.ListTagsForResourceRequest(input)
	return out, req.Send()
}

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

const opPutResourcePermission = "PutResourcePermission"

// PutResourcePermissionRequest generates a "aws/request.Request" representing the
// client's request for the PutResourcePermission 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 PutResourcePermission for more information on using the PutResourcePermission
// 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 PutResourcePermissionRequest method.
//	req, resp := client.PutResourcePermissionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/PutResourcePermission
func (c *SsmSap) PutResourcePermissionRequest(input *PutResourcePermissionInput) (req *request.Request, output *PutResourcePermissionOutput) {
	op := &request.Operation{
		Name:       opPutResourcePermission,
		HTTPMethod: "POST",
		HTTPPath:   "/put-resource-permission",
	}

	if input == nil {
		input = &PutResourcePermissionInput{}
	}

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

// PutResourcePermission API operation for AWS Systems Manager for SAP.
//
// Adds permissions to the target database.
//
// 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 Systems Manager for SAP's
// API operation PutResourcePermission for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The resource is not available.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/PutResourcePermission
func (c *SsmSap) PutResourcePermission(input *PutResourcePermissionInput) (*PutResourcePermissionOutput, error) {
	req, out := c.PutResourcePermissionRequest(input)
	return out, req.Send()
}

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

const opRegisterApplication = "RegisterApplication"

// RegisterApplicationRequest generates a "aws/request.Request" representing the
// client's request for the RegisterApplication 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 RegisterApplication for more information on using the RegisterApplication
// 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 RegisterApplicationRequest method.
//	req, resp := client.RegisterApplicationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/RegisterApplication
func (c *SsmSap) RegisterApplicationRequest(input *RegisterApplicationInput) (req *request.Request, output *RegisterApplicationOutput) {
	op := &request.Operation{
		Name:       opRegisterApplication,
		HTTPMethod: "POST",
		HTTPPath:   "/register-application",
	}

	if input == nil {
		input = &RegisterApplicationInput{}
	}

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

// RegisterApplication API operation for AWS Systems Manager for SAP.
//
// Register an SAP application with AWS Systems Manager for SAP. You must meet
// the following requirements before registering.
//
// The SAP application you want to register with AWS Systems Manager for SAP
// is running on Amazon EC2.
//
// AWS Systems Manager Agent must be setup on an Amazon EC2 instance along with
// the required IAM permissions.
//
// Amazon EC2 instance(s) must have access to the secrets created in AWS Secrets
// Manager to manage SAP applications and components.
//
// 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 Systems Manager for SAP's
// API operation RegisterApplication for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The resource is not available.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - ConflictException
//     A conflict has occurred.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/RegisterApplication
func (c *SsmSap) RegisterApplication(input *RegisterApplicationInput) (*RegisterApplicationOutput, error) {
	req, out := c.RegisterApplicationRequest(input)
	return out, req.Send()
}

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

const opStartApplicationRefresh = "StartApplicationRefresh"

// StartApplicationRefreshRequest generates a "aws/request.Request" representing the
// client's request for the StartApplicationRefresh 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 StartApplicationRefresh for more information on using the StartApplicationRefresh
// 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 StartApplicationRefreshRequest method.
//	req, resp := client.StartApplicationRefreshRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/StartApplicationRefresh
func (c *SsmSap) StartApplicationRefreshRequest(input *StartApplicationRefreshInput) (req *request.Request, output *StartApplicationRefreshOutput) {
	op := &request.Operation{
		Name:       opStartApplicationRefresh,
		HTTPMethod: "POST",
		HTTPPath:   "/start-application-refresh",
	}

	if input == nil {
		input = &StartApplicationRefreshInput{}
	}

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

// StartApplicationRefresh API operation for AWS Systems Manager for SAP.
//
// Refreshes a registered application.
//
// 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 Systems Manager for SAP's
// API operation StartApplicationRefresh for usage and error information.
//
// Returned Error Types:
//
//   - UnauthorizedException
//     The request is not authorized.
//
//   - ResourceNotFoundException
//     The resource is not available.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - ConflictException
//     A conflict has occurred.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/StartApplicationRefresh
func (c *SsmSap) StartApplicationRefresh(input *StartApplicationRefreshInput) (*StartApplicationRefreshOutput, error) {
	req, out := c.StartApplicationRefreshRequest(input)
	return out, req.Send()
}

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

const opTagResource = "TagResource"

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

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

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

// TagResource API operation for AWS Systems Manager for SAP.
//
// Creates tag for a resource by specifying the ARN.
//
// 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 Systems Manager for SAP's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The resource is not available.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - ConflictException
//     A conflict has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/TagResource
func (c *SsmSap) TagResource(input *TagResourceInput) (*TagResourceOutput, error) {
	req, out := c.TagResourceRequest(input)
	return out, req.Send()
}

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

const opUntagResource = "UntagResource"

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

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

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

// UntagResource API operation for AWS Systems Manager for SAP.
//
// Delete the tags for a resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS Systems Manager for SAP's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The resource is not available.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - ConflictException
//     A conflict has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/UntagResource
func (c *SsmSap) UntagResource(input *UntagResourceInput) (*UntagResourceOutput, error) {
	req, out := c.UntagResourceRequest(input)
	return out, req.Send()
}

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

const opUpdateApplicationSettings = "UpdateApplicationSettings"

// UpdateApplicationSettingsRequest generates a "aws/request.Request" representing the
// client's request for the UpdateApplicationSettings 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 UpdateApplicationSettings for more information on using the UpdateApplicationSettings
// 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 UpdateApplicationSettingsRequest method.
//	req, resp := client.UpdateApplicationSettingsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/UpdateApplicationSettings
func (c *SsmSap) UpdateApplicationSettingsRequest(input *UpdateApplicationSettingsInput) (req *request.Request, output *UpdateApplicationSettingsOutput) {
	op := &request.Operation{
		Name:       opUpdateApplicationSettings,
		HTTPMethod: "POST",
		HTTPPath:   "/update-application-settings",
	}

	if input == nil {
		input = &UpdateApplicationSettingsInput{}
	}

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

// UpdateApplicationSettings API operation for AWS Systems Manager for SAP.
//
// Updates the settings of an application registered with AWS Systems Manager
// for SAP.
//
// 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 Systems Manager for SAP's
// API operation UpdateApplicationSettings for usage and error information.
//
// Returned Error Types:
//
//   - UnauthorizedException
//     The request is not authorized.
//
//   - ResourceNotFoundException
//     The resource is not available.
//
//   - ValidationException
//     The input fails to satisfy the constraints specified by an AWS service.
//
//   - ConflictException
//     A conflict has occurred.
//
//   - InternalServerException
//     An internal error has occurred.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/ssm-sap-2018-05-10/UpdateApplicationSettings
func (c *SsmSap) UpdateApplicationSettings(input *UpdateApplicationSettingsInput) (*UpdateApplicationSettingsOutput, error) {
	req, out := c.UpdateApplicationSettingsRequest(input)
	return out, req.Send()
}

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

// An SAP application registered with AWS Systems Manager for SAP.
type Application struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the Application Registry.
	AppRegistryArn *string `type:"string"`

	// The Amazon Resource Name (ARN) of the application.
	Arn *string `type:"string"`

	// The components of the application.
	Components []*string `type:"list"`

	// The latest discovery result for the application.
	DiscoveryStatus *string `type:"string" enum:"ApplicationDiscoveryStatus"`

	// The ID of the application.
	Id *string `type:"string"`

	// The time at which the application was last updated.
	LastUpdated *time.Time `type:"timestamp"`

	// The status of the application.
	Status *string `type:"string" enum:"ApplicationStatus"`

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

	// The type of the application.
	Type *string `type:"string" enum:"ApplicationType"`
}

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

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

// SetAppRegistryArn sets the AppRegistryArn field's value.
func (s *Application) SetAppRegistryArn(v string) *Application {
	s.AppRegistryArn = &v
	return s
}

// SetArn sets the Arn field's value.
func (s *Application) SetArn(v string) *Application {
	s.Arn = &v
	return s
}

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

// SetDiscoveryStatus sets the DiscoveryStatus field's value.
func (s *Application) SetDiscoveryStatus(v string) *Application {
	s.DiscoveryStatus = &v
	return s
}

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

// SetLastUpdated sets the LastUpdated field's value.
func (s *Application) SetLastUpdated(v time.Time) *Application {
	s.LastUpdated = &v
	return s
}

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

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

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

// The credentials of your SAP application.
type ApplicationCredential struct {
	_ struct{} `type:"structure"`

	// The type of the application credentials.
	//
	// CredentialType is a required field
	CredentialType *string `type:"string" required:"true" enum:"CredentialType"`

	// The name of the SAP HANA database.
	//
	// DatabaseName is a required field
	DatabaseName *string `min:"1" type:"string" required:"true"`

	// The secret ID created in AWS Secrets Manager to store the credentials of
	// the SAP application.
	//
	// SecretId is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ApplicationCredential's
	// String and GoString methods.
	//
	// SecretId is a required field
	SecretId *string `min:"1" 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 ApplicationCredential) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetCredentialType sets the CredentialType field's value.
func (s *ApplicationCredential) SetCredentialType(v string) *ApplicationCredential {
	s.CredentialType = &v
	return s
}

// SetDatabaseName sets the DatabaseName field's value.
func (s *ApplicationCredential) SetDatabaseName(v string) *ApplicationCredential {
	s.DatabaseName = &v
	return s
}

// SetSecretId sets the SecretId field's value.
func (s *ApplicationCredential) SetSecretId(v string) *ApplicationCredential {
	s.SecretId = &v
	return s
}

// The summary of the SAP application registered with AWS Systems Manager for
// SAP.
type ApplicationSummary struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the application.
	Arn *string `type:"string"`

	// The status of the latest discovery.
	DiscoveryStatus *string `type:"string" enum:"ApplicationDiscoveryStatus"`

	// The ID of the application.
	Id *string `type:"string"`

	// The tags on the application.
	Tags map[string]*string `type:"map"`

	// The type of the application.
	Type *string `type:"string" enum:"ApplicationType"`
}

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

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

// SetArn sets the Arn field's value.
func (s *ApplicationSummary) SetArn(v string) *ApplicationSummary {
	s.Arn = &v
	return s
}

// SetDiscoveryStatus sets the DiscoveryStatus field's value.
func (s *ApplicationSummary) SetDiscoveryStatus(v string) *ApplicationSummary {
	s.DiscoveryStatus = &v
	return s
}

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

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

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

// Describes the properties of the associated host.
type AssociatedHost struct {
	_ struct{} `type:"structure"`

	// The ID of the Amazon EC2 instance.
	Ec2InstanceId *string `type:"string"`

	// The name of the host.
	Hostname *string `type:"string"`

	// The IP addresses of the associated host.
	IpAddresses []*IpAddressMember `type:"list"`

	// The version of the operating system.
	OsVersion *string `type:"string"`
}

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

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

// SetEc2InstanceId sets the Ec2InstanceId field's value.
func (s *AssociatedHost) SetEc2InstanceId(v string) *AssociatedHost {
	s.Ec2InstanceId = &v
	return s
}

// SetHostname sets the Hostname field's value.
func (s *AssociatedHost) SetHostname(v string) *AssociatedHost {
	s.Hostname = &v
	return s
}

// SetIpAddresses sets the IpAddresses field's value.
func (s *AssociatedHost) SetIpAddresses(v []*IpAddressMember) *AssociatedHost {
	s.IpAddresses = v
	return s
}

// SetOsVersion sets the OsVersion field's value.
func (s *AssociatedHost) SetOsVersion(v string) *AssociatedHost {
	s.OsVersion = &v
	return s
}

// Configuration parameters for AWS Backint Agent for SAP HANA. You can backup
// your SAP HANA database with AWS Backup or Amazon S3.
type BackintConfig struct {
	_ struct{} `type:"structure"`

	// AWS service for your database backup.
	//
	// BackintMode is a required field
	BackintMode *string `type:"string" required:"true" enum:"BackintMode"`

	// EnsureNoBackupInProcess is a required field
	EnsureNoBackupInProcess *bool `type:"boolean" 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 BackintConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetBackintMode sets the BackintMode field's value.
func (s *BackintConfig) SetBackintMode(v string) *BackintConfig {
	s.BackintMode = &v
	return s
}

// SetEnsureNoBackupInProcess sets the EnsureNoBackupInProcess field's value.
func (s *BackintConfig) SetEnsureNoBackupInProcess(v bool) *BackintConfig {
	s.EnsureNoBackupInProcess = &v
	return s
}

// The SAP component of your application.
type Component struct {
	_ struct{} `type:"structure"`

	// The ID of the application.
	ApplicationId *string `type:"string"`

	// The Amazon Resource Name (ARN) of the component.
	Arn *string `type:"string"`

	// The associated host of the component.
	AssociatedHost *AssociatedHost `type:"structure"`

	// The child components of a highly available environment. For example, in a
	// highly available SAP on AWS workload, the child component consists of the
	// primary and secondar instances.
	ChildComponents []*string `type:"list"`

	// The ID of the component.
	ComponentId *string `type:"string"`

	// The type of the component.
	ComponentType *string `type:"string" enum:"ComponentType"`

	// The connection specifications for the database of the component.
	DatabaseConnection *DatabaseConnection `type:"structure"`

	// The SAP HANA databases of the component.
	Databases []*string `type:"list"`

	// The SAP HANA version of the component.
	HdbVersion *string `type:"string"`

	// The hosts of the component.
	//
	// Deprecated: This shape is no longer used. Please use AssociatedHost.
	Hosts []*Host `deprecated:"true" type:"list"`

	// The time at which the component was last updated.
	LastUpdated *time.Time `type:"timestamp"`

	// The parent component of a highly available environment. For example, in a
	// highly available SAP on AWS workload, the parent component consists of the
	// entire setup, including the child components.
	ParentComponent *string `type:"string"`

	// The primary host of the component.
	//
	// Deprecated: This shape is no longer used. Please use AssociatedHost.
	PrimaryHost *string `deprecated:"true" type:"string"`

	// Details of the SAP HANA system replication for the component.
	Resilience *Resilience `type:"structure"`

	// The SAP feature of the component.
	SapFeature *string `type:"string"`

	// The hostname of the component.
	SapHostname *string `type:"string"`

	// The kernel version of the component.
	SapKernelVersion *string `type:"string"`

	// The SAP System Identifier of the application component.
	Sid *string `type:"string"`

	// The status of the component.
	//
	//    * ACTIVATED - this status has been deprecated.
	//
	//    * STARTING - the component is in the process of being started.
	//
	//    * STOPPED - the component is not running.
	//
	//    * STOPPING - the component is in the process of being stopped.
	//
	//    * RUNNING - the component is running.
	//
	//    * RUNNING_WITH_ERROR - one or more child component(s) of the parent component
	//    is not running. Call GetComponent (https://docs.aws.amazon.com/ssmsap/latest/APIReference/API_GetComponent.html)
	//    to review the status of each child component.
	//
	//    * UNDEFINED - AWS Systems Manager for SAP cannot provide the component
	//    status based on the discovered information. Verify your SAP application.
	Status *string `type:"string" enum:"ComponentStatus"`

	// The SAP system number of the application component.
	SystemNumber *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s 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()
}

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

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

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

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

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

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

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

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

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

// SetHosts sets the Hosts field's value.
func (s *Component) SetHosts(v []*Host) *Component {
	s.Hosts = v
	return s
}

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

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

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

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

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

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

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

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

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

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

// The summary of the component.
type ComponentSummary struct {
	_ struct{} `type:"structure"`

	// The ID of the application.
	ApplicationId *string `type:"string"`

	// The Amazon Resource Name (ARN) of the component summary.
	Arn *string `type:"string"`

	// The ID of the component.
	ComponentId *string `type:"string"`

	// The type of the component.
	ComponentType *string `type:"string" enum:"ComponentType"`

	// The tags of the component.
	Tags map[string]*string `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 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()
}

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

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

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

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

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

// A conflict has occurred.
type ConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

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

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

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

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

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

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

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

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

// The SAP HANA database of the application registered with AWS Systems Manager
// for SAP.
type Database struct {
	_ struct{} `type:"structure"`

	// The ID of the application.
	ApplicationId *string `type:"string"`

	// The Amazon Resource Name (ARN) of the database.
	Arn *string `type:"string"`

	// The ID of the component.
	ComponentId *string `type:"string"`

	// The credentials of the database.
	Credentials []*ApplicationCredential `type:"list"`

	// The ID of the SAP HANA database.
	DatabaseId *string `type:"string"`

	// The name of the database.
	DatabaseName *string `type:"string"`

	// The type of the database.
	DatabaseType *string `type:"string" enum:"DatabaseType"`

	// The time at which the database was last updated.
	LastUpdated *time.Time `type:"timestamp"`

	// The primary host of the database.
	PrimaryHost *string `type:"string"`

	// The SQL port of the database.
	SQLPort *int64 `type:"integer"`

	// The status of the database.
	Status *string `type:"string" enum:"DatabaseStatus"`
}

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *Database) SetApplicationId(v string) *Database {
	s.ApplicationId = &v
	return s
}

// SetArn sets the Arn field's value.
func (s *Database) SetArn(v string) *Database {
	s.Arn = &v
	return s
}

// SetComponentId sets the ComponentId field's value.
func (s *Database) SetComponentId(v string) *Database {
	s.ComponentId = &v
	return s
}

// SetCredentials sets the Credentials field's value.
func (s *Database) SetCredentials(v []*ApplicationCredential) *Database {
	s.Credentials = v
	return s
}

// SetDatabaseId sets the DatabaseId field's value.
func (s *Database) SetDatabaseId(v string) *Database {
	s.DatabaseId = &v
	return s
}

// SetDatabaseName sets the DatabaseName field's value.
func (s *Database) SetDatabaseName(v string) *Database {
	s.DatabaseName = &v
	return s
}

// SetDatabaseType sets the DatabaseType field's value.
func (s *Database) SetDatabaseType(v string) *Database {
	s.DatabaseType = &v
	return s
}

// SetLastUpdated sets the LastUpdated field's value.
func (s *Database) SetLastUpdated(v time.Time) *Database {
	s.LastUpdated = &v
	return s
}

// SetPrimaryHost sets the PrimaryHost field's value.
func (s *Database) SetPrimaryHost(v string) *Database {
	s.PrimaryHost = &v
	return s
}

// SetSQLPort sets the SQLPort field's value.
func (s *Database) SetSQLPort(v int64) *Database {
	s.SQLPort = &v
	return s
}

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

// The connection specifications for the database.
type DatabaseConnection struct {
	_ struct{} `type:"structure"`

	// The IP address for connection.
	ConnectionIp *string `type:"string"`

	// The Amazon Resource Name of the connected SAP HANA database.
	DatabaseArn *string `type:"string"`

	// The method of connection.
	DatabaseConnectionMethod *string `type:"string" enum:"DatabaseConnectionMethod"`
}

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

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

// SetConnectionIp sets the ConnectionIp field's value.
func (s *DatabaseConnection) SetConnectionIp(v string) *DatabaseConnection {
	s.ConnectionIp = &v
	return s
}

// SetDatabaseArn sets the DatabaseArn field's value.
func (s *DatabaseConnection) SetDatabaseArn(v string) *DatabaseConnection {
	s.DatabaseArn = &v
	return s
}

// SetDatabaseConnectionMethod sets the DatabaseConnectionMethod field's value.
func (s *DatabaseConnection) SetDatabaseConnectionMethod(v string) *DatabaseConnection {
	s.DatabaseConnectionMethod = &v
	return s
}

// The summary of the database.
type DatabaseSummary struct {
	_ struct{} `type:"structure"`

	// The ID of the application.
	ApplicationId *string `type:"string"`

	// The Amazon Resource Name (ARN) of the database.
	Arn *string `type:"string"`

	// The ID of the component.
	ComponentId *string `type:"string"`

	// The ID of the database.
	DatabaseId *string `type:"string"`

	// The type of the database.
	DatabaseType *string `type:"string" enum:"DatabaseType"`

	// The tags of the database.
	Tags map[string]*string `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 DatabaseSummary) String() string {
	return awsutil.Prettify(s)
}

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

// SetApplicationId sets the ApplicationId field's value.
func (s *DatabaseSummary) SetApplicationId(v string) *DatabaseSummary {
	s.ApplicationId = &v
	return s
}

// SetArn sets the Arn field's value.
func (s *DatabaseSummary) SetArn(v string) *DatabaseSummary {
	s.Arn = &v
	return s
}

// SetComponentId sets the ComponentId field's value.
func (s *DatabaseSummary) SetComponentId(v string) *DatabaseSummary {
	s.ComponentId = &v
	return s
}

// SetDatabaseId sets the DatabaseId field's value.
func (s *DatabaseSummary) SetDatabaseId(v string) *DatabaseSummary {
	s.DatabaseId = &v
	return s
}

// SetDatabaseType sets the DatabaseType field's value.
func (s *DatabaseSummary) SetDatabaseType(v string) *DatabaseSummary {
	s.DatabaseType = &v
	return s
}

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

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

	// Delete or restore the permissions on the target database.
	ActionType *string `type:"string" enum:"PermissionActionType"`

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

	// The Amazon Resource Name (ARN) of the source resource.
	SourceResourceArn *string `type:"string"`
}

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

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

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

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

// SetActionType sets the ActionType field's value.
func (s *DeleteResourcePermissionInput) SetActionType(v string) *DeleteResourcePermissionInput {
	s.ActionType = &v
	return s
}

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

// SetSourceResourceArn sets the SourceResourceArn field's value.
func (s *DeleteResourcePermissionInput) SetSourceResourceArn(v string) *DeleteResourcePermissionInput {
	s.SourceResourceArn = &v
	return s
}

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

	// The policy that removes permissions on the target database.
	Policy *string `type:"string"`
}

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

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

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

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

	// The ID of the application.
	//
	// ApplicationId is a required field
	ApplicationId *string `type:"string" required:"true"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *DeregisterApplicationInput) SetApplicationId(v string) *DeregisterApplicationInput {
	s.ApplicationId = &v
	return s
}

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

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

// A specific result obtained by specifying the name, value, and operator.
type Filter struct {
	_ struct{} `type:"structure"`

	// The name of the filter. Filter names are case-sensitive.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// The operator for the filter.
	//
	// Operator is a required field
	Operator *string `type:"string" required:"true" enum:"FilterOperator"`

	// The filter values. Filter values are case-sensitive. If you specify multiple
	// values for a filter, the values are joined with an OR, and the request returns
	// all results that match any of the specified values
	//
	// Value is a required field
	Value *string `min:"1" type:"string" required:"true"`
}

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

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

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

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

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

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

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

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

	// The Amazon Resource Name (ARN) of the application registry.
	AppRegistryArn *string `type:"string"`

	// The Amazon Resource Name (ARN) of the application.
	ApplicationArn *string `type:"string"`

	// The ID of the application.
	ApplicationId *string `type:"string"`
}

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

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

// SetAppRegistryArn sets the AppRegistryArn field's value.
func (s *GetApplicationInput) SetAppRegistryArn(v string) *GetApplicationInput {
	s.AppRegistryArn = &v
	return s
}

// SetApplicationArn sets the ApplicationArn field's value.
func (s *GetApplicationInput) SetApplicationArn(v string) *GetApplicationInput {
	s.ApplicationArn = &v
	return s
}

// SetApplicationId sets the ApplicationId field's value.
func (s *GetApplicationInput) SetApplicationId(v string) *GetApplicationInput {
	s.ApplicationId = &v
	return s
}

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

	// Returns all of the metadata of an application registered with AWS Systems
	// Manager for SAP.
	Application *Application `type:"structure"`

	// The tags of a registered application.
	Tags map[string]*string `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 GetApplicationOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetApplication sets the Application field's value.
func (s *GetApplicationOutput) SetApplication(v *Application) *GetApplicationOutput {
	s.Application = v
	return s
}

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

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

	// The ID of the application.
	//
	// ApplicationId is a required field
	ApplicationId *string `type:"string" required:"true"`

	// The ID of the component.
	//
	// ComponentId is a required field
	ComponentId *string `type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s 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.ApplicationId == nil {
		invalidParams.Add(request.NewErrParamRequired("ApplicationId"))
	}
	if s.ComponentId == nil {
		invalidParams.Add(request.NewErrParamRequired("ComponentId"))
	}

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

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

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

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

	// The component of an application registered with AWS Systems Manager for SAP.
	Component *Component `type:"structure"`

	// The tags of a component.
	Tags map[string]*string `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 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
}

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

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

	// The ID of the application.
	ApplicationId *string `type:"string"`

	// The ID of the component.
	ComponentId *string `type:"string"`

	// The Amazon Resource Name (ARN) of the database.
	DatabaseArn *string `type:"string"`

	// The ID of the database.
	DatabaseId *string `type:"string"`
}

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *GetDatabaseInput) SetApplicationId(v string) *GetDatabaseInput {
	s.ApplicationId = &v
	return s
}

// SetComponentId sets the ComponentId field's value.
func (s *GetDatabaseInput) SetComponentId(v string) *GetDatabaseInput {
	s.ComponentId = &v
	return s
}

// SetDatabaseArn sets the DatabaseArn field's value.
func (s *GetDatabaseInput) SetDatabaseArn(v string) *GetDatabaseInput {
	s.DatabaseArn = &v
	return s
}

// SetDatabaseId sets the DatabaseId field's value.
func (s *GetDatabaseInput) SetDatabaseId(v string) *GetDatabaseInput {
	s.DatabaseId = &v
	return s
}

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

	// The SAP HANA database of an application registered with AWS Systems Manager
	// for SAP.
	Database *Database `type:"structure"`

	// The tags of a database.
	Tags map[string]*string `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 GetDatabaseOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetDatabase sets the Database field's value.
func (s *GetDatabaseOutput) SetDatabase(v *Database) *GetDatabaseOutput {
	s.Database = v
	return s
}

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

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

	// The ID of the operation.
	//
	// OperationId is a required field
	OperationId *string `type:"string" required:"true"`
}

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

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

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

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

// SetOperationId sets the OperationId field's value.
func (s *GetOperationInput) SetOperationId(v string) *GetOperationInput {
	s.OperationId = &v
	return s
}

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

	// Returns the details of an operation.
	Operation *Operation `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 GetOperationOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetOperation sets the Operation field's value.
func (s *GetOperationOutput) SetOperation(v *Operation) *GetOperationOutput {
	s.Operation = v
	return s
}

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

	ActionType *string `type:"string" enum:"PermissionActionType"`

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

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

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

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

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

// SetActionType sets the ActionType field's value.
func (s *GetResourcePermissionInput) SetActionType(v string) *GetResourcePermissionInput {
	s.ActionType = &v
	return s
}

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

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

	Policy *string `type:"string"`
}

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

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

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

// Describes the properties of the Dedicated Host.
type Host struct {
	_ struct{} `type:"structure"`

	// The ID of Amazon EC2 instance.
	EC2InstanceId *string `type:"string"`

	// The IP address of the Dedicated Host.
	HostIp *string `type:"string"`

	// The name of the Dedicated Host.
	HostName *string `type:"string"`

	// The role of the Dedicated Host.
	HostRole *string `type:"string" enum:"HostRole"`

	// The instance ID of the instance on the Dedicated Host.
	InstanceId *string `type:"string"`

	// The version of the operating system.
	OsVersion *string `type:"string"`
}

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

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

// SetEC2InstanceId sets the EC2InstanceId field's value.
func (s *Host) SetEC2InstanceId(v string) *Host {
	s.EC2InstanceId = &v
	return s
}

// SetHostIp sets the HostIp field's value.
func (s *Host) SetHostIp(v string) *Host {
	s.HostIp = &v
	return s
}

// SetHostName sets the HostName field's value.
func (s *Host) SetHostName(v string) *Host {
	s.HostName = &v
	return s
}

// SetHostRole sets the HostRole field's value.
func (s *Host) SetHostRole(v string) *Host {
	s.HostRole = &v
	return s
}

// SetInstanceId sets the InstanceId field's value.
func (s *Host) SetInstanceId(v string) *Host {
	s.InstanceId = &v
	return s
}

// SetOsVersion sets the OsVersion field's value.
func (s *Host) SetOsVersion(v string) *Host {
	s.OsVersion = &v
	return s
}

// An internal error has occurred.
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
}

// Provides information of the IP address.
type IpAddressMember struct {
	_ struct{} `type:"structure"`

	// The type of allocation for the IP address.
	AllocationType *string `type:"string" enum:"AllocationType"`

	// The IP address.
	IpAddress *string `type:"string"`

	// The primary IP address.
	Primary *bool `type:"boolean"`
}

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

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

// SetAllocationType sets the AllocationType field's value.
func (s *IpAddressMember) SetAllocationType(v string) *IpAddressMember {
	s.AllocationType = &v
	return s
}

// SetIpAddress sets the IpAddress field's value.
func (s *IpAddressMember) SetIpAddress(v string) *IpAddressMember {
	s.IpAddress = &v
	return s
}

// SetPrimary sets the Primary field's value.
func (s *IpAddressMember) SetPrimary(v bool) *IpAddressMember {
	s.Primary = &v
	return s
}

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

	// The filter of name, value, and operator.
	Filters []*Filter `min:"1" type:"list"`

	// The maximum number of results to return with a single call. To retrieve the
	// remaining results, make another call with the returned nextToken value.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token for the next page of results.
	NextToken *string `type:"string"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *ListApplicationsInput) SetFilters(v []*Filter) *ListApplicationsInput {
	s.Filters = v
	return s
}

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

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

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

	// The applications registered with AWS Systems Manager for SAP.
	Applications []*ApplicationSummary `type:"list"`

	// The token to use to retrieve the next page of results. This value is null
	// when there are no more results to return.
	NextToken *string `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 ListApplicationsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetApplications sets the Applications field's value.
func (s *ListApplicationsOutput) SetApplications(v []*ApplicationSummary) *ListApplicationsOutput {
	s.Applications = v
	return s
}

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

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

	// The ID of the application.
	ApplicationId *string `type:"string"`

	// The maximum number of results to return with a single call. To retrieve the
	// remaining results, make another call with the returned nextToken value.
	//
	// If you do not specify a value for MaxResults, the request returns 50 items
	// per page by default.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token for the next page of results.
	NextToken *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s 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.MaxResults != nil && *s.MaxResults < 1 {
		invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1))
	}

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

// SetApplicationId sets the ApplicationId field's value.
func (s *ListComponentsInput) SetApplicationId(v string) *ListComponentsInput {
	s.ApplicationId = &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"`

	// List of components registered with AWS System Manager for SAP.
	Components []*ComponentSummary `type:"list"`

	// The token to use to retrieve the next page of results. This value is null
	// when there are no more results to return.
	NextToken *string `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()
}

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

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

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

	// The ID of the application.
	ApplicationId *string `type:"string"`

	// The ID of the component.
	ComponentId *string `type:"string"`

	// The maximum number of results to return with a single call. To retrieve the
	// remaining results, make another call with the returned nextToken value. If
	// you do not specify a value for MaxResults, the request returns 50 items per
	// page by default.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token for the next page of results.
	NextToken *string `type:"string"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *ListDatabasesInput) SetApplicationId(v string) *ListDatabasesInput {
	s.ApplicationId = &v
	return s
}

// SetComponentId sets the ComponentId field's value.
func (s *ListDatabasesInput) SetComponentId(v string) *ListDatabasesInput {
	s.ComponentId = &v
	return s
}

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

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

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

	// The SAP HANA databases of an application.
	Databases []*DatabaseSummary `type:"list"`

	// The token to use to retrieve the next page of results. This value is null
	// when there are no more results to return.
	NextToken *string `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 ListDatabasesOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetDatabases sets the Databases field's value.
func (s *ListDatabasesOutput) SetDatabases(v []*DatabaseSummary) *ListDatabasesOutput {
	s.Databases = v
	return s
}

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

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

	// The ID of the application.
	//
	// ApplicationId is a required field
	ApplicationId *string `type:"string" required:"true"`

	// The filters of an operation.
	Filters []*Filter `min:"1" type:"list"`

	// The maximum number of results to return with a single call. To retrieve the
	// remaining results, make another call with the returned nextToken value. If
	// you do not specify a value for MaxResults, the request returns 50 items per
	// page by default.
	MaxResults *int64 `min:"1" type:"integer"`

	// The token for the next page of results.
	NextToken *string `type:"string"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *ListOperationsInput) SetApplicationId(v string) *ListOperationsInput {
	s.ApplicationId = &v
	return s
}

// SetFilters sets the Filters field's value.
func (s *ListOperationsInput) SetFilters(v []*Filter) *ListOperationsInput {
	s.Filters = v
	return s
}

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

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

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

	// The token to use to retrieve the next page of results. This value is null
	// when there are no more results to return.
	NextToken *string `type:"string"`

	// List of operations performed by AWS Systems Manager for SAP.
	Operations []*Operation `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 ListOperationsOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetOperations sets the Operations field's value.
func (s *ListOperationsOutput) SetOperations(v []*Operation) *ListOperationsOutput {
	s.Operations = v
	return s
}

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

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

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

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

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

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

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

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

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

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

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

// The operations performed by AWS Systems Manager for SAP.
type Operation struct {
	_ struct{} `type:"structure"`

	// The end time of the operation.
	EndTime *time.Time `type:"timestamp"`

	// The ID of the operation.
	Id *string `type:"string"`

	// The time at which the operation was last updated.
	LastUpdatedTime *time.Time `type:"timestamp"`

	// The properties of the operation.
	Properties map[string]*string `type:"map"`

	// The Amazon Resource Name (ARN) of the operation.
	ResourceArn *string `type:"string"`

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

	// The resource type of the operation.
	ResourceType *string `min:"1" type:"string"`

	// The start time of the operation.
	StartTime *time.Time `type:"timestamp"`

	// The status of the operation.
	Status *string `type:"string" enum:"OperationStatus"`

	// The status message of the operation.
	StatusMessage *string `type:"string"`

	// The type of the operation.
	Type *string `type:"string"`
}

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

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

// SetEndTime sets the EndTime field's value.
func (s *Operation) SetEndTime(v time.Time) *Operation {
	s.EndTime = &v
	return s
}

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

// SetLastUpdatedTime sets the LastUpdatedTime field's value.
func (s *Operation) SetLastUpdatedTime(v time.Time) *Operation {
	s.LastUpdatedTime = &v
	return s
}

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

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

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

// SetResourceType sets the ResourceType field's value.
func (s *Operation) SetResourceType(v string) *Operation {
	s.ResourceType = &v
	return s
}

// SetStartTime sets the StartTime field's value.
func (s *Operation) SetStartTime(v time.Time) *Operation {
	s.StartTime = &v
	return s
}

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

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

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

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

	// ActionType is a required field
	ActionType *string `type:"string" required:"true" enum:"PermissionActionType"`

	// ResourceArn is a required field
	ResourceArn *string `type:"string" required:"true"`

	// SourceResourceArn is a required field
	SourceResourceArn *string `type:"string" required:"true"`
}

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

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

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

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

// SetActionType sets the ActionType field's value.
func (s *PutResourcePermissionInput) SetActionType(v string) *PutResourcePermissionInput {
	s.ActionType = &v
	return s
}

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

// SetSourceResourceArn sets the SourceResourceArn field's value.
func (s *PutResourcePermissionInput) SetSourceResourceArn(v string) *PutResourcePermissionInput {
	s.SourceResourceArn = &v
	return s
}

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

	Policy *string `type:"string"`
}

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

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

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

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

	// The ID of the application.
	//
	// ApplicationId is a required field
	ApplicationId *string `type:"string" required:"true"`

	// The type of the application.
	//
	// ApplicationType is a required field
	ApplicationType *string `type:"string" required:"true" enum:"ApplicationType"`

	// The credentials of the SAP application.
	Credentials []*ApplicationCredential `type:"list"`

	// The Amazon Resource Name of the SAP HANA database.
	DatabaseArn *string `type:"string"`

	// The Amazon EC2 instances on which your SAP application is running.
	//
	// Instances is a required field
	Instances []*string `min:"1" type:"list" required:"true"`

	// The SAP instance number of the application.
	SapInstanceNumber *string `type:"string"`

	// The System ID of the application.
	Sid *string `type:"string"`

	// The tags to be attached to the SAP application.
	Tags map[string]*string `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 RegisterApplicationInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *RegisterApplicationInput) SetApplicationId(v string) *RegisterApplicationInput {
	s.ApplicationId = &v
	return s
}

// SetApplicationType sets the ApplicationType field's value.
func (s *RegisterApplicationInput) SetApplicationType(v string) *RegisterApplicationInput {
	s.ApplicationType = &v
	return s
}

// SetCredentials sets the Credentials field's value.
func (s *RegisterApplicationInput) SetCredentials(v []*ApplicationCredential) *RegisterApplicationInput {
	s.Credentials = v
	return s
}

// SetDatabaseArn sets the DatabaseArn field's value.
func (s *RegisterApplicationInput) SetDatabaseArn(v string) *RegisterApplicationInput {
	s.DatabaseArn = &v
	return s
}

// SetInstances sets the Instances field's value.
func (s *RegisterApplicationInput) SetInstances(v []*string) *RegisterApplicationInput {
	s.Instances = v
	return s
}

// SetSapInstanceNumber sets the SapInstanceNumber field's value.
func (s *RegisterApplicationInput) SetSapInstanceNumber(v string) *RegisterApplicationInput {
	s.SapInstanceNumber = &v
	return s
}

// SetSid sets the Sid field's value.
func (s *RegisterApplicationInput) SetSid(v string) *RegisterApplicationInput {
	s.Sid = &v
	return s
}

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

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

	// The application registered with AWS Systems Manager for SAP.
	Application *Application `type:"structure"`

	// The ID of the operation.
	OperationId *string `type:"string"`
}

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

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

// SetApplication sets the Application field's value.
func (s *RegisterApplicationOutput) SetApplication(v *Application) *RegisterApplicationOutput {
	s.Application = v
	return s
}

// SetOperationId sets the OperationId field's value.
func (s *RegisterApplicationOutput) SetOperationId(v string) *RegisterApplicationOutput {
	s.OperationId = &v
	return s
}

// Details of the SAP HANA system replication for the instance.
type Resilience struct {
	_ struct{} `type:"structure"`

	// The cluster status of the component.
	ClusterStatus *string `type:"string" enum:"ClusterStatus"`

	// Indicates if or not enqueue replication is enabled for the ASCS component.
	EnqueueReplication *bool `type:"boolean"`

	// The operation mode of the component.
	HsrOperationMode *string `type:"string" enum:"OperationMode"`

	// The replication mode of the component.
	HsrReplicationMode *string `type:"string" enum:"ReplicationMode"`

	// The tier of the component.
	HsrTier *string `type:"string"`
}

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

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

// SetClusterStatus sets the ClusterStatus field's value.
func (s *Resilience) SetClusterStatus(v string) *Resilience {
	s.ClusterStatus = &v
	return s
}

// SetEnqueueReplication sets the EnqueueReplication field's value.
func (s *Resilience) SetEnqueueReplication(v bool) *Resilience {
	s.EnqueueReplication = &v
	return s
}

// SetHsrOperationMode sets the HsrOperationMode field's value.
func (s *Resilience) SetHsrOperationMode(v string) *Resilience {
	s.HsrOperationMode = &v
	return s
}

// SetHsrReplicationMode sets the HsrReplicationMode field's value.
func (s *Resilience) SetHsrReplicationMode(v string) *Resilience {
	s.HsrReplicationMode = &v
	return s
}

// SetHsrTier sets the HsrTier field's value.
func (s *Resilience) SetHsrTier(v string) *Resilience {
	s.HsrTier = &v
	return s
}

// The resource is not available.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

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

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

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

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

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

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

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

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

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

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

	// The ID of the application.
	//
	// ApplicationId is a required field
	ApplicationId *string `type:"string" required:"true"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *StartApplicationRefreshInput) SetApplicationId(v string) *StartApplicationRefreshInput {
	s.ApplicationId = &v
	return s
}

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

	// The ID of the operation.
	OperationId *string `type:"string"`
}

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

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

// SetOperationId sets the OperationId field's value.
func (s *StartApplicationRefreshOutput) SetOperationId(v string) *StartApplicationRefreshOutput {
	s.OperationId = &v
	return s
}

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

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

	// The tags on a resource.
	//
	// Tags is a required field
	Tags map[string]*string `locationName:"tags" 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 TagResourceInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

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

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

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

// The request is not authorized.
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
}

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

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

	// Adds/updates or removes credentials for applications registered with AWS
	// Systems Manager for SAP.
	//
	// TagKeys is a required field
	TagKeys []*string `location:"querystring" locationName:"tagKeys" type:"list" required:"true"`
}

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

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

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

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

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

// SetTagKeys sets the TagKeys field's value.
func (s *UntagResourceInput) SetTagKeys(v []*string) *UntagResourceInput {
	s.TagKeys = v
	return s
}

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

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

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

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

	// The ID of the application.
	//
	// ApplicationId is a required field
	ApplicationId *string `type:"string" required:"true"`

	// Installation of AWS Backint Agent for SAP HANA.
	Backint *BackintConfig `type:"structure"`

	// The credentials to be added or updated.
	CredentialsToAddOrUpdate []*ApplicationCredential `type:"list"`

	// The credentials to be removed.
	CredentialsToRemove []*ApplicationCredential `type:"list"`

	// The Amazon Resource Name of the SAP HANA database that replaces the current
	// SAP HANA connection with the SAP_ABAP application.
	DatabaseArn *string `type:"string"`
}

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

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

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

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

// SetApplicationId sets the ApplicationId field's value.
func (s *UpdateApplicationSettingsInput) SetApplicationId(v string) *UpdateApplicationSettingsInput {
	s.ApplicationId = &v
	return s
}

// SetBackint sets the Backint field's value.
func (s *UpdateApplicationSettingsInput) SetBackint(v *BackintConfig) *UpdateApplicationSettingsInput {
	s.Backint = v
	return s
}

// SetCredentialsToAddOrUpdate sets the CredentialsToAddOrUpdate field's value.
func (s *UpdateApplicationSettingsInput) SetCredentialsToAddOrUpdate(v []*ApplicationCredential) *UpdateApplicationSettingsInput {
	s.CredentialsToAddOrUpdate = v
	return s
}

// SetCredentialsToRemove sets the CredentialsToRemove field's value.
func (s *UpdateApplicationSettingsInput) SetCredentialsToRemove(v []*ApplicationCredential) *UpdateApplicationSettingsInput {
	s.CredentialsToRemove = v
	return s
}

// SetDatabaseArn sets the DatabaseArn field's value.
func (s *UpdateApplicationSettingsInput) SetDatabaseArn(v string) *UpdateApplicationSettingsInput {
	s.DatabaseArn = &v
	return s
}

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

	// The update message.
	Message *string `type:"string"`

	// The IDs of the operations.
	OperationIds []*string `type:"list"`
}

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

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

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

// SetOperationIds sets the OperationIds field's value.
func (s *UpdateApplicationSettingsOutput) SetOperationIds(v []*string) *UpdateApplicationSettingsOutput {
	s.OperationIds = v
	return s
}

// The input fails to satisfy the constraints specified by an AWS service.
type ValidationException 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 ValidationException) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

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

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

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

const (
	// AllocationTypeVpcSubnet is a AllocationType enum value
	AllocationTypeVpcSubnet = "VPC_SUBNET"

	// AllocationTypeElasticIp is a AllocationType enum value
	AllocationTypeElasticIp = "ELASTIC_IP"

	// AllocationTypeOverlay is a AllocationType enum value
	AllocationTypeOverlay = "OVERLAY"

	// AllocationTypeUnknown is a AllocationType enum value
	AllocationTypeUnknown = "UNKNOWN"
)

// AllocationType_Values returns all elements of the AllocationType enum
func AllocationType_Values() []string {
	return []string{
		AllocationTypeVpcSubnet,
		AllocationTypeElasticIp,
		AllocationTypeOverlay,
		AllocationTypeUnknown,
	}
}

const (
	// ApplicationDiscoveryStatusSuccess is a ApplicationDiscoveryStatus enum value
	ApplicationDiscoveryStatusSuccess = "SUCCESS"

	// ApplicationDiscoveryStatusRegistrationFailed is a ApplicationDiscoveryStatus enum value
	ApplicationDiscoveryStatusRegistrationFailed = "REGISTRATION_FAILED"

	// ApplicationDiscoveryStatusRefreshFailed is a ApplicationDiscoveryStatus enum value
	ApplicationDiscoveryStatusRefreshFailed = "REFRESH_FAILED"

	// ApplicationDiscoveryStatusRegistering is a ApplicationDiscoveryStatus enum value
	ApplicationDiscoveryStatusRegistering = "REGISTERING"

	// ApplicationDiscoveryStatusDeleting is a ApplicationDiscoveryStatus enum value
	ApplicationDiscoveryStatusDeleting = "DELETING"
)

// ApplicationDiscoveryStatus_Values returns all elements of the ApplicationDiscoveryStatus enum
func ApplicationDiscoveryStatus_Values() []string {
	return []string{
		ApplicationDiscoveryStatusSuccess,
		ApplicationDiscoveryStatusRegistrationFailed,
		ApplicationDiscoveryStatusRefreshFailed,
		ApplicationDiscoveryStatusRegistering,
		ApplicationDiscoveryStatusDeleting,
	}
}

const (
	// ApplicationStatusActivated is a ApplicationStatus enum value
	ApplicationStatusActivated = "ACTIVATED"

	// ApplicationStatusStarting is a ApplicationStatus enum value
	ApplicationStatusStarting = "STARTING"

	// ApplicationStatusStopped is a ApplicationStatus enum value
	ApplicationStatusStopped = "STOPPED"

	// ApplicationStatusStopping is a ApplicationStatus enum value
	ApplicationStatusStopping = "STOPPING"

	// ApplicationStatusFailed is a ApplicationStatus enum value
	ApplicationStatusFailed = "FAILED"

	// ApplicationStatusRegistering is a ApplicationStatus enum value
	ApplicationStatusRegistering = "REGISTERING"

	// ApplicationStatusDeleting is a ApplicationStatus enum value
	ApplicationStatusDeleting = "DELETING"

	// ApplicationStatusUnknown is a ApplicationStatus enum value
	ApplicationStatusUnknown = "UNKNOWN"
)

// ApplicationStatus_Values returns all elements of the ApplicationStatus enum
func ApplicationStatus_Values() []string {
	return []string{
		ApplicationStatusActivated,
		ApplicationStatusStarting,
		ApplicationStatusStopped,
		ApplicationStatusStopping,
		ApplicationStatusFailed,
		ApplicationStatusRegistering,
		ApplicationStatusDeleting,
		ApplicationStatusUnknown,
	}
}

const (
	// ApplicationTypeHana is a ApplicationType enum value
	ApplicationTypeHana = "HANA"

	// ApplicationTypeSapAbap is a ApplicationType enum value
	ApplicationTypeSapAbap = "SAP_ABAP"
)

// ApplicationType_Values returns all elements of the ApplicationType enum
func ApplicationType_Values() []string {
	return []string{
		ApplicationTypeHana,
		ApplicationTypeSapAbap,
	}
}

const (
	// BackintModeAwsbackup is a BackintMode enum value
	BackintModeAwsbackup = "AWSBackup"
)

// BackintMode_Values returns all elements of the BackintMode enum
func BackintMode_Values() []string {
	return []string{
		BackintModeAwsbackup,
	}
}

const (
	// ClusterStatusOnline is a ClusterStatus enum value
	ClusterStatusOnline = "ONLINE"

	// ClusterStatusStandby is a ClusterStatus enum value
	ClusterStatusStandby = "STANDBY"

	// ClusterStatusMaintenance is a ClusterStatus enum value
	ClusterStatusMaintenance = "MAINTENANCE"

	// ClusterStatusOffline is a ClusterStatus enum value
	ClusterStatusOffline = "OFFLINE"

	// ClusterStatusNone is a ClusterStatus enum value
	ClusterStatusNone = "NONE"
)

// ClusterStatus_Values returns all elements of the ClusterStatus enum
func ClusterStatus_Values() []string {
	return []string{
		ClusterStatusOnline,
		ClusterStatusStandby,
		ClusterStatusMaintenance,
		ClusterStatusOffline,
		ClusterStatusNone,
	}
}

const (
	// ComponentStatusActivated is a ComponentStatus enum value
	ComponentStatusActivated = "ACTIVATED"

	// ComponentStatusStarting is a ComponentStatus enum value
	ComponentStatusStarting = "STARTING"

	// ComponentStatusStopped is a ComponentStatus enum value
	ComponentStatusStopped = "STOPPED"

	// ComponentStatusStopping is a ComponentStatus enum value
	ComponentStatusStopping = "STOPPING"

	// ComponentStatusRunning is a ComponentStatus enum value
	ComponentStatusRunning = "RUNNING"

	// ComponentStatusRunningWithError is a ComponentStatus enum value
	ComponentStatusRunningWithError = "RUNNING_WITH_ERROR"

	// ComponentStatusUndefined is a ComponentStatus enum value
	ComponentStatusUndefined = "UNDEFINED"
)

// ComponentStatus_Values returns all elements of the ComponentStatus enum
func ComponentStatus_Values() []string {
	return []string{
		ComponentStatusActivated,
		ComponentStatusStarting,
		ComponentStatusStopped,
		ComponentStatusStopping,
		ComponentStatusRunning,
		ComponentStatusRunningWithError,
		ComponentStatusUndefined,
	}
}

const (
	// ComponentTypeHana is a ComponentType enum value
	ComponentTypeHana = "HANA"

	// ComponentTypeHanaNode is a ComponentType enum value
	ComponentTypeHanaNode = "HANA_NODE"

	// ComponentTypeAbap is a ComponentType enum value
	ComponentTypeAbap = "ABAP"

	// ComponentTypeAscs is a ComponentType enum value
	ComponentTypeAscs = "ASCS"

	// ComponentTypeDialog is a ComponentType enum value
	ComponentTypeDialog = "DIALOG"

	// ComponentTypeWebdisp is a ComponentType enum value
	ComponentTypeWebdisp = "WEBDISP"

	// ComponentTypeWd is a ComponentType enum value
	ComponentTypeWd = "WD"

	// ComponentTypeErs is a ComponentType enum value
	ComponentTypeErs = "ERS"
)

// ComponentType_Values returns all elements of the ComponentType enum
func ComponentType_Values() []string {
	return []string{
		ComponentTypeHana,
		ComponentTypeHanaNode,
		ComponentTypeAbap,
		ComponentTypeAscs,
		ComponentTypeDialog,
		ComponentTypeWebdisp,
		ComponentTypeWd,
		ComponentTypeErs,
	}
}

const (
	// CredentialTypeAdmin is a CredentialType enum value
	CredentialTypeAdmin = "ADMIN"
)

// CredentialType_Values returns all elements of the CredentialType enum
func CredentialType_Values() []string {
	return []string{
		CredentialTypeAdmin,
	}
}

const (
	// DatabaseConnectionMethodDirect is a DatabaseConnectionMethod enum value
	DatabaseConnectionMethodDirect = "DIRECT"

	// DatabaseConnectionMethodOverlay is a DatabaseConnectionMethod enum value
	DatabaseConnectionMethodOverlay = "OVERLAY"
)

// DatabaseConnectionMethod_Values returns all elements of the DatabaseConnectionMethod enum
func DatabaseConnectionMethod_Values() []string {
	return []string{
		DatabaseConnectionMethodDirect,
		DatabaseConnectionMethodOverlay,
	}
}

const (
	// DatabaseStatusRunning is a DatabaseStatus enum value
	DatabaseStatusRunning = "RUNNING"

	// DatabaseStatusStarting is a DatabaseStatus enum value
	DatabaseStatusStarting = "STARTING"

	// DatabaseStatusStopped is a DatabaseStatus enum value
	DatabaseStatusStopped = "STOPPED"

	// DatabaseStatusWarning is a DatabaseStatus enum value
	DatabaseStatusWarning = "WARNING"

	// DatabaseStatusUnknown is a DatabaseStatus enum value
	DatabaseStatusUnknown = "UNKNOWN"

	// DatabaseStatusError is a DatabaseStatus enum value
	DatabaseStatusError = "ERROR"
)

// DatabaseStatus_Values returns all elements of the DatabaseStatus enum
func DatabaseStatus_Values() []string {
	return []string{
		DatabaseStatusRunning,
		DatabaseStatusStarting,
		DatabaseStatusStopped,
		DatabaseStatusWarning,
		DatabaseStatusUnknown,
		DatabaseStatusError,
	}
}

const (
	// DatabaseTypeSystem is a DatabaseType enum value
	DatabaseTypeSystem = "SYSTEM"

	// DatabaseTypeTenant is a DatabaseType enum value
	DatabaseTypeTenant = "TENANT"
)

// DatabaseType_Values returns all elements of the DatabaseType enum
func DatabaseType_Values() []string {
	return []string{
		DatabaseTypeSystem,
		DatabaseTypeTenant,
	}
}

const (
	// FilterOperatorEquals is a FilterOperator enum value
	FilterOperatorEquals = "Equals"

	// FilterOperatorGreaterThanOrEquals is a FilterOperator enum value
	FilterOperatorGreaterThanOrEquals = "GreaterThanOrEquals"

	// FilterOperatorLessThanOrEquals is a FilterOperator enum value
	FilterOperatorLessThanOrEquals = "LessThanOrEquals"
)

// FilterOperator_Values returns all elements of the FilterOperator enum
func FilterOperator_Values() []string {
	return []string{
		FilterOperatorEquals,
		FilterOperatorGreaterThanOrEquals,
		FilterOperatorLessThanOrEquals,
	}
}

const (
	// HostRoleLeader is a HostRole enum value
	HostRoleLeader = "LEADER"

	// HostRoleWorker is a HostRole enum value
	HostRoleWorker = "WORKER"

	// HostRoleStandby is a HostRole enum value
	HostRoleStandby = "STANDBY"

	// HostRoleUnknown is a HostRole enum value
	HostRoleUnknown = "UNKNOWN"
)

// HostRole_Values returns all elements of the HostRole enum
func HostRole_Values() []string {
	return []string{
		HostRoleLeader,
		HostRoleWorker,
		HostRoleStandby,
		HostRoleUnknown,
	}
}

const (
	// OperationModePrimary is a OperationMode enum value
	OperationModePrimary = "PRIMARY"

	// OperationModeLogreplay is a OperationMode enum value
	OperationModeLogreplay = "LOGREPLAY"

	// OperationModeDeltaDatashipping is a OperationMode enum value
	OperationModeDeltaDatashipping = "DELTA_DATASHIPPING"

	// OperationModeLogreplayReadaccess is a OperationMode enum value
	OperationModeLogreplayReadaccess = "LOGREPLAY_READACCESS"

	// OperationModeNone is a OperationMode enum value
	OperationModeNone = "NONE"
)

// OperationMode_Values returns all elements of the OperationMode enum
func OperationMode_Values() []string {
	return []string{
		OperationModePrimary,
		OperationModeLogreplay,
		OperationModeDeltaDatashipping,
		OperationModeLogreplayReadaccess,
		OperationModeNone,
	}
}

const (
	// OperationStatusInprogress is a OperationStatus enum value
	OperationStatusInprogress = "INPROGRESS"

	// OperationStatusSuccess is a OperationStatus enum value
	OperationStatusSuccess = "SUCCESS"

	// OperationStatusError is a OperationStatus enum value
	OperationStatusError = "ERROR"
)

// OperationStatus_Values returns all elements of the OperationStatus enum
func OperationStatus_Values() []string {
	return []string{
		OperationStatusInprogress,
		OperationStatusSuccess,
		OperationStatusError,
	}
}

const (
	// PermissionActionTypeRestore is a PermissionActionType enum value
	PermissionActionTypeRestore = "RESTORE"
)

// PermissionActionType_Values returns all elements of the PermissionActionType enum
func PermissionActionType_Values() []string {
	return []string{
		PermissionActionTypeRestore,
	}
}

const (
	// ReplicationModePrimary is a ReplicationMode enum value
	ReplicationModePrimary = "PRIMARY"

	// ReplicationModeNone is a ReplicationMode enum value
	ReplicationModeNone = "NONE"

	// ReplicationModeSync is a ReplicationMode enum value
	ReplicationModeSync = "SYNC"

	// ReplicationModeSyncmem is a ReplicationMode enum value
	ReplicationModeSyncmem = "SYNCMEM"

	// ReplicationModeAsync is a ReplicationMode enum value
	ReplicationModeAsync = "ASYNC"
)

// ReplicationMode_Values returns all elements of the ReplicationMode enum
func ReplicationMode_Values() []string {
	return []string{
		ReplicationModePrimary,
		ReplicationModeNone,
		ReplicationModeSync,
		ReplicationModeSyncmem,
		ReplicationModeAsync,
	}
}
