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

package managedgrafana

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 opAssociateLicense = "AssociateLicense"

// AssociateLicenseRequest generates a "aws/request.Request" representing the
// client's request for the AssociateLicense 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 AssociateLicense for more information on using the AssociateLicense
// 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 AssociateLicenseRequest method.
//	req, resp := client.AssociateLicenseRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/AssociateLicense
func (c *ManagedGrafana) AssociateLicenseRequest(input *AssociateLicenseInput) (req *request.Request, output *AssociateLicenseOutput) {
	op := &request.Operation{
		Name:       opAssociateLicense,
		HTTPMethod: "POST",
		HTTPPath:   "/workspaces/{workspaceId}/licenses/{licenseType}",
	}

	if input == nil {
		input = &AssociateLicenseInput{}
	}

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

// AssociateLicense API operation for Amazon Managed Grafana.
//
// Assigns a Grafana Enterprise license to a workspace. Upgrading to Grafana
// Enterprise incurs additional fees. For more information, see Upgrade a workspace
// to Grafana Enterprise (https://docs.aws.amazon.com/grafana/latest/userguide/upgrade-to-Grafana-Enterprise.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation AssociateLicense for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/AssociateLicense
func (c *ManagedGrafana) AssociateLicense(input *AssociateLicenseInput) (*AssociateLicenseOutput, error) {
	req, out := c.AssociateLicenseRequest(input)
	return out, req.Send()
}

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

const opCreateWorkspace = "CreateWorkspace"

// CreateWorkspaceRequest generates a "aws/request.Request" representing the
// client's request for the CreateWorkspace 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 CreateWorkspace for more information on using the CreateWorkspace
// 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 CreateWorkspaceRequest method.
//	req, resp := client.CreateWorkspaceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/CreateWorkspace
func (c *ManagedGrafana) CreateWorkspaceRequest(input *CreateWorkspaceInput) (req *request.Request, output *CreateWorkspaceOutput) {
	op := &request.Operation{
		Name:       opCreateWorkspace,
		HTTPMethod: "POST",
		HTTPPath:   "/workspaces",
	}

	if input == nil {
		input = &CreateWorkspaceInput{}
	}

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

// CreateWorkspace API operation for Amazon Managed Grafana.
//
// Creates a workspace. In a workspace, you can create Grafana dashboards and
// visualizations to analyze your metrics, logs, and traces. You don't have
// to build, package, or deploy any hardware to run the Grafana server.
//
// Don't use CreateWorkspace to modify an existing workspace. Instead, use UpdateWorkspace
// (https://docs.aws.amazon.com/grafana/latest/APIReference/API_UpdateWorkspace.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation CreateWorkspace for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
//   - ServiceQuotaExceededException
//     The request would cause a service quota to be exceeded.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/CreateWorkspace
func (c *ManagedGrafana) CreateWorkspace(input *CreateWorkspaceInput) (*CreateWorkspaceOutput, error) {
	req, out := c.CreateWorkspaceRequest(input)
	return out, req.Send()
}

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

const opCreateWorkspaceApiKey = "CreateWorkspaceApiKey"

// CreateWorkspaceApiKeyRequest generates a "aws/request.Request" representing the
// client's request for the CreateWorkspaceApiKey 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 CreateWorkspaceApiKey for more information on using the CreateWorkspaceApiKey
// 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 CreateWorkspaceApiKeyRequest method.
//	req, resp := client.CreateWorkspaceApiKeyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/CreateWorkspaceApiKey
func (c *ManagedGrafana) CreateWorkspaceApiKeyRequest(input *CreateWorkspaceApiKeyInput) (req *request.Request, output *CreateWorkspaceApiKeyOutput) {
	op := &request.Operation{
		Name:       opCreateWorkspaceApiKey,
		HTTPMethod: "POST",
		HTTPPath:   "/workspaces/{workspaceId}/apikeys",
	}

	if input == nil {
		input = &CreateWorkspaceApiKeyInput{}
	}

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

// CreateWorkspaceApiKey API operation for Amazon Managed Grafana.
//
// Creates an API key for the workspace. This key can be used to authenticate
// requests sent to the workspace's HTTP API. See https://docs.aws.amazon.com/grafana/latest/userguide/Using-Grafana-APIs.html
// (https://docs.aws.amazon.com/grafana/latest/userguide/Using-Grafana-APIs.html)
// for available APIs and example requests.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation CreateWorkspaceApiKey for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
//   - ServiceQuotaExceededException
//     The request would cause a service quota to be exceeded.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/CreateWorkspaceApiKey
func (c *ManagedGrafana) CreateWorkspaceApiKey(input *CreateWorkspaceApiKeyInput) (*CreateWorkspaceApiKeyOutput, error) {
	req, out := c.CreateWorkspaceApiKeyRequest(input)
	return out, req.Send()
}

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

const opDeleteWorkspace = "DeleteWorkspace"

// DeleteWorkspaceRequest generates a "aws/request.Request" representing the
// client's request for the DeleteWorkspace 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 DeleteWorkspace for more information on using the DeleteWorkspace
// 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 DeleteWorkspaceRequest method.
//	req, resp := client.DeleteWorkspaceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/DeleteWorkspace
func (c *ManagedGrafana) DeleteWorkspaceRequest(input *DeleteWorkspaceInput) (req *request.Request, output *DeleteWorkspaceOutput) {
	op := &request.Operation{
		Name:       opDeleteWorkspace,
		HTTPMethod: "DELETE",
		HTTPPath:   "/workspaces/{workspaceId}",
	}

	if input == nil {
		input = &DeleteWorkspaceInput{}
	}

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

// DeleteWorkspace API operation for Amazon Managed Grafana.
//
// Deletes an Amazon Managed Grafana workspace.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation DeleteWorkspace for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/DeleteWorkspace
func (c *ManagedGrafana) DeleteWorkspace(input *DeleteWorkspaceInput) (*DeleteWorkspaceOutput, error) {
	req, out := c.DeleteWorkspaceRequest(input)
	return out, req.Send()
}

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

const opDeleteWorkspaceApiKey = "DeleteWorkspaceApiKey"

// DeleteWorkspaceApiKeyRequest generates a "aws/request.Request" representing the
// client's request for the DeleteWorkspaceApiKey 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 DeleteWorkspaceApiKey for more information on using the DeleteWorkspaceApiKey
// 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 DeleteWorkspaceApiKeyRequest method.
//	req, resp := client.DeleteWorkspaceApiKeyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/DeleteWorkspaceApiKey
func (c *ManagedGrafana) DeleteWorkspaceApiKeyRequest(input *DeleteWorkspaceApiKeyInput) (req *request.Request, output *DeleteWorkspaceApiKeyOutput) {
	op := &request.Operation{
		Name:       opDeleteWorkspaceApiKey,
		HTTPMethod: "DELETE",
		HTTPPath:   "/workspaces/{workspaceId}/apikeys/{keyName}",
	}

	if input == nil {
		input = &DeleteWorkspaceApiKeyInput{}
	}

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

// DeleteWorkspaceApiKey API operation for Amazon Managed Grafana.
//
// Deletes an API key for a workspace.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation DeleteWorkspaceApiKey for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/DeleteWorkspaceApiKey
func (c *ManagedGrafana) DeleteWorkspaceApiKey(input *DeleteWorkspaceApiKeyInput) (*DeleteWorkspaceApiKeyOutput, error) {
	req, out := c.DeleteWorkspaceApiKeyRequest(input)
	return out, req.Send()
}

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

const opDescribeWorkspace = "DescribeWorkspace"

// DescribeWorkspaceRequest generates a "aws/request.Request" representing the
// client's request for the DescribeWorkspace 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 DescribeWorkspace for more information on using the DescribeWorkspace
// 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 DescribeWorkspaceRequest method.
//	req, resp := client.DescribeWorkspaceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/DescribeWorkspace
func (c *ManagedGrafana) DescribeWorkspaceRequest(input *DescribeWorkspaceInput) (req *request.Request, output *DescribeWorkspaceOutput) {
	op := &request.Operation{
		Name:       opDescribeWorkspace,
		HTTPMethod: "GET",
		HTTPPath:   "/workspaces/{workspaceId}",
	}

	if input == nil {
		input = &DescribeWorkspaceInput{}
	}

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

// DescribeWorkspace API operation for Amazon Managed Grafana.
//
// Displays information about one Amazon Managed Grafana workspace.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation DescribeWorkspace for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/DescribeWorkspace
func (c *ManagedGrafana) DescribeWorkspace(input *DescribeWorkspaceInput) (*DescribeWorkspaceOutput, error) {
	req, out := c.DescribeWorkspaceRequest(input)
	return out, req.Send()
}

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

const opDescribeWorkspaceAuthentication = "DescribeWorkspaceAuthentication"

// DescribeWorkspaceAuthenticationRequest generates a "aws/request.Request" representing the
// client's request for the DescribeWorkspaceAuthentication 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 DescribeWorkspaceAuthentication for more information on using the DescribeWorkspaceAuthentication
// 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 DescribeWorkspaceAuthenticationRequest method.
//	req, resp := client.DescribeWorkspaceAuthenticationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/DescribeWorkspaceAuthentication
func (c *ManagedGrafana) DescribeWorkspaceAuthenticationRequest(input *DescribeWorkspaceAuthenticationInput) (req *request.Request, output *DescribeWorkspaceAuthenticationOutput) {
	op := &request.Operation{
		Name:       opDescribeWorkspaceAuthentication,
		HTTPMethod: "GET",
		HTTPPath:   "/workspaces/{workspaceId}/authentication",
	}

	if input == nil {
		input = &DescribeWorkspaceAuthenticationInput{}
	}

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

// DescribeWorkspaceAuthentication API operation for Amazon Managed Grafana.
//
// Displays information about the authentication methods used in one Amazon
// Managed Grafana workspace.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation DescribeWorkspaceAuthentication for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/DescribeWorkspaceAuthentication
func (c *ManagedGrafana) DescribeWorkspaceAuthentication(input *DescribeWorkspaceAuthenticationInput) (*DescribeWorkspaceAuthenticationOutput, error) {
	req, out := c.DescribeWorkspaceAuthenticationRequest(input)
	return out, req.Send()
}

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

const opDisassociateLicense = "DisassociateLicense"

// DisassociateLicenseRequest generates a "aws/request.Request" representing the
// client's request for the DisassociateLicense 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 DisassociateLicense for more information on using the DisassociateLicense
// 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 DisassociateLicenseRequest method.
//	req, resp := client.DisassociateLicenseRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/DisassociateLicense
func (c *ManagedGrafana) DisassociateLicenseRequest(input *DisassociateLicenseInput) (req *request.Request, output *DisassociateLicenseOutput) {
	op := &request.Operation{
		Name:       opDisassociateLicense,
		HTTPMethod: "DELETE",
		HTTPPath:   "/workspaces/{workspaceId}/licenses/{licenseType}",
	}

	if input == nil {
		input = &DisassociateLicenseInput{}
	}

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

// DisassociateLicense API operation for Amazon Managed Grafana.
//
// Removes the Grafana Enterprise license from a workspace.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation DisassociateLicense for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/DisassociateLicense
func (c *ManagedGrafana) DisassociateLicense(input *DisassociateLicenseInput) (*DisassociateLicenseOutput, error) {
	req, out := c.DisassociateLicenseRequest(input)
	return out, req.Send()
}

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

const opListPermissions = "ListPermissions"

// ListPermissionsRequest generates a "aws/request.Request" representing the
// client's request for the ListPermissions 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 ListPermissions for more information on using the ListPermissions
// 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 ListPermissionsRequest method.
//	req, resp := client.ListPermissionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/ListPermissions
func (c *ManagedGrafana) ListPermissionsRequest(input *ListPermissionsInput) (req *request.Request, output *ListPermissionsOutput) {
	op := &request.Operation{
		Name:       opListPermissions,
		HTTPMethod: "GET",
		HTTPPath:   "/workspaces/{workspaceId}/permissions",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListPermissionsInput{}
	}

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

// ListPermissions API operation for Amazon Managed Grafana.
//
// Lists the users and groups who have the Grafana Admin and Editor roles in
// this workspace. If you use this operation without specifying userId or groupId,
// the operation returns the roles of all users and groups. If you specify a
// userId or a groupId, only the roles for that user or group are returned.
// If you do this, you can specify only one userId or one groupId.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation ListPermissions for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/ListPermissions
func (c *ManagedGrafana) ListPermissions(input *ListPermissionsInput) (*ListPermissionsOutput, error) {
	req, out := c.ListPermissionsRequest(input)
	return out, req.Send()
}

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

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

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

	for p.Next() {
		if !fn(p.Page().(*ListPermissionsOutput), !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/grafana-2020-08-18/ListTagsForResource
func (c *ManagedGrafana) 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 Amazon Managed Grafana.
//
// The ListTagsForResource operation returns the tags that are associated with
// the Amazon Managed Service for Grafana resource specified by the resourceArn.
// Currently, the only resource that can be tagged is a workspace.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/ListTagsForResource
func (c *ManagedGrafana) 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 *ManagedGrafana) 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 opListWorkspaces = "ListWorkspaces"

// ListWorkspacesRequest generates a "aws/request.Request" representing the
// client's request for the ListWorkspaces 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 ListWorkspaces for more information on using the ListWorkspaces
// 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 ListWorkspacesRequest method.
//	req, resp := client.ListWorkspacesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/ListWorkspaces
func (c *ManagedGrafana) ListWorkspacesRequest(input *ListWorkspacesInput) (req *request.Request, output *ListWorkspacesOutput) {
	op := &request.Operation{
		Name:       opListWorkspaces,
		HTTPMethod: "GET",
		HTTPPath:   "/workspaces",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListWorkspacesInput{}
	}

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

// ListWorkspaces API operation for Amazon Managed Grafana.
//
// Returns a list of Amazon Managed Grafana workspaces in the account, with
// some information about each workspace. For more complete information about
// one workspace, use DescribeWorkspace (https://docs.aws.amazon.com/AAMG/latest/APIReference/API_DescribeWorkspace.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation ListWorkspaces for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/ListWorkspaces
func (c *ManagedGrafana) ListWorkspaces(input *ListWorkspacesInput) (*ListWorkspacesOutput, error) {
	req, out := c.ListWorkspacesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

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/grafana-2020-08-18/TagResource
func (c *ManagedGrafana) 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 Amazon Managed Grafana.
//
// The TagResource operation associates tags with an Amazon Managed Grafana
// resource. Currently, the only resource that can be tagged is workspaces.
//
// If you specify a new tag key for the resource, this tag is appended to the
// list of tags associated with the resource. If you specify a tag key that
// is already associated with the resource, the new tag value that you specify
// replaces the previous value for that tag.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/TagResource
func (c *ManagedGrafana) 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 *ManagedGrafana) 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/grafana-2020-08-18/UntagResource
func (c *ManagedGrafana) 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 Amazon Managed Grafana.
//
// The UntagResource operation removes the association of the tag with the Amazon
// Managed Grafana resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/UntagResource
func (c *ManagedGrafana) 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 *ManagedGrafana) 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 opUpdatePermissions = "UpdatePermissions"

// UpdatePermissionsRequest generates a "aws/request.Request" representing the
// client's request for the UpdatePermissions 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 UpdatePermissions for more information on using the UpdatePermissions
// 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 UpdatePermissionsRequest method.
//	req, resp := client.UpdatePermissionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/UpdatePermissions
func (c *ManagedGrafana) UpdatePermissionsRequest(input *UpdatePermissionsInput) (req *request.Request, output *UpdatePermissionsOutput) {
	op := &request.Operation{
		Name:       opUpdatePermissions,
		HTTPMethod: "PATCH",
		HTTPPath:   "/workspaces/{workspaceId}/permissions",
	}

	if input == nil {
		input = &UpdatePermissionsInput{}
	}

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

// UpdatePermissions API operation for Amazon Managed Grafana.
//
// Updates which users in a workspace have the Grafana Admin or Editor roles.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation UpdatePermissions for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/UpdatePermissions
func (c *ManagedGrafana) UpdatePermissions(input *UpdatePermissionsInput) (*UpdatePermissionsOutput, error) {
	req, out := c.UpdatePermissionsRequest(input)
	return out, req.Send()
}

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

const opUpdateWorkspace = "UpdateWorkspace"

// UpdateWorkspaceRequest generates a "aws/request.Request" representing the
// client's request for the UpdateWorkspace 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 UpdateWorkspace for more information on using the UpdateWorkspace
// 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 UpdateWorkspaceRequest method.
//	req, resp := client.UpdateWorkspaceRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/UpdateWorkspace
func (c *ManagedGrafana) UpdateWorkspaceRequest(input *UpdateWorkspaceInput) (req *request.Request, output *UpdateWorkspaceOutput) {
	op := &request.Operation{
		Name:       opUpdateWorkspace,
		HTTPMethod: "PUT",
		HTTPPath:   "/workspaces/{workspaceId}",
	}

	if input == nil {
		input = &UpdateWorkspaceInput{}
	}

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

// UpdateWorkspace API operation for Amazon Managed Grafana.
//
// Modifies an existing Amazon Managed Grafana workspace. If you use this operation
// and omit any optional parameters, the existing values of those parameters
// are not changed.
//
// To modify the user authentication methods that the workspace uses, such as
// SAML or Amazon Web Services SSO, use UpdateWorkspaceAuthentication (https://docs.aws.amazon.com/grafana/latest/APIReference/API_UpdateWorkspaceAuthentication.html).
//
// To modify which users in the workspace have the Admin and Editor Grafana
// roles, use UpdatePermissions (https://docs.aws.amazon.com/grafana/latest/APIReference/API_UpdatePermissions.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation UpdateWorkspace for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/UpdateWorkspace
func (c *ManagedGrafana) UpdateWorkspace(input *UpdateWorkspaceInput) (*UpdateWorkspaceOutput, error) {
	req, out := c.UpdateWorkspaceRequest(input)
	return out, req.Send()
}

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

const opUpdateWorkspaceAuthentication = "UpdateWorkspaceAuthentication"

// UpdateWorkspaceAuthenticationRequest generates a "aws/request.Request" representing the
// client's request for the UpdateWorkspaceAuthentication 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 UpdateWorkspaceAuthentication for more information on using the UpdateWorkspaceAuthentication
// 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 UpdateWorkspaceAuthenticationRequest method.
//	req, resp := client.UpdateWorkspaceAuthenticationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/UpdateWorkspaceAuthentication
func (c *ManagedGrafana) UpdateWorkspaceAuthenticationRequest(input *UpdateWorkspaceAuthenticationInput) (req *request.Request, output *UpdateWorkspaceAuthenticationOutput) {
	op := &request.Operation{
		Name:       opUpdateWorkspaceAuthentication,
		HTTPMethod: "POST",
		HTTPPath:   "/workspaces/{workspaceId}/authentication",
	}

	if input == nil {
		input = &UpdateWorkspaceAuthenticationInput{}
	}

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

// UpdateWorkspaceAuthentication API operation for Amazon Managed Grafana.
//
// Use this operation to define the identity provider (IdP) that this workspace
// authenticates users from, using SAML. You can also map SAML assertion attributes
// to workspace user information and define which groups in the assertion attribute
// are to have the Admin and Editor roles in the workspace.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Managed Grafana's
// API operation UpdateWorkspaceAuthentication for usage and error information.
//
// Returned Error Types:
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/UpdateWorkspaceAuthentication
func (c *ManagedGrafana) UpdateWorkspaceAuthentication(input *UpdateWorkspaceAuthenticationInput) (*UpdateWorkspaceAuthenticationOutput, error) {
	req, out := c.UpdateWorkspaceAuthenticationRequest(input)
	return out, req.Send()
}

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

// You do not have sufficient permissions to perform this action.
type AccessDeniedException 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 AccessDeniedException) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

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

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

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

// A structure that defines which attributes in the IdP assertion are to be
// used to define information about the users authenticated by the IdP to use
// the workspace.
type AssertionAttributes struct {
	_ struct{} `type:"structure"`

	// The name of the attribute within the SAML assertion to use as the email names
	// for SAML users.
	Email *string `locationName:"email" min:"1" type:"string"`

	// The name of the attribute within the SAML assertion to use as the user full
	// "friendly" names for user groups.
	Groups *string `locationName:"groups" min:"1" type:"string"`

	// The name of the attribute within the SAML assertion to use as the login names
	// for SAML users.
	Login *string `locationName:"login" min:"1" type:"string"`

	// The name of the attribute within the SAML assertion to use as the user full
	// "friendly" names for SAML users.
	Name *string `locationName:"name" min:"1" type:"string"`

	// The name of the attribute within the SAML assertion to use as the user full
	// "friendly" names for the users' organizations.
	Org *string `locationName:"org" min:"1" type:"string"`

	// The name of the attribute within the SAML assertion to use as the user roles.
	Role *string `locationName:"role" min:"1" type:"string"`
}

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

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

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

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

// SetEmail sets the Email field's value.
func (s *AssertionAttributes) SetEmail(v string) *AssertionAttributes {
	s.Email = &v
	return s
}

// SetGroups sets the Groups field's value.
func (s *AssertionAttributes) SetGroups(v string) *AssertionAttributes {
	s.Groups = &v
	return s
}

// SetLogin sets the Login field's value.
func (s *AssertionAttributes) SetLogin(v string) *AssertionAttributes {
	s.Login = &v
	return s
}

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

// SetOrg sets the Org field's value.
func (s *AssertionAttributes) SetOrg(v string) *AssertionAttributes {
	s.Org = &v
	return s
}

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

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

	// The type of license to associate with the workspace.
	//
	// LicenseType is a required field
	LicenseType *string `location:"uri" locationName:"licenseType" type:"string" required:"true" enum:"LicenseType"`

	// The ID of the workspace to associate the license with.
	//
	// WorkspaceId is a required field
	WorkspaceId *string `location:"uri" locationName:"workspaceId" 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 AssociateLicenseInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetLicenseType sets the LicenseType field's value.
func (s *AssociateLicenseInput) SetLicenseType(v string) *AssociateLicenseInput {
	s.LicenseType = &v
	return s
}

// SetWorkspaceId sets the WorkspaceId field's value.
func (s *AssociateLicenseInput) SetWorkspaceId(v string) *AssociateLicenseInput {
	s.WorkspaceId = &v
	return s
}

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

	// A structure containing data about the workspace.
	//
	// Workspace is a required field
	Workspace *WorkspaceDescription `locationName:"workspace" type:"structure" required:"true"`
}

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

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

// SetWorkspace sets the Workspace field's value.
func (s *AssociateLicenseOutput) SetWorkspace(v *WorkspaceDescription) *AssociateLicenseOutput {
	s.Workspace = v
	return s
}

// A structure containing information about the user authentication methods
// used by the workspace.
type AuthenticationDescription struct {
	_ struct{} `type:"structure"`

	// A structure containing information about how this workspace works with Amazon
	// Web Services SSO.
	AwsSso *AwsSsoAuthentication `locationName:"awsSso" type:"structure"`

	// Specifies whether this workspace uses Amazon Web Services SSO, SAML, or both
	// methods to authenticate users to use the Grafana console in the Amazon Managed
	// Grafana workspace.
	//
	// Providers is a required field
	Providers []*string `locationName:"providers" type:"list" required:"true" enum:"AuthenticationProviderTypes"`

	// A structure containing information about how this workspace works with SAML,
	// including what attributes within the assertion are to be mapped to user information
	// in the workspace.
	Saml *SamlAuthentication `locationName:"saml" 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 AuthenticationDescription) String() string {
	return awsutil.Prettify(s)
}

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

// SetAwsSso sets the AwsSso field's value.
func (s *AuthenticationDescription) SetAwsSso(v *AwsSsoAuthentication) *AuthenticationDescription {
	s.AwsSso = v
	return s
}

// SetProviders sets the Providers field's value.
func (s *AuthenticationDescription) SetProviders(v []*string) *AuthenticationDescription {
	s.Providers = v
	return s
}

// SetSaml sets the Saml field's value.
func (s *AuthenticationDescription) SetSaml(v *SamlAuthentication) *AuthenticationDescription {
	s.Saml = v
	return s
}

// A structure that describes whether the workspace uses SAML, Amazon Web Services
// SSO, or both methods for user authentication, and whether that authentication
// is fully configured.
type AuthenticationSummary struct {
	_ struct{} `type:"structure"`

	// Specifies whether the workspace uses SAML, Amazon Web Services SSO, or both
	// methods for user authentication.
	//
	// Providers is a required field
	Providers []*string `locationName:"providers" type:"list" required:"true" enum:"AuthenticationProviderTypes"`

	// Specifies whether the workplace's user authentication method is fully configured.
	SamlConfigurationStatus *string `locationName:"samlConfigurationStatus" type:"string" enum:"SamlConfigurationStatus"`
}

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

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

// SetProviders sets the Providers field's value.
func (s *AuthenticationSummary) SetProviders(v []*string) *AuthenticationSummary {
	s.Providers = v
	return s
}

// SetSamlConfigurationStatus sets the SamlConfigurationStatus field's value.
func (s *AuthenticationSummary) SetSamlConfigurationStatus(v string) *AuthenticationSummary {
	s.SamlConfigurationStatus = &v
	return s
}

// A structure containing information about how this workspace works with Amazon
// Web Services SSO.
type AwsSsoAuthentication struct {
	_ struct{} `type:"structure"`

	// The ID of the Amazon Web Services SSO-managed application that is created
	// by Amazon Managed Grafana.
	SsoClientId *string `locationName:"ssoClientId" 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 AwsSsoAuthentication) String() string {
	return awsutil.Prettify(s)
}

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

// SetSsoClientId sets the SsoClientId field's value.
func (s *AwsSsoAuthentication) SetSsoClientId(v string) *AwsSsoAuthentication {
	s.SsoClientId = &v
	return s
}

// A resource was in an inconsistent state during an update or a deletion.
type ConflictException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

	// The ID of the resource that is associated with the error.
	//
	// ResourceId is a required field
	ResourceId *string `locationName:"resourceId" type:"string" required:"true"`

	// The type of the resource that is associated with the error.
	//
	// ResourceType is a required field
	ResourceType *string `locationName:"resourceType" 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 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\n%s", s.Code(), s.Message(), s.String())
}

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

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

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

	// Specifies the name of the key to create. Key names must be unique to the
	// workspace.
	//
	// KeyName is a required field
	KeyName *string `locationName:"keyName" min:"1" type:"string" required:"true"`

	// Specifies the permission level of the key.
	//
	// Valid Values: VIEWER | EDITOR | ADMIN
	//
	// KeyRole is a required field
	KeyRole *string `locationName:"keyRole" type:"string" required:"true"`

	// Specifies the time in seconds until the key expires. Keys can be valid for
	// up to 30 days.
	//
	// SecondsToLive is a required field
	SecondsToLive *int64 `locationName:"secondsToLive" min:"1" type:"integer" required:"true"`

	// The ID of the workspace in which to create an API key.
	//
	// WorkspaceId is a required field
	WorkspaceId *string `location:"uri" locationName:"workspaceId" 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 CreateWorkspaceApiKeyInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetKeyName sets the KeyName field's value.
func (s *CreateWorkspaceApiKeyInput) SetKeyName(v string) *CreateWorkspaceApiKeyInput {
	s.KeyName = &v
	return s
}

// SetKeyRole sets the KeyRole field's value.
func (s *CreateWorkspaceApiKeyInput) SetKeyRole(v string) *CreateWorkspaceApiKeyInput {
	s.KeyRole = &v
	return s
}

// SetSecondsToLive sets the SecondsToLive field's value.
func (s *CreateWorkspaceApiKeyInput) SetSecondsToLive(v int64) *CreateWorkspaceApiKeyInput {
	s.SecondsToLive = &v
	return s
}

// SetWorkspaceId sets the WorkspaceId field's value.
func (s *CreateWorkspaceApiKeyInput) SetWorkspaceId(v string) *CreateWorkspaceApiKeyInput {
	s.WorkspaceId = &v
	return s
}

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

	// The key token that was created. Use this value as a bearer token to authenticate
	// HTTP requests to the workspace.
	//
	// Key is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateWorkspaceApiKeyOutput's
	// String and GoString methods.
	//
	// Key is a required field
	Key *string `locationName:"key" type:"string" required:"true" sensitive:"true"`

	// The name of the key that was created.
	//
	// KeyName is a required field
	KeyName *string `locationName:"keyName" min:"1" type:"string" required:"true"`

	// The ID of the workspace that the key is valid for.
	//
	// WorkspaceId is a required field
	WorkspaceId *string `locationName:"workspaceId" 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 CreateWorkspaceApiKeyOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetKeyName sets the KeyName field's value.
func (s *CreateWorkspaceApiKeyOutput) SetKeyName(v string) *CreateWorkspaceApiKeyOutput {
	s.KeyName = &v
	return s
}

// SetWorkspaceId sets the WorkspaceId field's value.
func (s *CreateWorkspaceApiKeyOutput) SetWorkspaceId(v string) *CreateWorkspaceApiKeyOutput {
	s.WorkspaceId = &v
	return s
}

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

	// Specifies whether the workspace can access Amazon Web Services resources
	// in this Amazon Web Services account only, or whether it can also access Amazon
	// Web Services resources in other accounts in the same organization. If you
	// specify ORGANIZATION, you must specify which organizational units the workspace
	// can access in the workspaceOrganizationalUnits parameter.
	//
	// AccountAccessType is a required field
	AccountAccessType *string `locationName:"accountAccessType" type:"string" required:"true" enum:"AccountAccessType"`

	// Specifies whether this workspace uses SAML 2.0, Amazon Web Services Single
	// Sign On, or both to authenticate users for using the Grafana console within
	// a workspace. For more information, see User authentication in Amazon Managed
	// Grafana (https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG.html).
	//
	// AuthenticationProviders is a required field
	AuthenticationProviders []*string `locationName:"authenticationProviders" type:"list" required:"true" enum:"AuthenticationProviderTypes"`

	// A unique, case-sensitive, user-provided identifier to ensure the idempotency
	// of the request.
	ClientToken *string `locationName:"clientToken" type:"string" idempotencyToken:"true"`

	// The name of an IAM role that already exists to use with Organizations to
	// access Amazon Web Services data sources and notification channels in other
	// accounts in an organization.
	//
	// OrganizationRoleName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateWorkspaceInput's
	// String and GoString methods.
	OrganizationRoleName *string `locationName:"organizationRoleName" min:"1" type:"string" sensitive:"true"`

	// If you specify SERVICE_MANAGED on AWS Grafana console, Amazon Managed Grafana
	// automatically creates the IAM roles and provisions the permissions that the
	// workspace needs to use Amazon Web Services data sources and notification
	// channels. In CLI mode, the permissionType SERVICE_MANAGED will not create
	// the IAM role for you.
	//
	// If you specify CUSTOMER_MANAGED, you will manage those roles and permissions
	// yourself. If you are creating this workspace in a member account of an organization
	// that is not a delegated administrator account, and you want the workspace
	// to access data sources in other Amazon Web Services accounts in the organization,
	// you must choose CUSTOMER_MANAGED.
	//
	// For more information, see Amazon Managed Grafana permissions and policies
	// for Amazon Web Services data sources and notification channels (https://docs.aws.amazon.com/grafana/latest/userguide/AMG-manage-permissions.html).
	//
	// PermissionType is a required field
	PermissionType *string `locationName:"permissionType" type:"string" required:"true" enum:"PermissionType"`

	// The name of the CloudFormation stack set to use to generate IAM roles to
	// be used for this workspace.
	StackSetName *string `locationName:"stackSetName" type:"string"`

	// The list of tags associated with the workspace.
	Tags map[string]*string `locationName:"tags" type:"map"`

	// Specify the Amazon Web Services data sources that you want to be queried
	// in this workspace. Specifying these data sources here enables Amazon Managed
	// Grafana to create IAM roles and permissions that allow Amazon Managed Grafana
	// to read data from these sources. You must still add them as data sources
	// in the Grafana console in the workspace.
	//
	// If you don't specify a data source here, you can still add it as a data source
	// in the workspace console later. However, you will then have to manually configure
	// permissions for it.
	WorkspaceDataSources []*string `locationName:"workspaceDataSources" type:"list" enum:"DataSourceType"`

	// A description for the workspace. This is used only to help you identify this
	// workspace.
	//
	// Pattern: ^[\\p{L}\\p{Z}\\p{N}\\p{P}]{0,2048}$
	//
	// WorkspaceDescription is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateWorkspaceInput's
	// String and GoString methods.
	WorkspaceDescription *string `locationName:"workspaceDescription" type:"string" sensitive:"true"`

	// The name for the workspace. It does not have to be unique.
	//
	// WorkspaceName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateWorkspaceInput's
	// String and GoString methods.
	WorkspaceName *string `locationName:"workspaceName" type:"string" sensitive:"true"`

	// Specify the Amazon Web Services notification channels that you plan to use
	// in this workspace. Specifying these data sources here enables Amazon Managed
	// Grafana to create IAM roles and permissions that allow Amazon Managed Grafana
	// to use these channels.
	WorkspaceNotificationDestinations []*string `locationName:"workspaceNotificationDestinations" type:"list" enum:"NotificationDestinationType"`

	// Specifies the organizational units that this workspace is allowed to use
	// data sources from, if this workspace is in an account that is part of an
	// organization.
	//
	// WorkspaceOrganizationalUnits is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateWorkspaceInput's
	// String and GoString methods.
	WorkspaceOrganizationalUnits []*string `locationName:"workspaceOrganizationalUnits" type:"list" sensitive:"true"`

	// The workspace needs an IAM role that grants permissions to the Amazon Web
	// Services resources that the workspace will view data from. If you already
	// have a role that you want to use, specify it here. The permission type should
	// be set to CUSTOMER_MANAGED.
	//
	// WorkspaceRoleArn is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by CreateWorkspaceInput's
	// String and GoString methods.
	WorkspaceRoleArn *string `locationName:"workspaceRoleArn" min:"1" type:"string" sensitive:"true"`
}

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

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

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

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

// SetAccountAccessType sets the AccountAccessType field's value.
func (s *CreateWorkspaceInput) SetAccountAccessType(v string) *CreateWorkspaceInput {
	s.AccountAccessType = &v
	return s
}

// SetAuthenticationProviders sets the AuthenticationProviders field's value.
func (s *CreateWorkspaceInput) SetAuthenticationProviders(v []*string) *CreateWorkspaceInput {
	s.AuthenticationProviders = v
	return s
}

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

// SetOrganizationRoleName sets the OrganizationRoleName field's value.
func (s *CreateWorkspaceInput) SetOrganizationRoleName(v string) *CreateWorkspaceInput {
	s.OrganizationRoleName = &v
	return s
}

// SetPermissionType sets the PermissionType field's value.
func (s *CreateWorkspaceInput) SetPermissionType(v string) *CreateWorkspaceInput {
	s.PermissionType = &v
	return s
}

// SetStackSetName sets the StackSetName field's value.
func (s *CreateWorkspaceInput) SetStackSetName(v string) *CreateWorkspaceInput {
	s.StackSetName = &v
	return s
}

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

// SetWorkspaceDataSources sets the WorkspaceDataSources field's value.
func (s *CreateWorkspaceInput) SetWorkspaceDataSources(v []*string) *CreateWorkspaceInput {
	s.WorkspaceDataSources = v
	return s
}

// SetWorkspaceDescription sets the WorkspaceDescription field's value.
func (s *CreateWorkspaceInput) SetWorkspaceDescription(v string) *CreateWorkspaceInput {
	s.WorkspaceDescription = &v
	return s
}

// SetWorkspaceName sets the WorkspaceName field's value.
func (s *CreateWorkspaceInput) SetWorkspaceName(v string) *CreateWorkspaceInput {
	s.WorkspaceName = &v
	return s
}

// SetWorkspaceNotificationDestinations sets the WorkspaceNotificationDestinations field's value.
func (s *CreateWorkspaceInput) SetWorkspaceNotificationDestinations(v []*string) *CreateWorkspaceInput {
	s.WorkspaceNotificationDestinations = v
	return s
}

// SetWorkspaceOrganizationalUnits sets the WorkspaceOrganizationalUnits field's value.
func (s *CreateWorkspaceInput) SetWorkspaceOrganizationalUnits(v []*string) *CreateWorkspaceInput {
	s.WorkspaceOrganizationalUnits = v
	return s
}

// SetWorkspaceRoleArn sets the WorkspaceRoleArn field's value.
func (s *CreateWorkspaceInput) SetWorkspaceRoleArn(v string) *CreateWorkspaceInput {
	s.WorkspaceRoleArn = &v
	return s
}

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

	// A structure containing data about the workspace that was created.
	//
	// Workspace is a required field
	Workspace *WorkspaceDescription `locationName:"workspace" type:"structure" required:"true"`
}

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

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

// SetWorkspace sets the Workspace field's value.
func (s *CreateWorkspaceOutput) SetWorkspace(v *WorkspaceDescription) *CreateWorkspaceOutput {
	s.Workspace = v
	return s
}

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

	// The name of the API key to delete.
	//
	// KeyName is a required field
	KeyName *string `location:"uri" locationName:"keyName" min:"1" type:"string" required:"true"`

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

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

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

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

// SetKeyName sets the KeyName field's value.
func (s *DeleteWorkspaceApiKeyInput) SetKeyName(v string) *DeleteWorkspaceApiKeyInput {
	s.KeyName = &v
	return s
}

// SetWorkspaceId sets the WorkspaceId field's value.
func (s *DeleteWorkspaceApiKeyInput) SetWorkspaceId(v string) *DeleteWorkspaceApiKeyInput {
	s.WorkspaceId = &v
	return s
}

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

	// The name of the API key that was deleted.
	//
	// KeyName is a required field
	KeyName *string `locationName:"keyName" min:"1" type:"string" required:"true"`

	// The ID of the workspace where the key was deleted.
	//
	// WorkspaceId is a required field
	WorkspaceId *string `locationName:"workspaceId" 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 DeleteWorkspaceApiKeyOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetKeyName sets the KeyName field's value.
func (s *DeleteWorkspaceApiKeyOutput) SetKeyName(v string) *DeleteWorkspaceApiKeyOutput {
	s.KeyName = &v
	return s
}

// SetWorkspaceId sets the WorkspaceId field's value.
func (s *DeleteWorkspaceApiKeyOutput) SetWorkspaceId(v string) *DeleteWorkspaceApiKeyOutput {
	s.WorkspaceId = &v
	return s
}

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

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

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

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

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

// SetWorkspaceId sets the WorkspaceId field's value.
func (s *DeleteWorkspaceInput) SetWorkspaceId(v string) *DeleteWorkspaceInput {
	s.WorkspaceId = &v
	return s
}

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

	// A structure containing information about the workspace that was deleted.
	//
	// Workspace is a required field
	Workspace *WorkspaceDescription `locationName:"workspace" type:"structure" required:"true"`
}

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

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

// SetWorkspace sets the Workspace field's value.
func (s *DeleteWorkspaceOutput) SetWorkspace(v *WorkspaceDescription) *DeleteWorkspaceOutput {
	s.Workspace = v
	return s
}

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

	// The ID of the workspace to return authentication information about.
	//
	// WorkspaceId is a required field
	WorkspaceId *string `location:"uri" locationName:"workspaceId" 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 DescribeWorkspaceAuthenticationInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetWorkspaceId sets the WorkspaceId field's value.
func (s *DescribeWorkspaceAuthenticationInput) SetWorkspaceId(v string) *DescribeWorkspaceAuthenticationInput {
	s.WorkspaceId = &v
	return s
}

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

	// A structure containing information about the authentication methods used
	// in the workspace.
	//
	// Authentication is a required field
	Authentication *AuthenticationDescription `locationName:"authentication" type:"structure" required:"true"`
}

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

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

// SetAuthentication sets the Authentication field's value.
func (s *DescribeWorkspaceAuthenticationOutput) SetAuthentication(v *AuthenticationDescription) *DescribeWorkspaceAuthenticationOutput {
	s.Authentication = v
	return s
}

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

	// The ID of the workspace to display information about.
	//
	// WorkspaceId is a required field
	WorkspaceId *string `location:"uri" locationName:"workspaceId" 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 DescribeWorkspaceInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetWorkspaceId sets the WorkspaceId field's value.
func (s *DescribeWorkspaceInput) SetWorkspaceId(v string) *DescribeWorkspaceInput {
	s.WorkspaceId = &v
	return s
}

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

	// A structure containing information about the workspace.
	//
	// Workspace is a required field
	Workspace *WorkspaceDescription `locationName:"workspace" type:"structure" required:"true"`
}

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

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

// SetWorkspace sets the Workspace field's value.
func (s *DescribeWorkspaceOutput) SetWorkspace(v *WorkspaceDescription) *DescribeWorkspaceOutput {
	s.Workspace = v
	return s
}

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

	// The type of license to remove from the workspace.
	//
	// LicenseType is a required field
	LicenseType *string `location:"uri" locationName:"licenseType" type:"string" required:"true" enum:"LicenseType"`

	// The ID of the workspace to remove the Grafana Enterprise license from.
	//
	// WorkspaceId is a required field
	WorkspaceId *string `location:"uri" locationName:"workspaceId" 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 DisassociateLicenseInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetLicenseType sets the LicenseType field's value.
func (s *DisassociateLicenseInput) SetLicenseType(v string) *DisassociateLicenseInput {
	s.LicenseType = &v
	return s
}

// SetWorkspaceId sets the WorkspaceId field's value.
func (s *DisassociateLicenseInput) SetWorkspaceId(v string) *DisassociateLicenseInput {
	s.WorkspaceId = &v
	return s
}

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

	// A structure containing information about the workspace.
	//
	// Workspace is a required field
	Workspace *WorkspaceDescription `locationName:"workspace" type:"structure" required:"true"`
}

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

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

// SetWorkspace sets the Workspace field's value.
func (s *DisassociateLicenseOutput) SetWorkspace(v *WorkspaceDescription) *DisassociateLicenseOutput {
	s.Workspace = v
	return s
}

// A structure containing the identity provider (IdP) metadata used to integrate
// the identity provider with this workspace. You can specify the metadata either
// by providing a URL to its location in the url parameter, or by specifying
// the full metadata in XML format in the xml parameter.
type IdpMetadata struct {
	_ struct{} `type:"structure"`

	// The URL of the location containing the metadata.
	Url *string `locationName:"url" min:"1" type:"string"`

	// The actual full metadata file, in XML format.
	Xml *string `locationName:"xml" 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 IdpMetadata) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetUrl sets the Url field's value.
func (s *IdpMetadata) SetUrl(v string) *IdpMetadata {
	s.Url = &v
	return s
}

// SetXml sets the Xml field's value.
func (s *IdpMetadata) SetXml(v string) *IdpMetadata {
	s.Xml = &v
	return s
}

// Unexpected error while processing the request. Retry the request.
type InternalServerException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

	// How long to wait before you retry this operation.
	RetryAfterSeconds *int64 `location:"header" locationName:"Retry-After" type:"integer"`
}

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

// 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
}

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

	// (Optional) Limits the results to only the group that matches this ID.
	GroupId *string `location:"querystring" locationName:"groupId" min:"1" type:"string"`

	// The maximum number of results to include in the response.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token to use when requesting the next set of results. You received this
	// token from a previous ListPermissions operation.
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`

	// (Optional) Limits the results to only the user that matches this ID.
	UserId *string `location:"querystring" locationName:"userId" min:"1" type:"string"`

	// (Optional) If you specify SSO_USER, then only the permissions of Amazon Web
	// Services SSO users are returned. If you specify SSO_GROUP, only the permissions
	// of Amazon Web Services SSO groups are returned.
	UserType *string `location:"querystring" locationName:"userType" type:"string" enum:"UserType"`

	// The ID of the workspace to list permissions for. This parameter is required.
	//
	// WorkspaceId is a required field
	WorkspaceId *string `location:"uri" locationName:"workspaceId" 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 ListPermissionsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

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

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

// SetUserType sets the UserType field's value.
func (s *ListPermissionsInput) SetUserType(v string) *ListPermissionsInput {
	s.UserType = &v
	return s
}

// SetWorkspaceId sets the WorkspaceId field's value.
func (s *ListPermissionsInput) SetWorkspaceId(v string) *ListPermissionsInput {
	s.WorkspaceId = &v
	return s
}

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

	// The token to use in a subsequent ListPermissions operation to return the
	// next set of results.
	NextToken *string `locationName:"nextToken" type:"string"`

	// The permissions returned by the operation.
	//
	// Permissions is a required field
	Permissions []*PermissionEntry `locationName:"permissions" 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 ListPermissionsOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetPermissions sets the Permissions field's value.
func (s *ListPermissionsOutput) SetPermissions(v []*PermissionEntry) *ListPermissionsOutput {
	s.Permissions = v
	return s
}

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

	// The ARN of the resource the list of tags are associated with.
	//
	// 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"`

	// The list of tags that are associated with the resource.
	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
}

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

	// The maximum number of workspaces to include in the results.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

	// The token for the next set of workspaces to return. (You receive this token
	// from a previous ListWorkspaces operation.)
	NextToken *string `location:"querystring" locationName:"nextToken" type:"string"`
}

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

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

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

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

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

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

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

	// The token to use when requesting the next set of workspaces.
	NextToken *string `locationName:"nextToken" type:"string"`

	// An array of structures that contain some information about the workspaces
	// in the account.
	//
	// Workspaces is a required field
	Workspaces []*WorkspaceSummary `locationName:"workspaces" 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 ListWorkspacesOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetWorkspaces sets the Workspaces field's value.
func (s *ListWorkspacesOutput) SetWorkspaces(v []*WorkspaceSummary) *ListWorkspacesOutput {
	s.Workspaces = v
	return s
}

// A structure containing the identity of one user or group and the Admin or
// Editor role that they have.
type PermissionEntry struct {
	_ struct{} `type:"structure"`

	// Specifies whether the user or group has the Admin or Editor role.
	//
	// Role is a required field
	Role *string `locationName:"role" type:"string" required:"true" enum:"Role"`

	// A structure with the ID of the user or group with this role.
	//
	// User is a required field
	User *User `locationName:"user" type:"structure" required:"true"`
}

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

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

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

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

// The request references a resource that does not exist.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The value of a parameter in the request caused an error.
	Message_ *string `locationName:"message" type:"string"`

	// The ID of the resource that is associated with the error.
	//
	// ResourceId is a required field
	ResourceId *string `locationName:"resourceId" type:"string" required:"true"`

	// The type of the resource that is associated with the error.
	//
	// ResourceType is a required field
	ResourceType *string `locationName:"resourceType" 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 ResourceNotFoundException) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

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

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

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

// This structure defines which groups defined in the SAML assertion attribute
// are to be mapped to the Grafana Admin and Editor roles in the workspace.
type RoleValues struct {
	_ struct{} `type:"structure"`

	// A list of groups from the SAML assertion attribute to grant the Grafana Admin
	// role to.
	Admin []*string `locationName:"admin" type:"list"`

	// A list of groups from the SAML assertion attribute to grant the Grafana Editor
	// role to.
	Editor []*string `locationName:"editor" 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 RoleValues) String() string {
	return awsutil.Prettify(s)
}

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

// SetAdmin sets the Admin field's value.
func (s *RoleValues) SetAdmin(v []*string) *RoleValues {
	s.Admin = v
	return s
}

// SetEditor sets the Editor field's value.
func (s *RoleValues) SetEditor(v []*string) *RoleValues {
	s.Editor = v
	return s
}

// A structure containing information about how this workspace works with SAML.
type SamlAuthentication struct {
	_ struct{} `type:"structure"`

	// A structure containing details about how this workspace works with SAML.
	Configuration *SamlConfiguration `locationName:"configuration" type:"structure"`

	// Specifies whether the workspace's SAML configuration is complete.
	//
	// Status is a required field
	Status *string `locationName:"status" type:"string" required:"true" enum:"SamlConfigurationStatus"`
}

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

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

// SetConfiguration sets the Configuration field's value.
func (s *SamlAuthentication) SetConfiguration(v *SamlConfiguration) *SamlAuthentication {
	s.Configuration = v
	return s
}

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

// A structure containing information about how this workspace works with SAML.
type SamlConfiguration struct {
	_ struct{} `type:"structure"`

	// Lists which organizations defined in the SAML assertion are allowed to use
	// the Amazon Managed Grafana workspace. If this is empty, all organizations
	// in the assertion attribute have access.
	AllowedOrganizations []*string `locationName:"allowedOrganizations" type:"list"`

	// A structure that defines which attributes in the SAML assertion are to be
	// used to define information about the users authenticated by that IdP to use
	// the workspace.
	AssertionAttributes *AssertionAttributes `locationName:"assertionAttributes" type:"structure"`

	// A structure containing the identity provider (IdP) metadata used to integrate
	// the identity provider with this workspace.
	//
	// IdpMetadata is a required field
	IdpMetadata *IdpMetadata `locationName:"idpMetadata" type:"structure" required:"true"`

	// How long a sign-on session by a SAML user is valid, before the user has to
	// sign on again.
	LoginValidityDuration *int64 `locationName:"loginValidityDuration" type:"integer"`

	// A structure containing arrays that map group names in the SAML assertion
	// to the Grafana Admin and Editor roles in the workspace.
	RoleValues *RoleValues `locationName:"roleValues" 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 SamlConfiguration) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAllowedOrganizations sets the AllowedOrganizations field's value.
func (s *SamlConfiguration) SetAllowedOrganizations(v []*string) *SamlConfiguration {
	s.AllowedOrganizations = v
	return s
}

// SetAssertionAttributes sets the AssertionAttributes field's value.
func (s *SamlConfiguration) SetAssertionAttributes(v *AssertionAttributes) *SamlConfiguration {
	s.AssertionAttributes = v
	return s
}

// SetIdpMetadata sets the IdpMetadata field's value.
func (s *SamlConfiguration) SetIdpMetadata(v *IdpMetadata) *SamlConfiguration {
	s.IdpMetadata = v
	return s
}

// SetLoginValidityDuration sets the LoginValidityDuration field's value.
func (s *SamlConfiguration) SetLoginValidityDuration(v int64) *SamlConfiguration {
	s.LoginValidityDuration = &v
	return s
}

// SetRoleValues sets the RoleValues field's value.
func (s *SamlConfiguration) SetRoleValues(v *RoleValues) *SamlConfiguration {
	s.RoleValues = v
	return s
}

// The request would cause a service quota to be exceeded.
type ServiceQuotaExceededException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

	// The ID of the service quota that was exceeded.
	//
	// QuotaCode is a required field
	QuotaCode *string `locationName:"quotaCode" type:"string" required:"true"`

	// The ID of the resource that is associated with the error.
	//
	// ResourceId is a required field
	ResourceId *string `locationName:"resourceId" type:"string" required:"true"`

	// The type of the resource that is associated with the error.
	//
	// ResourceType is a required field
	ResourceType *string `locationName:"resourceType" type:"string" required:"true"`

	// The value of a parameter in the request caused an error.
	//
	// ServiceCode is a required field
	ServiceCode *string `locationName:"serviceCode" 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 ServiceQuotaExceededException) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

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

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

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

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

	// The ARN of the resource the tag is associated with.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`

	// The list of tag keys and values to associate with the resource. You can associate
	// tag keys only, tags (key and values) only or a combination of tag keys and
	// tags.
	//
	// 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 was denied because of request throttling. Retry the request.
type ThrottlingException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

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

	// The ID of the service quota that was exceeded.
	QuotaCode *string `locationName:"quotaCode" type:"string"`

	// The value of a parameter in the request caused an error.
	RetryAfterSeconds *int64 `location:"header" locationName:"Retry-After" type:"integer"`

	// The ID of the service that is associated with the error.
	ServiceCode *string `locationName:"serviceCode" 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 ThrottlingException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorThrottlingException(v protocol.ResponseMetadata) error {
	return &ThrottlingException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

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

	// The ARN of the resource the tag association is removed from.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`

	// The key values of the tag to be removed from the resource.
	//
	// 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()
}

// A structure containing information about one error encountered while performing
// an UpdatePermissions (https://docs.aws.amazon.com/grafana/latest/APIReference/API_UpdatePermissions.html)
// operation.
type UpdateError struct {
	_ struct{} `type:"structure"`

	// Specifies which permission update caused the error.
	//
	// CausedBy is a required field
	CausedBy *UpdateInstruction `locationName:"causedBy" type:"structure" required:"true"`

	// The error code.
	//
	// Code is a required field
	Code *int64 `locationName:"code" min:"100" type:"integer" required:"true"`

	// The message for this error.
	//
	// Message is a required field
	Message *string `locationName:"message" type:"string" required:"true"`
}

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

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

// SetCausedBy sets the CausedBy field's value.
func (s *UpdateError) SetCausedBy(v *UpdateInstruction) *UpdateError {
	s.CausedBy = v
	return s
}

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

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

// Contains the instructions for one Grafana role permission update in a UpdatePermissions
// (https://docs.aws.amazon.com/grafana/latest/APIReference/API_UpdatePermissions.html)
// operation.
type UpdateInstruction struct {
	_ struct{} `type:"structure"`

	// Specifies whether this update is to add or revoke role permissions.
	//
	// Action is a required field
	Action *string `locationName:"action" type:"string" required:"true" enum:"UpdateAction"`

	// The role to add or revoke for the user or the group specified in users.
	//
	// Role is a required field
	Role *string `locationName:"role" type:"string" required:"true" enum:"Role"`

	// A structure that specifies the user or group to add or revoke the role for.
	//
	// Users is a required field
	Users []*User `locationName:"users" 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 UpdateInstruction) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

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

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

	// An array of structures that contain the permission updates to make.
	//
	// UpdateInstructionBatch is a required field
	UpdateInstructionBatch []*UpdateInstruction `locationName:"updateInstructionBatch" type:"list" required:"true"`

	// The ID of the workspace to update.
	//
	// WorkspaceId is a required field
	WorkspaceId *string `location:"uri" locationName:"workspaceId" 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 UpdatePermissionsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetUpdateInstructionBatch sets the UpdateInstructionBatch field's value.
func (s *UpdatePermissionsInput) SetUpdateInstructionBatch(v []*UpdateInstruction) *UpdatePermissionsInput {
	s.UpdateInstructionBatch = v
	return s
}

// SetWorkspaceId sets the WorkspaceId field's value.
func (s *UpdatePermissionsInput) SetWorkspaceId(v string) *UpdatePermissionsInput {
	s.WorkspaceId = &v
	return s
}

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

	// An array of structures that contain the errors from the operation, if any.
	//
	// Errors is a required field
	Errors []*UpdateError `locationName:"errors" 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 UpdatePermissionsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetErrors sets the Errors field's value.
func (s *UpdatePermissionsOutput) SetErrors(v []*UpdateError) *UpdatePermissionsOutput {
	s.Errors = v
	return s
}

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

	// Specifies whether this workspace uses SAML 2.0, Amazon Web Services Single
	// Sign On, or both to authenticate users for using the Grafana console within
	// a workspace. For more information, see User authentication in Amazon Managed
	// Grafana (https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG.html).
	//
	// AuthenticationProviders is a required field
	AuthenticationProviders []*string `locationName:"authenticationProviders" type:"list" required:"true" enum:"AuthenticationProviderTypes"`

	// If the workspace uses SAML, use this structure to map SAML assertion attributes
	// to workspace user information and define which groups in the assertion attribute
	// are to have the Admin and Editor roles in the workspace.
	SamlConfiguration *SamlConfiguration `locationName:"samlConfiguration" type:"structure"`

	// The ID of the workspace to update the authentication for.
	//
	// WorkspaceId is a required field
	WorkspaceId *string `location:"uri" locationName:"workspaceId" 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 UpdateWorkspaceAuthenticationInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAuthenticationProviders sets the AuthenticationProviders field's value.
func (s *UpdateWorkspaceAuthenticationInput) SetAuthenticationProviders(v []*string) *UpdateWorkspaceAuthenticationInput {
	s.AuthenticationProviders = v
	return s
}

// SetSamlConfiguration sets the SamlConfiguration field's value.
func (s *UpdateWorkspaceAuthenticationInput) SetSamlConfiguration(v *SamlConfiguration) *UpdateWorkspaceAuthenticationInput {
	s.SamlConfiguration = v
	return s
}

// SetWorkspaceId sets the WorkspaceId field's value.
func (s *UpdateWorkspaceAuthenticationInput) SetWorkspaceId(v string) *UpdateWorkspaceAuthenticationInput {
	s.WorkspaceId = &v
	return s
}

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

	// A structure that describes the user authentication for this workspace after
	// the update is made.
	//
	// Authentication is a required field
	Authentication *AuthenticationDescription `locationName:"authentication" type:"structure" required:"true"`
}

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

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

// SetAuthentication sets the Authentication field's value.
func (s *UpdateWorkspaceAuthenticationOutput) SetAuthentication(v *AuthenticationDescription) *UpdateWorkspaceAuthenticationOutput {
	s.Authentication = v
	return s
}

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

	// Specifies whether the workspace can access Amazon Web Services resources
	// in this Amazon Web Services account only, or whether it can also access Amazon
	// Web Services resources in other accounts in the same organization. If you
	// specify ORGANIZATION, you must specify which organizational units the workspace
	// can access in the workspaceOrganizationalUnits parameter.
	AccountAccessType *string `locationName:"accountAccessType" type:"string" enum:"AccountAccessType"`

	// The name of an IAM role that already exists to use to access resources through
	// Organizations.
	//
	// OrganizationRoleName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateWorkspaceInput's
	// String and GoString methods.
	OrganizationRoleName *string `locationName:"organizationRoleName" min:"1" type:"string" sensitive:"true"`

	// If you specify Service Managed, Amazon Managed Grafana automatically creates
	// the IAM roles and provisions the permissions that the workspace needs to
	// use Amazon Web Services data sources and notification channels.
	//
	// If you specify CUSTOMER_MANAGED, you will manage those roles and permissions
	// yourself. If you are creating this workspace in a member account of an organization
	// and that account is not a delegated administrator account, and you want the
	// workspace to access data sources in other Amazon Web Services accounts in
	// the organization, you must choose CUSTOMER_MANAGED.
	//
	// For more information, see Amazon Managed Grafana permissions and policies
	// for Amazon Web Services data sources and notification channels (https://docs.aws.amazon.com/grafana/latest/userguide/AMG-manage-permissions.html)
	PermissionType *string `locationName:"permissionType" type:"string" enum:"PermissionType"`

	// The name of the CloudFormation stack set to use to generate IAM roles to
	// be used for this workspace.
	StackSetName *string `locationName:"stackSetName" type:"string"`

	// Specify the Amazon Web Services data sources that you want to be queried
	// in this workspace. Specifying these data sources here enables Amazon Managed
	// Grafana to create IAM roles and permissions that allow Amazon Managed Grafana
	// to read data from these sources. You must still add them as data sources
	// in the Grafana console in the workspace.
	//
	// If you don't specify a data source here, you can still add it as a data source
	// later in the workspace console. However, you will then have to manually configure
	// permissions for it.
	WorkspaceDataSources []*string `locationName:"workspaceDataSources" type:"list" enum:"DataSourceType"`

	// A description for the workspace. This is used only to help you identify this
	// workspace.
	//
	// WorkspaceDescription is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateWorkspaceInput's
	// String and GoString methods.
	WorkspaceDescription *string `locationName:"workspaceDescription" type:"string" sensitive:"true"`

	// The ID of the workspace to update.
	//
	// WorkspaceId is a required field
	WorkspaceId *string `location:"uri" locationName:"workspaceId" type:"string" required:"true"`

	// A new name for the workspace to update.
	//
	// WorkspaceName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateWorkspaceInput's
	// String and GoString methods.
	WorkspaceName *string `locationName:"workspaceName" type:"string" sensitive:"true"`

	// Specify the Amazon Web Services notification channels that you plan to use
	// in this workspace. Specifying these data sources here enables Amazon Managed
	// Grafana to create IAM roles and permissions that allow Amazon Managed Grafana
	// to use these channels.
	WorkspaceNotificationDestinations []*string `locationName:"workspaceNotificationDestinations" type:"list" enum:"NotificationDestinationType"`

	// Specifies the organizational units that this workspace is allowed to use
	// data sources from, if this workspace is in an account that is part of an
	// organization.
	//
	// WorkspaceOrganizationalUnits is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateWorkspaceInput's
	// String and GoString methods.
	WorkspaceOrganizationalUnits []*string `locationName:"workspaceOrganizationalUnits" type:"list" sensitive:"true"`

	// The workspace needs an IAM role that grants permissions to the Amazon Web
	// Services resources that the workspace will view data from. If you already
	// have a role that you want to use, specify it here. If you omit this field
	// and you specify some Amazon Web Services resources in workspaceDataSources
	// or workspaceNotificationDestinations, a new IAM role with the necessary permissions
	// is automatically created.
	//
	// WorkspaceRoleArn is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by UpdateWorkspaceInput's
	// String and GoString methods.
	WorkspaceRoleArn *string `locationName:"workspaceRoleArn" min:"1" type:"string" sensitive:"true"`
}

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

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

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

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

// SetAccountAccessType sets the AccountAccessType field's value.
func (s *UpdateWorkspaceInput) SetAccountAccessType(v string) *UpdateWorkspaceInput {
	s.AccountAccessType = &v
	return s
}

// SetOrganizationRoleName sets the OrganizationRoleName field's value.
func (s *UpdateWorkspaceInput) SetOrganizationRoleName(v string) *UpdateWorkspaceInput {
	s.OrganizationRoleName = &v
	return s
}

// SetPermissionType sets the PermissionType field's value.
func (s *UpdateWorkspaceInput) SetPermissionType(v string) *UpdateWorkspaceInput {
	s.PermissionType = &v
	return s
}

// SetStackSetName sets the StackSetName field's value.
func (s *UpdateWorkspaceInput) SetStackSetName(v string) *UpdateWorkspaceInput {
	s.StackSetName = &v
	return s
}

// SetWorkspaceDataSources sets the WorkspaceDataSources field's value.
func (s *UpdateWorkspaceInput) SetWorkspaceDataSources(v []*string) *UpdateWorkspaceInput {
	s.WorkspaceDataSources = v
	return s
}

// SetWorkspaceDescription sets the WorkspaceDescription field's value.
func (s *UpdateWorkspaceInput) SetWorkspaceDescription(v string) *UpdateWorkspaceInput {
	s.WorkspaceDescription = &v
	return s
}

// SetWorkspaceId sets the WorkspaceId field's value.
func (s *UpdateWorkspaceInput) SetWorkspaceId(v string) *UpdateWorkspaceInput {
	s.WorkspaceId = &v
	return s
}

// SetWorkspaceName sets the WorkspaceName field's value.
func (s *UpdateWorkspaceInput) SetWorkspaceName(v string) *UpdateWorkspaceInput {
	s.WorkspaceName = &v
	return s
}

// SetWorkspaceNotificationDestinations sets the WorkspaceNotificationDestinations field's value.
func (s *UpdateWorkspaceInput) SetWorkspaceNotificationDestinations(v []*string) *UpdateWorkspaceInput {
	s.WorkspaceNotificationDestinations = v
	return s
}

// SetWorkspaceOrganizationalUnits sets the WorkspaceOrganizationalUnits field's value.
func (s *UpdateWorkspaceInput) SetWorkspaceOrganizationalUnits(v []*string) *UpdateWorkspaceInput {
	s.WorkspaceOrganizationalUnits = v
	return s
}

// SetWorkspaceRoleArn sets the WorkspaceRoleArn field's value.
func (s *UpdateWorkspaceInput) SetWorkspaceRoleArn(v string) *UpdateWorkspaceInput {
	s.WorkspaceRoleArn = &v
	return s
}

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

	// A structure containing data about the workspace that was created.
	//
	// Workspace is a required field
	Workspace *WorkspaceDescription `locationName:"workspace" type:"structure" required:"true"`
}

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

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

// SetWorkspace sets the Workspace field's value.
func (s *UpdateWorkspaceOutput) SetWorkspace(v *WorkspaceDescription) *UpdateWorkspaceOutput {
	s.Workspace = v
	return s
}

// A structure that specifies one user or group in the workspace.
type User struct {
	_ struct{} `type:"structure"`

	// The ID of the user or group.
	//
	// Pattern: ^([0-9a-fA-F]{10}-|)[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$
	//
	// Id is a required field
	Id *string `locationName:"id" min:"1" type:"string" required:"true"`

	// Specifies whether this is a single user or a group.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true" enum:"UserType"`
}

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

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

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

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

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

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

// The value of a parameter in the request caused an error.
type ValidationException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// A list of fields that might be associated with the error.
	FieldList []*ValidationExceptionField `locationName:"fieldList" type:"list"`

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

	// The reason that the operation failed.
	//
	// Reason is a required field
	Reason *string `locationName:"reason" type:"string" required:"true" enum:"ValidationExceptionReason"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API 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\n%s", s.Code(), s.Message(), s.String())
}

// 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
}

// A structure that contains information about a request parameter that caused
// an error.
type ValidationExceptionField struct {
	_ struct{} `type:"structure"`

	// A message describing why this field couldn't be validated.
	//
	// Message is a required field
	Message *string `locationName:"message" type:"string" required:"true"`

	// The name of the field that caused the validation error.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`
}

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

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

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

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

// A structure containing information about an Amazon Managed Grafana workspace
// in your account.
type WorkspaceDescription struct {
	_ struct{} `type:"structure"`

	// Specifies whether the workspace can access Amazon Web Services resources
	// in this Amazon Web Services account only, or whether it can also access Amazon
	// Web Services resources in other accounts in the same organization. If this
	// is ORGANIZATION, the workspaceOrganizationalUnits parameter specifies which
	// organizational units the workspace can access.
	AccountAccessType *string `locationName:"accountAccessType" type:"string" enum:"AccountAccessType"`

	// A structure that describes whether the workspace uses SAML, Amazon Web Services
	// SSO, or both methods for user authentication.
	//
	// Authentication is a required field
	Authentication *AuthenticationSummary `locationName:"authentication" type:"structure" required:"true"`

	// The date that the workspace was created.
	//
	// Created is a required field
	Created *time.Time `locationName:"created" type:"timestamp" required:"true"`

	// Specifies the Amazon Web Services data sources that have been configured
	// to have IAM roles and permissions created to allow Amazon Managed Grafana
	// to read data from these sources.
	//
	// DataSources is a required field
	DataSources []*string `locationName:"dataSources" type:"list" required:"true" enum:"DataSourceType"`

	// The user-defined description of the workspace.
	//
	// Description is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by WorkspaceDescription's
	// String and GoString methods.
	Description *string `locationName:"description" type:"string" sensitive:"true"`

	// The URL that users can use to access the Grafana console in the workspace.
	//
	// Endpoint is a required field
	Endpoint *string `locationName:"endpoint" min:"1" type:"string" required:"true"`

	// Specifies whether this workspace has already fully used its free trial for
	// Grafana Enterprise.
	FreeTrialConsumed *bool `locationName:"freeTrialConsumed" type:"boolean"`

	// If this workspace is currently in the free trial period for Grafana Enterprise,
	// this value specifies when that free trial ends.
	FreeTrialExpiration *time.Time `locationName:"freeTrialExpiration" type:"timestamp"`

	// The version of Grafana supported in this workspace.
	//
	// GrafanaVersion is a required field
	GrafanaVersion *string `locationName:"grafanaVersion" min:"1" type:"string" required:"true"`

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

	// If this workspace has a full Grafana Enterprise license, this specifies when
	// the license ends and will need to be renewed.
	LicenseExpiration *time.Time `locationName:"licenseExpiration" type:"timestamp"`

	// Specifies whether this workspace has a full Grafana Enterprise license or
	// a free trial license.
	LicenseType *string `locationName:"licenseType" type:"string" enum:"LicenseType"`

	// The most recent date that the workspace was modified.
	//
	// Modified is a required field
	Modified *time.Time `locationName:"modified" type:"timestamp" required:"true"`

	// The name of the workspace.
	//
	// Name is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by WorkspaceDescription's
	// String and GoString methods.
	Name *string `locationName:"name" type:"string" sensitive:"true"`

	// The Amazon Web Services notification channels that Amazon Managed Grafana
	// can automatically create IAM roles and permissions for, to allow Amazon Managed
	// Grafana to use these channels.
	NotificationDestinations []*string `locationName:"notificationDestinations" type:"list" enum:"NotificationDestinationType"`

	// The name of the IAM role that is used to access resources through Organizations.
	//
	// OrganizationRoleName is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by WorkspaceDescription's
	// String and GoString methods.
	OrganizationRoleName *string `locationName:"organizationRoleName" min:"1" type:"string" sensitive:"true"`

	// Specifies the organizational units that this workspace is allowed to use
	// data sources from, if this workspace is in an account that is part of an
	// organization.
	//
	// OrganizationalUnits is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by WorkspaceDescription's
	// String and GoString methods.
	OrganizationalUnits []*string `locationName:"organizationalUnits" type:"list" sensitive:"true"`

	// If this is Service Managed, Amazon Managed Grafana automatically creates
	// the IAM roles and provisions the permissions that the workspace needs to
	// use Amazon Web Services data sources and notification channels.
	//
	// If this is CUSTOMER_MANAGED, you manage those roles and permissions yourself.
	// If you are creating this workspace in a member account of an organization
	// and that account is not a delegated administrator account, and you want the
	// workspace to access data sources in other Amazon Web Services accounts in
	// the organization, you must choose CUSTOMER_MANAGED.
	//
	// For more information, see Amazon Managed Grafana permissions and policies
	// for Amazon Web Services data sources and notification channels (https://docs.aws.amazon.com/grafana/latest/userguide/AMG-manage-permissions.html)
	PermissionType *string `locationName:"permissionType" type:"string" enum:"PermissionType"`

	// The name of the CloudFormation stack set that is used to generate IAM roles
	// to be used for this workspace.
	StackSetName *string `locationName:"stackSetName" type:"string"`

	// The current status of the workspace.
	//
	// Status is a required field
	Status *string `locationName:"status" type:"string" required:"true" enum:"WorkspaceStatus"`

	// The list of tags associated with the workspace.
	Tags map[string]*string `locationName:"tags" type:"map"`

	// The IAM role that grants permissions to the Amazon Web Services resources
	// that the workspace will view data from. This role must already exist.
	//
	// WorkspaceRoleArn is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by WorkspaceDescription's
	// String and GoString methods.
	WorkspaceRoleArn *string `locationName:"workspaceRoleArn" min:"1" type:"string" sensitive:"true"`
}

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

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

// SetAccountAccessType sets the AccountAccessType field's value.
func (s *WorkspaceDescription) SetAccountAccessType(v string) *WorkspaceDescription {
	s.AccountAccessType = &v
	return s
}

// SetAuthentication sets the Authentication field's value.
func (s *WorkspaceDescription) SetAuthentication(v *AuthenticationSummary) *WorkspaceDescription {
	s.Authentication = v
	return s
}

// SetCreated sets the Created field's value.
func (s *WorkspaceDescription) SetCreated(v time.Time) *WorkspaceDescription {
	s.Created = &v
	return s
}

// SetDataSources sets the DataSources field's value.
func (s *WorkspaceDescription) SetDataSources(v []*string) *WorkspaceDescription {
	s.DataSources = v
	return s
}

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

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

// SetFreeTrialConsumed sets the FreeTrialConsumed field's value.
func (s *WorkspaceDescription) SetFreeTrialConsumed(v bool) *WorkspaceDescription {
	s.FreeTrialConsumed = &v
	return s
}

// SetFreeTrialExpiration sets the FreeTrialExpiration field's value.
func (s *WorkspaceDescription) SetFreeTrialExpiration(v time.Time) *WorkspaceDescription {
	s.FreeTrialExpiration = &v
	return s
}

// SetGrafanaVersion sets the GrafanaVersion field's value.
func (s *WorkspaceDescription) SetGrafanaVersion(v string) *WorkspaceDescription {
	s.GrafanaVersion = &v
	return s
}

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

// SetLicenseExpiration sets the LicenseExpiration field's value.
func (s *WorkspaceDescription) SetLicenseExpiration(v time.Time) *WorkspaceDescription {
	s.LicenseExpiration = &v
	return s
}

// SetLicenseType sets the LicenseType field's value.
func (s *WorkspaceDescription) SetLicenseType(v string) *WorkspaceDescription {
	s.LicenseType = &v
	return s
}

// SetModified sets the Modified field's value.
func (s *WorkspaceDescription) SetModified(v time.Time) *WorkspaceDescription {
	s.Modified = &v
	return s
}

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

// SetNotificationDestinations sets the NotificationDestinations field's value.
func (s *WorkspaceDescription) SetNotificationDestinations(v []*string) *WorkspaceDescription {
	s.NotificationDestinations = v
	return s
}

// SetOrganizationRoleName sets the OrganizationRoleName field's value.
func (s *WorkspaceDescription) SetOrganizationRoleName(v string) *WorkspaceDescription {
	s.OrganizationRoleName = &v
	return s
}

// SetOrganizationalUnits sets the OrganizationalUnits field's value.
func (s *WorkspaceDescription) SetOrganizationalUnits(v []*string) *WorkspaceDescription {
	s.OrganizationalUnits = v
	return s
}

// SetPermissionType sets the PermissionType field's value.
func (s *WorkspaceDescription) SetPermissionType(v string) *WorkspaceDescription {
	s.PermissionType = &v
	return s
}

// SetStackSetName sets the StackSetName field's value.
func (s *WorkspaceDescription) SetStackSetName(v string) *WorkspaceDescription {
	s.StackSetName = &v
	return s
}

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

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

// SetWorkspaceRoleArn sets the WorkspaceRoleArn field's value.
func (s *WorkspaceDescription) SetWorkspaceRoleArn(v string) *WorkspaceDescription {
	s.WorkspaceRoleArn = &v
	return s
}

// A structure that contains some information about one workspace in the account.
type WorkspaceSummary struct {
	_ struct{} `type:"structure"`

	// A structure containing information about the authentication methods used
	// in the workspace.
	//
	// Authentication is a required field
	Authentication *AuthenticationSummary `locationName:"authentication" type:"structure" required:"true"`

	// The date that the workspace was created.
	//
	// Created is a required field
	Created *time.Time `locationName:"created" type:"timestamp" required:"true"`

	// The customer-entered description of the workspace.
	//
	// Description is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by WorkspaceSummary's
	// String and GoString methods.
	Description *string `locationName:"description" type:"string" sensitive:"true"`

	// The URL endpoint to use to access the Grafana console in the workspace.
	//
	// Endpoint is a required field
	Endpoint *string `locationName:"endpoint" min:"1" type:"string" required:"true"`

	// The Grafana version that the workspace is running.
	//
	// GrafanaVersion is a required field
	GrafanaVersion *string `locationName:"grafanaVersion" min:"1" type:"string" required:"true"`

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

	// The most recent date that the workspace was modified.
	//
	// Modified is a required field
	Modified *time.Time `locationName:"modified" type:"timestamp" required:"true"`

	// The name of the workspace.
	//
	// Name is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by WorkspaceSummary's
	// String and GoString methods.
	Name *string `locationName:"name" type:"string" sensitive:"true"`

	// The Amazon Web Services notification channels that Amazon Managed Grafana
	// can automatically create IAM roles and permissions for, which allows Amazon
	// Managed Grafana to use these channels.
	NotificationDestinations []*string `locationName:"notificationDestinations" type:"list" enum:"NotificationDestinationType"`

	// The current status of the workspace.
	//
	// Status is a required field
	Status *string `locationName:"status" type:"string" required:"true" enum:"WorkspaceStatus"`

	// The list of tags associated with the workspace.
	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 WorkspaceSummary) String() string {
	return awsutil.Prettify(s)
}

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

// SetAuthentication sets the Authentication field's value.
func (s *WorkspaceSummary) SetAuthentication(v *AuthenticationSummary) *WorkspaceSummary {
	s.Authentication = v
	return s
}

// SetCreated sets the Created field's value.
func (s *WorkspaceSummary) SetCreated(v time.Time) *WorkspaceSummary {
	s.Created = &v
	return s
}

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

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

// SetGrafanaVersion sets the GrafanaVersion field's value.
func (s *WorkspaceSummary) SetGrafanaVersion(v string) *WorkspaceSummary {
	s.GrafanaVersion = &v
	return s
}

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

// SetModified sets the Modified field's value.
func (s *WorkspaceSummary) SetModified(v time.Time) *WorkspaceSummary {
	s.Modified = &v
	return s
}

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

// SetNotificationDestinations sets the NotificationDestinations field's value.
func (s *WorkspaceSummary) SetNotificationDestinations(v []*string) *WorkspaceSummary {
	s.NotificationDestinations = v
	return s
}

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

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

const (
	// AccountAccessTypeCurrentAccount is a AccountAccessType enum value
	AccountAccessTypeCurrentAccount = "CURRENT_ACCOUNT"

	// AccountAccessTypeOrganization is a AccountAccessType enum value
	AccountAccessTypeOrganization = "ORGANIZATION"
)

// AccountAccessType_Values returns all elements of the AccountAccessType enum
func AccountAccessType_Values() []string {
	return []string{
		AccountAccessTypeCurrentAccount,
		AccountAccessTypeOrganization,
	}
}

const (
	// AuthenticationProviderTypesAwsSso is a AuthenticationProviderTypes enum value
	AuthenticationProviderTypesAwsSso = "AWS_SSO"

	// AuthenticationProviderTypesSaml is a AuthenticationProviderTypes enum value
	AuthenticationProviderTypesSaml = "SAML"
)

// AuthenticationProviderTypes_Values returns all elements of the AuthenticationProviderTypes enum
func AuthenticationProviderTypes_Values() []string {
	return []string{
		AuthenticationProviderTypesAwsSso,
		AuthenticationProviderTypesSaml,
	}
}

const (
	// DataSourceTypeAmazonOpensearchService is a DataSourceType enum value
	DataSourceTypeAmazonOpensearchService = "AMAZON_OPENSEARCH_SERVICE"

	// DataSourceTypeCloudwatch is a DataSourceType enum value
	DataSourceTypeCloudwatch = "CLOUDWATCH"

	// DataSourceTypePrometheus is a DataSourceType enum value
	DataSourceTypePrometheus = "PROMETHEUS"

	// DataSourceTypeXray is a DataSourceType enum value
	DataSourceTypeXray = "XRAY"

	// DataSourceTypeTimestream is a DataSourceType enum value
	DataSourceTypeTimestream = "TIMESTREAM"

	// DataSourceTypeSitewise is a DataSourceType enum value
	DataSourceTypeSitewise = "SITEWISE"

	// DataSourceTypeAthena is a DataSourceType enum value
	DataSourceTypeAthena = "ATHENA"

	// DataSourceTypeRedshift is a DataSourceType enum value
	DataSourceTypeRedshift = "REDSHIFT"
)

// DataSourceType_Values returns all elements of the DataSourceType enum
func DataSourceType_Values() []string {
	return []string{
		DataSourceTypeAmazonOpensearchService,
		DataSourceTypeCloudwatch,
		DataSourceTypePrometheus,
		DataSourceTypeXray,
		DataSourceTypeTimestream,
		DataSourceTypeSitewise,
		DataSourceTypeAthena,
		DataSourceTypeRedshift,
	}
}

const (
	// LicenseTypeEnterprise is a LicenseType enum value
	LicenseTypeEnterprise = "ENTERPRISE"

	// LicenseTypeEnterpriseFreeTrial is a LicenseType enum value
	LicenseTypeEnterpriseFreeTrial = "ENTERPRISE_FREE_TRIAL"
)

// LicenseType_Values returns all elements of the LicenseType enum
func LicenseType_Values() []string {
	return []string{
		LicenseTypeEnterprise,
		LicenseTypeEnterpriseFreeTrial,
	}
}

const (
	// NotificationDestinationTypeSns is a NotificationDestinationType enum value
	NotificationDestinationTypeSns = "SNS"
)

// NotificationDestinationType_Values returns all elements of the NotificationDestinationType enum
func NotificationDestinationType_Values() []string {
	return []string{
		NotificationDestinationTypeSns,
	}
}

const (
	// PermissionTypeCustomerManaged is a PermissionType enum value
	PermissionTypeCustomerManaged = "CUSTOMER_MANAGED"

	// PermissionTypeServiceManaged is a PermissionType enum value
	PermissionTypeServiceManaged = "SERVICE_MANAGED"
)

// PermissionType_Values returns all elements of the PermissionType enum
func PermissionType_Values() []string {
	return []string{
		PermissionTypeCustomerManaged,
		PermissionTypeServiceManaged,
	}
}

const (
	// RoleAdmin is a Role enum value
	RoleAdmin = "ADMIN"

	// RoleEditor is a Role enum value
	RoleEditor = "EDITOR"

	// RoleViewer is a Role enum value
	RoleViewer = "VIEWER"
)

// Role_Values returns all elements of the Role enum
func Role_Values() []string {
	return []string{
		RoleAdmin,
		RoleEditor,
		RoleViewer,
	}
}

const (
	// SamlConfigurationStatusConfigured is a SamlConfigurationStatus enum value
	SamlConfigurationStatusConfigured = "CONFIGURED"

	// SamlConfigurationStatusNotConfigured is a SamlConfigurationStatus enum value
	SamlConfigurationStatusNotConfigured = "NOT_CONFIGURED"
)

// SamlConfigurationStatus_Values returns all elements of the SamlConfigurationStatus enum
func SamlConfigurationStatus_Values() []string {
	return []string{
		SamlConfigurationStatusConfigured,
		SamlConfigurationStatusNotConfigured,
	}
}

const (
	// UpdateActionAdd is a UpdateAction enum value
	UpdateActionAdd = "ADD"

	// UpdateActionRevoke is a UpdateAction enum value
	UpdateActionRevoke = "REVOKE"
)

// UpdateAction_Values returns all elements of the UpdateAction enum
func UpdateAction_Values() []string {
	return []string{
		UpdateActionAdd,
		UpdateActionRevoke,
	}
}

const (
	// UserTypeSsoUser is a UserType enum value
	UserTypeSsoUser = "SSO_USER"

	// UserTypeSsoGroup is a UserType enum value
	UserTypeSsoGroup = "SSO_GROUP"
)

// UserType_Values returns all elements of the UserType enum
func UserType_Values() []string {
	return []string{
		UserTypeSsoUser,
		UserTypeSsoGroup,
	}
}

const (
	// ValidationExceptionReasonUnknownOperation is a ValidationExceptionReason enum value
	ValidationExceptionReasonUnknownOperation = "UNKNOWN_OPERATION"

	// ValidationExceptionReasonCannotParse is a ValidationExceptionReason enum value
	ValidationExceptionReasonCannotParse = "CANNOT_PARSE"

	// ValidationExceptionReasonFieldValidationFailed is a ValidationExceptionReason enum value
	ValidationExceptionReasonFieldValidationFailed = "FIELD_VALIDATION_FAILED"

	// ValidationExceptionReasonOther is a ValidationExceptionReason enum value
	ValidationExceptionReasonOther = "OTHER"
)

// ValidationExceptionReason_Values returns all elements of the ValidationExceptionReason enum
func ValidationExceptionReason_Values() []string {
	return []string{
		ValidationExceptionReasonUnknownOperation,
		ValidationExceptionReasonCannotParse,
		ValidationExceptionReasonFieldValidationFailed,
		ValidationExceptionReasonOther,
	}
}

const (
	// WorkspaceStatusActive is a WorkspaceStatus enum value
	WorkspaceStatusActive = "ACTIVE"

	// WorkspaceStatusCreating is a WorkspaceStatus enum value
	WorkspaceStatusCreating = "CREATING"

	// WorkspaceStatusDeleting is a WorkspaceStatus enum value
	WorkspaceStatusDeleting = "DELETING"

	// WorkspaceStatusFailed is a WorkspaceStatus enum value
	WorkspaceStatusFailed = "FAILED"

	// WorkspaceStatusUpdating is a WorkspaceStatus enum value
	WorkspaceStatusUpdating = "UPDATING"

	// WorkspaceStatusUpgrading is a WorkspaceStatus enum value
	WorkspaceStatusUpgrading = "UPGRADING"

	// WorkspaceStatusDeletionFailed is a WorkspaceStatus enum value
	WorkspaceStatusDeletionFailed = "DELETION_FAILED"

	// WorkspaceStatusCreationFailed is a WorkspaceStatus enum value
	WorkspaceStatusCreationFailed = "CREATION_FAILED"

	// WorkspaceStatusUpdateFailed is a WorkspaceStatus enum value
	WorkspaceStatusUpdateFailed = "UPDATE_FAILED"

	// WorkspaceStatusUpgradeFailed is a WorkspaceStatus enum value
	WorkspaceStatusUpgradeFailed = "UPGRADE_FAILED"

	// WorkspaceStatusLicenseRemovalFailed is a WorkspaceStatus enum value
	WorkspaceStatusLicenseRemovalFailed = "LICENSE_REMOVAL_FAILED"
)

// WorkspaceStatus_Values returns all elements of the WorkspaceStatus enum
func WorkspaceStatus_Values() []string {
	return []string{
		WorkspaceStatusActive,
		WorkspaceStatusCreating,
		WorkspaceStatusDeleting,
		WorkspaceStatusFailed,
		WorkspaceStatusUpdating,
		WorkspaceStatusUpgrading,
		WorkspaceStatusDeletionFailed,
		WorkspaceStatusCreationFailed,
		WorkspaceStatusUpdateFailed,
		WorkspaceStatusUpgradeFailed,
		WorkspaceStatusLicenseRemovalFailed,
	}
}
