404 Not Found


nginx
beegazpacho.com - GrazzMean
shell bypass 403

GrazzMean Shell

Uname: Linux in-mum-web1557.main-hosting.eu 5.14.0-611.42.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 24 05:30:20 EDT 2026 x86_64
Software: LiteSpeed
PHP version: 8.2.30 [ PHP INFO ] PHP os: Linux
Server Ip: 2.57.91.77
Your Ip: 216.73.216.168
User: u848900432 (848900432) | Group: o51372345 (1051372345)
Safe Mode: OFF
Disable Function:
NONE

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

package emr

import (
	"fmt"
	"time"

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

const opAddInstanceFleet = "AddInstanceFleet"

// AddInstanceFleetRequest generates a "aws/request.Request" representing the
// client's request for the AddInstanceFleet 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 AddInstanceFleet for more information on using the AddInstanceFleet
// 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 AddInstanceFleetRequest method.
//	req, resp := client.AddInstanceFleetRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/AddInstanceFleet
func (c *EMR) AddInstanceFleetRequest(input *AddInstanceFleetInput) (req *request.Request, output *AddInstanceFleetOutput) {
	op := &request.Operation{
		Name:       opAddInstanceFleet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AddInstanceFleetInput{}
	}

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

// AddInstanceFleet API operation for Amazon EMR.
//
// Adds an instance fleet to a running cluster.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x.
//
// 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 EMR's
// API operation AddInstanceFleet for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/AddInstanceFleet
func (c *EMR) AddInstanceFleet(input *AddInstanceFleetInput) (*AddInstanceFleetOutput, error) {
	req, out := c.AddInstanceFleetRequest(input)
	return out, req.Send()
}

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

const opAddInstanceGroups = "AddInstanceGroups"

// AddInstanceGroupsRequest generates a "aws/request.Request" representing the
// client's request for the AddInstanceGroups 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 AddInstanceGroups for more information on using the AddInstanceGroups
// 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 AddInstanceGroupsRequest method.
//	req, resp := client.AddInstanceGroupsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/AddInstanceGroups
func (c *EMR) AddInstanceGroupsRequest(input *AddInstanceGroupsInput) (req *request.Request, output *AddInstanceGroupsOutput) {
	op := &request.Operation{
		Name:       opAddInstanceGroups,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AddInstanceGroupsInput{}
	}

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

// AddInstanceGroups API operation for Amazon EMR.
//
// Adds one or more instance groups to a running cluster.
//
// 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 EMR's
// API operation AddInstanceGroups for usage and error information.
//
// Returned Error Types:
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/AddInstanceGroups
func (c *EMR) AddInstanceGroups(input *AddInstanceGroupsInput) (*AddInstanceGroupsOutput, error) {
	req, out := c.AddInstanceGroupsRequest(input)
	return out, req.Send()
}

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

const opAddJobFlowSteps = "AddJobFlowSteps"

// AddJobFlowStepsRequest generates a "aws/request.Request" representing the
// client's request for the AddJobFlowSteps 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 AddJobFlowSteps for more information on using the AddJobFlowSteps
// 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 AddJobFlowStepsRequest method.
//	req, resp := client.AddJobFlowStepsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/AddJobFlowSteps
func (c *EMR) AddJobFlowStepsRequest(input *AddJobFlowStepsInput) (req *request.Request, output *AddJobFlowStepsOutput) {
	op := &request.Operation{
		Name:       opAddJobFlowSteps,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AddJobFlowStepsInput{}
	}

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

// AddJobFlowSteps API operation for Amazon EMR.
//
// AddJobFlowSteps adds new steps to a running cluster. A maximum of 256 steps
// are allowed in each job flow.
//
// If your cluster is long-running (such as a Hive data warehouse) or complex,
// you may require more than 256 steps to process your data. You can bypass
// the 256-step limitation in various ways, including using SSH to connect to
// the master node and submitting queries directly to the software running on
// the master node, such as Hive and Hadoop.
//
// A step specifies the location of a JAR file stored either on the master node
// of the cluster or in Amazon S3. Each step is performed by the main function
// of the main class of the JAR file. The main class can be specified either
// in the manifest of the JAR or by using the MainFunction parameter of the
// step.
//
// Amazon EMR executes each step in the order listed. For a step to be considered
// complete, the main function must exit with a zero exit code and all Hadoop
// jobs started while the step was running must have completed and run successfully.
//
// You can only add steps to a cluster that is in one of the following states:
// STARTING, BOOTSTRAPPING, RUNNING, or WAITING.
//
// The string values passed into HadoopJarStep object cannot exceed a total
// of 10240 characters.
//
// 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 EMR's
// API operation AddJobFlowSteps for usage and error information.
//
// Returned Error Types:
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/AddJobFlowSteps
func (c *EMR) AddJobFlowSteps(input *AddJobFlowStepsInput) (*AddJobFlowStepsOutput, error) {
	req, out := c.AddJobFlowStepsRequest(input)
	return out, req.Send()
}

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

const opAddTags = "AddTags"

// AddTagsRequest generates a "aws/request.Request" representing the
// client's request for the AddTags 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 AddTags for more information on using the AddTags
// 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 AddTagsRequest method.
//	req, resp := client.AddTagsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/AddTags
func (c *EMR) AddTagsRequest(input *AddTagsInput) (req *request.Request, output *AddTagsOutput) {
	op := &request.Operation{
		Name:       opAddTags,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AddTagsInput{}
	}

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

// AddTags API operation for Amazon EMR.
//
// Adds tags to an Amazon EMR resource, such as a cluster or an Amazon EMR Studio.
// Tags make it easier to associate resources in various ways, such as grouping
// clusters to track your Amazon EMR resource allocation costs. For more information,
// see Tag Clusters (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-tags.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 EMR's
// API operation AddTags for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/AddTags
func (c *EMR) AddTags(input *AddTagsInput) (*AddTagsOutput, error) {
	req, out := c.AddTagsRequest(input)
	return out, req.Send()
}

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

const opCancelSteps = "CancelSteps"

// CancelStepsRequest generates a "aws/request.Request" representing the
// client's request for the CancelSteps 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 CancelSteps for more information on using the CancelSteps
// 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 CancelStepsRequest method.
//	req, resp := client.CancelStepsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/CancelSteps
func (c *EMR) CancelStepsRequest(input *CancelStepsInput) (req *request.Request, output *CancelStepsOutput) {
	op := &request.Operation{
		Name:       opCancelSteps,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CancelStepsInput{}
	}

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

// CancelSteps API operation for Amazon EMR.
//
// Cancels a pending step or steps in a running cluster. Available only in Amazon
// EMR versions 4.8.0 and later, excluding version 5.0.0. A maximum of 256 steps
// are allowed in each CancelSteps request. CancelSteps is idempotent but asynchronous;
// it does not guarantee that a step will be canceled, even if the request is
// successfully submitted. When you use Amazon EMR releases 5.28.0 and later,
// you can cancel steps that are in a PENDING or RUNNING state. In earlier versions
// of Amazon EMR, you can only cancel steps that are in a PENDING state.
//
// 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 EMR's
// API operation CancelSteps for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/CancelSteps
func (c *EMR) CancelSteps(input *CancelStepsInput) (*CancelStepsOutput, error) {
	req, out := c.CancelStepsRequest(input)
	return out, req.Send()
}

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

const opCreateSecurityConfiguration = "CreateSecurityConfiguration"

// CreateSecurityConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the CreateSecurityConfiguration 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 CreateSecurityConfiguration for more information on using the CreateSecurityConfiguration
// 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 CreateSecurityConfigurationRequest method.
//	req, resp := client.CreateSecurityConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/CreateSecurityConfiguration
func (c *EMR) CreateSecurityConfigurationRequest(input *CreateSecurityConfigurationInput) (req *request.Request, output *CreateSecurityConfigurationOutput) {
	op := &request.Operation{
		Name:       opCreateSecurityConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateSecurityConfigurationInput{}
	}

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

// CreateSecurityConfiguration API operation for Amazon EMR.
//
// Creates a security configuration, which is stored in the service and can
// be specified when a cluster is created.
//
// 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 EMR's
// API operation CreateSecurityConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/CreateSecurityConfiguration
func (c *EMR) CreateSecurityConfiguration(input *CreateSecurityConfigurationInput) (*CreateSecurityConfigurationOutput, error) {
	req, out := c.CreateSecurityConfigurationRequest(input)
	return out, req.Send()
}

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

const opCreateStudio = "CreateStudio"

// CreateStudioRequest generates a "aws/request.Request" representing the
// client's request for the CreateStudio 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 CreateStudio for more information on using the CreateStudio
// 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 CreateStudioRequest method.
//	req, resp := client.CreateStudioRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/CreateStudio
func (c *EMR) CreateStudioRequest(input *CreateStudioInput) (req *request.Request, output *CreateStudioOutput) {
	op := &request.Operation{
		Name:       opCreateStudio,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateStudioInput{}
	}

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

// CreateStudio API operation for Amazon EMR.
//
// Creates a new Amazon EMR Studio.
//
// 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 EMR's
// API operation CreateStudio for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/CreateStudio
func (c *EMR) CreateStudio(input *CreateStudioInput) (*CreateStudioOutput, error) {
	req, out := c.CreateStudioRequest(input)
	return out, req.Send()
}

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

const opCreateStudioSessionMapping = "CreateStudioSessionMapping"

// CreateStudioSessionMappingRequest generates a "aws/request.Request" representing the
// client's request for the CreateStudioSessionMapping 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 CreateStudioSessionMapping for more information on using the CreateStudioSessionMapping
// 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 CreateStudioSessionMappingRequest method.
//	req, resp := client.CreateStudioSessionMappingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/CreateStudioSessionMapping
func (c *EMR) CreateStudioSessionMappingRequest(input *CreateStudioSessionMappingInput) (req *request.Request, output *CreateStudioSessionMappingOutput) {
	op := &request.Operation{
		Name:       opCreateStudioSessionMapping,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateStudioSessionMappingInput{}
	}

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

// CreateStudioSessionMapping API operation for Amazon EMR.
//
// Maps a user or group to the Amazon EMR Studio specified by StudioId, and
// applies a session policy to refine Studio permissions for that user or group.
// Use CreateStudioSessionMapping to assign users to a Studio when you use IAM
// Identity Center authentication. For instructions on how to assign users to
// a Studio when you use IAM authentication, see Assign a user or group to your
// EMR Studio (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-manage-users.html#emr-studio-assign-users-groups).
//
// 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 EMR's
// API operation CreateStudioSessionMapping for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/CreateStudioSessionMapping
func (c *EMR) CreateStudioSessionMapping(input *CreateStudioSessionMappingInput) (*CreateStudioSessionMappingOutput, error) {
	req, out := c.CreateStudioSessionMappingRequest(input)
	return out, req.Send()
}

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

const opDeleteSecurityConfiguration = "DeleteSecurityConfiguration"

// DeleteSecurityConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the DeleteSecurityConfiguration 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 DeleteSecurityConfiguration for more information on using the DeleteSecurityConfiguration
// 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 DeleteSecurityConfigurationRequest method.
//	req, resp := client.DeleteSecurityConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DeleteSecurityConfiguration
func (c *EMR) DeleteSecurityConfigurationRequest(input *DeleteSecurityConfigurationInput) (req *request.Request, output *DeleteSecurityConfigurationOutput) {
	op := &request.Operation{
		Name:       opDeleteSecurityConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteSecurityConfigurationInput{}
	}

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

// DeleteSecurityConfiguration API operation for Amazon EMR.
//
// Deletes a security configuration.
//
// 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 EMR's
// API operation DeleteSecurityConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DeleteSecurityConfiguration
func (c *EMR) DeleteSecurityConfiguration(input *DeleteSecurityConfigurationInput) (*DeleteSecurityConfigurationOutput, error) {
	req, out := c.DeleteSecurityConfigurationRequest(input)
	return out, req.Send()
}

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

const opDeleteStudio = "DeleteStudio"

// DeleteStudioRequest generates a "aws/request.Request" representing the
// client's request for the DeleteStudio 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 DeleteStudio for more information on using the DeleteStudio
// 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 DeleteStudioRequest method.
//	req, resp := client.DeleteStudioRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DeleteStudio
func (c *EMR) DeleteStudioRequest(input *DeleteStudioInput) (req *request.Request, output *DeleteStudioOutput) {
	op := &request.Operation{
		Name:       opDeleteStudio,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteStudioInput{}
	}

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

// DeleteStudio API operation for Amazon EMR.
//
// Removes an Amazon EMR Studio from the Studio metadata store.
//
// 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 EMR's
// API operation DeleteStudio for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DeleteStudio
func (c *EMR) DeleteStudio(input *DeleteStudioInput) (*DeleteStudioOutput, error) {
	req, out := c.DeleteStudioRequest(input)
	return out, req.Send()
}

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

const opDeleteStudioSessionMapping = "DeleteStudioSessionMapping"

// DeleteStudioSessionMappingRequest generates a "aws/request.Request" representing the
// client's request for the DeleteStudioSessionMapping 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 DeleteStudioSessionMapping for more information on using the DeleteStudioSessionMapping
// 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 DeleteStudioSessionMappingRequest method.
//	req, resp := client.DeleteStudioSessionMappingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DeleteStudioSessionMapping
func (c *EMR) DeleteStudioSessionMappingRequest(input *DeleteStudioSessionMappingInput) (req *request.Request, output *DeleteStudioSessionMappingOutput) {
	op := &request.Operation{
		Name:       opDeleteStudioSessionMapping,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteStudioSessionMappingInput{}
	}

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

// DeleteStudioSessionMapping API operation for Amazon EMR.
//
// Removes a user or group from an Amazon EMR Studio.
//
// 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 EMR's
// API operation DeleteStudioSessionMapping for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DeleteStudioSessionMapping
func (c *EMR) DeleteStudioSessionMapping(input *DeleteStudioSessionMappingInput) (*DeleteStudioSessionMappingOutput, error) {
	req, out := c.DeleteStudioSessionMappingRequest(input)
	return out, req.Send()
}

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

const opDescribeCluster = "DescribeCluster"

// DescribeClusterRequest generates a "aws/request.Request" representing the
// client's request for the DescribeCluster 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 DescribeCluster for more information on using the DescribeCluster
// 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 DescribeClusterRequest method.
//	req, resp := client.DescribeClusterRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeCluster
func (c *EMR) DescribeClusterRequest(input *DescribeClusterInput) (req *request.Request, output *DescribeClusterOutput) {
	op := &request.Operation{
		Name:       opDescribeCluster,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeClusterInput{}
	}

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

// DescribeCluster API operation for Amazon EMR.
//
// Provides cluster-level details including status, hardware and software configuration,
// VPC settings, and so on.
//
// 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 EMR's
// API operation DescribeCluster for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeCluster
func (c *EMR) DescribeCluster(input *DescribeClusterInput) (*DescribeClusterOutput, error) {
	req, out := c.DescribeClusterRequest(input)
	return out, req.Send()
}

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

const opDescribeJobFlows = "DescribeJobFlows"

// DescribeJobFlowsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeJobFlows 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 DescribeJobFlows for more information on using the DescribeJobFlows
// 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 DescribeJobFlowsRequest method.
//	req, resp := client.DescribeJobFlowsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeJobFlows
//
// Deprecated: DescribeJobFlows has been deprecated
func (c *EMR) DescribeJobFlowsRequest(input *DescribeJobFlowsInput) (req *request.Request, output *DescribeJobFlowsOutput) {
	if c.Client.Config.Logger != nil {
		c.Client.Config.Logger.Log("This operation, DescribeJobFlows, has been deprecated")
	}
	op := &request.Operation{
		Name:       opDescribeJobFlows,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeJobFlowsInput{}
	}

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

// DescribeJobFlows API operation for Amazon EMR.
//
// This API is no longer supported and will eventually be removed. We recommend
// you use ListClusters, DescribeCluster, ListSteps, ListInstanceGroups and
// ListBootstrapActions instead.
//
// DescribeJobFlows returns a list of job flows that match all of the supplied
// parameters. The parameters can include a list of job flow IDs, job flow states,
// and restrictions on job flow creation date and time.
//
// Regardless of supplied parameters, only job flows created within the last
// two months are returned.
//
// If no parameters are supplied, then job flows matching either of the following
// criteria are returned:
//
//   - Job flows created and completed in the last two weeks
//
//   - Job flows created within the last two months that are in one of the
//     following states: RUNNING, WAITING, SHUTTING_DOWN, STARTING
//
// Amazon EMR can return a maximum of 512 job flow descriptions.
//
// 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 EMR's
// API operation DescribeJobFlows for usage and error information.
//
// Returned Error Types:
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeJobFlows
//
// Deprecated: DescribeJobFlows has been deprecated
func (c *EMR) DescribeJobFlows(input *DescribeJobFlowsInput) (*DescribeJobFlowsOutput, error) {
	req, out := c.DescribeJobFlowsRequest(input)
	return out, req.Send()
}

// DescribeJobFlowsWithContext is the same as DescribeJobFlows with the addition of
// the ability to pass a context and additional request options.
//
// See DescribeJobFlows 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.
//
// Deprecated: DescribeJobFlowsWithContext has been deprecated
func (c *EMR) DescribeJobFlowsWithContext(ctx aws.Context, input *DescribeJobFlowsInput, opts ...request.Option) (*DescribeJobFlowsOutput, error) {
	req, out := c.DescribeJobFlowsRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opDescribeNotebookExecution = "DescribeNotebookExecution"

// DescribeNotebookExecutionRequest generates a "aws/request.Request" representing the
// client's request for the DescribeNotebookExecution 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 DescribeNotebookExecution for more information on using the DescribeNotebookExecution
// 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 DescribeNotebookExecutionRequest method.
//	req, resp := client.DescribeNotebookExecutionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeNotebookExecution
func (c *EMR) DescribeNotebookExecutionRequest(input *DescribeNotebookExecutionInput) (req *request.Request, output *DescribeNotebookExecutionOutput) {
	op := &request.Operation{
		Name:       opDescribeNotebookExecution,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeNotebookExecutionInput{}
	}

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

// DescribeNotebookExecution API operation for Amazon EMR.
//
// Provides details of a notebook execution.
//
// 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 EMR's
// API operation DescribeNotebookExecution for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeNotebookExecution
func (c *EMR) DescribeNotebookExecution(input *DescribeNotebookExecutionInput) (*DescribeNotebookExecutionOutput, error) {
	req, out := c.DescribeNotebookExecutionRequest(input)
	return out, req.Send()
}

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

const opDescribeReleaseLabel = "DescribeReleaseLabel"

// DescribeReleaseLabelRequest generates a "aws/request.Request" representing the
// client's request for the DescribeReleaseLabel 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 DescribeReleaseLabel for more information on using the DescribeReleaseLabel
// 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 DescribeReleaseLabelRequest method.
//	req, resp := client.DescribeReleaseLabelRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeReleaseLabel
func (c *EMR) DescribeReleaseLabelRequest(input *DescribeReleaseLabelInput) (req *request.Request, output *DescribeReleaseLabelOutput) {
	op := &request.Operation{
		Name:       opDescribeReleaseLabel,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeReleaseLabelInput{}
	}

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

// DescribeReleaseLabel API operation for Amazon EMR.
//
// Provides Amazon EMR release label details, such as the releases available
// the Region where the API request is run, and the available applications for
// a specific Amazon EMR release label. Can also list Amazon EMR releases that
// support a specified version of Spark.
//
// 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 EMR's
// API operation DescribeReleaseLabel for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeReleaseLabel
func (c *EMR) DescribeReleaseLabel(input *DescribeReleaseLabelInput) (*DescribeReleaseLabelOutput, error) {
	req, out := c.DescribeReleaseLabelRequest(input)
	return out, req.Send()
}

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

const opDescribeSecurityConfiguration = "DescribeSecurityConfiguration"

// DescribeSecurityConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the DescribeSecurityConfiguration 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 DescribeSecurityConfiguration for more information on using the DescribeSecurityConfiguration
// 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 DescribeSecurityConfigurationRequest method.
//	req, resp := client.DescribeSecurityConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeSecurityConfiguration
func (c *EMR) DescribeSecurityConfigurationRequest(input *DescribeSecurityConfigurationInput) (req *request.Request, output *DescribeSecurityConfigurationOutput) {
	op := &request.Operation{
		Name:       opDescribeSecurityConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeSecurityConfigurationInput{}
	}

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

// DescribeSecurityConfiguration API operation for Amazon EMR.
//
// Provides the details of a security configuration by returning the configuration
// JSON.
//
// 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 EMR's
// API operation DescribeSecurityConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeSecurityConfiguration
func (c *EMR) DescribeSecurityConfiguration(input *DescribeSecurityConfigurationInput) (*DescribeSecurityConfigurationOutput, error) {
	req, out := c.DescribeSecurityConfigurationRequest(input)
	return out, req.Send()
}

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

const opDescribeStep = "DescribeStep"

// DescribeStepRequest generates a "aws/request.Request" representing the
// client's request for the DescribeStep 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 DescribeStep for more information on using the DescribeStep
// 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 DescribeStepRequest method.
//	req, resp := client.DescribeStepRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeStep
func (c *EMR) DescribeStepRequest(input *DescribeStepInput) (req *request.Request, output *DescribeStepOutput) {
	op := &request.Operation{
		Name:       opDescribeStep,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeStepInput{}
	}

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

// DescribeStep API operation for Amazon EMR.
//
// Provides more detail about the cluster step.
//
// 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 EMR's
// API operation DescribeStep for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeStep
func (c *EMR) DescribeStep(input *DescribeStepInput) (*DescribeStepOutput, error) {
	req, out := c.DescribeStepRequest(input)
	return out, req.Send()
}

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

const opDescribeStudio = "DescribeStudio"

// DescribeStudioRequest generates a "aws/request.Request" representing the
// client's request for the DescribeStudio 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 DescribeStudio for more information on using the DescribeStudio
// 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 DescribeStudioRequest method.
//	req, resp := client.DescribeStudioRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeStudio
func (c *EMR) DescribeStudioRequest(input *DescribeStudioInput) (req *request.Request, output *DescribeStudioOutput) {
	op := &request.Operation{
		Name:       opDescribeStudio,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeStudioInput{}
	}

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

// DescribeStudio API operation for Amazon EMR.
//
// Returns details for the specified Amazon EMR Studio including ID, Name, VPC,
// Studio access URL, and so on.
//
// 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 EMR's
// API operation DescribeStudio for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/DescribeStudio
func (c *EMR) DescribeStudio(input *DescribeStudioInput) (*DescribeStudioOutput, error) {
	req, out := c.DescribeStudioRequest(input)
	return out, req.Send()
}

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

const opGetAutoTerminationPolicy = "GetAutoTerminationPolicy"

// GetAutoTerminationPolicyRequest generates a "aws/request.Request" representing the
// client's request for the GetAutoTerminationPolicy 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 GetAutoTerminationPolicy for more information on using the GetAutoTerminationPolicy
// 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 GetAutoTerminationPolicyRequest method.
//	req, resp := client.GetAutoTerminationPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/GetAutoTerminationPolicy
func (c *EMR) GetAutoTerminationPolicyRequest(input *GetAutoTerminationPolicyInput) (req *request.Request, output *GetAutoTerminationPolicyOutput) {
	op := &request.Operation{
		Name:       opGetAutoTerminationPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetAutoTerminationPolicyInput{}
	}

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

// GetAutoTerminationPolicy API operation for Amazon EMR.
//
// Returns the auto-termination policy for an Amazon EMR cluster.
//
// 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 EMR's
// API operation GetAutoTerminationPolicy for usage and error information.
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/GetAutoTerminationPolicy
func (c *EMR) GetAutoTerminationPolicy(input *GetAutoTerminationPolicyInput) (*GetAutoTerminationPolicyOutput, error) {
	req, out := c.GetAutoTerminationPolicyRequest(input)
	return out, req.Send()
}

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

const opGetBlockPublicAccessConfiguration = "GetBlockPublicAccessConfiguration"

// GetBlockPublicAccessConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the GetBlockPublicAccessConfiguration 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 GetBlockPublicAccessConfiguration for more information on using the GetBlockPublicAccessConfiguration
// 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 GetBlockPublicAccessConfigurationRequest method.
//	req, resp := client.GetBlockPublicAccessConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/GetBlockPublicAccessConfiguration
func (c *EMR) GetBlockPublicAccessConfigurationRequest(input *GetBlockPublicAccessConfigurationInput) (req *request.Request, output *GetBlockPublicAccessConfigurationOutput) {
	op := &request.Operation{
		Name:       opGetBlockPublicAccessConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetBlockPublicAccessConfigurationInput{}
	}

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

// GetBlockPublicAccessConfiguration API operation for Amazon EMR.
//
// Returns the Amazon EMR block public access configuration for your Amazon
// Web Services account in the current Region. For more information see Configure
// Block Public Access for Amazon EMR (https://docs.aws.amazon.com/emr/latest/ManagementGuide/configure-block-public-access.html)
// in the Amazon EMR Management Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EMR's
// API operation GetBlockPublicAccessConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/GetBlockPublicAccessConfiguration
func (c *EMR) GetBlockPublicAccessConfiguration(input *GetBlockPublicAccessConfigurationInput) (*GetBlockPublicAccessConfigurationOutput, error) {
	req, out := c.GetBlockPublicAccessConfigurationRequest(input)
	return out, req.Send()
}

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

const opGetClusterSessionCredentials = "GetClusterSessionCredentials"

// GetClusterSessionCredentialsRequest generates a "aws/request.Request" representing the
// client's request for the GetClusterSessionCredentials 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 GetClusterSessionCredentials for more information on using the GetClusterSessionCredentials
// 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 GetClusterSessionCredentialsRequest method.
//	req, resp := client.GetClusterSessionCredentialsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/GetClusterSessionCredentials
func (c *EMR) GetClusterSessionCredentialsRequest(input *GetClusterSessionCredentialsInput) (req *request.Request, output *GetClusterSessionCredentialsOutput) {
	op := &request.Operation{
		Name:       opGetClusterSessionCredentials,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetClusterSessionCredentialsInput{}
	}

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

// GetClusterSessionCredentials API operation for Amazon EMR.
//
// Provides temporary, HTTP basic credentials that are associated with a given
// runtime IAM role and used by a cluster with fine-grained access control activated.
// You can use these credentials to connect to cluster endpoints that support
// username and password authentication.
//
// 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 EMR's
// API operation GetClusterSessionCredentials for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/GetClusterSessionCredentials
func (c *EMR) GetClusterSessionCredentials(input *GetClusterSessionCredentialsInput) (*GetClusterSessionCredentialsOutput, error) {
	req, out := c.GetClusterSessionCredentialsRequest(input)
	return out, req.Send()
}

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

const opGetManagedScalingPolicy = "GetManagedScalingPolicy"

// GetManagedScalingPolicyRequest generates a "aws/request.Request" representing the
// client's request for the GetManagedScalingPolicy 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 GetManagedScalingPolicy for more information on using the GetManagedScalingPolicy
// 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 GetManagedScalingPolicyRequest method.
//	req, resp := client.GetManagedScalingPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/GetManagedScalingPolicy
func (c *EMR) GetManagedScalingPolicyRequest(input *GetManagedScalingPolicyInput) (req *request.Request, output *GetManagedScalingPolicyOutput) {
	op := &request.Operation{
		Name:       opGetManagedScalingPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetManagedScalingPolicyInput{}
	}

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

// GetManagedScalingPolicy API operation for Amazon EMR.
//
// Fetches the attached managed scaling policy for an Amazon EMR cluster.
//
// 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 EMR's
// API operation GetManagedScalingPolicy for usage and error information.
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/GetManagedScalingPolicy
func (c *EMR) GetManagedScalingPolicy(input *GetManagedScalingPolicyInput) (*GetManagedScalingPolicyOutput, error) {
	req, out := c.GetManagedScalingPolicyRequest(input)
	return out, req.Send()
}

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

const opGetStudioSessionMapping = "GetStudioSessionMapping"

// GetStudioSessionMappingRequest generates a "aws/request.Request" representing the
// client's request for the GetStudioSessionMapping 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 GetStudioSessionMapping for more information on using the GetStudioSessionMapping
// 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 GetStudioSessionMappingRequest method.
//	req, resp := client.GetStudioSessionMappingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/GetStudioSessionMapping
func (c *EMR) GetStudioSessionMappingRequest(input *GetStudioSessionMappingInput) (req *request.Request, output *GetStudioSessionMappingOutput) {
	op := &request.Operation{
		Name:       opGetStudioSessionMapping,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetStudioSessionMappingInput{}
	}

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

// GetStudioSessionMapping API operation for Amazon EMR.
//
// Fetches mapping details for the specified Amazon EMR Studio and identity
// (user or group).
//
// 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 EMR's
// API operation GetStudioSessionMapping for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/GetStudioSessionMapping
func (c *EMR) GetStudioSessionMapping(input *GetStudioSessionMappingInput) (*GetStudioSessionMappingOutput, error) {
	req, out := c.GetStudioSessionMappingRequest(input)
	return out, req.Send()
}

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

const opListBootstrapActions = "ListBootstrapActions"

// ListBootstrapActionsRequest generates a "aws/request.Request" representing the
// client's request for the ListBootstrapActions 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 ListBootstrapActions for more information on using the ListBootstrapActions
// 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 ListBootstrapActionsRequest method.
//	req, resp := client.ListBootstrapActionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListBootstrapActions
func (c *EMR) ListBootstrapActionsRequest(input *ListBootstrapActionsInput) (req *request.Request, output *ListBootstrapActionsOutput) {
	op := &request.Operation{
		Name:       opListBootstrapActions,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListBootstrapActionsInput{}
	}

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

// ListBootstrapActions API operation for Amazon EMR.
//
// Provides information about the bootstrap actions associated with a cluster.
//
// 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 EMR's
// API operation ListBootstrapActions for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListBootstrapActions
func (c *EMR) ListBootstrapActions(input *ListBootstrapActionsInput) (*ListBootstrapActionsOutput, error) {
	req, out := c.ListBootstrapActionsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListClusters = "ListClusters"

// ListClustersRequest generates a "aws/request.Request" representing the
// client's request for the ListClusters 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 ListClusters for more information on using the ListClusters
// 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 ListClustersRequest method.
//	req, resp := client.ListClustersRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListClusters
func (c *EMR) ListClustersRequest(input *ListClustersInput) (req *request.Request, output *ListClustersOutput) {
	op := &request.Operation{
		Name:       opListClusters,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListClustersInput{}
	}

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

// ListClusters API operation for Amazon EMR.
//
// Provides the status of all clusters visible to this Amazon Web Services account.
// Allows you to filter the list of clusters based on certain criteria; for
// example, filtering by cluster creation date and time or by status. This call
// returns a maximum of 50 clusters in unsorted order per call, but returns
// a marker to track the paging of the cluster list across multiple ListClusters
// calls.
//
// 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 EMR's
// API operation ListClusters for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListClusters
func (c *EMR) ListClusters(input *ListClustersInput) (*ListClustersOutput, error) {
	req, out := c.ListClustersRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListInstanceFleets = "ListInstanceFleets"

// ListInstanceFleetsRequest generates a "aws/request.Request" representing the
// client's request for the ListInstanceFleets 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 ListInstanceFleets for more information on using the ListInstanceFleets
// 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 ListInstanceFleetsRequest method.
//	req, resp := client.ListInstanceFleetsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListInstanceFleets
func (c *EMR) ListInstanceFleetsRequest(input *ListInstanceFleetsInput) (req *request.Request, output *ListInstanceFleetsOutput) {
	op := &request.Operation{
		Name:       opListInstanceFleets,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListInstanceFleetsInput{}
	}

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

// ListInstanceFleets API operation for Amazon EMR.
//
// Lists all available details about the instance fleets in a cluster.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions.
//
// 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 EMR's
// API operation ListInstanceFleets for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListInstanceFleets
func (c *EMR) ListInstanceFleets(input *ListInstanceFleetsInput) (*ListInstanceFleetsOutput, error) {
	req, out := c.ListInstanceFleetsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListInstanceGroups = "ListInstanceGroups"

// ListInstanceGroupsRequest generates a "aws/request.Request" representing the
// client's request for the ListInstanceGroups 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 ListInstanceGroups for more information on using the ListInstanceGroups
// 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 ListInstanceGroupsRequest method.
//	req, resp := client.ListInstanceGroupsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListInstanceGroups
func (c *EMR) ListInstanceGroupsRequest(input *ListInstanceGroupsInput) (req *request.Request, output *ListInstanceGroupsOutput) {
	op := &request.Operation{
		Name:       opListInstanceGroups,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListInstanceGroupsInput{}
	}

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

// ListInstanceGroups API operation for Amazon EMR.
//
// Provides all available details about the instance groups in a cluster.
//
// 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 EMR's
// API operation ListInstanceGroups for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListInstanceGroups
func (c *EMR) ListInstanceGroups(input *ListInstanceGroupsInput) (*ListInstanceGroupsOutput, error) {
	req, out := c.ListInstanceGroupsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListInstances = "ListInstances"

// ListInstancesRequest generates a "aws/request.Request" representing the
// client's request for the ListInstances 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 ListInstances for more information on using the ListInstances
// 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 ListInstancesRequest method.
//	req, resp := client.ListInstancesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListInstances
func (c *EMR) ListInstancesRequest(input *ListInstancesInput) (req *request.Request, output *ListInstancesOutput) {
	op := &request.Operation{
		Name:       opListInstances,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListInstancesInput{}
	}

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

// ListInstances API operation for Amazon EMR.
//
// Provides information for all active Amazon EC2 instances and Amazon EC2 instances
// terminated in the last 30 days, up to a maximum of 2,000. Amazon EC2 instances
// in any of the following states are considered active: AWAITING_FULFILLMENT,
// PROVISIONING, BOOTSTRAPPING, RUNNING.
//
// 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 EMR's
// API operation ListInstances for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListInstances
func (c *EMR) ListInstances(input *ListInstancesInput) (*ListInstancesOutput, error) {
	req, out := c.ListInstancesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListNotebookExecutions = "ListNotebookExecutions"

// ListNotebookExecutionsRequest generates a "aws/request.Request" representing the
// client's request for the ListNotebookExecutions 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 ListNotebookExecutions for more information on using the ListNotebookExecutions
// 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 ListNotebookExecutionsRequest method.
//	req, resp := client.ListNotebookExecutionsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListNotebookExecutions
func (c *EMR) ListNotebookExecutionsRequest(input *ListNotebookExecutionsInput) (req *request.Request, output *ListNotebookExecutionsOutput) {
	op := &request.Operation{
		Name:       opListNotebookExecutions,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListNotebookExecutionsInput{}
	}

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

// ListNotebookExecutions API operation for Amazon EMR.
//
// Provides summaries of all notebook executions. You can filter the list based
// on multiple criteria such as status, time range, and editor id. Returns a
// maximum of 50 notebook executions and a marker to track the paging of a longer
// notebook execution list across multiple ListNotebookExecutions calls.
//
// 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 EMR's
// API operation ListNotebookExecutions for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListNotebookExecutions
func (c *EMR) ListNotebookExecutions(input *ListNotebookExecutionsInput) (*ListNotebookExecutionsOutput, error) {
	req, out := c.ListNotebookExecutionsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListReleaseLabels = "ListReleaseLabels"

// ListReleaseLabelsRequest generates a "aws/request.Request" representing the
// client's request for the ListReleaseLabels 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 ListReleaseLabels for more information on using the ListReleaseLabels
// 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 ListReleaseLabelsRequest method.
//	req, resp := client.ListReleaseLabelsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListReleaseLabels
func (c *EMR) ListReleaseLabelsRequest(input *ListReleaseLabelsInput) (req *request.Request, output *ListReleaseLabelsOutput) {
	op := &request.Operation{
		Name:       opListReleaseLabels,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListReleaseLabelsInput{}
	}

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

// ListReleaseLabels API operation for Amazon EMR.
//
// Retrieves release labels of Amazon EMR services in the Region where the API
// is called.
//
// 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 EMR's
// API operation ListReleaseLabels for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListReleaseLabels
func (c *EMR) ListReleaseLabels(input *ListReleaseLabelsInput) (*ListReleaseLabelsOutput, error) {
	req, out := c.ListReleaseLabelsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListSecurityConfigurations = "ListSecurityConfigurations"

// ListSecurityConfigurationsRequest generates a "aws/request.Request" representing the
// client's request for the ListSecurityConfigurations 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 ListSecurityConfigurations for more information on using the ListSecurityConfigurations
// 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 ListSecurityConfigurationsRequest method.
//	req, resp := client.ListSecurityConfigurationsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListSecurityConfigurations
func (c *EMR) ListSecurityConfigurationsRequest(input *ListSecurityConfigurationsInput) (req *request.Request, output *ListSecurityConfigurationsOutput) {
	op := &request.Operation{
		Name:       opListSecurityConfigurations,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListSecurityConfigurationsInput{}
	}

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

// ListSecurityConfigurations API operation for Amazon EMR.
//
// Lists all the security configurations visible to this account, providing
// their creation dates and times, and their names. This call returns a maximum
// of 50 clusters per call, but returns a marker to track the paging of the
// cluster list across multiple ListSecurityConfigurations calls.
//
// 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 EMR's
// API operation ListSecurityConfigurations for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListSecurityConfigurations
func (c *EMR) ListSecurityConfigurations(input *ListSecurityConfigurationsInput) (*ListSecurityConfigurationsOutput, error) {
	req, out := c.ListSecurityConfigurationsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListSteps = "ListSteps"

// ListStepsRequest generates a "aws/request.Request" representing the
// client's request for the ListSteps 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 ListSteps for more information on using the ListSteps
// 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 ListStepsRequest method.
//	req, resp := client.ListStepsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListSteps
func (c *EMR) ListStepsRequest(input *ListStepsInput) (req *request.Request, output *ListStepsOutput) {
	op := &request.Operation{
		Name:       opListSteps,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListStepsInput{}
	}

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

// ListSteps API operation for Amazon EMR.
//
// Provides a list of steps for the cluster in reverse order unless you specify
// stepIds with the request or filter by StepStates. You can specify a maximum
// of 10 stepIDs. The CLI automatically paginates results to return a list greater
// than 50 steps. To return more than 50 steps using the CLI, specify a Marker,
// which is a pagination token that indicates the next set of steps to retrieve.
//
// 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 EMR's
// API operation ListSteps for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListSteps
func (c *EMR) ListSteps(input *ListStepsInput) (*ListStepsOutput, error) {
	req, out := c.ListStepsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListStudioSessionMappings = "ListStudioSessionMappings"

// ListStudioSessionMappingsRequest generates a "aws/request.Request" representing the
// client's request for the ListStudioSessionMappings 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 ListStudioSessionMappings for more information on using the ListStudioSessionMappings
// 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 ListStudioSessionMappingsRequest method.
//	req, resp := client.ListStudioSessionMappingsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListStudioSessionMappings
func (c *EMR) ListStudioSessionMappingsRequest(input *ListStudioSessionMappingsInput) (req *request.Request, output *ListStudioSessionMappingsOutput) {
	op := &request.Operation{
		Name:       opListStudioSessionMappings,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListStudioSessionMappingsInput{}
	}

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

// ListStudioSessionMappings API operation for Amazon EMR.
//
// Returns a list of all user or group session mappings for the Amazon EMR Studio
// specified by StudioId.
//
// 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 EMR's
// API operation ListStudioSessionMappings for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListStudioSessionMappings
func (c *EMR) ListStudioSessionMappings(input *ListStudioSessionMappingsInput) (*ListStudioSessionMappingsOutput, error) {
	req, out := c.ListStudioSessionMappingsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListStudios = "ListStudios"

// ListStudiosRequest generates a "aws/request.Request" representing the
// client's request for the ListStudios 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 ListStudios for more information on using the ListStudios
// 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 ListStudiosRequest method.
//	req, resp := client.ListStudiosRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListStudios
func (c *EMR) ListStudiosRequest(input *ListStudiosInput) (req *request.Request, output *ListStudiosOutput) {
	op := &request.Operation{
		Name:       opListStudios,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListStudiosInput{}
	}

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

// ListStudios API operation for Amazon EMR.
//
// Returns a list of all Amazon EMR Studios associated with the Amazon Web Services
// account. The list includes details such as ID, Studio Access URL, and creation
// time for each Studio.
//
// 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 EMR's
// API operation ListStudios for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListStudios
func (c *EMR) ListStudios(input *ListStudiosInput) (*ListStudiosOutput, error) {
	req, out := c.ListStudiosRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListSupportedInstanceTypes = "ListSupportedInstanceTypes"

// ListSupportedInstanceTypesRequest generates a "aws/request.Request" representing the
// client's request for the ListSupportedInstanceTypes 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 ListSupportedInstanceTypes for more information on using the ListSupportedInstanceTypes
// 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 ListSupportedInstanceTypesRequest method.
//	req, resp := client.ListSupportedInstanceTypesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListSupportedInstanceTypes
func (c *EMR) ListSupportedInstanceTypesRequest(input *ListSupportedInstanceTypesInput) (req *request.Request, output *ListSupportedInstanceTypesOutput) {
	op := &request.Operation{
		Name:       opListSupportedInstanceTypes,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"Marker"},
			OutputTokens:    []string{"Marker"},
			LimitToken:      "",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListSupportedInstanceTypesInput{}
	}

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

// ListSupportedInstanceTypes API operation for Amazon EMR.
//
// A list of the instance types that Amazon EMR supports. You can filter the
// list by Amazon Web Services Region and Amazon EMR release.
//
// 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 EMR's
// API operation ListSupportedInstanceTypes for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ListSupportedInstanceTypes
func (c *EMR) ListSupportedInstanceTypes(input *ListSupportedInstanceTypesInput) (*ListSupportedInstanceTypesOutput, error) {
	req, out := c.ListSupportedInstanceTypesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opModifyCluster = "ModifyCluster"

// ModifyClusterRequest generates a "aws/request.Request" representing the
// client's request for the ModifyCluster 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 ModifyCluster for more information on using the ModifyCluster
// 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 ModifyClusterRequest method.
//	req, resp := client.ModifyClusterRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ModifyCluster
func (c *EMR) ModifyClusterRequest(input *ModifyClusterInput) (req *request.Request, output *ModifyClusterOutput) {
	op := &request.Operation{
		Name:       opModifyCluster,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ModifyClusterInput{}
	}

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

// ModifyCluster API operation for Amazon EMR.
//
// Modifies the number of steps that can be executed concurrently for the cluster
// specified using ClusterID.
//
// 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 EMR's
// API operation ModifyCluster for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ModifyCluster
func (c *EMR) ModifyCluster(input *ModifyClusterInput) (*ModifyClusterOutput, error) {
	req, out := c.ModifyClusterRequest(input)
	return out, req.Send()
}

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

const opModifyInstanceFleet = "ModifyInstanceFleet"

// ModifyInstanceFleetRequest generates a "aws/request.Request" representing the
// client's request for the ModifyInstanceFleet 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 ModifyInstanceFleet for more information on using the ModifyInstanceFleet
// 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 ModifyInstanceFleetRequest method.
//	req, resp := client.ModifyInstanceFleetRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ModifyInstanceFleet
func (c *EMR) ModifyInstanceFleetRequest(input *ModifyInstanceFleetInput) (req *request.Request, output *ModifyInstanceFleetOutput) {
	op := &request.Operation{
		Name:       opModifyInstanceFleet,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ModifyInstanceFleetInput{}
	}

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

// ModifyInstanceFleet API operation for Amazon EMR.
//
// Modifies the target On-Demand and target Spot capacities for the instance
// fleet with the specified InstanceFleetID within the cluster specified using
// ClusterID. The call either succeeds or fails atomically.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions.
//
// 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 EMR's
// API operation ModifyInstanceFleet for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ModifyInstanceFleet
func (c *EMR) ModifyInstanceFleet(input *ModifyInstanceFleetInput) (*ModifyInstanceFleetOutput, error) {
	req, out := c.ModifyInstanceFleetRequest(input)
	return out, req.Send()
}

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

const opModifyInstanceGroups = "ModifyInstanceGroups"

// ModifyInstanceGroupsRequest generates a "aws/request.Request" representing the
// client's request for the ModifyInstanceGroups 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 ModifyInstanceGroups for more information on using the ModifyInstanceGroups
// 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 ModifyInstanceGroupsRequest method.
//	req, resp := client.ModifyInstanceGroupsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ModifyInstanceGroups
func (c *EMR) ModifyInstanceGroupsRequest(input *ModifyInstanceGroupsInput) (req *request.Request, output *ModifyInstanceGroupsOutput) {
	op := &request.Operation{
		Name:       opModifyInstanceGroups,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &ModifyInstanceGroupsInput{}
	}

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

// ModifyInstanceGroups API operation for Amazon EMR.
//
// ModifyInstanceGroups modifies the number of nodes and configuration settings
// of an instance group. The input parameters include the new target instance
// count for the group and the instance group ID. The call will either succeed
// or fail atomically.
//
// 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 EMR's
// API operation ModifyInstanceGroups for usage and error information.
//
// Returned Error Types:
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/ModifyInstanceGroups
func (c *EMR) ModifyInstanceGroups(input *ModifyInstanceGroupsInput) (*ModifyInstanceGroupsOutput, error) {
	req, out := c.ModifyInstanceGroupsRequest(input)
	return out, req.Send()
}

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

const opPutAutoScalingPolicy = "PutAutoScalingPolicy"

// PutAutoScalingPolicyRequest generates a "aws/request.Request" representing the
// client's request for the PutAutoScalingPolicy 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 PutAutoScalingPolicy for more information on using the PutAutoScalingPolicy
// 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 PutAutoScalingPolicyRequest method.
//	req, resp := client.PutAutoScalingPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/PutAutoScalingPolicy
func (c *EMR) PutAutoScalingPolicyRequest(input *PutAutoScalingPolicyInput) (req *request.Request, output *PutAutoScalingPolicyOutput) {
	op := &request.Operation{
		Name:       opPutAutoScalingPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutAutoScalingPolicyInput{}
	}

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

// PutAutoScalingPolicy API operation for Amazon EMR.
//
// Creates or updates an automatic scaling policy for a core instance group
// or task instance group in an Amazon EMR cluster. The automatic scaling policy
// defines how an instance group dynamically adds and terminates Amazon EC2
// instances in response to the value of a CloudWatch metric.
//
// 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 EMR's
// API operation PutAutoScalingPolicy for usage and error information.
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/PutAutoScalingPolicy
func (c *EMR) PutAutoScalingPolicy(input *PutAutoScalingPolicyInput) (*PutAutoScalingPolicyOutput, error) {
	req, out := c.PutAutoScalingPolicyRequest(input)
	return out, req.Send()
}

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

const opPutAutoTerminationPolicy = "PutAutoTerminationPolicy"

// PutAutoTerminationPolicyRequest generates a "aws/request.Request" representing the
// client's request for the PutAutoTerminationPolicy 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 PutAutoTerminationPolicy for more information on using the PutAutoTerminationPolicy
// 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 PutAutoTerminationPolicyRequest method.
//	req, resp := client.PutAutoTerminationPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/PutAutoTerminationPolicy
func (c *EMR) PutAutoTerminationPolicyRequest(input *PutAutoTerminationPolicyInput) (req *request.Request, output *PutAutoTerminationPolicyOutput) {
	op := &request.Operation{
		Name:       opPutAutoTerminationPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutAutoTerminationPolicyInput{}
	}

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

// PutAutoTerminationPolicy API operation for Amazon EMR.
//
// Auto-termination is supported in Amazon EMR releases 5.30.0 and 6.1.0 and
// later. For more information, see Using an auto-termination policy (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-auto-termination-policy.html).
//
// Creates or updates an auto-termination policy for an Amazon EMR cluster.
// An auto-termination policy defines the amount of idle time in seconds after
// which a cluster automatically terminates. For alternative cluster termination
// options, see Control cluster termination (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-termination.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 EMR's
// API operation PutAutoTerminationPolicy for usage and error information.
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/PutAutoTerminationPolicy
func (c *EMR) PutAutoTerminationPolicy(input *PutAutoTerminationPolicyInput) (*PutAutoTerminationPolicyOutput, error) {
	req, out := c.PutAutoTerminationPolicyRequest(input)
	return out, req.Send()
}

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

const opPutBlockPublicAccessConfiguration = "PutBlockPublicAccessConfiguration"

// PutBlockPublicAccessConfigurationRequest generates a "aws/request.Request" representing the
// client's request for the PutBlockPublicAccessConfiguration 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 PutBlockPublicAccessConfiguration for more information on using the PutBlockPublicAccessConfiguration
// 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 PutBlockPublicAccessConfigurationRequest method.
//	req, resp := client.PutBlockPublicAccessConfigurationRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/PutBlockPublicAccessConfiguration
func (c *EMR) PutBlockPublicAccessConfigurationRequest(input *PutBlockPublicAccessConfigurationInput) (req *request.Request, output *PutBlockPublicAccessConfigurationOutput) {
	op := &request.Operation{
		Name:       opPutBlockPublicAccessConfiguration,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutBlockPublicAccessConfigurationInput{}
	}

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

// PutBlockPublicAccessConfiguration API operation for Amazon EMR.
//
// Creates or updates an Amazon EMR block public access configuration for your
// Amazon Web Services account in the current Region. For more information see
// Configure Block Public Access for Amazon EMR (https://docs.aws.amazon.com/emr/latest/ManagementGuide/configure-block-public-access.html)
// in the Amazon EMR Management Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EMR's
// API operation PutBlockPublicAccessConfiguration for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/PutBlockPublicAccessConfiguration
func (c *EMR) PutBlockPublicAccessConfiguration(input *PutBlockPublicAccessConfigurationInput) (*PutBlockPublicAccessConfigurationOutput, error) {
	req, out := c.PutBlockPublicAccessConfigurationRequest(input)
	return out, req.Send()
}

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

const opPutManagedScalingPolicy = "PutManagedScalingPolicy"

// PutManagedScalingPolicyRequest generates a "aws/request.Request" representing the
// client's request for the PutManagedScalingPolicy 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 PutManagedScalingPolicy for more information on using the PutManagedScalingPolicy
// 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 PutManagedScalingPolicyRequest method.
//	req, resp := client.PutManagedScalingPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/PutManagedScalingPolicy
func (c *EMR) PutManagedScalingPolicyRequest(input *PutManagedScalingPolicyInput) (req *request.Request, output *PutManagedScalingPolicyOutput) {
	op := &request.Operation{
		Name:       opPutManagedScalingPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &PutManagedScalingPolicyInput{}
	}

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

// PutManagedScalingPolicy API operation for Amazon EMR.
//
// Creates or updates a managed scaling policy for an Amazon EMR cluster. The
// managed scaling policy defines the limits for resources, such as Amazon EC2
// instances that can be added or terminated from a cluster. The policy only
// applies to the core and task nodes. The master node cannot be scaled after
// initial configuration.
//
// 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 EMR's
// API operation PutManagedScalingPolicy for usage and error information.
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/PutManagedScalingPolicy
func (c *EMR) PutManagedScalingPolicy(input *PutManagedScalingPolicyInput) (*PutManagedScalingPolicyOutput, error) {
	req, out := c.PutManagedScalingPolicyRequest(input)
	return out, req.Send()
}

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

const opRemoveAutoScalingPolicy = "RemoveAutoScalingPolicy"

// RemoveAutoScalingPolicyRequest generates a "aws/request.Request" representing the
// client's request for the RemoveAutoScalingPolicy 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 RemoveAutoScalingPolicy for more information on using the RemoveAutoScalingPolicy
// 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 RemoveAutoScalingPolicyRequest method.
//	req, resp := client.RemoveAutoScalingPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/RemoveAutoScalingPolicy
func (c *EMR) RemoveAutoScalingPolicyRequest(input *RemoveAutoScalingPolicyInput) (req *request.Request, output *RemoveAutoScalingPolicyOutput) {
	op := &request.Operation{
		Name:       opRemoveAutoScalingPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RemoveAutoScalingPolicyInput{}
	}

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

// RemoveAutoScalingPolicy API operation for Amazon EMR.
//
// Removes an automatic scaling policy from a specified instance group within
// an Amazon EMR cluster.
//
// 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 EMR's
// API operation RemoveAutoScalingPolicy for usage and error information.
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/RemoveAutoScalingPolicy
func (c *EMR) RemoveAutoScalingPolicy(input *RemoveAutoScalingPolicyInput) (*RemoveAutoScalingPolicyOutput, error) {
	req, out := c.RemoveAutoScalingPolicyRequest(input)
	return out, req.Send()
}

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

const opRemoveAutoTerminationPolicy = "RemoveAutoTerminationPolicy"

// RemoveAutoTerminationPolicyRequest generates a "aws/request.Request" representing the
// client's request for the RemoveAutoTerminationPolicy 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 RemoveAutoTerminationPolicy for more information on using the RemoveAutoTerminationPolicy
// 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 RemoveAutoTerminationPolicyRequest method.
//	req, resp := client.RemoveAutoTerminationPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/RemoveAutoTerminationPolicy
func (c *EMR) RemoveAutoTerminationPolicyRequest(input *RemoveAutoTerminationPolicyInput) (req *request.Request, output *RemoveAutoTerminationPolicyOutput) {
	op := &request.Operation{
		Name:       opRemoveAutoTerminationPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RemoveAutoTerminationPolicyInput{}
	}

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

// RemoveAutoTerminationPolicy API operation for Amazon EMR.
//
// Removes an auto-termination policy from an Amazon EMR cluster.
//
// 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 EMR's
// API operation RemoveAutoTerminationPolicy for usage and error information.
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/RemoveAutoTerminationPolicy
func (c *EMR) RemoveAutoTerminationPolicy(input *RemoveAutoTerminationPolicyInput) (*RemoveAutoTerminationPolicyOutput, error) {
	req, out := c.RemoveAutoTerminationPolicyRequest(input)
	return out, req.Send()
}

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

const opRemoveManagedScalingPolicy = "RemoveManagedScalingPolicy"

// RemoveManagedScalingPolicyRequest generates a "aws/request.Request" representing the
// client's request for the RemoveManagedScalingPolicy 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 RemoveManagedScalingPolicy for more information on using the RemoveManagedScalingPolicy
// 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 RemoveManagedScalingPolicyRequest method.
//	req, resp := client.RemoveManagedScalingPolicyRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/RemoveManagedScalingPolicy
func (c *EMR) RemoveManagedScalingPolicyRequest(input *RemoveManagedScalingPolicyInput) (req *request.Request, output *RemoveManagedScalingPolicyOutput) {
	op := &request.Operation{
		Name:       opRemoveManagedScalingPolicy,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RemoveManagedScalingPolicyInput{}
	}

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

// RemoveManagedScalingPolicy API operation for Amazon EMR.
//
// Removes a managed scaling policy from a specified Amazon EMR cluster.
//
// 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 EMR's
// API operation RemoveManagedScalingPolicy for usage and error information.
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/RemoveManagedScalingPolicy
func (c *EMR) RemoveManagedScalingPolicy(input *RemoveManagedScalingPolicyInput) (*RemoveManagedScalingPolicyOutput, error) {
	req, out := c.RemoveManagedScalingPolicyRequest(input)
	return out, req.Send()
}

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

const opRemoveTags = "RemoveTags"

// RemoveTagsRequest generates a "aws/request.Request" representing the
// client's request for the RemoveTags 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 RemoveTags for more information on using the RemoveTags
// 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 RemoveTagsRequest method.
//	req, resp := client.RemoveTagsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/RemoveTags
func (c *EMR) RemoveTagsRequest(input *RemoveTagsInput) (req *request.Request, output *RemoveTagsOutput) {
	op := &request.Operation{
		Name:       opRemoveTags,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RemoveTagsInput{}
	}

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

// RemoveTags API operation for Amazon EMR.
//
// Removes tags from an Amazon EMR resource, such as a cluster or Amazon EMR
// Studio. Tags make it easier to associate resources in various ways, such
// as grouping clusters to track your Amazon EMR resource allocation costs.
// For more information, see Tag Clusters (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-tags.html).
//
// The following example removes the stack tag with value Prod from a cluster:
//
// 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 EMR's
// API operation RemoveTags for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/RemoveTags
func (c *EMR) RemoveTags(input *RemoveTagsInput) (*RemoveTagsOutput, error) {
	req, out := c.RemoveTagsRequest(input)
	return out, req.Send()
}

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

const opRunJobFlow = "RunJobFlow"

// RunJobFlowRequest generates a "aws/request.Request" representing the
// client's request for the RunJobFlow 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 RunJobFlow for more information on using the RunJobFlow
// 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 RunJobFlowRequest method.
//	req, resp := client.RunJobFlowRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/RunJobFlow
func (c *EMR) RunJobFlowRequest(input *RunJobFlowInput) (req *request.Request, output *RunJobFlowOutput) {
	op := &request.Operation{
		Name:       opRunJobFlow,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RunJobFlowInput{}
	}

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

// RunJobFlow API operation for Amazon EMR.
//
// RunJobFlow creates and starts running a new cluster (job flow). The cluster
// runs the steps specified. After the steps complete, the cluster stops and
// the HDFS partition is lost. To prevent loss of data, configure the last step
// of the job flow to store results in Amazon S3. If the JobFlowInstancesConfig
// KeepJobFlowAliveWhenNoSteps parameter is set to TRUE, the cluster transitions
// to the WAITING state rather than shutting down after the steps have completed.
//
// For additional protection, you can set the JobFlowInstancesConfig TerminationProtected
// parameter to TRUE to lock the cluster and prevent it from being terminated
// by API call, user intervention, or in the event of a job flow error.
//
// A maximum of 256 steps are allowed in each job flow.
//
// If your cluster is long-running (such as a Hive data warehouse) or complex,
// you may require more than 256 steps to process your data. You can bypass
// the 256-step limitation in various ways, including using the SSH shell to
// connect to the master node and submitting queries directly to the software
// running on the master node, such as Hive and Hadoop.
//
// For long-running clusters, we recommend that you periodically store your
// results.
//
// The instance fleets configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions. The RunJobFlow request can contain
// InstanceFleets parameters or InstanceGroups parameters, but not both.
//
// 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 EMR's
// API operation RunJobFlow for usage and error information.
//
// Returned Error Types:
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/RunJobFlow
func (c *EMR) RunJobFlow(input *RunJobFlowInput) (*RunJobFlowOutput, error) {
	req, out := c.RunJobFlowRequest(input)
	return out, req.Send()
}

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

const opSetKeepJobFlowAliveWhenNoSteps = "SetKeepJobFlowAliveWhenNoSteps"

// SetKeepJobFlowAliveWhenNoStepsRequest generates a "aws/request.Request" representing the
// client's request for the SetKeepJobFlowAliveWhenNoSteps 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 SetKeepJobFlowAliveWhenNoSteps for more information on using the SetKeepJobFlowAliveWhenNoSteps
// 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 SetKeepJobFlowAliveWhenNoStepsRequest method.
//	req, resp := client.SetKeepJobFlowAliveWhenNoStepsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/SetKeepJobFlowAliveWhenNoSteps
func (c *EMR) SetKeepJobFlowAliveWhenNoStepsRequest(input *SetKeepJobFlowAliveWhenNoStepsInput) (req *request.Request, output *SetKeepJobFlowAliveWhenNoStepsOutput) {
	op := &request.Operation{
		Name:       opSetKeepJobFlowAliveWhenNoSteps,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &SetKeepJobFlowAliveWhenNoStepsInput{}
	}

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

// SetKeepJobFlowAliveWhenNoSteps API operation for Amazon EMR.
//
// You can use the SetKeepJobFlowAliveWhenNoSteps to configure a cluster (job
// flow) to terminate after the step execution, i.e., all your steps are executed.
// If you want a transient cluster that shuts down after the last of the current
// executing steps are completed, you can configure SetKeepJobFlowAliveWhenNoSteps
// to false. If you want a long running cluster, configure SetKeepJobFlowAliveWhenNoSteps
// to true.
//
// For more information, see Managing Cluster Termination (https://docs.aws.amazon.com/emr/latest/ManagementGuide/UsingEMR_TerminationProtection.html)
// in the Amazon EMR Management Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EMR's
// API operation SetKeepJobFlowAliveWhenNoSteps for usage and error information.
//
// Returned Error Types:
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/SetKeepJobFlowAliveWhenNoSteps
func (c *EMR) SetKeepJobFlowAliveWhenNoSteps(input *SetKeepJobFlowAliveWhenNoStepsInput) (*SetKeepJobFlowAliveWhenNoStepsOutput, error) {
	req, out := c.SetKeepJobFlowAliveWhenNoStepsRequest(input)
	return out, req.Send()
}

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

const opSetTerminationProtection = "SetTerminationProtection"

// SetTerminationProtectionRequest generates a "aws/request.Request" representing the
// client's request for the SetTerminationProtection 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 SetTerminationProtection for more information on using the SetTerminationProtection
// 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 SetTerminationProtectionRequest method.
//	req, resp := client.SetTerminationProtectionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/SetTerminationProtection
func (c *EMR) SetTerminationProtectionRequest(input *SetTerminationProtectionInput) (req *request.Request, output *SetTerminationProtectionOutput) {
	op := &request.Operation{
		Name:       opSetTerminationProtection,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &SetTerminationProtectionInput{}
	}

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

// SetTerminationProtection API operation for Amazon EMR.
//
// SetTerminationProtection locks a cluster (job flow) so the Amazon EC2 instances
// in the cluster cannot be terminated by user intervention, an API call, or
// in the event of a job-flow error. The cluster still terminates upon successful
// completion of the job flow. Calling SetTerminationProtection on a cluster
// is similar to calling the Amazon EC2 DisableAPITermination API on all Amazon
// EC2 instances in a cluster.
//
// SetTerminationProtection is used to prevent accidental termination of a cluster
// and to ensure that in the event of an error, the instances persist so that
// you can recover any data stored in their ephemeral instance storage.
//
// To terminate a cluster that has been locked by setting SetTerminationProtection
// to true, you must first unlock the job flow by a subsequent call to SetTerminationProtection
// in which you set the value to false.
//
// For more information, seeManaging Cluster Termination (https://docs.aws.amazon.com/emr/latest/ManagementGuide/UsingEMR_TerminationProtection.html)
// in the Amazon EMR Management Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EMR's
// API operation SetTerminationProtection for usage and error information.
//
// Returned Error Types:
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/SetTerminationProtection
func (c *EMR) SetTerminationProtection(input *SetTerminationProtectionInput) (*SetTerminationProtectionOutput, error) {
	req, out := c.SetTerminationProtectionRequest(input)
	return out, req.Send()
}

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

const opSetVisibleToAllUsers = "SetVisibleToAllUsers"

// SetVisibleToAllUsersRequest generates a "aws/request.Request" representing the
// client's request for the SetVisibleToAllUsers 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 SetVisibleToAllUsers for more information on using the SetVisibleToAllUsers
// 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 SetVisibleToAllUsersRequest method.
//	req, resp := client.SetVisibleToAllUsersRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/SetVisibleToAllUsers
func (c *EMR) SetVisibleToAllUsersRequest(input *SetVisibleToAllUsersInput) (req *request.Request, output *SetVisibleToAllUsersOutput) {
	op := &request.Operation{
		Name:       opSetVisibleToAllUsers,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &SetVisibleToAllUsersInput{}
	}

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

// SetVisibleToAllUsers API operation for Amazon EMR.
//
// The SetVisibleToAllUsers parameter is no longer supported. Your cluster may
// be visible to all users in your account. To restrict cluster access using
// an IAM policy, see Identity and Access Management for Amazon EMR (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-access-IAM.html).
//
// Sets the Cluster$VisibleToAllUsers value for an Amazon EMR cluster. When
// true, IAM principals in the Amazon Web Services account can perform Amazon
// EMR cluster actions that their IAM policies allow. When false, only the IAM
// principal that created the cluster and the Amazon Web Services account root
// user can perform Amazon EMR actions on the cluster, regardless of IAM permissions
// policies attached to other IAM principals.
//
// This action works on running clusters. When you create a cluster, use the
// RunJobFlowInput$VisibleToAllUsers parameter.
//
// For more information, see Understanding the Amazon EMR Cluster VisibleToAllUsers
// Setting (https://docs.aws.amazon.com/emr/latest/ManagementGuide/security_IAM_emr-with-IAM.html#security_set_visible_to_all_users)
// in the Amazon EMR Management Guide.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon EMR's
// API operation SetVisibleToAllUsers for usage and error information.
//
// Returned Error Types:
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/SetVisibleToAllUsers
func (c *EMR) SetVisibleToAllUsers(input *SetVisibleToAllUsersInput) (*SetVisibleToAllUsersOutput, error) {
	req, out := c.SetVisibleToAllUsersRequest(input)
	return out, req.Send()
}

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

const opStartNotebookExecution = "StartNotebookExecution"

// StartNotebookExecutionRequest generates a "aws/request.Request" representing the
// client's request for the StartNotebookExecution 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 StartNotebookExecution for more information on using the StartNotebookExecution
// 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 StartNotebookExecutionRequest method.
//	req, resp := client.StartNotebookExecutionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/StartNotebookExecution
func (c *EMR) StartNotebookExecutionRequest(input *StartNotebookExecutionInput) (req *request.Request, output *StartNotebookExecutionOutput) {
	op := &request.Operation{
		Name:       opStartNotebookExecution,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StartNotebookExecutionInput{}
	}

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

// StartNotebookExecution API operation for Amazon EMR.
//
// Starts a notebook execution.
//
// 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 EMR's
// API operation StartNotebookExecution for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/StartNotebookExecution
func (c *EMR) StartNotebookExecution(input *StartNotebookExecutionInput) (*StartNotebookExecutionOutput, error) {
	req, out := c.StartNotebookExecutionRequest(input)
	return out, req.Send()
}

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

const opStopNotebookExecution = "StopNotebookExecution"

// StopNotebookExecutionRequest generates a "aws/request.Request" representing the
// client's request for the StopNotebookExecution 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 StopNotebookExecution for more information on using the StopNotebookExecution
// 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 StopNotebookExecutionRequest method.
//	req, resp := client.StopNotebookExecutionRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/StopNotebookExecution
func (c *EMR) StopNotebookExecutionRequest(input *StopNotebookExecutionInput) (req *request.Request, output *StopNotebookExecutionOutput) {
	op := &request.Operation{
		Name:       opStopNotebookExecution,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StopNotebookExecutionInput{}
	}

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

// StopNotebookExecution API operation for Amazon EMR.
//
// Stops a notebook execution.
//
// 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 EMR's
// API operation StopNotebookExecution for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/StopNotebookExecution
func (c *EMR) StopNotebookExecution(input *StopNotebookExecutionInput) (*StopNotebookExecutionOutput, error) {
	req, out := c.StopNotebookExecutionRequest(input)
	return out, req.Send()
}

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

const opTerminateJobFlows = "TerminateJobFlows"

// TerminateJobFlowsRequest generates a "aws/request.Request" representing the
// client's request for the TerminateJobFlows 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 TerminateJobFlows for more information on using the TerminateJobFlows
// 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 TerminateJobFlowsRequest method.
//	req, resp := client.TerminateJobFlowsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/TerminateJobFlows
func (c *EMR) TerminateJobFlowsRequest(input *TerminateJobFlowsInput) (req *request.Request, output *TerminateJobFlowsOutput) {
	op := &request.Operation{
		Name:       opTerminateJobFlows,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &TerminateJobFlowsInput{}
	}

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

// TerminateJobFlows API operation for Amazon EMR.
//
// TerminateJobFlows shuts a list of clusters (job flows) down. When a job flow
// is shut down, any step not yet completed is canceled and the Amazon EC2 instances
// on which the cluster is running are stopped. Any log files not already saved
// are uploaded to Amazon S3 if a LogUri was specified when the cluster was
// created.
//
// The maximum number of clusters allowed is 10. The call to TerminateJobFlows
// is asynchronous. Depending on the configuration of the cluster, it may take
// up to 1-5 minutes for the cluster to completely terminate and release allocated
// resources, such as Amazon EC2 instances.
//
// 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 EMR's
// API operation TerminateJobFlows for usage and error information.
//
// Returned Error Types:
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/TerminateJobFlows
func (c *EMR) TerminateJobFlows(input *TerminateJobFlowsInput) (*TerminateJobFlowsOutput, error) {
	req, out := c.TerminateJobFlowsRequest(input)
	return out, req.Send()
}

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

const opUpdateStudio = "UpdateStudio"

// UpdateStudioRequest generates a "aws/request.Request" representing the
// client's request for the UpdateStudio 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 UpdateStudio for more information on using the UpdateStudio
// 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 UpdateStudioRequest method.
//	req, resp := client.UpdateStudioRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/UpdateStudio
func (c *EMR) UpdateStudioRequest(input *UpdateStudioInput) (req *request.Request, output *UpdateStudioOutput) {
	op := &request.Operation{
		Name:       opUpdateStudio,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateStudioInput{}
	}

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

// UpdateStudio API operation for Amazon EMR.
//
// Updates an Amazon EMR Studio configuration, including attributes such as
// name, description, and subnets.
//
// 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 EMR's
// API operation UpdateStudio for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerException
//     This exception occurs when there is an internal failure in the Amazon EMR
//     service.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/UpdateStudio
func (c *EMR) UpdateStudio(input *UpdateStudioInput) (*UpdateStudioOutput, error) {
	req, out := c.UpdateStudioRequest(input)
	return out, req.Send()
}

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

const opUpdateStudioSessionMapping = "UpdateStudioSessionMapping"

// UpdateStudioSessionMappingRequest generates a "aws/request.Request" representing the
// client's request for the UpdateStudioSessionMapping 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 UpdateStudioSessionMapping for more information on using the UpdateStudioSessionMapping
// 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 UpdateStudioSessionMappingRequest method.
//	req, resp := client.UpdateStudioSessionMappingRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/UpdateStudioSessionMapping
func (c *EMR) UpdateStudioSessionMappingRequest(input *UpdateStudioSessionMappingInput) (req *request.Request, output *UpdateStudioSessionMappingOutput) {
	op := &request.Operation{
		Name:       opUpdateStudioSessionMapping,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateStudioSessionMappingInput{}
	}

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

// UpdateStudioSessionMapping API operation for Amazon EMR.
//
// Updates the session policy attached to the user or group for the specified
// Amazon EMR Studio.
//
// 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 EMR's
// API operation UpdateStudioSessionMapping for usage and error information.
//
// Returned Error Types:
//
//   - InternalServerError
//     Indicates that an error occurred while processing the request and that the
//     request was not completed.
//
//   - InvalidRequestException
//     This exception occurs when there is something wrong with user input.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticmapreduce-2009-03-31/UpdateStudioSessionMapping
func (c *EMR) UpdateStudioSessionMapping(input *UpdateStudioSessionMappingInput) (*UpdateStudioSessionMappingOutput, error) {
	req, out := c.UpdateStudioSessionMappingRequest(input)
	return out, req.Send()
}

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

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

	// The unique identifier of the cluster.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// Specifies the configuration of the instance fleet.
	//
	// InstanceFleet is a required field
	InstanceFleet *InstanceFleetConfig `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 AddInstanceFleetInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *AddInstanceFleetInput) SetClusterId(v string) *AddInstanceFleetInput {
	s.ClusterId = &v
	return s
}

// SetInstanceFleet sets the InstanceFleet field's value.
func (s *AddInstanceFleetInput) SetInstanceFleet(v *InstanceFleetConfig) *AddInstanceFleetInput {
	s.InstanceFleet = v
	return s
}

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

	// The Amazon Resource Name of the cluster.
	ClusterArn *string `min:"20" type:"string"`

	// The unique identifier of the cluster.
	ClusterId *string `type:"string"`

	// The unique identifier of the instance fleet.
	InstanceFleetId *string `type:"string"`
}

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

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

// SetClusterArn sets the ClusterArn field's value.
func (s *AddInstanceFleetOutput) SetClusterArn(v string) *AddInstanceFleetOutput {
	s.ClusterArn = &v
	return s
}

// SetClusterId sets the ClusterId field's value.
func (s *AddInstanceFleetOutput) SetClusterId(v string) *AddInstanceFleetOutput {
	s.ClusterId = &v
	return s
}

// SetInstanceFleetId sets the InstanceFleetId field's value.
func (s *AddInstanceFleetOutput) SetInstanceFleetId(v string) *AddInstanceFleetOutput {
	s.InstanceFleetId = &v
	return s
}

// Input to an AddInstanceGroups call.
type AddInstanceGroupsInput struct {
	_ struct{} `type:"structure"`

	// Instance groups to add.
	//
	// InstanceGroups is a required field
	InstanceGroups []*InstanceGroupConfig `type:"list" required:"true"`

	// Job flow in which to add the instance groups.
	//
	// JobFlowId is a required field
	JobFlowId *string `type:"string" required:"true"`
}

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

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

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

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

// SetInstanceGroups sets the InstanceGroups field's value.
func (s *AddInstanceGroupsInput) SetInstanceGroups(v []*InstanceGroupConfig) *AddInstanceGroupsInput {
	s.InstanceGroups = v
	return s
}

// SetJobFlowId sets the JobFlowId field's value.
func (s *AddInstanceGroupsInput) SetJobFlowId(v string) *AddInstanceGroupsInput {
	s.JobFlowId = &v
	return s
}

// Output from an AddInstanceGroups call.
type AddInstanceGroupsOutput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name of the cluster.
	ClusterArn *string `min:"20" type:"string"`

	// Instance group IDs of the newly created instance groups.
	InstanceGroupIds []*string `type:"list"`

	// The job flow ID in which the instance groups are added.
	JobFlowId *string `type:"string"`
}

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

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

// SetClusterArn sets the ClusterArn field's value.
func (s *AddInstanceGroupsOutput) SetClusterArn(v string) *AddInstanceGroupsOutput {
	s.ClusterArn = &v
	return s
}

// SetInstanceGroupIds sets the InstanceGroupIds field's value.
func (s *AddInstanceGroupsOutput) SetInstanceGroupIds(v []*string) *AddInstanceGroupsOutput {
	s.InstanceGroupIds = v
	return s
}

// SetJobFlowId sets the JobFlowId field's value.
func (s *AddInstanceGroupsOutput) SetJobFlowId(v string) *AddInstanceGroupsOutput {
	s.JobFlowId = &v
	return s
}

// The input argument to the AddJobFlowSteps operation.
type AddJobFlowStepsInput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the runtime role for a step on the cluster.
	// The runtime role can be a cross-account IAM role. The runtime role ARN is
	// a combination of account ID, role name, and role type using the following
	// format: arn:partition:service:region:account:resource.
	//
	// For example, arn:aws:IAM::1234567890:role/ReadOnly is a correctly formatted
	// runtime role ARN.
	ExecutionRoleArn *string `min:"20" type:"string"`

	// A string that uniquely identifies the job flow. This identifier is returned
	// by RunJobFlow and can also be obtained from ListClusters.
	//
	// JobFlowId is a required field
	JobFlowId *string `type:"string" required:"true"`

	// A list of StepConfig to be executed by the job flow.
	//
	// Steps is a required field
	Steps []*StepConfig `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 AddJobFlowStepsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetExecutionRoleArn sets the ExecutionRoleArn field's value.
func (s *AddJobFlowStepsInput) SetExecutionRoleArn(v string) *AddJobFlowStepsInput {
	s.ExecutionRoleArn = &v
	return s
}

// SetJobFlowId sets the JobFlowId field's value.
func (s *AddJobFlowStepsInput) SetJobFlowId(v string) *AddJobFlowStepsInput {
	s.JobFlowId = &v
	return s
}

// SetSteps sets the Steps field's value.
func (s *AddJobFlowStepsInput) SetSteps(v []*StepConfig) *AddJobFlowStepsInput {
	s.Steps = v
	return s
}

// The output for the AddJobFlowSteps operation.
type AddJobFlowStepsOutput struct {
	_ struct{} `type:"structure"`

	// The identifiers of the list of steps added to the job flow.
	StepIds []*string `type:"list"`
}

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

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

// SetStepIds sets the StepIds field's value.
func (s *AddJobFlowStepsOutput) SetStepIds(v []*string) *AddJobFlowStepsOutput {
	s.StepIds = v
	return s
}

// This input identifies an Amazon EMR resource and a list of tags to attach.
type AddTagsInput struct {
	_ struct{} `type:"structure"`

	// The Amazon EMR resource identifier to which tags will be added. For example,
	// a cluster identifier or an Amazon EMR Studio ID.
	//
	// ResourceId is a required field
	ResourceId *string `type:"string" required:"true"`

	// A list of tags to associate with a resource. Tags are user-defined key-value
	// pairs that consist of a required key string with a maximum of 128 characters,
	// and an optional value string with a maximum of 256 characters.
	//
	// Tags is a required field
	Tags []*Tag `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 AddTagsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

// This output indicates the result of adding tags to a resource.
type AddTagsOutput 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 AddTagsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// With Amazon EMR release version 4.0 and later, the only accepted parameter
// is the application name. To pass arguments to applications, you use configuration
// classifications specified using configuration JSON objects. For more information,
// see Configuring Applications (https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html).
//
// With earlier Amazon EMR releases, the application is any Amazon or third-party
// software that you can add to the cluster. This structure contains a list
// of strings that indicates the software to use with the cluster and accepts
// a user argument list. Amazon EMR accepts and forwards the argument list to
// the corresponding installation script as bootstrap action argument.
type Application struct {
	_ struct{} `type:"structure"`

	// This option is for advanced users only. This is meta information about third-party
	// applications that third-party vendors use for testing purposes.
	AdditionalInfo map[string]*string `type:"map"`

	// Arguments for Amazon EMR to pass to the application.
	Args []*string `type:"list"`

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

	// The version of the application.
	Version *string `type:"string"`
}

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

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

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

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

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

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

// An automatic scaling policy for a core instance group or task instance group
// in an Amazon EMR cluster. An automatic scaling policy defines how an instance
// group dynamically adds and terminates Amazon EC2 instances in response to
// the value of a CloudWatch metric. See PutAutoScalingPolicy.
type AutoScalingPolicy struct {
	_ struct{} `type:"structure"`

	// The upper and lower Amazon EC2 instance limits for an automatic scaling policy.
	// Automatic scaling activity will not cause an instance group to grow above
	// or below these limits.
	//
	// Constraints is a required field
	Constraints *ScalingConstraints `type:"structure" required:"true"`

	// The scale-in and scale-out rules that comprise the automatic scaling policy.
	//
	// Rules is a required field
	Rules []*ScalingRule `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 AutoScalingPolicy) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetConstraints sets the Constraints field's value.
func (s *AutoScalingPolicy) SetConstraints(v *ScalingConstraints) *AutoScalingPolicy {
	s.Constraints = v
	return s
}

// SetRules sets the Rules field's value.
func (s *AutoScalingPolicy) SetRules(v []*ScalingRule) *AutoScalingPolicy {
	s.Rules = v
	return s
}

// An automatic scaling policy for a core instance group or task instance group
// in an Amazon EMR cluster. The automatic scaling policy defines how an instance
// group dynamically adds and terminates Amazon EC2 instances in response to
// the value of a CloudWatch metric. See PutAutoScalingPolicy.
type AutoScalingPolicyDescription struct {
	_ struct{} `type:"structure"`

	// The upper and lower Amazon EC2 instance limits for an automatic scaling policy.
	// Automatic scaling activity will not cause an instance group to grow above
	// or below these limits.
	Constraints *ScalingConstraints `type:"structure"`

	// The scale-in and scale-out rules that comprise the automatic scaling policy.
	Rules []*ScalingRule `type:"list"`

	// The status of an automatic scaling policy.
	Status *AutoScalingPolicyStatus `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 AutoScalingPolicyDescription) String() string {
	return awsutil.Prettify(s)
}

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

// SetConstraints sets the Constraints field's value.
func (s *AutoScalingPolicyDescription) SetConstraints(v *ScalingConstraints) *AutoScalingPolicyDescription {
	s.Constraints = v
	return s
}

// SetRules sets the Rules field's value.
func (s *AutoScalingPolicyDescription) SetRules(v []*ScalingRule) *AutoScalingPolicyDescription {
	s.Rules = v
	return s
}

// SetStatus sets the Status field's value.
func (s *AutoScalingPolicyDescription) SetStatus(v *AutoScalingPolicyStatus) *AutoScalingPolicyDescription {
	s.Status = v
	return s
}

// The reason for an AutoScalingPolicyStatus change.
type AutoScalingPolicyStateChangeReason struct {
	_ struct{} `type:"structure"`

	// The code indicating the reason for the change in status.USER_REQUEST indicates
	// that the scaling policy status was changed by a user. PROVISION_FAILURE indicates
	// that the status change was because the policy failed to provision. CLEANUP_FAILURE
	// indicates an error.
	Code *string `type:"string" enum:"AutoScalingPolicyStateChangeReasonCode"`

	// A friendly, more verbose message that accompanies an automatic scaling policy
	// state change.
	Message *string `type:"string"`
}

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

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

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

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

// The status of an automatic scaling policy.
type AutoScalingPolicyStatus struct {
	_ struct{} `type:"structure"`

	// Indicates the status of the automatic scaling policy.
	State *string `type:"string" enum:"AutoScalingPolicyState"`

	// The reason for a change in status.
	StateChangeReason *AutoScalingPolicyStateChangeReason `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 AutoScalingPolicyStatus) String() string {
	return awsutil.Prettify(s)
}

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

// SetState sets the State field's value.
func (s *AutoScalingPolicyStatus) SetState(v string) *AutoScalingPolicyStatus {
	s.State = &v
	return s
}

// SetStateChangeReason sets the StateChangeReason field's value.
func (s *AutoScalingPolicyStatus) SetStateChangeReason(v *AutoScalingPolicyStateChangeReason) *AutoScalingPolicyStatus {
	s.StateChangeReason = v
	return s
}

// An auto-termination policy for an Amazon EMR cluster. An auto-termination
// policy defines the amount of idle time in seconds after which a cluster automatically
// terminates. For alternative cluster termination options, see Control cluster
// termination (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-termination.html).
type AutoTerminationPolicy struct {
	_ struct{} `type:"structure"`

	// Specifies the amount of idle time in seconds after which the cluster automatically
	// terminates. You can specify a minimum of 60 seconds and a maximum of 604800
	// seconds (seven days).
	IdleTimeout *int64 `type:"long"`
}

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

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

// SetIdleTimeout sets the IdleTimeout field's value.
func (s *AutoTerminationPolicy) SetIdleTimeout(v int64) *AutoTerminationPolicy {
	s.IdleTimeout = &v
	return s
}

// A configuration for Amazon EMR block public access. When BlockPublicSecurityGroupRules
// is set to true, Amazon EMR prevents cluster creation if one of the cluster's
// security groups has a rule that allows inbound traffic from 0.0.0.0/0 or
// ::/0 on a port, unless the port is specified as an exception using PermittedPublicSecurityGroupRuleRanges.
type BlockPublicAccessConfiguration struct {
	_ struct{} `type:"structure"`

	// Indicates whether Amazon EMR block public access is enabled (true) or disabled
	// (false). By default, the value is false for accounts that have created Amazon
	// EMR clusters before July 2019. For accounts created after this, the default
	// is true.
	//
	// BlockPublicSecurityGroupRules is a required field
	BlockPublicSecurityGroupRules *bool `type:"boolean" required:"true"`

	// Specifies ports and port ranges that are permitted to have security group
	// rules that allow inbound traffic from all public sources. For example, if
	// Port 23 (Telnet) is specified for PermittedPublicSecurityGroupRuleRanges,
	// Amazon EMR allows cluster creation if a security group associated with the
	// cluster has a rule that allows inbound traffic on Port 23 from IPv4 0.0.0.0/0
	// or IPv6 port ::/0 as the source.
	//
	// By default, Port 22, which is used for SSH access to the cluster Amazon EC2
	// instances, is in the list of PermittedPublicSecurityGroupRuleRanges.
	PermittedPublicSecurityGroupRuleRanges []*PortRange `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 BlockPublicAccessConfiguration) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetBlockPublicSecurityGroupRules sets the BlockPublicSecurityGroupRules field's value.
func (s *BlockPublicAccessConfiguration) SetBlockPublicSecurityGroupRules(v bool) *BlockPublicAccessConfiguration {
	s.BlockPublicSecurityGroupRules = &v
	return s
}

// SetPermittedPublicSecurityGroupRuleRanges sets the PermittedPublicSecurityGroupRuleRanges field's value.
func (s *BlockPublicAccessConfiguration) SetPermittedPublicSecurityGroupRuleRanges(v []*PortRange) *BlockPublicAccessConfiguration {
	s.PermittedPublicSecurityGroupRuleRanges = v
	return s
}

// Properties that describe the Amazon Web Services principal that created the
// BlockPublicAccessConfiguration using the PutBlockPublicAccessConfiguration
// action as well as the date and time that the configuration was created. Each
// time a configuration for block public access is updated, Amazon EMR updates
// this metadata.
type BlockPublicAccessConfigurationMetadata struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name that created or last modified the configuration.
	//
	// CreatedByArn is a required field
	CreatedByArn *string `min:"20" type:"string" required:"true"`

	// The date and time that the configuration was created.
	//
	// CreationDateTime is a required field
	CreationDateTime *time.Time `type:"timestamp" 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 BlockPublicAccessConfigurationMetadata) String() string {
	return awsutil.Prettify(s)
}

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

// SetCreatedByArn sets the CreatedByArn field's value.
func (s *BlockPublicAccessConfigurationMetadata) SetCreatedByArn(v string) *BlockPublicAccessConfigurationMetadata {
	s.CreatedByArn = &v
	return s
}

// SetCreationDateTime sets the CreationDateTime field's value.
func (s *BlockPublicAccessConfigurationMetadata) SetCreationDateTime(v time.Time) *BlockPublicAccessConfigurationMetadata {
	s.CreationDateTime = &v
	return s
}

// Configuration of a bootstrap action.
type BootstrapActionConfig struct {
	_ struct{} `type:"structure"`

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

	// The script run by the bootstrap action.
	//
	// ScriptBootstrapAction is a required field
	ScriptBootstrapAction *ScriptBootstrapActionConfig `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 BootstrapActionConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

// SetScriptBootstrapAction sets the ScriptBootstrapAction field's value.
func (s *BootstrapActionConfig) SetScriptBootstrapAction(v *ScriptBootstrapActionConfig) *BootstrapActionConfig {
	s.ScriptBootstrapAction = v
	return s
}

// Reports the configuration of a bootstrap action in a cluster (job flow).
type BootstrapActionDetail struct {
	_ struct{} `type:"structure"`

	// A description of the bootstrap action.
	BootstrapActionConfig *BootstrapActionConfig `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 BootstrapActionDetail) String() string {
	return awsutil.Prettify(s)
}

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

// SetBootstrapActionConfig sets the BootstrapActionConfig field's value.
func (s *BootstrapActionDetail) SetBootstrapActionConfig(v *BootstrapActionConfig) *BootstrapActionDetail {
	s.BootstrapActionConfig = v
	return s
}

// Specification of the status of a CancelSteps request. Available only in Amazon
// EMR version 4.8.0 and later, excluding version 5.0.0.
type CancelStepsInfo struct {
	_ struct{} `type:"structure"`

	// The reason for the failure if the CancelSteps request fails.
	Reason *string `type:"string"`

	// The status of a CancelSteps Request. The value may be SUBMITTED or FAILED.
	Status *string `type:"string" enum:"CancelStepsRequestStatus"`

	// The encrypted StepId of a step.
	StepId *string `type:"string"`
}

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

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

// SetReason sets the Reason field's value.
func (s *CancelStepsInfo) SetReason(v string) *CancelStepsInfo {
	s.Reason = &v
	return s
}

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

// SetStepId sets the StepId field's value.
func (s *CancelStepsInfo) SetStepId(v string) *CancelStepsInfo {
	s.StepId = &v
	return s
}

// The input argument to the CancelSteps operation.
type CancelStepsInput struct {
	_ struct{} `type:"structure"`

	// The ClusterID for the specified steps that will be canceled. Use RunJobFlow
	// and ListClusters to get ClusterIDs.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// The option to choose to cancel RUNNING steps. By default, the value is SEND_INTERRUPT.
	StepCancellationOption *string `type:"string" enum:"StepCancellationOption"`

	// The list of StepIDs to cancel. Use ListSteps to get steps and their states
	// for the specified cluster.
	//
	// StepIds is a required field
	StepIds []*string `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 CancelStepsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *CancelStepsInput) SetClusterId(v string) *CancelStepsInput {
	s.ClusterId = &v
	return s
}

// SetStepCancellationOption sets the StepCancellationOption field's value.
func (s *CancelStepsInput) SetStepCancellationOption(v string) *CancelStepsInput {
	s.StepCancellationOption = &v
	return s
}

// SetStepIds sets the StepIds field's value.
func (s *CancelStepsInput) SetStepIds(v []*string) *CancelStepsInput {
	s.StepIds = v
	return s
}

// The output for the CancelSteps operation.
type CancelStepsOutput struct {
	_ struct{} `type:"structure"`

	// A list of CancelStepsInfo, which shows the status of specified cancel requests
	// for each StepID specified.
	CancelStepsInfoList []*CancelStepsInfo `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 CancelStepsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetCancelStepsInfoList sets the CancelStepsInfoList field's value.
func (s *CancelStepsOutput) SetCancelStepsInfoList(v []*CancelStepsInfo) *CancelStepsOutput {
	s.CancelStepsInfoList = v
	return s
}

// The definition of a CloudWatch metric alarm, which determines when an automatic
// scaling activity is triggered. When the defined alarm conditions are satisfied,
// scaling activity begins.
type CloudWatchAlarmDefinition struct {
	_ struct{} `type:"structure"`

	// Determines how the metric specified by MetricName is compared to the value
	// specified by Threshold.
	//
	// ComparisonOperator is a required field
	ComparisonOperator *string `type:"string" required:"true" enum:"ComparisonOperator"`

	// A CloudWatch metric dimension.
	Dimensions []*MetricDimension `type:"list"`

	// The number of periods, in five-minute increments, during which the alarm
	// condition must exist before the alarm triggers automatic scaling activity.
	// The default value is 1.
	EvaluationPeriods *int64 `type:"integer"`

	// The name of the CloudWatch metric that is watched to determine an alarm condition.
	//
	// MetricName is a required field
	MetricName *string `type:"string" required:"true"`

	// The namespace for the CloudWatch metric. The default is AWS/ElasticMapReduce.
	Namespace *string `type:"string"`

	// The period, in seconds, over which the statistic is applied. CloudWatch metrics
	// for Amazon EMR are emitted every five minutes (300 seconds), so if you specify
	// a CloudWatch metric, specify 300.
	//
	// Period is a required field
	Period *int64 `type:"integer" required:"true"`

	// The statistic to apply to the metric associated with the alarm. The default
	// is AVERAGE.
	Statistic *string `type:"string" enum:"Statistic"`

	// The value against which the specified statistic is compared.
	//
	// Threshold is a required field
	Threshold *float64 `type:"double" required:"true"`

	// The unit of measure associated with the CloudWatch metric being watched.
	// The value specified for Unit must correspond to the units specified in the
	// CloudWatch metric.
	Unit *string `type:"string" enum:"Unit"`
}

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

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

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

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

// SetComparisonOperator sets the ComparisonOperator field's value.
func (s *CloudWatchAlarmDefinition) SetComparisonOperator(v string) *CloudWatchAlarmDefinition {
	s.ComparisonOperator = &v
	return s
}

// SetDimensions sets the Dimensions field's value.
func (s *CloudWatchAlarmDefinition) SetDimensions(v []*MetricDimension) *CloudWatchAlarmDefinition {
	s.Dimensions = v
	return s
}

// SetEvaluationPeriods sets the EvaluationPeriods field's value.
func (s *CloudWatchAlarmDefinition) SetEvaluationPeriods(v int64) *CloudWatchAlarmDefinition {
	s.EvaluationPeriods = &v
	return s
}

// SetMetricName sets the MetricName field's value.
func (s *CloudWatchAlarmDefinition) SetMetricName(v string) *CloudWatchAlarmDefinition {
	s.MetricName = &v
	return s
}

// SetNamespace sets the Namespace field's value.
func (s *CloudWatchAlarmDefinition) SetNamespace(v string) *CloudWatchAlarmDefinition {
	s.Namespace = &v
	return s
}

// SetPeriod sets the Period field's value.
func (s *CloudWatchAlarmDefinition) SetPeriod(v int64) *CloudWatchAlarmDefinition {
	s.Period = &v
	return s
}

// SetStatistic sets the Statistic field's value.
func (s *CloudWatchAlarmDefinition) SetStatistic(v string) *CloudWatchAlarmDefinition {
	s.Statistic = &v
	return s
}

// SetThreshold sets the Threshold field's value.
func (s *CloudWatchAlarmDefinition) SetThreshold(v float64) *CloudWatchAlarmDefinition {
	s.Threshold = &v
	return s
}

// SetUnit sets the Unit field's value.
func (s *CloudWatchAlarmDefinition) SetUnit(v string) *CloudWatchAlarmDefinition {
	s.Unit = &v
	return s
}

// The detailed description of the cluster.
type Cluster struct {
	_ struct{} `type:"structure"`

	// The applications installed on this cluster.
	Applications []*Application `type:"list"`

	// An IAM role for automatic scaling policies. The default role is EMR_AutoScaling_DefaultRole.
	// The IAM role provides permissions that the automatic scaling feature requires
	// to launch and terminate Amazon EC2 instances in an instance group.
	AutoScalingRole *string `type:"string"`

	// Specifies whether the cluster should terminate after completing all steps.
	AutoTerminate *bool `type:"boolean"`

	// The Amazon Resource Name of the cluster.
	ClusterArn *string `min:"20" type:"string"`

	// Applies only to Amazon EMR releases 4.x and later. The list of configurations
	// that are supplied to the Amazon EMR cluster.
	Configurations []*Configuration `type:"list"`

	// Available only in Amazon EMR releases 5.7.0 and later. The ID of a custom
	// Amazon EBS-backed Linux AMI if the cluster uses a custom AMI.
	CustomAmiId *string `type:"string"`

	// The IOPS, of the Amazon EBS root device volume of the Linux AMI that is used
	// for each Amazon EC2 instance. Available in Amazon EMR releases 6.15.0 and
	// later.
	EbsRootVolumeIops *int64 `type:"integer"`

	// The size, in GiB, of the Amazon EBS root device volume of the Linux AMI that
	// is used for each Amazon EC2 instance. Available in Amazon EMR releases 4.x
	// and later.
	EbsRootVolumeSize *int64 `type:"integer"`

	// The throughput, in MiB/s, of the Amazon EBS root device volume of the Linux
	// AMI that is used for each Amazon EC2 instance. Available in Amazon EMR releases
	// 6.15.0 and later.
	EbsRootVolumeThroughput *int64 `type:"integer"`

	// Provides information about the Amazon EC2 instances in a cluster grouped
	// by category. For example, key name, subnet ID, IAM instance profile, and
	// so on.
	Ec2InstanceAttributes *Ec2InstanceAttributes `type:"structure"`

	// The unique identifier for the cluster.
	Id *string `type:"string"`

	//
	// The instance fleet configuration is available only in Amazon EMR releases
	// 4.8.0 and later, excluding 5.0.x versions.
	//
	// The instance group configuration of the cluster. A value of INSTANCE_GROUP
	// indicates a uniform instance group configuration. A value of INSTANCE_FLEET
	// indicates an instance fleets configuration.
	InstanceCollectionType *string `type:"string" enum:"InstanceCollectionType"`

	// Attributes for Kerberos configuration when Kerberos authentication is enabled
	// using a security configuration. For more information see Use Kerberos Authentication
	// (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html)
	// in the Amazon EMR Management Guide.
	KerberosAttributes *KerberosAttributes `type:"structure"`

	// The KMS key used for encrypting log files. This attribute is only available
	// with Amazon EMR 5.30.0 and later, excluding Amazon EMR 6.0.0.
	LogEncryptionKmsKeyId *string `type:"string"`

	// The path to the Amazon S3 location where logs for this cluster are stored.
	LogUri *string `type:"string"`

	// The DNS name of the master node. If the cluster is on a private subnet, this
	// is the private DNS name. On a public subnet, this is the public DNS name.
	MasterPublicDnsName *string `type:"string"`

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

	// An approximation of the cost of the cluster, represented in m1.small/hours.
	// This value is incremented one time for every hour an m1.small instance runs.
	// Larger instances are weighted more, so an Amazon EC2 instance that is roughly
	// four times more expensive would result in the normalized instance hours being
	// incremented by four. This result is only an approximation and does not reflect
	// the actual billing rate.
	NormalizedInstanceHours *int64 `type:"integer"`

	// The Amazon Linux release specified in a cluster launch RunJobFlow request.
	// If no Amazon Linux release was specified, the default Amazon Linux release
	// is shown in the response.
	OSReleaseLabel *string `type:"string"`

	// The Amazon Resource Name (ARN) of the Outpost where the cluster is launched.
	OutpostArn *string `type:"string"`

	// Placement group configured for an Amazon EMR cluster.
	PlacementGroups []*PlacementGroupConfig `type:"list"`

	// The Amazon EMR release label, which determines the version of open-source
	// application packages installed on the cluster. Release labels are in the
	// form emr-x.x.x, where x.x.x is an Amazon EMR release version such as emr-5.14.0.
	// For more information about Amazon EMR release versions and included application
	// versions and features, see https://docs.aws.amazon.com/emr/latest/ReleaseGuide/
	// (https://docs.aws.amazon.com/emr/latest/ReleaseGuide/). The release label
	// applies only to Amazon EMR releases version 4.0 and later. Earlier versions
	// use AmiVersion.
	ReleaseLabel *string `type:"string"`

	// Applies only when CustomAmiID is used. Specifies the type of updates that
	// the Amazon Linux AMI package repositories apply when an instance boots using
	// the AMI.
	RepoUpgradeOnBoot *string `type:"string" enum:"RepoUpgradeOnBoot"`

	// The AMI version requested for this cluster.
	RequestedAmiVersion *string `type:"string"`

	// The AMI version running on this cluster.
	RunningAmiVersion *string `type:"string"`

	// The way that individual Amazon EC2 instances terminate when an automatic
	// scale-in activity occurs or an instance group is resized. TERMINATE_AT_INSTANCE_HOUR
	// indicates that Amazon EMR terminates nodes at the instance-hour boundary,
	// regardless of when the request to terminate the instance was submitted. This
	// option is only available with Amazon EMR 5.1.0 and later and is the default
	// for clusters created using that version. TERMINATE_AT_TASK_COMPLETION indicates
	// that Amazon EMR adds nodes to a deny list and drains tasks from nodes before
	// terminating the Amazon EC2 instances, regardless of the instance-hour boundary.
	// With either behavior, Amazon EMR removes the least active nodes first and
	// blocks instance termination if it could lead to HDFS corruption. TERMINATE_AT_TASK_COMPLETION
	// is available only in Amazon EMR releases 4.1.0 and later, and is the default
	// for versions of Amazon EMR earlier than 5.1.0.
	ScaleDownBehavior *string `type:"string" enum:"ScaleDownBehavior"`

	// The name of the security configuration applied to the cluster.
	SecurityConfiguration *string `type:"string"`

	// The IAM role that Amazon EMR assumes in order to access Amazon Web Services
	// resources on your behalf.
	ServiceRole *string `type:"string"`

	// The current status details about the cluster.
	Status *ClusterStatus `type:"structure"`

	// Specifies the number of steps that can be executed concurrently.
	StepConcurrencyLevel *int64 `type:"integer"`

	// A list of tags associated with a cluster.
	Tags []*Tag `type:"list"`

	// Indicates whether Amazon EMR will lock the cluster to prevent the Amazon
	// EC2 instances from being terminated by an API call or user intervention,
	// or in the event of a cluster error.
	TerminationProtected *bool `type:"boolean"`

	// Indicates whether the cluster is visible to IAM principals in the Amazon
	// Web Services account associated with the cluster. When true, IAM principals
	// in the Amazon Web Services account can perform Amazon EMR cluster actions
	// on the cluster that their IAM policies allow. When false, only the IAM principal
	// that created the cluster and the Amazon Web Services account root user can
	// perform Amazon EMR actions, regardless of IAM permissions policies attached
	// to other IAM principals.
	//
	// The default value is true if a value is not provided when creating a cluster
	// using the Amazon EMR API RunJobFlow command, the CLI create-cluster (https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html)
	// command, or the Amazon Web Services Management Console.
	VisibleToAllUsers *bool `type:"boolean"`
}

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

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

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

// SetAutoScalingRole sets the AutoScalingRole field's value.
func (s *Cluster) SetAutoScalingRole(v string) *Cluster {
	s.AutoScalingRole = &v
	return s
}

// SetAutoTerminate sets the AutoTerminate field's value.
func (s *Cluster) SetAutoTerminate(v bool) *Cluster {
	s.AutoTerminate = &v
	return s
}

// SetClusterArn sets the ClusterArn field's value.
func (s *Cluster) SetClusterArn(v string) *Cluster {
	s.ClusterArn = &v
	return s
}

// SetConfigurations sets the Configurations field's value.
func (s *Cluster) SetConfigurations(v []*Configuration) *Cluster {
	s.Configurations = v
	return s
}

// SetCustomAmiId sets the CustomAmiId field's value.
func (s *Cluster) SetCustomAmiId(v string) *Cluster {
	s.CustomAmiId = &v
	return s
}

// SetEbsRootVolumeIops sets the EbsRootVolumeIops field's value.
func (s *Cluster) SetEbsRootVolumeIops(v int64) *Cluster {
	s.EbsRootVolumeIops = &v
	return s
}

// SetEbsRootVolumeSize sets the EbsRootVolumeSize field's value.
func (s *Cluster) SetEbsRootVolumeSize(v int64) *Cluster {
	s.EbsRootVolumeSize = &v
	return s
}

// SetEbsRootVolumeThroughput sets the EbsRootVolumeThroughput field's value.
func (s *Cluster) SetEbsRootVolumeThroughput(v int64) *Cluster {
	s.EbsRootVolumeThroughput = &v
	return s
}

// SetEc2InstanceAttributes sets the Ec2InstanceAttributes field's value.
func (s *Cluster) SetEc2InstanceAttributes(v *Ec2InstanceAttributes) *Cluster {
	s.Ec2InstanceAttributes = v
	return s
}

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

// SetInstanceCollectionType sets the InstanceCollectionType field's value.
func (s *Cluster) SetInstanceCollectionType(v string) *Cluster {
	s.InstanceCollectionType = &v
	return s
}

// SetKerberosAttributes sets the KerberosAttributes field's value.
func (s *Cluster) SetKerberosAttributes(v *KerberosAttributes) *Cluster {
	s.KerberosAttributes = v
	return s
}

// SetLogEncryptionKmsKeyId sets the LogEncryptionKmsKeyId field's value.
func (s *Cluster) SetLogEncryptionKmsKeyId(v string) *Cluster {
	s.LogEncryptionKmsKeyId = &v
	return s
}

// SetLogUri sets the LogUri field's value.
func (s *Cluster) SetLogUri(v string) *Cluster {
	s.LogUri = &v
	return s
}

// SetMasterPublicDnsName sets the MasterPublicDnsName field's value.
func (s *Cluster) SetMasterPublicDnsName(v string) *Cluster {
	s.MasterPublicDnsName = &v
	return s
}

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

// SetNormalizedInstanceHours sets the NormalizedInstanceHours field's value.
func (s *Cluster) SetNormalizedInstanceHours(v int64) *Cluster {
	s.NormalizedInstanceHours = &v
	return s
}

// SetOSReleaseLabel sets the OSReleaseLabel field's value.
func (s *Cluster) SetOSReleaseLabel(v string) *Cluster {
	s.OSReleaseLabel = &v
	return s
}

// SetOutpostArn sets the OutpostArn field's value.
func (s *Cluster) SetOutpostArn(v string) *Cluster {
	s.OutpostArn = &v
	return s
}

// SetPlacementGroups sets the PlacementGroups field's value.
func (s *Cluster) SetPlacementGroups(v []*PlacementGroupConfig) *Cluster {
	s.PlacementGroups = v
	return s
}

// SetReleaseLabel sets the ReleaseLabel field's value.
func (s *Cluster) SetReleaseLabel(v string) *Cluster {
	s.ReleaseLabel = &v
	return s
}

// SetRepoUpgradeOnBoot sets the RepoUpgradeOnBoot field's value.
func (s *Cluster) SetRepoUpgradeOnBoot(v string) *Cluster {
	s.RepoUpgradeOnBoot = &v
	return s
}

// SetRequestedAmiVersion sets the RequestedAmiVersion field's value.
func (s *Cluster) SetRequestedAmiVersion(v string) *Cluster {
	s.RequestedAmiVersion = &v
	return s
}

// SetRunningAmiVersion sets the RunningAmiVersion field's value.
func (s *Cluster) SetRunningAmiVersion(v string) *Cluster {
	s.RunningAmiVersion = &v
	return s
}

// SetScaleDownBehavior sets the ScaleDownBehavior field's value.
func (s *Cluster) SetScaleDownBehavior(v string) *Cluster {
	s.ScaleDownBehavior = &v
	return s
}

// SetSecurityConfiguration sets the SecurityConfiguration field's value.
func (s *Cluster) SetSecurityConfiguration(v string) *Cluster {
	s.SecurityConfiguration = &v
	return s
}

// SetServiceRole sets the ServiceRole field's value.
func (s *Cluster) SetServiceRole(v string) *Cluster {
	s.ServiceRole = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *Cluster) SetStatus(v *ClusterStatus) *Cluster {
	s.Status = v
	return s
}

// SetStepConcurrencyLevel sets the StepConcurrencyLevel field's value.
func (s *Cluster) SetStepConcurrencyLevel(v int64) *Cluster {
	s.StepConcurrencyLevel = &v
	return s
}

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

// SetTerminationProtected sets the TerminationProtected field's value.
func (s *Cluster) SetTerminationProtected(v bool) *Cluster {
	s.TerminationProtected = &v
	return s
}

// SetVisibleToAllUsers sets the VisibleToAllUsers field's value.
func (s *Cluster) SetVisibleToAllUsers(v bool) *Cluster {
	s.VisibleToAllUsers = &v
	return s
}

// The reason that the cluster changed to its current state.
type ClusterStateChangeReason struct {
	_ struct{} `type:"structure"`

	// The programmatic code for the state change reason.
	Code *string `type:"string" enum:"ClusterStateChangeReasonCode"`

	// The descriptive message for the state change reason.
	Message *string `type:"string"`
}

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

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

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

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

// The detailed status of the cluster.
type ClusterStatus struct {
	_ struct{} `type:"structure"`

	// A list of tuples that provides information about the errors that caused a
	// cluster to terminate. This structure can contain up to 10 different ErrorDetail
	// tuples.
	ErrorDetails []*ErrorDetail `type:"list"`

	// The current state of the cluster.
	State *string `type:"string" enum:"ClusterState"`

	// The reason for the cluster status change.
	StateChangeReason *ClusterStateChangeReason `type:"structure"`

	// A timeline that represents the status of a cluster over the lifetime of the
	// cluster.
	Timeline *ClusterTimeline `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 ClusterStatus) String() string {
	return awsutil.Prettify(s)
}

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

// SetErrorDetails sets the ErrorDetails field's value.
func (s *ClusterStatus) SetErrorDetails(v []*ErrorDetail) *ClusterStatus {
	s.ErrorDetails = v
	return s
}

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

// SetStateChangeReason sets the StateChangeReason field's value.
func (s *ClusterStatus) SetStateChangeReason(v *ClusterStateChangeReason) *ClusterStatus {
	s.StateChangeReason = v
	return s
}

// SetTimeline sets the Timeline field's value.
func (s *ClusterStatus) SetTimeline(v *ClusterTimeline) *ClusterStatus {
	s.Timeline = v
	return s
}

// The summary description of the cluster.
type ClusterSummary struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name of the cluster.
	ClusterArn *string `min:"20" type:"string"`

	// The unique identifier for the cluster.
	Id *string `type:"string"`

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

	// An approximation of the cost of the cluster, represented in m1.small/hours.
	// This value is incremented one time for every hour an m1.small instance runs.
	// Larger instances are weighted more, so an Amazon EC2 instance that is roughly
	// four times more expensive would result in the normalized instance hours being
	// incremented by four. This result is only an approximation and does not reflect
	// the actual billing rate.
	NormalizedInstanceHours *int64 `type:"integer"`

	// The Amazon Resource Name (ARN) of the Outpost where the cluster is launched.
	OutpostArn *string `type:"string"`

	// The details about the current status of the cluster.
	Status *ClusterStatus `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 ClusterSummary) String() string {
	return awsutil.Prettify(s)
}

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

// SetClusterArn sets the ClusterArn field's value.
func (s *ClusterSummary) SetClusterArn(v string) *ClusterSummary {
	s.ClusterArn = &v
	return s
}

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

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

// SetNormalizedInstanceHours sets the NormalizedInstanceHours field's value.
func (s *ClusterSummary) SetNormalizedInstanceHours(v int64) *ClusterSummary {
	s.NormalizedInstanceHours = &v
	return s
}

// SetOutpostArn sets the OutpostArn field's value.
func (s *ClusterSummary) SetOutpostArn(v string) *ClusterSummary {
	s.OutpostArn = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *ClusterSummary) SetStatus(v *ClusterStatus) *ClusterSummary {
	s.Status = v
	return s
}

// Represents the timeline of the cluster's lifecycle.
type ClusterTimeline struct {
	_ struct{} `type:"structure"`

	// The creation date and time of the cluster.
	CreationDateTime *time.Time `type:"timestamp"`

	// The date and time when the cluster was terminated.
	EndDateTime *time.Time `type:"timestamp"`

	// The date and time when the cluster was ready to run steps.
	ReadyDateTime *time.Time `type:"timestamp"`
}

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

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

// SetCreationDateTime sets the CreationDateTime field's value.
func (s *ClusterTimeline) SetCreationDateTime(v time.Time) *ClusterTimeline {
	s.CreationDateTime = &v
	return s
}

// SetEndDateTime sets the EndDateTime field's value.
func (s *ClusterTimeline) SetEndDateTime(v time.Time) *ClusterTimeline {
	s.EndDateTime = &v
	return s
}

// SetReadyDateTime sets the ReadyDateTime field's value.
func (s *ClusterTimeline) SetReadyDateTime(v time.Time) *ClusterTimeline {
	s.ReadyDateTime = &v
	return s
}

// An entity describing an executable that runs on a cluster.
type Command struct {
	_ struct{} `type:"structure"`

	// Arguments for Amazon EMR to pass to the command for execution.
	Args []*string `type:"list"`

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

	// The Amazon S3 location of the command script.
	ScriptPath *string `type:"string"`
}

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

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

// SetArgs sets the Args field's value.
func (s *Command) SetArgs(v []*string) *Command {
	s.Args = v
	return s
}

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

// SetScriptPath sets the ScriptPath field's value.
func (s *Command) SetScriptPath(v string) *Command {
	s.ScriptPath = &v
	return s
}

// The Amazon EC2 unit limits for a managed scaling policy. The managed scaling
// activity of a cluster can not be above or below these limits. The limit only
// applies to the core and task nodes. The master node cannot be scaled after
// initial configuration.
type ComputeLimits struct {
	_ struct{} `type:"structure"`

	// The upper boundary of Amazon EC2 units. It is measured through vCPU cores
	// or instances for instance groups and measured through units for instance
	// fleets. Managed scaling activities are not allowed beyond this boundary.
	// The limit only applies to the core and task nodes. The master node cannot
	// be scaled after initial configuration.
	//
	// MaximumCapacityUnits is a required field
	MaximumCapacityUnits *int64 `type:"integer" required:"true"`

	// The upper boundary of Amazon EC2 units for core node type in a cluster. It
	// is measured through vCPU cores or instances for instance groups and measured
	// through units for instance fleets. The core units are not allowed to scale
	// beyond this boundary. The parameter is used to split capacity allocation
	// between core and task nodes.
	MaximumCoreCapacityUnits *int64 `type:"integer"`

	// The upper boundary of On-Demand Amazon EC2 units. It is measured through
	// vCPU cores or instances for instance groups and measured through units for
	// instance fleets. The On-Demand units are not allowed to scale beyond this
	// boundary. The parameter is used to split capacity allocation between On-Demand
	// and Spot Instances.
	MaximumOnDemandCapacityUnits *int64 `type:"integer"`

	// The lower boundary of Amazon EC2 units. It is measured through vCPU cores
	// or instances for instance groups and measured through units for instance
	// fleets. Managed scaling activities are not allowed beyond this boundary.
	// The limit only applies to the core and task nodes. The master node cannot
	// be scaled after initial configuration.
	//
	// MinimumCapacityUnits is a required field
	MinimumCapacityUnits *int64 `type:"integer" required:"true"`

	// The unit type used for specifying a managed scaling policy.
	//
	// UnitType is a required field
	UnitType *string `type:"string" required:"true" enum:"ComputeLimitsUnitType"`
}

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

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

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

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

// SetMaximumCapacityUnits sets the MaximumCapacityUnits field's value.
func (s *ComputeLimits) SetMaximumCapacityUnits(v int64) *ComputeLimits {
	s.MaximumCapacityUnits = &v
	return s
}

// SetMaximumCoreCapacityUnits sets the MaximumCoreCapacityUnits field's value.
func (s *ComputeLimits) SetMaximumCoreCapacityUnits(v int64) *ComputeLimits {
	s.MaximumCoreCapacityUnits = &v
	return s
}

// SetMaximumOnDemandCapacityUnits sets the MaximumOnDemandCapacityUnits field's value.
func (s *ComputeLimits) SetMaximumOnDemandCapacityUnits(v int64) *ComputeLimits {
	s.MaximumOnDemandCapacityUnits = &v
	return s
}

// SetMinimumCapacityUnits sets the MinimumCapacityUnits field's value.
func (s *ComputeLimits) SetMinimumCapacityUnits(v int64) *ComputeLimits {
	s.MinimumCapacityUnits = &v
	return s
}

// SetUnitType sets the UnitType field's value.
func (s *ComputeLimits) SetUnitType(v string) *ComputeLimits {
	s.UnitType = &v
	return s
}

// Amazon EMR releases 4.x or later.
//
// An optional configuration specification to be used when provisioning cluster
// instances, which can include configurations for applications and software
// bundled with Amazon EMR. A configuration consists of a classification, properties,
// and optional nested configurations. A classification refers to an application-specific
// configuration file. Properties are the settings you want to change in that
// file. For more information, see Configuring Applications (https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html).
type Configuration struct {
	_ struct{} `type:"structure"`

	// The classification within a configuration.
	Classification *string `type:"string"`

	// A list of additional configurations to apply within a configuration object.
	Configurations []*Configuration `type:"list"`

	// A set of properties specified within a configuration classification.
	Properties map[string]*string `type:"map"`
}

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

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

// SetClassification sets the Classification field's value.
func (s *Configuration) SetClassification(v string) *Configuration {
	s.Classification = &v
	return s
}

// SetConfigurations sets the Configurations field's value.
func (s *Configuration) SetConfigurations(v []*Configuration) *Configuration {
	s.Configurations = v
	return s
}

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

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

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

	// The security configuration details in JSON format. For JSON parameters and
	// examples, see Use Security Configurations to Set Up Cluster Security (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-security-configurations.html)
	// in the Amazon EMR Management Guide.
	//
	// SecurityConfiguration is a required field
	SecurityConfiguration *string `type:"string" required:"true"`
}

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

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

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

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

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

// SetSecurityConfiguration sets the SecurityConfiguration field's value.
func (s *CreateSecurityConfigurationInput) SetSecurityConfiguration(v string) *CreateSecurityConfigurationInput {
	s.SecurityConfiguration = &v
	return s
}

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

	// The date and time the security configuration was created.
	//
	// CreationDateTime is a required field
	CreationDateTime *time.Time `type:"timestamp" required:"true"`

	// The name of the security configuration.
	//
	// Name is a required field
	Name *string `type:"string" required:"true"`
}

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

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

// SetCreationDateTime sets the CreationDateTime field's value.
func (s *CreateSecurityConfigurationOutput) SetCreationDateTime(v time.Time) *CreateSecurityConfigurationOutput {
	s.CreationDateTime = &v
	return s
}

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

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

	// Specifies whether the Studio authenticates users using IAM or IAM Identity
	// Center.
	//
	// AuthMode is a required field
	AuthMode *string `type:"string" required:"true" enum:"AuthMode"`

	// The Amazon S3 location to back up Amazon EMR Studio Workspaces and notebook
	// files.
	//
	// DefaultS3Location is a required field
	DefaultS3Location *string `type:"string" required:"true"`

	// A detailed description of the Amazon EMR Studio.
	Description *string `type:"string"`

	// The KMS key identifier (ARN) used to encrypt Amazon EMR Studio workspace
	// and notebook files when backed up to Amazon S3.
	EncryptionKeyArn *string `type:"string"`

	// The ID of the Amazon EMR Studio Engine security group. The Engine security
	// group allows inbound network traffic from the Workspace security group, and
	// it must be in the same VPC specified by VpcId.
	//
	// EngineSecurityGroupId is a required field
	EngineSecurityGroupId *string `type:"string" required:"true"`

	// The ARN of the IAM Identity Center instance to create the Studio application.
	IdcInstanceArn *string `min:"20" type:"string"`

	// Specifies whether IAM Identity Center user assignment is REQUIRED or OPTIONAL.
	// If the value is set to REQUIRED, users must be explicitly assigned to the
	// Studio application to access the Studio.
	IdcUserAssignment *string `type:"string" enum:"IdcUserAssignment"`

	// The authentication endpoint of your identity provider (IdP). Specify this
	// value when you use IAM authentication and want to let federated users log
	// in to a Studio with the Studio URL and credentials from your IdP. Amazon
	// EMR Studio redirects users to this endpoint to enter credentials.
	IdpAuthUrl *string `type:"string"`

	// The name that your identity provider (IdP) uses for its RelayState parameter.
	// For example, RelayState or TargetSource. Specify this value when you use
	// IAM authentication and want to let federated users log in to a Studio using
	// the Studio URL. The RelayState parameter differs by IdP.
	IdpRelayStateParameterName *string `type:"string"`

	// A descriptive name for the Amazon EMR Studio.
	//
	// Name is a required field
	Name *string `type:"string" required:"true"`

	// The IAM role that the Amazon EMR Studio assumes. The service role provides
	// a way for Amazon EMR Studio to interoperate with other Amazon Web Services
	// services.
	//
	// ServiceRole is a required field
	ServiceRole *string `type:"string" required:"true"`

	// A list of subnet IDs to associate with the Amazon EMR Studio. A Studio can
	// have a maximum of 5 subnets. The subnets must belong to the VPC specified
	// by VpcId. Studio users can create a Workspace in any of the specified subnets.
	//
	// SubnetIds is a required field
	SubnetIds []*string `type:"list" required:"true"`

	// A list of tags to associate with the Amazon EMR Studio. Tags are user-defined
	// key-value pairs that consist of a required key string with a maximum of 128
	// characters, and an optional value string with a maximum of 256 characters.
	Tags []*Tag `type:"list"`

	// A Boolean indicating whether to enable Trusted identity propagation for the
	// Studio. The default value is false.
	TrustedIdentityPropagationEnabled *bool `type:"boolean"`

	// The IAM user role that users and groups assume when logged in to an Amazon
	// EMR Studio. Only specify a UserRole when you use IAM Identity Center authentication.
	// The permissions attached to the UserRole can be scoped down for each user
	// or group using session policies.
	UserRole *string `type:"string"`

	// The ID of the Amazon Virtual Private Cloud (Amazon VPC) to associate with
	// the Studio.
	//
	// VpcId is a required field
	VpcId *string `type:"string" required:"true"`

	// The ID of the Amazon EMR Studio Workspace security group. The Workspace security
	// group allows outbound network traffic to resources in the Engine security
	// group, and it must be in the same VPC specified by VpcId.
	//
	// WorkspaceSecurityGroupId is a required field
	WorkspaceSecurityGroupId *string `type:"string" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateStudioInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateStudioInput"}
	if s.AuthMode == nil {
		invalidParams.Add(request.NewErrParamRequired("AuthMode"))
	}
	if s.DefaultS3Location == nil {
		invalidParams.Add(request.NewErrParamRequired("DefaultS3Location"))
	}
	if s.EngineSecurityGroupId == nil {
		invalidParams.Add(request.NewErrParamRequired("EngineSecurityGroupId"))
	}
	if s.IdcInstanceArn != nil && len(*s.IdcInstanceArn) < 20 {
		invalidParams.Add(request.NewErrParamMinLen("IdcInstanceArn", 20))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.ServiceRole == nil {
		invalidParams.Add(request.NewErrParamRequired("ServiceRole"))
	}
	if s.SubnetIds == nil {
		invalidParams.Add(request.NewErrParamRequired("SubnetIds"))
	}
	if s.VpcId == nil {
		invalidParams.Add(request.NewErrParamRequired("VpcId"))
	}
	if s.WorkspaceSecurityGroupId == nil {
		invalidParams.Add(request.NewErrParamRequired("WorkspaceSecurityGroupId"))
	}

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

// SetAuthMode sets the AuthMode field's value.
func (s *CreateStudioInput) SetAuthMode(v string) *CreateStudioInput {
	s.AuthMode = &v
	return s
}

// SetDefaultS3Location sets the DefaultS3Location field's value.
func (s *CreateStudioInput) SetDefaultS3Location(v string) *CreateStudioInput {
	s.DefaultS3Location = &v
	return s
}

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

// SetEncryptionKeyArn sets the EncryptionKeyArn field's value.
func (s *CreateStudioInput) SetEncryptionKeyArn(v string) *CreateStudioInput {
	s.EncryptionKeyArn = &v
	return s
}

// SetEngineSecurityGroupId sets the EngineSecurityGroupId field's value.
func (s *CreateStudioInput) SetEngineSecurityGroupId(v string) *CreateStudioInput {
	s.EngineSecurityGroupId = &v
	return s
}

// SetIdcInstanceArn sets the IdcInstanceArn field's value.
func (s *CreateStudioInput) SetIdcInstanceArn(v string) *CreateStudioInput {
	s.IdcInstanceArn = &v
	return s
}

// SetIdcUserAssignment sets the IdcUserAssignment field's value.
func (s *CreateStudioInput) SetIdcUserAssignment(v string) *CreateStudioInput {
	s.IdcUserAssignment = &v
	return s
}

// SetIdpAuthUrl sets the IdpAuthUrl field's value.
func (s *CreateStudioInput) SetIdpAuthUrl(v string) *CreateStudioInput {
	s.IdpAuthUrl = &v
	return s
}

// SetIdpRelayStateParameterName sets the IdpRelayStateParameterName field's value.
func (s *CreateStudioInput) SetIdpRelayStateParameterName(v string) *CreateStudioInput {
	s.IdpRelayStateParameterName = &v
	return s
}

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

// SetServiceRole sets the ServiceRole field's value.
func (s *CreateStudioInput) SetServiceRole(v string) *CreateStudioInput {
	s.ServiceRole = &v
	return s
}

// SetSubnetIds sets the SubnetIds field's value.
func (s *CreateStudioInput) SetSubnetIds(v []*string) *CreateStudioInput {
	s.SubnetIds = v
	return s
}

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

// SetTrustedIdentityPropagationEnabled sets the TrustedIdentityPropagationEnabled field's value.
func (s *CreateStudioInput) SetTrustedIdentityPropagationEnabled(v bool) *CreateStudioInput {
	s.TrustedIdentityPropagationEnabled = &v
	return s
}

// SetUserRole sets the UserRole field's value.
func (s *CreateStudioInput) SetUserRole(v string) *CreateStudioInput {
	s.UserRole = &v
	return s
}

// SetVpcId sets the VpcId field's value.
func (s *CreateStudioInput) SetVpcId(v string) *CreateStudioInput {
	s.VpcId = &v
	return s
}

// SetWorkspaceSecurityGroupId sets the WorkspaceSecurityGroupId field's value.
func (s *CreateStudioInput) SetWorkspaceSecurityGroupId(v string) *CreateStudioInput {
	s.WorkspaceSecurityGroupId = &v
	return s
}

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

	// The ID of the Amazon EMR Studio.
	StudioId *string `type:"string"`

	// The unique Studio access URL.
	Url *string `type:"string"`
}

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

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

// SetStudioId sets the StudioId field's value.
func (s *CreateStudioOutput) SetStudioId(v string) *CreateStudioOutput {
	s.StudioId = &v
	return s
}

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

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

	// The globally unique identifier (GUID) of the user or group from the IAM Identity
	// Center Identity Store. For more information, see UserId (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_User.html#singlesignon-Type-User-UserId)
	// and GroupId (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_Group.html#singlesignon-Type-Group-GroupId)
	// in the IAM Identity Center Identity Store API Reference. Either IdentityName
	// or IdentityId must be specified, but not both.
	IdentityId *string `type:"string"`

	// The name of the user or group. For more information, see UserName (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_User.html#singlesignon-Type-User-UserName)
	// and DisplayName (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_Group.html#singlesignon-Type-Group-DisplayName)
	// in the IAM Identity Center Identity Store API Reference. Either IdentityName
	// or IdentityId must be specified, but not both.
	IdentityName *string `type:"string"`

	// Specifies whether the identity to map to the Amazon EMR Studio is a user
	// or a group.
	//
	// IdentityType is a required field
	IdentityType *string `type:"string" required:"true" enum:"IdentityType"`

	// The Amazon Resource Name (ARN) for the session policy that will be applied
	// to the user or group. You should specify the ARN for the session policy that
	// you want to apply, not the ARN of your user role. For more information, see
	// Create an Amazon EMR Studio User Role with Session Policies (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-user-role.html).
	//
	// SessionPolicyArn is a required field
	SessionPolicyArn *string `type:"string" required:"true"`

	// The ID of the Amazon EMR Studio to which the user or group will be mapped.
	//
	// StudioId is a required field
	StudioId *string `type:"string" required:"true"`
}

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

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

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

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

// SetIdentityId sets the IdentityId field's value.
func (s *CreateStudioSessionMappingInput) SetIdentityId(v string) *CreateStudioSessionMappingInput {
	s.IdentityId = &v
	return s
}

// SetIdentityName sets the IdentityName field's value.
func (s *CreateStudioSessionMappingInput) SetIdentityName(v string) *CreateStudioSessionMappingInput {
	s.IdentityName = &v
	return s
}

// SetIdentityType sets the IdentityType field's value.
func (s *CreateStudioSessionMappingInput) SetIdentityType(v string) *CreateStudioSessionMappingInput {
	s.IdentityType = &v
	return s
}

// SetSessionPolicyArn sets the SessionPolicyArn field's value.
func (s *CreateStudioSessionMappingInput) SetSessionPolicyArn(v string) *CreateStudioSessionMappingInput {
	s.SessionPolicyArn = &v
	return s
}

// SetStudioId sets the StudioId field's value.
func (s *CreateStudioSessionMappingInput) SetStudioId(v string) *CreateStudioSessionMappingInput {
	s.StudioId = &v
	return s
}

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

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

// The credentials that you can use to connect to cluster endpoints. Credentials
// consist of a username and a password.
type Credentials struct {
	_ struct{} `type:"structure"`

	// The username and password that you use to connect to cluster endpoints.
	//
	// UsernamePassword is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by Credentials's
	// String and GoString methods.
	UsernamePassword *UsernamePassword `type:"structure" 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 Credentials) String() string {
	return awsutil.Prettify(s)
}

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

// SetUsernamePassword sets the UsernamePassword field's value.
func (s *Credentials) SetUsernamePassword(v *UsernamePassword) *Credentials {
	s.UsernamePassword = v
	return s
}

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

	// The name of the security configuration.
	//
	// Name is a required field
	Name *string `type:"string" required:"true"`
}

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

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

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

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

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

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

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

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

	// The ID of the Amazon EMR Studio.
	//
	// StudioId is a required field
	StudioId *string `type:"string" required:"true"`
}

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

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

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

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

// SetStudioId sets the StudioId field's value.
func (s *DeleteStudioInput) SetStudioId(v string) *DeleteStudioInput {
	s.StudioId = &v
	return s
}

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

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

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

	// The globally unique identifier (GUID) of the user or group to remove from
	// the Amazon EMR Studio. For more information, see UserId (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_User.html#singlesignon-Type-User-UserId)
	// and GroupId (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_Group.html#singlesignon-Type-Group-GroupId)
	// in the IAM Identity Center Identity Store API Reference. Either IdentityName
	// or IdentityId must be specified.
	IdentityId *string `type:"string"`

	// The name of the user name or group to remove from the Amazon EMR Studio.
	// For more information, see UserName (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_User.html#singlesignon-Type-User-UserName)
	// and DisplayName (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_Group.html#singlesignon-Type-Group-DisplayName)
	// in the IAM Identity Center Store API Reference. Either IdentityName or IdentityId
	// must be specified.
	IdentityName *string `type:"string"`

	// Specifies whether the identity to delete from the Amazon EMR Studio is a
	// user or a group.
	//
	// IdentityType is a required field
	IdentityType *string `type:"string" required:"true" enum:"IdentityType"`

	// The ID of the Amazon EMR Studio.
	//
	// StudioId is a required field
	StudioId *string `type:"string" required:"true"`
}

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

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

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

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

// SetIdentityId sets the IdentityId field's value.
func (s *DeleteStudioSessionMappingInput) SetIdentityId(v string) *DeleteStudioSessionMappingInput {
	s.IdentityId = &v
	return s
}

// SetIdentityName sets the IdentityName field's value.
func (s *DeleteStudioSessionMappingInput) SetIdentityName(v string) *DeleteStudioSessionMappingInput {
	s.IdentityName = &v
	return s
}

// SetIdentityType sets the IdentityType field's value.
func (s *DeleteStudioSessionMappingInput) SetIdentityType(v string) *DeleteStudioSessionMappingInput {
	s.IdentityType = &v
	return s
}

// SetStudioId sets the StudioId field's value.
func (s *DeleteStudioSessionMappingInput) SetStudioId(v string) *DeleteStudioSessionMappingInput {
	s.StudioId = &v
	return s
}

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

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

// This input determines which cluster to describe.
type DescribeClusterInput struct {
	_ struct{} `type:"structure"`

	// The identifier of the cluster to describe.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`
}

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *DescribeClusterInput) SetClusterId(v string) *DescribeClusterInput {
	s.ClusterId = &v
	return s
}

// This output contains the description of the cluster.
type DescribeClusterOutput struct {
	_ struct{} `type:"structure"`

	// This output contains the details for the requested cluster.
	Cluster *Cluster `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 DescribeClusterOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetCluster sets the Cluster field's value.
func (s *DescribeClusterOutput) SetCluster(v *Cluster) *DescribeClusterOutput {
	s.Cluster = v
	return s
}

// The input for the DescribeJobFlows operation.
type DescribeJobFlowsInput struct {
	_ struct{} `type:"structure"`

	// Return only job flows created after this date and time.
	CreatedAfter *time.Time `type:"timestamp"`

	// Return only job flows created before this date and time.
	CreatedBefore *time.Time `type:"timestamp"`

	// Return only job flows whose job flow ID is contained in this list.
	JobFlowIds []*string `type:"list"`

	// Return only job flows whose state is contained in this list.
	JobFlowStates []*string `type:"list" enum:"JobFlowExecutionState"`
}

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

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

// SetCreatedAfter sets the CreatedAfter field's value.
func (s *DescribeJobFlowsInput) SetCreatedAfter(v time.Time) *DescribeJobFlowsInput {
	s.CreatedAfter = &v
	return s
}

// SetCreatedBefore sets the CreatedBefore field's value.
func (s *DescribeJobFlowsInput) SetCreatedBefore(v time.Time) *DescribeJobFlowsInput {
	s.CreatedBefore = &v
	return s
}

// SetJobFlowIds sets the JobFlowIds field's value.
func (s *DescribeJobFlowsInput) SetJobFlowIds(v []*string) *DescribeJobFlowsInput {
	s.JobFlowIds = v
	return s
}

// SetJobFlowStates sets the JobFlowStates field's value.
func (s *DescribeJobFlowsInput) SetJobFlowStates(v []*string) *DescribeJobFlowsInput {
	s.JobFlowStates = v
	return s
}

// The output for the DescribeJobFlows operation.
type DescribeJobFlowsOutput struct {
	_ struct{} `type:"structure"`

	// A list of job flows matching the parameters supplied.
	JobFlows []*JobFlowDetail `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 DescribeJobFlowsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetJobFlows sets the JobFlows field's value.
func (s *DescribeJobFlowsOutput) SetJobFlows(v []*JobFlowDetail) *DescribeJobFlowsOutput {
	s.JobFlows = v
	return s
}

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

	// The unique identifier of the notebook execution.
	//
	// NotebookExecutionId is a required field
	NotebookExecutionId *string `type:"string" required:"true"`
}

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

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

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

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

// SetNotebookExecutionId sets the NotebookExecutionId field's value.
func (s *DescribeNotebookExecutionInput) SetNotebookExecutionId(v string) *DescribeNotebookExecutionInput {
	s.NotebookExecutionId = &v
	return s
}

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

	// Properties of the notebook execution.
	NotebookExecution *NotebookExecution `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 DescribeNotebookExecutionOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetNotebookExecution sets the NotebookExecution field's value.
func (s *DescribeNotebookExecutionOutput) SetNotebookExecution(v *NotebookExecution) *DescribeNotebookExecutionOutput {
	s.NotebookExecution = v
	return s
}

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

	// Reserved for future use. Currently set to null.
	MaxResults *int64 `min:"1" type:"integer"`

	// The pagination token. Reserved for future use. Currently set to null.
	NextToken *string `type:"string"`

	// The target release label to be described.
	ReleaseLabel *string `type:"string"`
}

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

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

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

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

// SetReleaseLabel sets the ReleaseLabel field's value.
func (s *DescribeReleaseLabelInput) SetReleaseLabel(v string) *DescribeReleaseLabelInput {
	s.ReleaseLabel = &v
	return s
}

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

	// The list of applications available for the target release label. Name is
	// the name of the application. Version is the concise version of the application.
	Applications []*SimplifiedApplication `type:"list"`

	// The list of available Amazon Linux release versions for an Amazon EMR release.
	// Contains a Label field that is formatted as shown in Amazon Linux 2 Release
	// Notes (https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-al2.html).
	// For example, 2.0.20220218.1 (https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-20220218.html).
	AvailableOSReleases []*OSRelease `type:"list"`

	// The pagination token. Reserved for future use. Currently set to null.
	NextToken *string `type:"string"`

	// The target release label described in the response.
	ReleaseLabel *string `type:"string"`
}

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

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

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

// SetAvailableOSReleases sets the AvailableOSReleases field's value.
func (s *DescribeReleaseLabelOutput) SetAvailableOSReleases(v []*OSRelease) *DescribeReleaseLabelOutput {
	s.AvailableOSReleases = v
	return s
}

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

// SetReleaseLabel sets the ReleaseLabel field's value.
func (s *DescribeReleaseLabelOutput) SetReleaseLabel(v string) *DescribeReleaseLabelOutput {
	s.ReleaseLabel = &v
	return s
}

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

	// The name of the security configuration.
	//
	// Name is a required field
	Name *string `type:"string" required:"true"`
}

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

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

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

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

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

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

	// The date and time the security configuration was created
	CreationDateTime *time.Time `type:"timestamp"`

	// The name of the security configuration.
	Name *string `type:"string"`

	// The security configuration details in JSON format.
	SecurityConfiguration *string `type:"string"`
}

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

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

// SetCreationDateTime sets the CreationDateTime field's value.
func (s *DescribeSecurityConfigurationOutput) SetCreationDateTime(v time.Time) *DescribeSecurityConfigurationOutput {
	s.CreationDateTime = &v
	return s
}

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

// SetSecurityConfiguration sets the SecurityConfiguration field's value.
func (s *DescribeSecurityConfigurationOutput) SetSecurityConfiguration(v string) *DescribeSecurityConfigurationOutput {
	s.SecurityConfiguration = &v
	return s
}

// This input determines which step to describe.
type DescribeStepInput struct {
	_ struct{} `type:"structure"`

	// The identifier of the cluster with steps to describe.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// The identifier of the step to describe.
	//
	// StepId is a required field
	StepId *string `type:"string" required:"true"`
}

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *DescribeStepInput) SetClusterId(v string) *DescribeStepInput {
	s.ClusterId = &v
	return s
}

// SetStepId sets the StepId field's value.
func (s *DescribeStepInput) SetStepId(v string) *DescribeStepInput {
	s.StepId = &v
	return s
}

// This output contains the description of the cluster step.
type DescribeStepOutput struct {
	_ struct{} `type:"structure"`

	// The step details for the requested step identifier.
	Step *Step `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 DescribeStepOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

	// The Amazon EMR Studio ID.
	//
	// StudioId is a required field
	StudioId *string `type:"string" required:"true"`
}

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

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

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

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

// SetStudioId sets the StudioId field's value.
func (s *DescribeStudioInput) SetStudioId(v string) *DescribeStudioInput {
	s.StudioId = &v
	return s
}

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

	// The Amazon EMR Studio details.
	Studio *Studio `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 DescribeStudioOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetStudio sets the Studio field's value.
func (s *DescribeStudioOutput) SetStudio(v *Studio) *DescribeStudioOutput {
	s.Studio = v
	return s
}

// Configuration of requested EBS block device associated with the instance
// group.
type EbsBlockDevice struct {
	_ struct{} `type:"structure"`

	// The device name that is exposed to the instance, such as /dev/sdh.
	Device *string `type:"string"`

	// EBS volume specifications such as volume type, IOPS, size (GiB) and throughput
	// (MiB/s) that are requested for the EBS volume attached to an Amazon EC2 instance
	// in the cluster.
	VolumeSpecification *VolumeSpecification `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 EbsBlockDevice) String() string {
	return awsutil.Prettify(s)
}

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

// SetDevice sets the Device field's value.
func (s *EbsBlockDevice) SetDevice(v string) *EbsBlockDevice {
	s.Device = &v
	return s
}

// SetVolumeSpecification sets the VolumeSpecification field's value.
func (s *EbsBlockDevice) SetVolumeSpecification(v *VolumeSpecification) *EbsBlockDevice {
	s.VolumeSpecification = v
	return s
}

// Configuration of requested EBS block device associated with the instance
// group with count of volumes that are associated to every instance.
type EbsBlockDeviceConfig struct {
	_ struct{} `type:"structure"`

	// EBS volume specifications such as volume type, IOPS, size (GiB) and throughput
	// (MiB/s) that are requested for the EBS volume attached to an Amazon EC2 instance
	// in the cluster.
	//
	// VolumeSpecification is a required field
	VolumeSpecification *VolumeSpecification `type:"structure" required:"true"`

	// Number of EBS volumes with a specific volume configuration that are associated
	// with every instance in the instance group
	VolumesPerInstance *int64 `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 EbsBlockDeviceConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetVolumeSpecification sets the VolumeSpecification field's value.
func (s *EbsBlockDeviceConfig) SetVolumeSpecification(v *VolumeSpecification) *EbsBlockDeviceConfig {
	s.VolumeSpecification = v
	return s
}

// SetVolumesPerInstance sets the VolumesPerInstance field's value.
func (s *EbsBlockDeviceConfig) SetVolumesPerInstance(v int64) *EbsBlockDeviceConfig {
	s.VolumesPerInstance = &v
	return s
}

// The Amazon EBS configuration of a cluster instance.
type EbsConfiguration struct {
	_ struct{} `type:"structure"`

	// An array of Amazon EBS volume specifications attached to a cluster instance.
	EbsBlockDeviceConfigs []*EbsBlockDeviceConfig `type:"list"`

	// Indicates whether an Amazon EBS volume is EBS-optimized.
	EbsOptimized *bool `type:"boolean"`
}

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

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

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

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

// SetEbsBlockDeviceConfigs sets the EbsBlockDeviceConfigs field's value.
func (s *EbsConfiguration) SetEbsBlockDeviceConfigs(v []*EbsBlockDeviceConfig) *EbsConfiguration {
	s.EbsBlockDeviceConfigs = v
	return s
}

// SetEbsOptimized sets the EbsOptimized field's value.
func (s *EbsConfiguration) SetEbsOptimized(v bool) *EbsConfiguration {
	s.EbsOptimized = &v
	return s
}

// EBS block device that's attached to an Amazon EC2 instance.
type EbsVolume struct {
	_ struct{} `type:"structure"`

	// The device name that is exposed to the instance, such as /dev/sdh.
	Device *string `type:"string"`

	// The volume identifier of the EBS volume.
	VolumeId *string `type:"string"`
}

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

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

// SetDevice sets the Device field's value.
func (s *EbsVolume) SetDevice(v string) *EbsVolume {
	s.Device = &v
	return s
}

// SetVolumeId sets the VolumeId field's value.
func (s *EbsVolume) SetVolumeId(v string) *EbsVolume {
	s.VolumeId = &v
	return s
}

// Provides information about the Amazon EC2 instances in a cluster grouped
// by category. For example, key name, subnet ID, IAM instance profile, and
// so on.
type Ec2InstanceAttributes struct {
	_ struct{} `type:"structure"`

	// A list of additional Amazon EC2 security group IDs for the master node.
	AdditionalMasterSecurityGroups []*string `type:"list"`

	// A list of additional Amazon EC2 security group IDs for the core and task
	// nodes.
	AdditionalSlaveSecurityGroups []*string `type:"list"`

	// The Availability Zone in which the cluster will run.
	Ec2AvailabilityZone *string `type:"string"`

	// The name of the Amazon EC2 key pair to use when connecting with SSH into
	// the master node as a user named "hadoop".
	Ec2KeyName *string `type:"string"`

	// Set this parameter to the identifier of the Amazon VPC subnet where you want
	// the cluster to launch. If you do not specify this value, and your account
	// supports EC2-Classic, the cluster launches in EC2-Classic.
	Ec2SubnetId *string `type:"string"`

	// The identifier of the Amazon EC2 security group for the master node.
	EmrManagedMasterSecurityGroup *string `type:"string"`

	// The identifier of the Amazon EC2 security group for the core and task nodes.
	EmrManagedSlaveSecurityGroup *string `type:"string"`

	// The IAM role that was specified when the cluster was launched. The Amazon
	// EC2 instances of the cluster assume this role.
	IamInstanceProfile *string `type:"string"`

	// Applies to clusters configured with the instance fleets option. Specifies
	// one or more Availability Zones in which to launch Amazon EC2 cluster instances
	// when the EC2-Classic network configuration is supported. Amazon EMR chooses
	// the Availability Zone with the best fit from among the list of RequestedEc2AvailabilityZones,
	// and then launches all cluster instances within that Availability Zone. If
	// you do not specify this value, Amazon EMR chooses the Availability Zone for
	// you. RequestedEc2SubnetIDs and RequestedEc2AvailabilityZones cannot be specified
	// together.
	RequestedEc2AvailabilityZones []*string `type:"list"`

	// Applies to clusters configured with the instance fleets option. Specifies
	// the unique identifier of one or more Amazon EC2 subnets in which to launch
	// Amazon EC2 cluster instances. Subnets must exist within the same VPC. Amazon
	// EMR chooses the Amazon EC2 subnet with the best fit from among the list of
	// RequestedEc2SubnetIds, and then launches all cluster instances within that
	// Subnet. If this value is not specified, and the account and Region support
	// EC2-Classic networks, the cluster launches instances in the EC2-Classic network
	// and uses RequestedEc2AvailabilityZones instead of this setting. If EC2-Classic
	// is not supported, and no Subnet is specified, Amazon EMR chooses the subnet
	// for you. RequestedEc2SubnetIDs and RequestedEc2AvailabilityZones cannot be
	// specified together.
	RequestedEc2SubnetIds []*string `type:"list"`

	// The identifier of the Amazon EC2 security group for the Amazon EMR service
	// to access clusters in VPC private subnets.
	ServiceAccessSecurityGroup *string `type:"string"`
}

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

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

// SetAdditionalMasterSecurityGroups sets the AdditionalMasterSecurityGroups field's value.
func (s *Ec2InstanceAttributes) SetAdditionalMasterSecurityGroups(v []*string) *Ec2InstanceAttributes {
	s.AdditionalMasterSecurityGroups = v
	return s
}

// SetAdditionalSlaveSecurityGroups sets the AdditionalSlaveSecurityGroups field's value.
func (s *Ec2InstanceAttributes) SetAdditionalSlaveSecurityGroups(v []*string) *Ec2InstanceAttributes {
	s.AdditionalSlaveSecurityGroups = v
	return s
}

// SetEc2AvailabilityZone sets the Ec2AvailabilityZone field's value.
func (s *Ec2InstanceAttributes) SetEc2AvailabilityZone(v string) *Ec2InstanceAttributes {
	s.Ec2AvailabilityZone = &v
	return s
}

// SetEc2KeyName sets the Ec2KeyName field's value.
func (s *Ec2InstanceAttributes) SetEc2KeyName(v string) *Ec2InstanceAttributes {
	s.Ec2KeyName = &v
	return s
}

// SetEc2SubnetId sets the Ec2SubnetId field's value.
func (s *Ec2InstanceAttributes) SetEc2SubnetId(v string) *Ec2InstanceAttributes {
	s.Ec2SubnetId = &v
	return s
}

// SetEmrManagedMasterSecurityGroup sets the EmrManagedMasterSecurityGroup field's value.
func (s *Ec2InstanceAttributes) SetEmrManagedMasterSecurityGroup(v string) *Ec2InstanceAttributes {
	s.EmrManagedMasterSecurityGroup = &v
	return s
}

// SetEmrManagedSlaveSecurityGroup sets the EmrManagedSlaveSecurityGroup field's value.
func (s *Ec2InstanceAttributes) SetEmrManagedSlaveSecurityGroup(v string) *Ec2InstanceAttributes {
	s.EmrManagedSlaveSecurityGroup = &v
	return s
}

// SetIamInstanceProfile sets the IamInstanceProfile field's value.
func (s *Ec2InstanceAttributes) SetIamInstanceProfile(v string) *Ec2InstanceAttributes {
	s.IamInstanceProfile = &v
	return s
}

// SetRequestedEc2AvailabilityZones sets the RequestedEc2AvailabilityZones field's value.
func (s *Ec2InstanceAttributes) SetRequestedEc2AvailabilityZones(v []*string) *Ec2InstanceAttributes {
	s.RequestedEc2AvailabilityZones = v
	return s
}

// SetRequestedEc2SubnetIds sets the RequestedEc2SubnetIds field's value.
func (s *Ec2InstanceAttributes) SetRequestedEc2SubnetIds(v []*string) *Ec2InstanceAttributes {
	s.RequestedEc2SubnetIds = v
	return s
}

// SetServiceAccessSecurityGroup sets the ServiceAccessSecurityGroup field's value.
func (s *Ec2InstanceAttributes) SetServiceAccessSecurityGroup(v string) *Ec2InstanceAttributes {
	s.ServiceAccessSecurityGroup = &v
	return s
}

// A tuple that provides information about an error that caused a cluster to
// terminate.
type ErrorDetail struct {
	_ struct{} `type:"structure"`

	// The name or code associated with the error.
	ErrorCode *string `type:"string"`

	// A list of key value pairs that provides contextual information about why
	// an error occured.
	ErrorData []map[string]*string `type:"list"`

	// A message that describes the error.
	ErrorMessage *string `type:"string"`
}

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

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

// SetErrorCode sets the ErrorCode field's value.
func (s *ErrorDetail) SetErrorCode(v string) *ErrorDetail {
	s.ErrorCode = &v
	return s
}

// SetErrorData sets the ErrorData field's value.
func (s *ErrorDetail) SetErrorData(v []map[string]*string) *ErrorDetail {
	s.ErrorData = v
	return s
}

// SetErrorMessage sets the ErrorMessage field's value.
func (s *ErrorDetail) SetErrorMessage(v string) *ErrorDetail {
	s.ErrorMessage = &v
	return s
}

// Specifies the execution engine (cluster) to run the notebook and perform
// the notebook execution, for example, an Amazon EMR cluster.
type ExecutionEngineConfig struct {
	_ struct{} `type:"structure"`

	// The execution role ARN required for the notebook execution.
	ExecutionRoleArn *string `min:"20" type:"string"`

	// The unique identifier of the execution engine. For an Amazon EMR cluster,
	// this is the cluster ID.
	//
	// Id is a required field
	Id *string `type:"string" required:"true"`

	// An optional unique ID of an Amazon EC2 security group to associate with the
	// master instance of the Amazon EMR cluster for this notebook execution. For
	// more information see Specifying Amazon EC2 Security Groups for Amazon EMR
	// Notebooks (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-notebooks-security-groups.html)
	// in the EMR Management Guide.
	MasterInstanceSecurityGroupId *string `type:"string"`

	// The type of execution engine. A value of EMR specifies an Amazon EMR cluster.
	Type *string `type:"string" enum:"ExecutionEngineType"`
}

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

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

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

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

// SetExecutionRoleArn sets the ExecutionRoleArn field's value.
func (s *ExecutionEngineConfig) SetExecutionRoleArn(v string) *ExecutionEngineConfig {
	s.ExecutionRoleArn = &v
	return s
}

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

// SetMasterInstanceSecurityGroupId sets the MasterInstanceSecurityGroupId field's value.
func (s *ExecutionEngineConfig) SetMasterInstanceSecurityGroupId(v string) *ExecutionEngineConfig {
	s.MasterInstanceSecurityGroupId = &v
	return s
}

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

// The details of the step failure. The service attempts to detect the root
// cause for many common failures.
type FailureDetails struct {
	_ struct{} `type:"structure"`

	// The path to the log file where the step failure root cause was originally
	// recorded.
	LogFile *string `type:"string"`

	// The descriptive message including the error the Amazon EMR service has identified
	// as the cause of step failure. This is text from an error log that describes
	// the root cause of the failure.
	Message *string `type:"string"`

	// The reason for the step failure. In the case where the service cannot successfully
	// determine the root cause of the failure, it returns "Unknown Error" as a
	// reason.
	Reason *string `type:"string"`
}

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

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

// SetLogFile sets the LogFile field's value.
func (s *FailureDetails) SetLogFile(v string) *FailureDetails {
	s.LogFile = &v
	return s
}

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

// SetReason sets the Reason field's value.
func (s *FailureDetails) SetReason(v string) *FailureDetails {
	s.Reason = &v
	return s
}

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

	// Specifies the ID of the Amazon EMR cluster for which the auto-termination
	// policy will be fetched.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`
}

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *GetAutoTerminationPolicyInput) SetClusterId(v string) *GetAutoTerminationPolicyInput {
	s.ClusterId = &v
	return s
}

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

	// Specifies the auto-termination policy that is attached to an Amazon EMR cluster.
	AutoTerminationPolicy *AutoTerminationPolicy `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 GetAutoTerminationPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetAutoTerminationPolicy sets the AutoTerminationPolicy field's value.
func (s *GetAutoTerminationPolicyOutput) SetAutoTerminationPolicy(v *AutoTerminationPolicy) *GetAutoTerminationPolicyOutput {
	s.AutoTerminationPolicy = v
	return s
}

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

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

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

	// A configuration for Amazon EMR block public access. The configuration applies
	// to all clusters created in your account for the current Region. The configuration
	// specifies whether block public access is enabled. If block public access
	// is enabled, security groups associated with the cluster cannot have rules
	// that allow inbound traffic from 0.0.0.0/0 or ::/0 on a port, unless the port
	// is specified as an exception using PermittedPublicSecurityGroupRuleRanges
	// in the BlockPublicAccessConfiguration. By default, Port 22 (SSH) is an exception,
	// and public access is allowed on this port. You can change this by updating
	// the block public access configuration to remove the exception.
	//
	// For accounts that created clusters in a Region before November 25, 2019,
	// block public access is disabled by default in that Region. To use this feature,
	// you must manually enable and configure it. For accounts that did not create
	// an Amazon EMR cluster in a Region before this date, block public access is
	// enabled by default in that Region.
	//
	// BlockPublicAccessConfiguration is a required field
	BlockPublicAccessConfiguration *BlockPublicAccessConfiguration `type:"structure" required:"true"`

	// Properties that describe the Amazon Web Services principal that created the
	// BlockPublicAccessConfiguration using the PutBlockPublicAccessConfiguration
	// action as well as the date and time that the configuration was created. Each
	// time a configuration for block public access is updated, Amazon EMR updates
	// this metadata.
	//
	// BlockPublicAccessConfigurationMetadata is a required field
	BlockPublicAccessConfigurationMetadata *BlockPublicAccessConfigurationMetadata `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 GetBlockPublicAccessConfigurationOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetBlockPublicAccessConfiguration sets the BlockPublicAccessConfiguration field's value.
func (s *GetBlockPublicAccessConfigurationOutput) SetBlockPublicAccessConfiguration(v *BlockPublicAccessConfiguration) *GetBlockPublicAccessConfigurationOutput {
	s.BlockPublicAccessConfiguration = v
	return s
}

// SetBlockPublicAccessConfigurationMetadata sets the BlockPublicAccessConfigurationMetadata field's value.
func (s *GetBlockPublicAccessConfigurationOutput) SetBlockPublicAccessConfigurationMetadata(v *BlockPublicAccessConfigurationMetadata) *GetBlockPublicAccessConfigurationOutput {
	s.BlockPublicAccessConfigurationMetadata = v
	return s
}

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

	// The unique identifier of the cluster.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// The Amazon Resource Name (ARN) of the runtime role for interactive workload
	// submission on the cluster. The runtime role can be a cross-account IAM role.
	// The runtime role ARN is a combination of account ID, role name, and role
	// type using the following format: arn:partition:service:region:account:resource.
	ExecutionRoleArn *string `min:"20" type:"string"`
}

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *GetClusterSessionCredentialsInput) SetClusterId(v string) *GetClusterSessionCredentialsInput {
	s.ClusterId = &v
	return s
}

// SetExecutionRoleArn sets the ExecutionRoleArn field's value.
func (s *GetClusterSessionCredentialsInput) SetExecutionRoleArn(v string) *GetClusterSessionCredentialsInput {
	s.ExecutionRoleArn = &v
	return s
}

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

	// The credentials that you can use to connect to cluster endpoints that support
	// username and password authentication.
	Credentials *Credentials `type:"structure"`

	// The time when the credentials that are returned by the GetClusterSessionCredentials
	// API expire.
	ExpiresAt *time.Time `type:"timestamp"`
}

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

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

// SetCredentials sets the Credentials field's value.
func (s *GetClusterSessionCredentialsOutput) SetCredentials(v *Credentials) *GetClusterSessionCredentialsOutput {
	s.Credentials = v
	return s
}

// SetExpiresAt sets the ExpiresAt field's value.
func (s *GetClusterSessionCredentialsOutput) SetExpiresAt(v time.Time) *GetClusterSessionCredentialsOutput {
	s.ExpiresAt = &v
	return s
}

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

	// Specifies the ID of the cluster for which the managed scaling policy will
	// be fetched.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`
}

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *GetManagedScalingPolicyInput) SetClusterId(v string) *GetManagedScalingPolicyInput {
	s.ClusterId = &v
	return s
}

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

	// Specifies the managed scaling policy that is attached to an Amazon EMR cluster.
	ManagedScalingPolicy *ManagedScalingPolicy `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 GetManagedScalingPolicyOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetManagedScalingPolicy sets the ManagedScalingPolicy field's value.
func (s *GetManagedScalingPolicyOutput) SetManagedScalingPolicy(v *ManagedScalingPolicy) *GetManagedScalingPolicyOutput {
	s.ManagedScalingPolicy = v
	return s
}

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

	// The globally unique identifier (GUID) of the user or group. For more information,
	// see UserId (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_User.html#singlesignon-Type-User-UserId)
	// and GroupId (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_Group.html#singlesignon-Type-Group-GroupId)
	// in the IAM Identity Center Identity Store API Reference. Either IdentityName
	// or IdentityId must be specified.
	IdentityId *string `type:"string"`

	// The name of the user or group to fetch. For more information, see UserName
	// (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_User.html#singlesignon-Type-User-UserName)
	// and DisplayName (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_Group.html#singlesignon-Type-Group-DisplayName)
	// in the IAM Identity Center Identity Store API Reference. Either IdentityName
	// or IdentityId must be specified.
	IdentityName *string `type:"string"`

	// Specifies whether the identity to fetch is a user or a group.
	//
	// IdentityType is a required field
	IdentityType *string `type:"string" required:"true" enum:"IdentityType"`

	// The ID of the Amazon EMR Studio.
	//
	// StudioId is a required field
	StudioId *string `type:"string" required:"true"`
}

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

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

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

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

// SetIdentityId sets the IdentityId field's value.
func (s *GetStudioSessionMappingInput) SetIdentityId(v string) *GetStudioSessionMappingInput {
	s.IdentityId = &v
	return s
}

// SetIdentityName sets the IdentityName field's value.
func (s *GetStudioSessionMappingInput) SetIdentityName(v string) *GetStudioSessionMappingInput {
	s.IdentityName = &v
	return s
}

// SetIdentityType sets the IdentityType field's value.
func (s *GetStudioSessionMappingInput) SetIdentityType(v string) *GetStudioSessionMappingInput {
	s.IdentityType = &v
	return s
}

// SetStudioId sets the StudioId field's value.
func (s *GetStudioSessionMappingInput) SetStudioId(v string) *GetStudioSessionMappingInput {
	s.StudioId = &v
	return s
}

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

	// The session mapping details for the specified Amazon EMR Studio and identity,
	// including session policy ARN and creation time.
	SessionMapping *SessionMappingDetail `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 GetStudioSessionMappingOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetSessionMapping sets the SessionMapping field's value.
func (s *GetStudioSessionMappingOutput) SetSessionMapping(v *SessionMappingDetail) *GetStudioSessionMappingOutput {
	s.SessionMapping = v
	return s
}

// A job flow step consisting of a JAR file whose main function will be executed.
// The main function submits a job for Hadoop to execute and waits for the job
// to finish or fail.
type HadoopJarStepConfig struct {
	_ struct{} `type:"structure"`

	// A list of command line arguments passed to the JAR file's main function when
	// executed.
	Args []*string `type:"list"`

	// A path to a JAR file run during the step.
	//
	// Jar is a required field
	Jar *string `type:"string" required:"true"`

	// The name of the main class in the specified Java file. If not specified,
	// the JAR file should specify a Main-Class in its manifest file.
	MainClass *string `type:"string"`

	// A list of Java properties that are set when the step runs. You can use these
	// properties to pass key-value pairs to your main function.
	Properties []*KeyValue `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 HadoopJarStepConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetArgs sets the Args field's value.
func (s *HadoopJarStepConfig) SetArgs(v []*string) *HadoopJarStepConfig {
	s.Args = v
	return s
}

// SetJar sets the Jar field's value.
func (s *HadoopJarStepConfig) SetJar(v string) *HadoopJarStepConfig {
	s.Jar = &v
	return s
}

// SetMainClass sets the MainClass field's value.
func (s *HadoopJarStepConfig) SetMainClass(v string) *HadoopJarStepConfig {
	s.MainClass = &v
	return s
}

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

// A cluster step consisting of a JAR file whose main function will be executed.
// The main function submits a job for Hadoop to execute and waits for the job
// to finish or fail.
type HadoopStepConfig struct {
	_ struct{} `type:"structure"`

	// The list of command line arguments to pass to the JAR file's main function
	// for execution.
	Args []*string `type:"list"`

	// The path to the JAR file that runs during the step.
	Jar *string `type:"string"`

	// The name of the main class in the specified Java file. If not specified,
	// the JAR file should specify a main class in its manifest file.
	MainClass *string `type:"string"`

	// The list of Java properties that are set when the step runs. You can use
	// these properties to pass key-value pairs to your main function.
	Properties map[string]*string `type:"map"`
}

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

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

// SetArgs sets the Args field's value.
func (s *HadoopStepConfig) SetArgs(v []*string) *HadoopStepConfig {
	s.Args = v
	return s
}

// SetJar sets the Jar field's value.
func (s *HadoopStepConfig) SetJar(v string) *HadoopStepConfig {
	s.Jar = &v
	return s
}

// SetMainClass sets the MainClass field's value.
func (s *HadoopStepConfig) SetMainClass(v string) *HadoopStepConfig {
	s.MainClass = &v
	return s
}

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

// Represents an Amazon EC2 instance provisioned as part of cluster.
type Instance struct {
	_ struct{} `type:"structure"`

	// The list of Amazon EBS volumes that are attached to this instance.
	EbsVolumes []*EbsVolume `type:"list"`

	// The unique identifier of the instance in Amazon EC2.
	Ec2InstanceId *string `type:"string"`

	// The unique identifier for the instance in Amazon EMR.
	Id *string `type:"string"`

	// The unique identifier of the instance fleet to which an Amazon EC2 instance
	// belongs.
	InstanceFleetId *string `type:"string"`

	// The identifier of the instance group to which this instance belongs.
	InstanceGroupId *string `type:"string"`

	// The Amazon EC2 instance type, for example m3.xlarge.
	InstanceType *string `min:"1" type:"string"`

	// The instance purchasing option. Valid values are ON_DEMAND or SPOT.
	Market *string `type:"string" enum:"MarketType"`

	// The private DNS name of the instance.
	PrivateDnsName *string `type:"string"`

	// The private IP address of the instance.
	PrivateIpAddress *string `type:"string"`

	// The public DNS name of the instance.
	PublicDnsName *string `type:"string"`

	// The public IP address of the instance.
	PublicIpAddress *string `type:"string"`

	// The current status of the instance.
	Status *InstanceStatus `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 Instance) String() string {
	return awsutil.Prettify(s)
}

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

// SetEbsVolumes sets the EbsVolumes field's value.
func (s *Instance) SetEbsVolumes(v []*EbsVolume) *Instance {
	s.EbsVolumes = v
	return s
}

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

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

// SetInstanceFleetId sets the InstanceFleetId field's value.
func (s *Instance) SetInstanceFleetId(v string) *Instance {
	s.InstanceFleetId = &v
	return s
}

// SetInstanceGroupId sets the InstanceGroupId field's value.
func (s *Instance) SetInstanceGroupId(v string) *Instance {
	s.InstanceGroupId = &v
	return s
}

// SetInstanceType sets the InstanceType field's value.
func (s *Instance) SetInstanceType(v string) *Instance {
	s.InstanceType = &v
	return s
}

// SetMarket sets the Market field's value.
func (s *Instance) SetMarket(v string) *Instance {
	s.Market = &v
	return s
}

// SetPrivateDnsName sets the PrivateDnsName field's value.
func (s *Instance) SetPrivateDnsName(v string) *Instance {
	s.PrivateDnsName = &v
	return s
}

// SetPrivateIpAddress sets the PrivateIpAddress field's value.
func (s *Instance) SetPrivateIpAddress(v string) *Instance {
	s.PrivateIpAddress = &v
	return s
}

// SetPublicDnsName sets the PublicDnsName field's value.
func (s *Instance) SetPublicDnsName(v string) *Instance {
	s.PublicDnsName = &v
	return s
}

// SetPublicIpAddress sets the PublicIpAddress field's value.
func (s *Instance) SetPublicIpAddress(v string) *Instance {
	s.PublicIpAddress = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *Instance) SetStatus(v *InstanceStatus) *Instance {
	s.Status = v
	return s
}

// Describes an instance fleet, which is a group of Amazon EC2 instances that
// host a particular node type (master, core, or task) in an Amazon EMR cluster.
// Instance fleets can consist of a mix of instance types and On-Demand and
// Spot Instances, which are provisioned to meet a defined target capacity.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions.
type InstanceFleet struct {
	_ struct{} `type:"structure"`

	// The unique identifier of the instance fleet.
	Id *string `type:"string"`

	// The node type that the instance fleet hosts. Valid values are MASTER, CORE,
	// or TASK.
	InstanceFleetType *string `type:"string" enum:"InstanceFleetType"`

	// An array of specifications for the instance types that comprise an instance
	// fleet.
	InstanceTypeSpecifications []*InstanceTypeSpecification `type:"list"`

	// Describes the launch specification for an instance fleet.
	LaunchSpecifications *InstanceFleetProvisioningSpecifications `type:"structure"`

	// A friendly name for the instance fleet.
	Name *string `type:"string"`

	// The number of On-Demand units that have been provisioned for the instance
	// fleet to fulfill TargetOnDemandCapacity. This provisioned capacity might
	// be less than or greater than TargetOnDemandCapacity.
	ProvisionedOnDemandCapacity *int64 `type:"integer"`

	// The number of Spot units that have been provisioned for this instance fleet
	// to fulfill TargetSpotCapacity. This provisioned capacity might be less than
	// or greater than TargetSpotCapacity.
	ProvisionedSpotCapacity *int64 `type:"integer"`

	// The resize specification for the instance fleet.
	ResizeSpecifications *InstanceFleetResizingSpecifications `type:"structure"`

	// The current status of the instance fleet.
	Status *InstanceFleetStatus `type:"structure"`

	// The target capacity of On-Demand units for the instance fleet, which determines
	// how many On-Demand Instances to provision. When the instance fleet launches,
	// Amazon EMR tries to provision On-Demand Instances as specified by InstanceTypeConfig.
	// Each instance configuration has a specified WeightedCapacity. When an On-Demand
	// Instance is provisioned, the WeightedCapacity units count toward the target
	// capacity. Amazon EMR provisions instances until the target capacity is totally
	// fulfilled, even if this results in an overage. For example, if there are
	// 2 units remaining to fulfill capacity, and Amazon EMR can only provision
	// an instance with a WeightedCapacity of 5 units, the instance is provisioned,
	// and the target capacity is exceeded by 3 units. You can use InstanceFleet$ProvisionedOnDemandCapacity
	// to determine the Spot capacity units that have been provisioned for the instance
	// fleet.
	//
	// If not specified or set to 0, only Spot Instances are provisioned for the
	// instance fleet using TargetSpotCapacity. At least one of TargetSpotCapacity
	// and TargetOnDemandCapacity should be greater than 0. For a master instance
	// fleet, only one of TargetSpotCapacity and TargetOnDemandCapacity can be specified,
	// and its value must be 1.
	TargetOnDemandCapacity *int64 `type:"integer"`

	// The target capacity of Spot units for the instance fleet, which determines
	// how many Spot Instances to provision. When the instance fleet launches, Amazon
	// EMR tries to provision Spot Instances as specified by InstanceTypeConfig.
	// Each instance configuration has a specified WeightedCapacity. When a Spot
	// instance is provisioned, the WeightedCapacity units count toward the target
	// capacity. Amazon EMR provisions instances until the target capacity is totally
	// fulfilled, even if this results in an overage. For example, if there are
	// 2 units remaining to fulfill capacity, and Amazon EMR can only provision
	// an instance with a WeightedCapacity of 5 units, the instance is provisioned,
	// and the target capacity is exceeded by 3 units. You can use InstanceFleet$ProvisionedSpotCapacity
	// to determine the Spot capacity units that have been provisioned for the instance
	// fleet.
	//
	// If not specified or set to 0, only On-Demand Instances are provisioned for
	// the instance fleet. At least one of TargetSpotCapacity and TargetOnDemandCapacity
	// should be greater than 0. For a master instance fleet, only one of TargetSpotCapacity
	// and TargetOnDemandCapacity can be specified, and its value must be 1.
	TargetSpotCapacity *int64 `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 InstanceFleet) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetInstanceFleetType sets the InstanceFleetType field's value.
func (s *InstanceFleet) SetInstanceFleetType(v string) *InstanceFleet {
	s.InstanceFleetType = &v
	return s
}

// SetInstanceTypeSpecifications sets the InstanceTypeSpecifications field's value.
func (s *InstanceFleet) SetInstanceTypeSpecifications(v []*InstanceTypeSpecification) *InstanceFleet {
	s.InstanceTypeSpecifications = v
	return s
}

// SetLaunchSpecifications sets the LaunchSpecifications field's value.
func (s *InstanceFleet) SetLaunchSpecifications(v *InstanceFleetProvisioningSpecifications) *InstanceFleet {
	s.LaunchSpecifications = v
	return s
}

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

// SetProvisionedOnDemandCapacity sets the ProvisionedOnDemandCapacity field's value.
func (s *InstanceFleet) SetProvisionedOnDemandCapacity(v int64) *InstanceFleet {
	s.ProvisionedOnDemandCapacity = &v
	return s
}

// SetProvisionedSpotCapacity sets the ProvisionedSpotCapacity field's value.
func (s *InstanceFleet) SetProvisionedSpotCapacity(v int64) *InstanceFleet {
	s.ProvisionedSpotCapacity = &v
	return s
}

// SetResizeSpecifications sets the ResizeSpecifications field's value.
func (s *InstanceFleet) SetResizeSpecifications(v *InstanceFleetResizingSpecifications) *InstanceFleet {
	s.ResizeSpecifications = v
	return s
}

// SetStatus sets the Status field's value.
func (s *InstanceFleet) SetStatus(v *InstanceFleetStatus) *InstanceFleet {
	s.Status = v
	return s
}

// SetTargetOnDemandCapacity sets the TargetOnDemandCapacity field's value.
func (s *InstanceFleet) SetTargetOnDemandCapacity(v int64) *InstanceFleet {
	s.TargetOnDemandCapacity = &v
	return s
}

// SetTargetSpotCapacity sets the TargetSpotCapacity field's value.
func (s *InstanceFleet) SetTargetSpotCapacity(v int64) *InstanceFleet {
	s.TargetSpotCapacity = &v
	return s
}

// The configuration that defines an instance fleet.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions.
type InstanceFleetConfig struct {
	_ struct{} `type:"structure"`

	// The node type that the instance fleet hosts. Valid values are MASTER, CORE,
	// and TASK.
	//
	// InstanceFleetType is a required field
	InstanceFleetType *string `type:"string" required:"true" enum:"InstanceFleetType"`

	// The instance type configurations that define the Amazon EC2 instances in
	// the instance fleet.
	InstanceTypeConfigs []*InstanceTypeConfig `type:"list"`

	// The launch specification for the instance fleet.
	LaunchSpecifications *InstanceFleetProvisioningSpecifications `type:"structure"`

	// The friendly name of the instance fleet.
	Name *string `type:"string"`

	// The resize specification for the instance fleet.
	ResizeSpecifications *InstanceFleetResizingSpecifications `type:"structure"`

	// The target capacity of On-Demand units for the instance fleet, which determines
	// how many On-Demand Instances to provision. When the instance fleet launches,
	// Amazon EMR tries to provision On-Demand Instances as specified by InstanceTypeConfig.
	// Each instance configuration has a specified WeightedCapacity. When an On-Demand
	// Instance is provisioned, the WeightedCapacity units count toward the target
	// capacity. Amazon EMR provisions instances until the target capacity is totally
	// fulfilled, even if this results in an overage. For example, if there are
	// 2 units remaining to fulfill capacity, and Amazon EMR can only provision
	// an instance with a WeightedCapacity of 5 units, the instance is provisioned,
	// and the target capacity is exceeded by 3 units.
	//
	// If not specified or set to 0, only Spot Instances are provisioned for the
	// instance fleet using TargetSpotCapacity. At least one of TargetSpotCapacity
	// and TargetOnDemandCapacity should be greater than 0. For a master instance
	// fleet, only one of TargetSpotCapacity and TargetOnDemandCapacity can be specified,
	// and its value must be 1.
	TargetOnDemandCapacity *int64 `type:"integer"`

	// The target capacity of Spot units for the instance fleet, which determines
	// how many Spot Instances to provision. When the instance fleet launches, Amazon
	// EMR tries to provision Spot Instances as specified by InstanceTypeConfig.
	// Each instance configuration has a specified WeightedCapacity. When a Spot
	// Instance is provisioned, the WeightedCapacity units count toward the target
	// capacity. Amazon EMR provisions instances until the target capacity is totally
	// fulfilled, even if this results in an overage. For example, if there are
	// 2 units remaining to fulfill capacity, and Amazon EMR can only provision
	// an instance with a WeightedCapacity of 5 units, the instance is provisioned,
	// and the target capacity is exceeded by 3 units.
	//
	// If not specified or set to 0, only On-Demand Instances are provisioned for
	// the instance fleet. At least one of TargetSpotCapacity and TargetOnDemandCapacity
	// should be greater than 0. For a master instance fleet, only one of TargetSpotCapacity
	// and TargetOnDemandCapacity can be specified, and its value must be 1.
	TargetSpotCapacity *int64 `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 InstanceFleetConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetInstanceFleetType sets the InstanceFleetType field's value.
func (s *InstanceFleetConfig) SetInstanceFleetType(v string) *InstanceFleetConfig {
	s.InstanceFleetType = &v
	return s
}

// SetInstanceTypeConfigs sets the InstanceTypeConfigs field's value.
func (s *InstanceFleetConfig) SetInstanceTypeConfigs(v []*InstanceTypeConfig) *InstanceFleetConfig {
	s.InstanceTypeConfigs = v
	return s
}

// SetLaunchSpecifications sets the LaunchSpecifications field's value.
func (s *InstanceFleetConfig) SetLaunchSpecifications(v *InstanceFleetProvisioningSpecifications) *InstanceFleetConfig {
	s.LaunchSpecifications = v
	return s
}

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

// SetResizeSpecifications sets the ResizeSpecifications field's value.
func (s *InstanceFleetConfig) SetResizeSpecifications(v *InstanceFleetResizingSpecifications) *InstanceFleetConfig {
	s.ResizeSpecifications = v
	return s
}

// SetTargetOnDemandCapacity sets the TargetOnDemandCapacity field's value.
func (s *InstanceFleetConfig) SetTargetOnDemandCapacity(v int64) *InstanceFleetConfig {
	s.TargetOnDemandCapacity = &v
	return s
}

// SetTargetSpotCapacity sets the TargetSpotCapacity field's value.
func (s *InstanceFleetConfig) SetTargetSpotCapacity(v int64) *InstanceFleetConfig {
	s.TargetSpotCapacity = &v
	return s
}

// Configuration parameters for an instance fleet modification request.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions.
type InstanceFleetModifyConfig struct {
	_ struct{} `type:"structure"`

	// A unique identifier for the instance fleet.
	//
	// InstanceFleetId is a required field
	InstanceFleetId *string `type:"string" required:"true"`

	// The resize specification for the instance fleet.
	ResizeSpecifications *InstanceFleetResizingSpecifications `type:"structure"`

	// The target capacity of On-Demand units for the instance fleet. For more information
	// see InstanceFleetConfig$TargetOnDemandCapacity.
	TargetOnDemandCapacity *int64 `type:"integer"`

	// The target capacity of Spot units for the instance fleet. For more information,
	// see InstanceFleetConfig$TargetSpotCapacity.
	TargetSpotCapacity *int64 `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 InstanceFleetModifyConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetInstanceFleetId sets the InstanceFleetId field's value.
func (s *InstanceFleetModifyConfig) SetInstanceFleetId(v string) *InstanceFleetModifyConfig {
	s.InstanceFleetId = &v
	return s
}

// SetResizeSpecifications sets the ResizeSpecifications field's value.
func (s *InstanceFleetModifyConfig) SetResizeSpecifications(v *InstanceFleetResizingSpecifications) *InstanceFleetModifyConfig {
	s.ResizeSpecifications = v
	return s
}

// SetTargetOnDemandCapacity sets the TargetOnDemandCapacity field's value.
func (s *InstanceFleetModifyConfig) SetTargetOnDemandCapacity(v int64) *InstanceFleetModifyConfig {
	s.TargetOnDemandCapacity = &v
	return s
}

// SetTargetSpotCapacity sets the TargetSpotCapacity field's value.
func (s *InstanceFleetModifyConfig) SetTargetSpotCapacity(v int64) *InstanceFleetModifyConfig {
	s.TargetSpotCapacity = &v
	return s
}

// The launch specification for Spot Instances in the fleet, which determines
// the defined duration, provisioning timeout behavior, and allocation strategy.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions. On-Demand and Spot instance allocation
// strategies are available in Amazon EMR releases 5.12.1 and later.
type InstanceFleetProvisioningSpecifications struct {
	_ struct{} `type:"structure"`

	// The launch specification for On-Demand Instances in the instance fleet, which
	// determines the allocation strategy.
	//
	// The instance fleet configuration is available only in Amazon EMR releases
	// 4.8.0 and later, excluding 5.0.x versions. On-Demand Instances allocation
	// strategy is available in Amazon EMR releases 5.12.1 and later.
	OnDemandSpecification *OnDemandProvisioningSpecification `type:"structure"`

	// The launch specification for Spot instances in the fleet, which determines
	// the defined duration, provisioning timeout behavior, and allocation strategy.
	SpotSpecification *SpotProvisioningSpecification `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 InstanceFleetProvisioningSpecifications) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetOnDemandSpecification sets the OnDemandSpecification field's value.
func (s *InstanceFleetProvisioningSpecifications) SetOnDemandSpecification(v *OnDemandProvisioningSpecification) *InstanceFleetProvisioningSpecifications {
	s.OnDemandSpecification = v
	return s
}

// SetSpotSpecification sets the SpotSpecification field's value.
func (s *InstanceFleetProvisioningSpecifications) SetSpotSpecification(v *SpotProvisioningSpecification) *InstanceFleetProvisioningSpecifications {
	s.SpotSpecification = v
	return s
}

// The resize specification for On-Demand and Spot Instances in the fleet.
type InstanceFleetResizingSpecifications struct {
	_ struct{} `type:"structure"`

	// The resize specification for On-Demand Instances in the instance fleet, which
	// contains the resize timeout period.
	OnDemandResizeSpecification *OnDemandResizingSpecification `type:"structure"`

	// The resize specification for Spot Instances in the instance fleet, which
	// contains the resize timeout period.
	SpotResizeSpecification *SpotResizingSpecification `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 InstanceFleetResizingSpecifications) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetOnDemandResizeSpecification sets the OnDemandResizeSpecification field's value.
func (s *InstanceFleetResizingSpecifications) SetOnDemandResizeSpecification(v *OnDemandResizingSpecification) *InstanceFleetResizingSpecifications {
	s.OnDemandResizeSpecification = v
	return s
}

// SetSpotResizeSpecification sets the SpotResizeSpecification field's value.
func (s *InstanceFleetResizingSpecifications) SetSpotResizeSpecification(v *SpotResizingSpecification) *InstanceFleetResizingSpecifications {
	s.SpotResizeSpecification = v
	return s
}

// Provides status change reason details for the instance fleet.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions.
type InstanceFleetStateChangeReason struct {
	_ struct{} `type:"structure"`

	// A code corresponding to the reason the state change occurred.
	Code *string `type:"string" enum:"InstanceFleetStateChangeReasonCode"`

	// An explanatory message.
	Message *string `type:"string"`
}

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

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

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

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

// The status of the instance fleet.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions.
type InstanceFleetStatus struct {
	_ struct{} `type:"structure"`

	// A code representing the instance fleet status.
	//
	//    * PROVISIONING—The instance fleet is provisioning Amazon EC2 resources
	//    and is not yet ready to run jobs.
	//
	//    * BOOTSTRAPPING—Amazon EC2 instances and other resources have been provisioned
	//    and the bootstrap actions specified for the instances are underway.
	//
	//    * RUNNING—Amazon EC2 instances and other resources are running. They
	//    are either executing jobs or waiting to execute jobs.
	//
	//    * RESIZING—A resize operation is underway. Amazon EC2 instances are
	//    either being added or removed.
	//
	//    * SUSPENDED—A resize operation could not complete. Existing Amazon EC2
	//    instances are running, but instances can't be added or removed.
	//
	//    * TERMINATING—The instance fleet is terminating Amazon EC2 instances.
	//
	//    * TERMINATED—The instance fleet is no longer active, and all Amazon
	//    EC2 instances have been terminated.
	State *string `type:"string" enum:"InstanceFleetState"`

	// Provides status change reason details for the instance fleet.
	StateChangeReason *InstanceFleetStateChangeReason `type:"structure"`

	// Provides historical timestamps for the instance fleet, including the time
	// of creation, the time it became ready to run jobs, and the time of termination.
	Timeline *InstanceFleetTimeline `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 InstanceFleetStatus) String() string {
	return awsutil.Prettify(s)
}

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

// SetState sets the State field's value.
func (s *InstanceFleetStatus) SetState(v string) *InstanceFleetStatus {
	s.State = &v
	return s
}

// SetStateChangeReason sets the StateChangeReason field's value.
func (s *InstanceFleetStatus) SetStateChangeReason(v *InstanceFleetStateChangeReason) *InstanceFleetStatus {
	s.StateChangeReason = v
	return s
}

// SetTimeline sets the Timeline field's value.
func (s *InstanceFleetStatus) SetTimeline(v *InstanceFleetTimeline) *InstanceFleetStatus {
	s.Timeline = v
	return s
}

// Provides historical timestamps for the instance fleet, including the time
// of creation, the time it became ready to run jobs, and the time of termination.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions.
type InstanceFleetTimeline struct {
	_ struct{} `type:"structure"`

	// The time and date the instance fleet was created.
	CreationDateTime *time.Time `type:"timestamp"`

	// The time and date the instance fleet terminated.
	EndDateTime *time.Time `type:"timestamp"`

	// The time and date the instance fleet was ready to run jobs.
	ReadyDateTime *time.Time `type:"timestamp"`
}

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

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

// SetCreationDateTime sets the CreationDateTime field's value.
func (s *InstanceFleetTimeline) SetCreationDateTime(v time.Time) *InstanceFleetTimeline {
	s.CreationDateTime = &v
	return s
}

// SetEndDateTime sets the EndDateTime field's value.
func (s *InstanceFleetTimeline) SetEndDateTime(v time.Time) *InstanceFleetTimeline {
	s.EndDateTime = &v
	return s
}

// SetReadyDateTime sets the ReadyDateTime field's value.
func (s *InstanceFleetTimeline) SetReadyDateTime(v time.Time) *InstanceFleetTimeline {
	s.ReadyDateTime = &v
	return s
}

// This entity represents an instance group, which is a group of instances that
// have common purpose. For example, CORE instance group is used for HDFS.
type InstanceGroup struct {
	_ struct{} `type:"structure"`

	// An automatic scaling policy for a core instance group or task instance group
	// in an Amazon EMR cluster. The automatic scaling policy defines how an instance
	// group dynamically adds and terminates Amazon EC2 instances in response to
	// the value of a CloudWatch metric. See PutAutoScalingPolicy.
	AutoScalingPolicy *AutoScalingPolicyDescription `type:"structure"`

	// If specified, indicates that the instance group uses Spot Instances. This
	// is the maximum price you are willing to pay for Spot Instances. Specify OnDemandPrice
	// to set the amount equal to the On-Demand price, or specify an amount in USD.
	BidPrice *string `type:"string"`

	//
	// Amazon EMR releases 4.x or later.
	//
	// The list of configurations supplied for an Amazon EMR cluster instance group.
	// You can specify a separate configuration for each instance group (master,
	// core, and task).
	Configurations []*Configuration `type:"list"`

	// The version number of the requested configuration specification for this
	// instance group.
	ConfigurationsVersion *int64 `type:"long"`

	// The custom AMI ID to use for the provisioned instance group.
	CustomAmiId *string `type:"string"`

	// The EBS block devices that are mapped to this instance group.
	EbsBlockDevices []*EbsBlockDevice `type:"list"`

	// If the instance group is EBS-optimized. An Amazon EBS-optimized instance
	// uses an optimized configuration stack and provides additional, dedicated
	// capacity for Amazon EBS I/O.
	EbsOptimized *bool `type:"boolean"`

	// The identifier of the instance group.
	Id *string `type:"string"`

	// The type of the instance group. Valid values are MASTER, CORE or TASK.
	InstanceGroupType *string `type:"string" enum:"InstanceGroupType"`

	// The Amazon EC2 instance type for all instances in the instance group.
	InstanceType *string `min:"1" type:"string"`

	// A list of configurations that were successfully applied for an instance group
	// last time.
	LastSuccessfullyAppliedConfigurations []*Configuration `type:"list"`

	// The version number of a configuration specification that was successfully
	// applied for an instance group last time.
	LastSuccessfullyAppliedConfigurationsVersion *int64 `type:"long"`

	// The marketplace to provision instances for this group. Valid values are ON_DEMAND
	// or SPOT.
	Market *string `type:"string" enum:"MarketType"`

	// The name of the instance group.
	Name *string `type:"string"`

	// The target number of instances for the instance group.
	RequestedInstanceCount *int64 `type:"integer"`

	// The number of instances currently running in this instance group.
	RunningInstanceCount *int64 `type:"integer"`

	// Policy for customizing shrink operations.
	ShrinkPolicy *ShrinkPolicy `type:"structure"`

	// The current status of the instance group.
	Status *InstanceGroupStatus `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 InstanceGroup) String() string {
	return awsutil.Prettify(s)
}

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

// SetAutoScalingPolicy sets the AutoScalingPolicy field's value.
func (s *InstanceGroup) SetAutoScalingPolicy(v *AutoScalingPolicyDescription) *InstanceGroup {
	s.AutoScalingPolicy = v
	return s
}

// SetBidPrice sets the BidPrice field's value.
func (s *InstanceGroup) SetBidPrice(v string) *InstanceGroup {
	s.BidPrice = &v
	return s
}

// SetConfigurations sets the Configurations field's value.
func (s *InstanceGroup) SetConfigurations(v []*Configuration) *InstanceGroup {
	s.Configurations = v
	return s
}

// SetConfigurationsVersion sets the ConfigurationsVersion field's value.
func (s *InstanceGroup) SetConfigurationsVersion(v int64) *InstanceGroup {
	s.ConfigurationsVersion = &v
	return s
}

// SetCustomAmiId sets the CustomAmiId field's value.
func (s *InstanceGroup) SetCustomAmiId(v string) *InstanceGroup {
	s.CustomAmiId = &v
	return s
}

// SetEbsBlockDevices sets the EbsBlockDevices field's value.
func (s *InstanceGroup) SetEbsBlockDevices(v []*EbsBlockDevice) *InstanceGroup {
	s.EbsBlockDevices = v
	return s
}

// SetEbsOptimized sets the EbsOptimized field's value.
func (s *InstanceGroup) SetEbsOptimized(v bool) *InstanceGroup {
	s.EbsOptimized = &v
	return s
}

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

// SetInstanceGroupType sets the InstanceGroupType field's value.
func (s *InstanceGroup) SetInstanceGroupType(v string) *InstanceGroup {
	s.InstanceGroupType = &v
	return s
}

// SetInstanceType sets the InstanceType field's value.
func (s *InstanceGroup) SetInstanceType(v string) *InstanceGroup {
	s.InstanceType = &v
	return s
}

// SetLastSuccessfullyAppliedConfigurations sets the LastSuccessfullyAppliedConfigurations field's value.
func (s *InstanceGroup) SetLastSuccessfullyAppliedConfigurations(v []*Configuration) *InstanceGroup {
	s.LastSuccessfullyAppliedConfigurations = v
	return s
}

// SetLastSuccessfullyAppliedConfigurationsVersion sets the LastSuccessfullyAppliedConfigurationsVersion field's value.
func (s *InstanceGroup) SetLastSuccessfullyAppliedConfigurationsVersion(v int64) *InstanceGroup {
	s.LastSuccessfullyAppliedConfigurationsVersion = &v
	return s
}

// SetMarket sets the Market field's value.
func (s *InstanceGroup) SetMarket(v string) *InstanceGroup {
	s.Market = &v
	return s
}

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

// SetRequestedInstanceCount sets the RequestedInstanceCount field's value.
func (s *InstanceGroup) SetRequestedInstanceCount(v int64) *InstanceGroup {
	s.RequestedInstanceCount = &v
	return s
}

// SetRunningInstanceCount sets the RunningInstanceCount field's value.
func (s *InstanceGroup) SetRunningInstanceCount(v int64) *InstanceGroup {
	s.RunningInstanceCount = &v
	return s
}

// SetShrinkPolicy sets the ShrinkPolicy field's value.
func (s *InstanceGroup) SetShrinkPolicy(v *ShrinkPolicy) *InstanceGroup {
	s.ShrinkPolicy = v
	return s
}

// SetStatus sets the Status field's value.
func (s *InstanceGroup) SetStatus(v *InstanceGroupStatus) *InstanceGroup {
	s.Status = v
	return s
}

// Configuration defining a new instance group.
type InstanceGroupConfig struct {
	_ struct{} `type:"structure"`

	// An automatic scaling policy for a core instance group or task instance group
	// in an Amazon EMR cluster. The automatic scaling policy defines how an instance
	// group dynamically adds and terminates Amazon EC2 instances in response to
	// the value of a CloudWatch metric. See PutAutoScalingPolicy.
	AutoScalingPolicy *AutoScalingPolicy `type:"structure"`

	// If specified, indicates that the instance group uses Spot Instances. This
	// is the maximum price you are willing to pay for Spot Instances. Specify OnDemandPrice
	// to set the amount equal to the On-Demand price, or specify an amount in USD.
	BidPrice *string `type:"string"`

	//
	// Amazon EMR releases 4.x or later.
	//
	// The list of configurations supplied for an Amazon EMR cluster instance group.
	// You can specify a separate configuration for each instance group (master,
	// core, and task).
	Configurations []*Configuration `type:"list"`

	// The custom AMI ID to use for the provisioned instance group.
	CustomAmiId *string `type:"string"`

	// EBS configurations that will be attached to each Amazon EC2 instance in the
	// instance group.
	EbsConfiguration *EbsConfiguration `type:"structure"`

	// Target number of instances for the instance group.
	//
	// InstanceCount is a required field
	InstanceCount *int64 `type:"integer" required:"true"`

	// The role of the instance group in the cluster.
	//
	// InstanceRole is a required field
	InstanceRole *string `type:"string" required:"true" enum:"InstanceRoleType"`

	// The Amazon EC2 instance type for all instances in the instance group.
	//
	// InstanceType is a required field
	InstanceType *string `min:"1" type:"string" required:"true"`

	// Market type of the Amazon EC2 instances used to create a cluster node.
	Market *string `type:"string" enum:"MarketType"`

	// Friendly name given to the instance group.
	Name *string `type:"string"`
}

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

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

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

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

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

// SetBidPrice sets the BidPrice field's value.
func (s *InstanceGroupConfig) SetBidPrice(v string) *InstanceGroupConfig {
	s.BidPrice = &v
	return s
}

// SetConfigurations sets the Configurations field's value.
func (s *InstanceGroupConfig) SetConfigurations(v []*Configuration) *InstanceGroupConfig {
	s.Configurations = v
	return s
}

// SetCustomAmiId sets the CustomAmiId field's value.
func (s *InstanceGroupConfig) SetCustomAmiId(v string) *InstanceGroupConfig {
	s.CustomAmiId = &v
	return s
}

// SetEbsConfiguration sets the EbsConfiguration field's value.
func (s *InstanceGroupConfig) SetEbsConfiguration(v *EbsConfiguration) *InstanceGroupConfig {
	s.EbsConfiguration = v
	return s
}

// SetInstanceCount sets the InstanceCount field's value.
func (s *InstanceGroupConfig) SetInstanceCount(v int64) *InstanceGroupConfig {
	s.InstanceCount = &v
	return s
}

// SetInstanceRole sets the InstanceRole field's value.
func (s *InstanceGroupConfig) SetInstanceRole(v string) *InstanceGroupConfig {
	s.InstanceRole = &v
	return s
}

// SetInstanceType sets the InstanceType field's value.
func (s *InstanceGroupConfig) SetInstanceType(v string) *InstanceGroupConfig {
	s.InstanceType = &v
	return s
}

// SetMarket sets the Market field's value.
func (s *InstanceGroupConfig) SetMarket(v string) *InstanceGroupConfig {
	s.Market = &v
	return s
}

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

// Detailed information about an instance group.
type InstanceGroupDetail struct {
	_ struct{} `type:"structure"`

	// If specified, indicates that the instance group uses Spot Instances. This
	// is the maximum price you are willing to pay for Spot Instances. Specify OnDemandPrice
	// to set the amount equal to the On-Demand price, or specify an amount in USD.
	BidPrice *string `type:"string"`

	// The date/time the instance group was created.
	//
	// CreationDateTime is a required field
	CreationDateTime *time.Time `type:"timestamp" required:"true"`

	// The custom AMI ID to use for the provisioned instance group.
	CustomAmiId *string `type:"string"`

	// The date/time the instance group was terminated.
	EndDateTime *time.Time `type:"timestamp"`

	// Unique identifier for the instance group.
	InstanceGroupId *string `type:"string"`

	// Target number of instances to run in the instance group.
	//
	// InstanceRequestCount is a required field
	InstanceRequestCount *int64 `type:"integer" required:"true"`

	// Instance group role in the cluster
	//
	// InstanceRole is a required field
	InstanceRole *string `type:"string" required:"true" enum:"InstanceRoleType"`

	// Actual count of running instances.
	//
	// InstanceRunningCount is a required field
	InstanceRunningCount *int64 `type:"integer" required:"true"`

	// Amazon EC2 instance type.
	//
	// InstanceType is a required field
	InstanceType *string `min:"1" type:"string" required:"true"`

	// Details regarding the state of the instance group.
	LastStateChangeReason *string `type:"string"`

	// Market type of the Amazon EC2 instances used to create a cluster node.
	//
	// Market is a required field
	Market *string `type:"string" required:"true" enum:"MarketType"`

	// Friendly name for the instance group.
	Name *string `type:"string"`

	// The date/time the instance group was available to the cluster.
	ReadyDateTime *time.Time `type:"timestamp"`

	// The date/time the instance group was started.
	StartDateTime *time.Time `type:"timestamp"`

	// State of instance group. The following values are no longer supported: STARTING,
	// TERMINATED, and FAILED.
	//
	// State is a required field
	State *string `type:"string" required:"true" enum:"InstanceGroupState"`
}

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

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

// SetBidPrice sets the BidPrice field's value.
func (s *InstanceGroupDetail) SetBidPrice(v string) *InstanceGroupDetail {
	s.BidPrice = &v
	return s
}

// SetCreationDateTime sets the CreationDateTime field's value.
func (s *InstanceGroupDetail) SetCreationDateTime(v time.Time) *InstanceGroupDetail {
	s.CreationDateTime = &v
	return s
}

// SetCustomAmiId sets the CustomAmiId field's value.
func (s *InstanceGroupDetail) SetCustomAmiId(v string) *InstanceGroupDetail {
	s.CustomAmiId = &v
	return s
}

// SetEndDateTime sets the EndDateTime field's value.
func (s *InstanceGroupDetail) SetEndDateTime(v time.Time) *InstanceGroupDetail {
	s.EndDateTime = &v
	return s
}

// SetInstanceGroupId sets the InstanceGroupId field's value.
func (s *InstanceGroupDetail) SetInstanceGroupId(v string) *InstanceGroupDetail {
	s.InstanceGroupId = &v
	return s
}

// SetInstanceRequestCount sets the InstanceRequestCount field's value.
func (s *InstanceGroupDetail) SetInstanceRequestCount(v int64) *InstanceGroupDetail {
	s.InstanceRequestCount = &v
	return s
}

// SetInstanceRole sets the InstanceRole field's value.
func (s *InstanceGroupDetail) SetInstanceRole(v string) *InstanceGroupDetail {
	s.InstanceRole = &v
	return s
}

// SetInstanceRunningCount sets the InstanceRunningCount field's value.
func (s *InstanceGroupDetail) SetInstanceRunningCount(v int64) *InstanceGroupDetail {
	s.InstanceRunningCount = &v
	return s
}

// SetInstanceType sets the InstanceType field's value.
func (s *InstanceGroupDetail) SetInstanceType(v string) *InstanceGroupDetail {
	s.InstanceType = &v
	return s
}

// SetLastStateChangeReason sets the LastStateChangeReason field's value.
func (s *InstanceGroupDetail) SetLastStateChangeReason(v string) *InstanceGroupDetail {
	s.LastStateChangeReason = &v
	return s
}

// SetMarket sets the Market field's value.
func (s *InstanceGroupDetail) SetMarket(v string) *InstanceGroupDetail {
	s.Market = &v
	return s
}

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

// SetReadyDateTime sets the ReadyDateTime field's value.
func (s *InstanceGroupDetail) SetReadyDateTime(v time.Time) *InstanceGroupDetail {
	s.ReadyDateTime = &v
	return s
}

// SetStartDateTime sets the StartDateTime field's value.
func (s *InstanceGroupDetail) SetStartDateTime(v time.Time) *InstanceGroupDetail {
	s.StartDateTime = &v
	return s
}

// SetState sets the State field's value.
func (s *InstanceGroupDetail) SetState(v string) *InstanceGroupDetail {
	s.State = &v
	return s
}

// Modify the size or configurations of an instance group.
type InstanceGroupModifyConfig struct {
	_ struct{} `type:"structure"`

	// A list of new or modified configurations to apply for an instance group.
	Configurations []*Configuration `type:"list"`

	// The Amazon EC2 InstanceIds to terminate. After you terminate the instances,
	// the instance group will not return to its original requested size.
	EC2InstanceIdsToTerminate []*string `type:"list"`

	// Target size for the instance group.
	InstanceCount *int64 `type:"integer"`

	// Unique ID of the instance group to modify.
	//
	// InstanceGroupId is a required field
	InstanceGroupId *string `type:"string" required:"true"`

	// Type of reconfiguration requested. Valid values are MERGE and OVERWRITE.
	ReconfigurationType *string `type:"string" enum:"ReconfigurationType"`

	// Policy for customizing shrink operations.
	ShrinkPolicy *ShrinkPolicy `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 InstanceGroupModifyConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetConfigurations sets the Configurations field's value.
func (s *InstanceGroupModifyConfig) SetConfigurations(v []*Configuration) *InstanceGroupModifyConfig {
	s.Configurations = v
	return s
}

// SetEC2InstanceIdsToTerminate sets the EC2InstanceIdsToTerminate field's value.
func (s *InstanceGroupModifyConfig) SetEC2InstanceIdsToTerminate(v []*string) *InstanceGroupModifyConfig {
	s.EC2InstanceIdsToTerminate = v
	return s
}

// SetInstanceCount sets the InstanceCount field's value.
func (s *InstanceGroupModifyConfig) SetInstanceCount(v int64) *InstanceGroupModifyConfig {
	s.InstanceCount = &v
	return s
}

// SetInstanceGroupId sets the InstanceGroupId field's value.
func (s *InstanceGroupModifyConfig) SetInstanceGroupId(v string) *InstanceGroupModifyConfig {
	s.InstanceGroupId = &v
	return s
}

// SetReconfigurationType sets the ReconfigurationType field's value.
func (s *InstanceGroupModifyConfig) SetReconfigurationType(v string) *InstanceGroupModifyConfig {
	s.ReconfigurationType = &v
	return s
}

// SetShrinkPolicy sets the ShrinkPolicy field's value.
func (s *InstanceGroupModifyConfig) SetShrinkPolicy(v *ShrinkPolicy) *InstanceGroupModifyConfig {
	s.ShrinkPolicy = v
	return s
}

// The status change reason details for the instance group.
type InstanceGroupStateChangeReason struct {
	_ struct{} `type:"structure"`

	// The programmable code for the state change reason.
	Code *string `type:"string" enum:"InstanceGroupStateChangeReasonCode"`

	// The status change reason description.
	Message *string `type:"string"`
}

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

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

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

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

// The details of the instance group status.
type InstanceGroupStatus struct {
	_ struct{} `type:"structure"`

	// The current state of the instance group.
	State *string `type:"string" enum:"InstanceGroupState"`

	// The status change reason details for the instance group.
	StateChangeReason *InstanceGroupStateChangeReason `type:"structure"`

	// The timeline of the instance group status over time.
	Timeline *InstanceGroupTimeline `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 InstanceGroupStatus) String() string {
	return awsutil.Prettify(s)
}

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

// SetState sets the State field's value.
func (s *InstanceGroupStatus) SetState(v string) *InstanceGroupStatus {
	s.State = &v
	return s
}

// SetStateChangeReason sets the StateChangeReason field's value.
func (s *InstanceGroupStatus) SetStateChangeReason(v *InstanceGroupStateChangeReason) *InstanceGroupStatus {
	s.StateChangeReason = v
	return s
}

// SetTimeline sets the Timeline field's value.
func (s *InstanceGroupStatus) SetTimeline(v *InstanceGroupTimeline) *InstanceGroupStatus {
	s.Timeline = v
	return s
}

// The timeline of the instance group lifecycle.
type InstanceGroupTimeline struct {
	_ struct{} `type:"structure"`

	// The creation date and time of the instance group.
	CreationDateTime *time.Time `type:"timestamp"`

	// The date and time when the instance group terminated.
	EndDateTime *time.Time `type:"timestamp"`

	// The date and time when the instance group became ready to perform tasks.
	ReadyDateTime *time.Time `type:"timestamp"`
}

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

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

// SetCreationDateTime sets the CreationDateTime field's value.
func (s *InstanceGroupTimeline) SetCreationDateTime(v time.Time) *InstanceGroupTimeline {
	s.CreationDateTime = &v
	return s
}

// SetEndDateTime sets the EndDateTime field's value.
func (s *InstanceGroupTimeline) SetEndDateTime(v time.Time) *InstanceGroupTimeline {
	s.EndDateTime = &v
	return s
}

// SetReadyDateTime sets the ReadyDateTime field's value.
func (s *InstanceGroupTimeline) SetReadyDateTime(v time.Time) *InstanceGroupTimeline {
	s.ReadyDateTime = &v
	return s
}

// Custom policy for requesting termination protection or termination of specific
// instances when shrinking an instance group.
type InstanceResizePolicy struct {
	_ struct{} `type:"structure"`

	// Decommissioning timeout override for the specific list of instances to be
	// terminated.
	InstanceTerminationTimeout *int64 `type:"integer"`

	// Specific list of instances to be protected when shrinking an instance group.
	InstancesToProtect []*string `type:"list"`

	// Specific list of instances to be terminated when shrinking an instance group.
	InstancesToTerminate []*string `type:"list"`
}

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

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

// SetInstanceTerminationTimeout sets the InstanceTerminationTimeout field's value.
func (s *InstanceResizePolicy) SetInstanceTerminationTimeout(v int64) *InstanceResizePolicy {
	s.InstanceTerminationTimeout = &v
	return s
}

// SetInstancesToProtect sets the InstancesToProtect field's value.
func (s *InstanceResizePolicy) SetInstancesToProtect(v []*string) *InstanceResizePolicy {
	s.InstancesToProtect = v
	return s
}

// SetInstancesToTerminate sets the InstancesToTerminate field's value.
func (s *InstanceResizePolicy) SetInstancesToTerminate(v []*string) *InstanceResizePolicy {
	s.InstancesToTerminate = v
	return s
}

// The details of the status change reason for the instance.
type InstanceStateChangeReason struct {
	_ struct{} `type:"structure"`

	// The programmable code for the state change reason.
	Code *string `type:"string" enum:"InstanceStateChangeReasonCode"`

	// The status change reason description.
	Message *string `type:"string"`
}

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

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

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

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

// The instance status details.
type InstanceStatus struct {
	_ struct{} `type:"structure"`

	// The current state of the instance.
	State *string `type:"string" enum:"InstanceState"`

	// The details of the status change reason for the instance.
	StateChangeReason *InstanceStateChangeReason `type:"structure"`

	// The timeline of the instance status over time.
	Timeline *InstanceTimeline `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 InstanceStatus) String() string {
	return awsutil.Prettify(s)
}

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

// SetState sets the State field's value.
func (s *InstanceStatus) SetState(v string) *InstanceStatus {
	s.State = &v
	return s
}

// SetStateChangeReason sets the StateChangeReason field's value.
func (s *InstanceStatus) SetStateChangeReason(v *InstanceStateChangeReason) *InstanceStatus {
	s.StateChangeReason = v
	return s
}

// SetTimeline sets the Timeline field's value.
func (s *InstanceStatus) SetTimeline(v *InstanceTimeline) *InstanceStatus {
	s.Timeline = v
	return s
}

// The timeline of the instance lifecycle.
type InstanceTimeline struct {
	_ struct{} `type:"structure"`

	// The creation date and time of the instance.
	CreationDateTime *time.Time `type:"timestamp"`

	// The date and time when the instance was terminated.
	EndDateTime *time.Time `type:"timestamp"`

	// The date and time when the instance was ready to perform tasks.
	ReadyDateTime *time.Time `type:"timestamp"`
}

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

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

// SetCreationDateTime sets the CreationDateTime field's value.
func (s *InstanceTimeline) SetCreationDateTime(v time.Time) *InstanceTimeline {
	s.CreationDateTime = &v
	return s
}

// SetEndDateTime sets the EndDateTime field's value.
func (s *InstanceTimeline) SetEndDateTime(v time.Time) *InstanceTimeline {
	s.EndDateTime = &v
	return s
}

// SetReadyDateTime sets the ReadyDateTime field's value.
func (s *InstanceTimeline) SetReadyDateTime(v time.Time) *InstanceTimeline {
	s.ReadyDateTime = &v
	return s
}

// An instance type configuration for each instance type in an instance fleet,
// which determines the Amazon EC2 instances Amazon EMR attempts to provision
// to fulfill On-Demand and Spot target capacities. When you use an allocation
// strategy, you can include a maximum of 30 instance type configurations for
// a fleet. For more information about how to use an allocation strategy, see
// Configure Instance Fleets (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-fleet.html).
// Without an allocation strategy, you may specify a maximum of five instance
// type configurations for a fleet.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions.
type InstanceTypeConfig struct {
	_ struct{} `type:"structure"`

	// The bid price for each Amazon EC2 Spot Instance type as defined by InstanceType.
	// Expressed in USD. If neither BidPrice nor BidPriceAsPercentageOfOnDemandPrice
	// is provided, BidPriceAsPercentageOfOnDemandPrice defaults to 100%.
	BidPrice *string `type:"string"`

	// The bid price, as a percentage of On-Demand price, for each Amazon EC2 Spot
	// Instance as defined by InstanceType. Expressed as a number (for example,
	// 20 specifies 20%). If neither BidPrice nor BidPriceAsPercentageOfOnDemandPrice
	// is provided, BidPriceAsPercentageOfOnDemandPrice defaults to 100%.
	BidPriceAsPercentageOfOnDemandPrice *float64 `type:"double"`

	// A configuration classification that applies when provisioning cluster instances,
	// which can include configurations for applications and software that run on
	// the cluster.
	Configurations []*Configuration `type:"list"`

	// The custom AMI ID to use for the instance type.
	CustomAmiId *string `type:"string"`

	// The configuration of Amazon Elastic Block Store (Amazon EBS) attached to
	// each instance as defined by InstanceType.
	EbsConfiguration *EbsConfiguration `type:"structure"`

	// An Amazon EC2 instance type, such as m3.xlarge.
	//
	// InstanceType is a required field
	InstanceType *string `min:"1" type:"string" required:"true"`

	// The number of units that a provisioned instance of this type provides toward
	// fulfilling the target capacities defined in InstanceFleetConfig. This value
	// is 1 for a master instance fleet, and must be 1 or greater for core and task
	// instance fleets. Defaults to 1 if not specified.
	WeightedCapacity *int64 `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 InstanceTypeConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetBidPrice sets the BidPrice field's value.
func (s *InstanceTypeConfig) SetBidPrice(v string) *InstanceTypeConfig {
	s.BidPrice = &v
	return s
}

// SetBidPriceAsPercentageOfOnDemandPrice sets the BidPriceAsPercentageOfOnDemandPrice field's value.
func (s *InstanceTypeConfig) SetBidPriceAsPercentageOfOnDemandPrice(v float64) *InstanceTypeConfig {
	s.BidPriceAsPercentageOfOnDemandPrice = &v
	return s
}

// SetConfigurations sets the Configurations field's value.
func (s *InstanceTypeConfig) SetConfigurations(v []*Configuration) *InstanceTypeConfig {
	s.Configurations = v
	return s
}

// SetCustomAmiId sets the CustomAmiId field's value.
func (s *InstanceTypeConfig) SetCustomAmiId(v string) *InstanceTypeConfig {
	s.CustomAmiId = &v
	return s
}

// SetEbsConfiguration sets the EbsConfiguration field's value.
func (s *InstanceTypeConfig) SetEbsConfiguration(v *EbsConfiguration) *InstanceTypeConfig {
	s.EbsConfiguration = v
	return s
}

// SetInstanceType sets the InstanceType field's value.
func (s *InstanceTypeConfig) SetInstanceType(v string) *InstanceTypeConfig {
	s.InstanceType = &v
	return s
}

// SetWeightedCapacity sets the WeightedCapacity field's value.
func (s *InstanceTypeConfig) SetWeightedCapacity(v int64) *InstanceTypeConfig {
	s.WeightedCapacity = &v
	return s
}

// The configuration specification for each instance type in an instance fleet.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions.
type InstanceTypeSpecification struct {
	_ struct{} `type:"structure"`

	// The bid price for each Amazon EC2 Spot Instance type as defined by InstanceType.
	// Expressed in USD.
	BidPrice *string `type:"string"`

	// The bid price, as a percentage of On-Demand price, for each Amazon EC2 Spot
	// Instance as defined by InstanceType. Expressed as a number (for example,
	// 20 specifies 20%).
	BidPriceAsPercentageOfOnDemandPrice *float64 `type:"double"`

	// A configuration classification that applies when provisioning cluster instances,
	// which can include configurations for applications and software bundled with
	// Amazon EMR.
	Configurations []*Configuration `type:"list"`

	// The custom AMI ID to use for the instance type.
	CustomAmiId *string `type:"string"`

	// The configuration of Amazon Elastic Block Store (Amazon EBS) attached to
	// each instance as defined by InstanceType.
	EbsBlockDevices []*EbsBlockDevice `type:"list"`

	// Evaluates to TRUE when the specified InstanceType is EBS-optimized.
	EbsOptimized *bool `type:"boolean"`

	// The Amazon EC2 instance type, for example m3.xlarge.
	InstanceType *string `min:"1" type:"string"`

	// The number of units that a provisioned instance of this type provides toward
	// fulfilling the target capacities defined in InstanceFleetConfig. Capacity
	// values represent performance characteristics such as vCPUs, memory, or I/O.
	// If not specified, the default value is 1.
	WeightedCapacity *int64 `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 InstanceTypeSpecification) String() string {
	return awsutil.Prettify(s)
}

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

// SetBidPrice sets the BidPrice field's value.
func (s *InstanceTypeSpecification) SetBidPrice(v string) *InstanceTypeSpecification {
	s.BidPrice = &v
	return s
}

// SetBidPriceAsPercentageOfOnDemandPrice sets the BidPriceAsPercentageOfOnDemandPrice field's value.
func (s *InstanceTypeSpecification) SetBidPriceAsPercentageOfOnDemandPrice(v float64) *InstanceTypeSpecification {
	s.BidPriceAsPercentageOfOnDemandPrice = &v
	return s
}

// SetConfigurations sets the Configurations field's value.
func (s *InstanceTypeSpecification) SetConfigurations(v []*Configuration) *InstanceTypeSpecification {
	s.Configurations = v
	return s
}

// SetCustomAmiId sets the CustomAmiId field's value.
func (s *InstanceTypeSpecification) SetCustomAmiId(v string) *InstanceTypeSpecification {
	s.CustomAmiId = &v
	return s
}

// SetEbsBlockDevices sets the EbsBlockDevices field's value.
func (s *InstanceTypeSpecification) SetEbsBlockDevices(v []*EbsBlockDevice) *InstanceTypeSpecification {
	s.EbsBlockDevices = v
	return s
}

// SetEbsOptimized sets the EbsOptimized field's value.
func (s *InstanceTypeSpecification) SetEbsOptimized(v bool) *InstanceTypeSpecification {
	s.EbsOptimized = &v
	return s
}

// SetInstanceType sets the InstanceType field's value.
func (s *InstanceTypeSpecification) SetInstanceType(v string) *InstanceTypeSpecification {
	s.InstanceType = &v
	return s
}

// SetWeightedCapacity sets the WeightedCapacity field's value.
func (s *InstanceTypeSpecification) SetWeightedCapacity(v int64) *InstanceTypeSpecification {
	s.WeightedCapacity = &v
	return s
}

// Indicates that an error occurred while processing the request and that the
// request was not completed.
type InternalServerError 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 InternalServerError) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorInternalServerError(v protocol.ResponseMetadata) error {
	return &InternalServerError{
		RespMetadata: v,
	}
}

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

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

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

func (s *InternalServerError) 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 *InternalServerError) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// This exception occurs when there is an internal failure in the Amazon EMR
// service.
type InternalServerException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The message associated with the exception.
	Message_ *string `locationName:"Message" type:"string"`
}

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

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

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

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

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

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

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

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

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

// This exception occurs when there is something wrong with user input.
type InvalidRequestException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The error code associated with the exception.
	ErrorCode *string `min:"1" type:"string"`

	// The message associated with the exception.
	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 InvalidRequestException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorInvalidRequestException(v protocol.ResponseMetadata) error {
	return &InvalidRequestException{
		RespMetadata: v,
	}
}

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

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

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

func (s *InvalidRequestException) 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 *InvalidRequestException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

// A description of a cluster (job flow).
type JobFlowDetail struct {
	_ struct{} `type:"structure"`

	// Applies only to Amazon EMR AMI versions 3.x and 2.x. For Amazon EMR releases
	// 4.0 and later, ReleaseLabel is used. To specify a custom AMI, use CustomAmiID.
	AmiVersion *string `type:"string"`

	// An IAM role for automatic scaling policies. The default role is EMR_AutoScaling_DefaultRole.
	// The IAM role provides a way for the automatic scaling feature to get the
	// required permissions it needs to launch and terminate Amazon EC2 instances
	// in an instance group.
	AutoScalingRole *string `type:"string"`

	// A list of the bootstrap actions run by the job flow.
	BootstrapActions []*BootstrapActionDetail `type:"list"`

	// Describes the execution status of the job flow.
	//
	// ExecutionStatusDetail is a required field
	ExecutionStatusDetail *JobFlowExecutionStatusDetail `type:"structure" required:"true"`

	// Describes the Amazon EC2 instances of the job flow.
	//
	// Instances is a required field
	Instances *JobFlowInstancesDetail `type:"structure" required:"true"`

	// The job flow identifier.
	//
	// JobFlowId is a required field
	JobFlowId *string `type:"string" required:"true"`

	// The IAM role that was specified when the job flow was launched. The Amazon
	// EC2 instances of the job flow assume this role.
	JobFlowRole *string `type:"string"`

	// The KMS key used for encrypting log files. This attribute is only available
	// with Amazon EMR 5.30.0 and later, excluding 6.0.0.
	LogEncryptionKmsKeyId *string `type:"string"`

	// The location in Amazon S3 where log files for the job are stored.
	LogUri *string `type:"string"`

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

	// The way that individual Amazon EC2 instances terminate when an automatic
	// scale-in activity occurs or an instance group is resized. TERMINATE_AT_INSTANCE_HOUR
	// indicates that Amazon EMR terminates nodes at the instance-hour boundary,
	// regardless of when the request to terminate the instance was submitted. This
	// option is only available with Amazon EMR 5.1.0 and later and is the default
	// for clusters created using that version. TERMINATE_AT_TASK_COMPLETION indicates
	// that Amazon EMR adds nodes to a deny list and drains tasks from nodes before
	// terminating the Amazon EC2 instances, regardless of the instance-hour boundary.
	// With either behavior, Amazon EMR removes the least active nodes first and
	// blocks instance termination if it could lead to HDFS corruption. TERMINATE_AT_TASK_COMPLETION
	// available only in Amazon EMR releases 4.1.0 and later, and is the default
	// for releases of Amazon EMR earlier than 5.1.0.
	ScaleDownBehavior *string `type:"string" enum:"ScaleDownBehavior"`

	// The IAM role that is assumed by the Amazon EMR service to access Amazon Web
	// Services resources on your behalf.
	ServiceRole *string `type:"string"`

	// A list of steps run by the job flow.
	Steps []*StepDetail `type:"list"`

	// A list of strings set by third-party software when the job flow is launched.
	// If you are not using third-party software to manage the job flow, this value
	// is empty.
	SupportedProducts []*string `type:"list"`

	// Indicates whether the cluster is visible to IAM principals in the Amazon
	// Web Services account associated with the cluster. When true, IAM principals
	// in the Amazon Web Services account can perform Amazon EMR cluster actions
	// that their IAM policies allow. When false, only the IAM principal that created
	// the cluster and the Amazon Web Services account root user can perform Amazon
	// EMR actions, regardless of IAM permissions policies attached to other IAM
	// principals.
	//
	// The default value is true if a value is not provided when creating a cluster
	// using the Amazon EMR API RunJobFlow command, the CLI create-cluster (https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html)
	// command, or the Amazon Web Services Management Console.
	VisibleToAllUsers *bool `type:"boolean"`
}

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

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

// SetAmiVersion sets the AmiVersion field's value.
func (s *JobFlowDetail) SetAmiVersion(v string) *JobFlowDetail {
	s.AmiVersion = &v
	return s
}

// SetAutoScalingRole sets the AutoScalingRole field's value.
func (s *JobFlowDetail) SetAutoScalingRole(v string) *JobFlowDetail {
	s.AutoScalingRole = &v
	return s
}

// SetBootstrapActions sets the BootstrapActions field's value.
func (s *JobFlowDetail) SetBootstrapActions(v []*BootstrapActionDetail) *JobFlowDetail {
	s.BootstrapActions = v
	return s
}

// SetExecutionStatusDetail sets the ExecutionStatusDetail field's value.
func (s *JobFlowDetail) SetExecutionStatusDetail(v *JobFlowExecutionStatusDetail) *JobFlowDetail {
	s.ExecutionStatusDetail = v
	return s
}

// SetInstances sets the Instances field's value.
func (s *JobFlowDetail) SetInstances(v *JobFlowInstancesDetail) *JobFlowDetail {
	s.Instances = v
	return s
}

// SetJobFlowId sets the JobFlowId field's value.
func (s *JobFlowDetail) SetJobFlowId(v string) *JobFlowDetail {
	s.JobFlowId = &v
	return s
}

// SetJobFlowRole sets the JobFlowRole field's value.
func (s *JobFlowDetail) SetJobFlowRole(v string) *JobFlowDetail {
	s.JobFlowRole = &v
	return s
}

// SetLogEncryptionKmsKeyId sets the LogEncryptionKmsKeyId field's value.
func (s *JobFlowDetail) SetLogEncryptionKmsKeyId(v string) *JobFlowDetail {
	s.LogEncryptionKmsKeyId = &v
	return s
}

// SetLogUri sets the LogUri field's value.
func (s *JobFlowDetail) SetLogUri(v string) *JobFlowDetail {
	s.LogUri = &v
	return s
}

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

// SetScaleDownBehavior sets the ScaleDownBehavior field's value.
func (s *JobFlowDetail) SetScaleDownBehavior(v string) *JobFlowDetail {
	s.ScaleDownBehavior = &v
	return s
}

// SetServiceRole sets the ServiceRole field's value.
func (s *JobFlowDetail) SetServiceRole(v string) *JobFlowDetail {
	s.ServiceRole = &v
	return s
}

// SetSteps sets the Steps field's value.
func (s *JobFlowDetail) SetSteps(v []*StepDetail) *JobFlowDetail {
	s.Steps = v
	return s
}

// SetSupportedProducts sets the SupportedProducts field's value.
func (s *JobFlowDetail) SetSupportedProducts(v []*string) *JobFlowDetail {
	s.SupportedProducts = v
	return s
}

// SetVisibleToAllUsers sets the VisibleToAllUsers field's value.
func (s *JobFlowDetail) SetVisibleToAllUsers(v bool) *JobFlowDetail {
	s.VisibleToAllUsers = &v
	return s
}

// Describes the status of the cluster (job flow).
type JobFlowExecutionStatusDetail struct {
	_ struct{} `type:"structure"`

	// The creation date and time of the job flow.
	//
	// CreationDateTime is a required field
	CreationDateTime *time.Time `type:"timestamp" required:"true"`

	// The completion date and time of the job flow.
	EndDateTime *time.Time `type:"timestamp"`

	// Description of the job flow last changed state.
	LastStateChangeReason *string `type:"string"`

	// The date and time when the job flow was ready to start running bootstrap
	// actions.
	ReadyDateTime *time.Time `type:"timestamp"`

	// The start date and time of the job flow.
	StartDateTime *time.Time `type:"timestamp"`

	// The state of the job flow.
	//
	// State is a required field
	State *string `type:"string" required:"true" enum:"JobFlowExecutionState"`
}

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

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

// SetCreationDateTime sets the CreationDateTime field's value.
func (s *JobFlowExecutionStatusDetail) SetCreationDateTime(v time.Time) *JobFlowExecutionStatusDetail {
	s.CreationDateTime = &v
	return s
}

// SetEndDateTime sets the EndDateTime field's value.
func (s *JobFlowExecutionStatusDetail) SetEndDateTime(v time.Time) *JobFlowExecutionStatusDetail {
	s.EndDateTime = &v
	return s
}

// SetLastStateChangeReason sets the LastStateChangeReason field's value.
func (s *JobFlowExecutionStatusDetail) SetLastStateChangeReason(v string) *JobFlowExecutionStatusDetail {
	s.LastStateChangeReason = &v
	return s
}

// SetReadyDateTime sets the ReadyDateTime field's value.
func (s *JobFlowExecutionStatusDetail) SetReadyDateTime(v time.Time) *JobFlowExecutionStatusDetail {
	s.ReadyDateTime = &v
	return s
}

// SetStartDateTime sets the StartDateTime field's value.
func (s *JobFlowExecutionStatusDetail) SetStartDateTime(v time.Time) *JobFlowExecutionStatusDetail {
	s.StartDateTime = &v
	return s
}

// SetState sets the State field's value.
func (s *JobFlowExecutionStatusDetail) SetState(v string) *JobFlowExecutionStatusDetail {
	s.State = &v
	return s
}

// A description of the Amazon EC2 instance on which the cluster (job flow)
// runs. A valid JobFlowInstancesConfig must contain either InstanceGroups or
// InstanceFleets. They cannot be used together. You may also have MasterInstanceType,
// SlaveInstanceType, and InstanceCount (all three must be present), but we
// don't recommend this configuration.
type JobFlowInstancesConfig struct {
	_ struct{} `type:"structure"`

	// A list of additional Amazon EC2 security group IDs for the master node.
	AdditionalMasterSecurityGroups []*string `type:"list"`

	// A list of additional Amazon EC2 security group IDs for the core and task
	// nodes.
	AdditionalSlaveSecurityGroups []*string `type:"list"`

	// The name of the Amazon EC2 key pair that can be used to connect to the master
	// node using SSH as the user called "hadoop."
	Ec2KeyName *string `type:"string"`

	// Applies to clusters that use the uniform instance group configuration. To
	// launch the cluster in Amazon Virtual Private Cloud (Amazon VPC), set this
	// parameter to the identifier of the Amazon VPC subnet where you want the cluster
	// to launch. If you do not specify this value and your account supports EC2-Classic,
	// the cluster launches in EC2-Classic.
	Ec2SubnetId *string `type:"string"`

	// Applies to clusters that use the instance fleet configuration. When multiple
	// Amazon EC2 subnet IDs are specified, Amazon EMR evaluates them and launches
	// instances in the optimal subnet.
	//
	// The instance fleet configuration is available only in Amazon EMR releases
	// 4.8.0 and later, excluding 5.0.x versions.
	Ec2SubnetIds []*string `type:"list"`

	// The identifier of the Amazon EC2 security group for the master node. If you
	// specify EmrManagedMasterSecurityGroup, you must also specify EmrManagedSlaveSecurityGroup.
	EmrManagedMasterSecurityGroup *string `type:"string"`

	// The identifier of the Amazon EC2 security group for the core and task nodes.
	// If you specify EmrManagedSlaveSecurityGroup, you must also specify EmrManagedMasterSecurityGroup.
	EmrManagedSlaveSecurityGroup *string `type:"string"`

	// Applies only to Amazon EMR release versions earlier than 4.0. The Hadoop
	// version for the cluster. Valid inputs are "0.18" (no longer maintained),
	// "0.20" (no longer maintained), "0.20.205" (no longer maintained), "1.0.3",
	// "2.2.0", or "2.4.0". If you do not set this value, the default of 0.18 is
	// used, unless the AmiVersion parameter is set in the RunJobFlow call, in which
	// case the default version of Hadoop for that AMI version is used.
	HadoopVersion *string `type:"string"`

	// The number of Amazon EC2 instances in the cluster.
	InstanceCount *int64 `type:"integer"`

	//
	// The instance fleet configuration is available only in Amazon EMR releases
	// 4.8.0 and later, excluding 5.0.x versions.
	//
	// Describes the Amazon EC2 instances and instance configurations for clusters
	// that use the instance fleet configuration.
	InstanceFleets []*InstanceFleetConfig `type:"list"`

	// Configuration for the instance groups in a cluster.
	InstanceGroups []*InstanceGroupConfig `type:"list"`

	// Specifies whether the cluster should remain available after completing all
	// steps. Defaults to true. For more information about configuring cluster termination,
	// see Control Cluster Termination (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-termination.html)
	// in the EMR Management Guide.
	KeepJobFlowAliveWhenNoSteps *bool `type:"boolean"`

	// The Amazon EC2 instance type of the master node.
	MasterInstanceType *string `min:"1" type:"string"`

	// The Availability Zone in which the cluster runs.
	Placement *PlacementType `type:"structure"`

	// The identifier of the Amazon EC2 security group for the Amazon EMR service
	// to access clusters in VPC private subnets.
	ServiceAccessSecurityGroup *string `type:"string"`

	// The Amazon EC2 instance type of the core and task nodes.
	SlaveInstanceType *string `min:"1" type:"string"`

	// Specifies whether to lock the cluster to prevent the Amazon EC2 instances
	// from being terminated by API call, user intervention, or in the event of
	// a job-flow error.
	TerminationProtected *bool `type:"boolean"`
}

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

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

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

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

// SetAdditionalMasterSecurityGroups sets the AdditionalMasterSecurityGroups field's value.
func (s *JobFlowInstancesConfig) SetAdditionalMasterSecurityGroups(v []*string) *JobFlowInstancesConfig {
	s.AdditionalMasterSecurityGroups = v
	return s
}

// SetAdditionalSlaveSecurityGroups sets the AdditionalSlaveSecurityGroups field's value.
func (s *JobFlowInstancesConfig) SetAdditionalSlaveSecurityGroups(v []*string) *JobFlowInstancesConfig {
	s.AdditionalSlaveSecurityGroups = v
	return s
}

// SetEc2KeyName sets the Ec2KeyName field's value.
func (s *JobFlowInstancesConfig) SetEc2KeyName(v string) *JobFlowInstancesConfig {
	s.Ec2KeyName = &v
	return s
}

// SetEc2SubnetId sets the Ec2SubnetId field's value.
func (s *JobFlowInstancesConfig) SetEc2SubnetId(v string) *JobFlowInstancesConfig {
	s.Ec2SubnetId = &v
	return s
}

// SetEc2SubnetIds sets the Ec2SubnetIds field's value.
func (s *JobFlowInstancesConfig) SetEc2SubnetIds(v []*string) *JobFlowInstancesConfig {
	s.Ec2SubnetIds = v
	return s
}

// SetEmrManagedMasterSecurityGroup sets the EmrManagedMasterSecurityGroup field's value.
func (s *JobFlowInstancesConfig) SetEmrManagedMasterSecurityGroup(v string) *JobFlowInstancesConfig {
	s.EmrManagedMasterSecurityGroup = &v
	return s
}

// SetEmrManagedSlaveSecurityGroup sets the EmrManagedSlaveSecurityGroup field's value.
func (s *JobFlowInstancesConfig) SetEmrManagedSlaveSecurityGroup(v string) *JobFlowInstancesConfig {
	s.EmrManagedSlaveSecurityGroup = &v
	return s
}

// SetHadoopVersion sets the HadoopVersion field's value.
func (s *JobFlowInstancesConfig) SetHadoopVersion(v string) *JobFlowInstancesConfig {
	s.HadoopVersion = &v
	return s
}

// SetInstanceCount sets the InstanceCount field's value.
func (s *JobFlowInstancesConfig) SetInstanceCount(v int64) *JobFlowInstancesConfig {
	s.InstanceCount = &v
	return s
}

// SetInstanceFleets sets the InstanceFleets field's value.
func (s *JobFlowInstancesConfig) SetInstanceFleets(v []*InstanceFleetConfig) *JobFlowInstancesConfig {
	s.InstanceFleets = v
	return s
}

// SetInstanceGroups sets the InstanceGroups field's value.
func (s *JobFlowInstancesConfig) SetInstanceGroups(v []*InstanceGroupConfig) *JobFlowInstancesConfig {
	s.InstanceGroups = v
	return s
}

// SetKeepJobFlowAliveWhenNoSteps sets the KeepJobFlowAliveWhenNoSteps field's value.
func (s *JobFlowInstancesConfig) SetKeepJobFlowAliveWhenNoSteps(v bool) *JobFlowInstancesConfig {
	s.KeepJobFlowAliveWhenNoSteps = &v
	return s
}

// SetMasterInstanceType sets the MasterInstanceType field's value.
func (s *JobFlowInstancesConfig) SetMasterInstanceType(v string) *JobFlowInstancesConfig {
	s.MasterInstanceType = &v
	return s
}

// SetPlacement sets the Placement field's value.
func (s *JobFlowInstancesConfig) SetPlacement(v *PlacementType) *JobFlowInstancesConfig {
	s.Placement = v
	return s
}

// SetServiceAccessSecurityGroup sets the ServiceAccessSecurityGroup field's value.
func (s *JobFlowInstancesConfig) SetServiceAccessSecurityGroup(v string) *JobFlowInstancesConfig {
	s.ServiceAccessSecurityGroup = &v
	return s
}

// SetSlaveInstanceType sets the SlaveInstanceType field's value.
func (s *JobFlowInstancesConfig) SetSlaveInstanceType(v string) *JobFlowInstancesConfig {
	s.SlaveInstanceType = &v
	return s
}

// SetTerminationProtected sets the TerminationProtected field's value.
func (s *JobFlowInstancesConfig) SetTerminationProtected(v bool) *JobFlowInstancesConfig {
	s.TerminationProtected = &v
	return s
}

// Specify the type of Amazon EC2 instances that the cluster (job flow) runs
// on.
type JobFlowInstancesDetail struct {
	_ struct{} `type:"structure"`

	// The name of an Amazon EC2 key pair that can be used to connect to the master
	// node using SSH.
	Ec2KeyName *string `type:"string"`

	// For clusters launched within Amazon Virtual Private Cloud, this is the identifier
	// of the subnet where the cluster was launched.
	Ec2SubnetId *string `type:"string"`

	// The Hadoop version for the cluster.
	HadoopVersion *string `type:"string"`

	// The number of Amazon EC2 instances in the cluster. If the value is 1, the
	// same instance serves as both the master and core and task node. If the value
	// is greater than 1, one instance is the master node and all others are core
	// and task nodes.
	//
	// InstanceCount is a required field
	InstanceCount *int64 `type:"integer" required:"true"`

	// Details about the instance groups in a cluster.
	InstanceGroups []*InstanceGroupDetail `type:"list"`

	// Specifies whether the cluster should remain available after completing all
	// steps.
	KeepJobFlowAliveWhenNoSteps *bool `type:"boolean"`

	// The Amazon EC2 instance identifier of the master node.
	MasterInstanceId *string `type:"string"`

	// The Amazon EC2 master node instance type.
	//
	// MasterInstanceType is a required field
	MasterInstanceType *string `min:"1" type:"string" required:"true"`

	// The DNS name of the master node. If the cluster is on a private subnet, this
	// is the private DNS name. On a public subnet, this is the public DNS name.
	MasterPublicDnsName *string `type:"string"`

	// An approximation of the cost of the cluster, represented in m1.small/hours.
	// This value is increased one time for every hour that an m1.small instance
	// runs. Larger instances are weighted more heavily, so an Amazon EC2 instance
	// that is roughly four times more expensive would result in the normalized
	// instance hours being increased incrementally four times. This result is only
	// an approximation and does not reflect the actual billing rate.
	NormalizedInstanceHours *int64 `type:"integer"`

	// The Amazon EC2 Availability Zone for the cluster.
	Placement *PlacementType `type:"structure"`

	// The Amazon EC2 core and task node instance type.
	//
	// SlaveInstanceType is a required field
	SlaveInstanceType *string `min:"1" type:"string" required:"true"`

	// Specifies whether the Amazon EC2 instances in the cluster are protected from
	// termination by API calls, user intervention, or in the event of a job-flow
	// error.
	TerminationProtected *bool `type:"boolean"`
}

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

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

// SetEc2KeyName sets the Ec2KeyName field's value.
func (s *JobFlowInstancesDetail) SetEc2KeyName(v string) *JobFlowInstancesDetail {
	s.Ec2KeyName = &v
	return s
}

// SetEc2SubnetId sets the Ec2SubnetId field's value.
func (s *JobFlowInstancesDetail) SetEc2SubnetId(v string) *JobFlowInstancesDetail {
	s.Ec2SubnetId = &v
	return s
}

// SetHadoopVersion sets the HadoopVersion field's value.
func (s *JobFlowInstancesDetail) SetHadoopVersion(v string) *JobFlowInstancesDetail {
	s.HadoopVersion = &v
	return s
}

// SetInstanceCount sets the InstanceCount field's value.
func (s *JobFlowInstancesDetail) SetInstanceCount(v int64) *JobFlowInstancesDetail {
	s.InstanceCount = &v
	return s
}

// SetInstanceGroups sets the InstanceGroups field's value.
func (s *JobFlowInstancesDetail) SetInstanceGroups(v []*InstanceGroupDetail) *JobFlowInstancesDetail {
	s.InstanceGroups = v
	return s
}

// SetKeepJobFlowAliveWhenNoSteps sets the KeepJobFlowAliveWhenNoSteps field's value.
func (s *JobFlowInstancesDetail) SetKeepJobFlowAliveWhenNoSteps(v bool) *JobFlowInstancesDetail {
	s.KeepJobFlowAliveWhenNoSteps = &v
	return s
}

// SetMasterInstanceId sets the MasterInstanceId field's value.
func (s *JobFlowInstancesDetail) SetMasterInstanceId(v string) *JobFlowInstancesDetail {
	s.MasterInstanceId = &v
	return s
}

// SetMasterInstanceType sets the MasterInstanceType field's value.
func (s *JobFlowInstancesDetail) SetMasterInstanceType(v string) *JobFlowInstancesDetail {
	s.MasterInstanceType = &v
	return s
}

// SetMasterPublicDnsName sets the MasterPublicDnsName field's value.
func (s *JobFlowInstancesDetail) SetMasterPublicDnsName(v string) *JobFlowInstancesDetail {
	s.MasterPublicDnsName = &v
	return s
}

// SetNormalizedInstanceHours sets the NormalizedInstanceHours field's value.
func (s *JobFlowInstancesDetail) SetNormalizedInstanceHours(v int64) *JobFlowInstancesDetail {
	s.NormalizedInstanceHours = &v
	return s
}

// SetPlacement sets the Placement field's value.
func (s *JobFlowInstancesDetail) SetPlacement(v *PlacementType) *JobFlowInstancesDetail {
	s.Placement = v
	return s
}

// SetSlaveInstanceType sets the SlaveInstanceType field's value.
func (s *JobFlowInstancesDetail) SetSlaveInstanceType(v string) *JobFlowInstancesDetail {
	s.SlaveInstanceType = &v
	return s
}

// SetTerminationProtected sets the TerminationProtected field's value.
func (s *JobFlowInstancesDetail) SetTerminationProtected(v bool) *JobFlowInstancesDetail {
	s.TerminationProtected = &v
	return s
}

// Attributes for Kerberos configuration when Kerberos authentication is enabled
// using a security configuration. For more information see Use Kerberos Authentication
// (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html)
// in the Amazon EMR Management Guide.
type KerberosAttributes struct {
	_ struct{} `type:"structure"`

	// The Active Directory password for ADDomainJoinUser.
	ADDomainJoinPassword *string `type:"string"`

	// Required only when establishing a cross-realm trust with an Active Directory
	// domain. A user with sufficient privileges to join resources to the domain.
	ADDomainJoinUser *string `type:"string"`

	// Required only when establishing a cross-realm trust with a KDC in a different
	// realm. The cross-realm principal password, which must be identical across
	// realms.
	CrossRealmTrustPrincipalPassword *string `type:"string"`

	// The password used within the cluster for the kadmin service on the cluster-dedicated
	// KDC, which maintains Kerberos principals, password policies, and keytabs
	// for the cluster.
	//
	// KdcAdminPassword is a required field
	KdcAdminPassword *string `type:"string" required:"true"`

	// The name of the Kerberos realm to which all nodes in a cluster belong. For
	// example, EC2.INTERNAL.
	//
	// Realm is a required field
	Realm *string `type:"string" required:"true"`
}

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

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

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

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

// SetADDomainJoinPassword sets the ADDomainJoinPassword field's value.
func (s *KerberosAttributes) SetADDomainJoinPassword(v string) *KerberosAttributes {
	s.ADDomainJoinPassword = &v
	return s
}

// SetADDomainJoinUser sets the ADDomainJoinUser field's value.
func (s *KerberosAttributes) SetADDomainJoinUser(v string) *KerberosAttributes {
	s.ADDomainJoinUser = &v
	return s
}

// SetCrossRealmTrustPrincipalPassword sets the CrossRealmTrustPrincipalPassword field's value.
func (s *KerberosAttributes) SetCrossRealmTrustPrincipalPassword(v string) *KerberosAttributes {
	s.CrossRealmTrustPrincipalPassword = &v
	return s
}

// SetKdcAdminPassword sets the KdcAdminPassword field's value.
func (s *KerberosAttributes) SetKdcAdminPassword(v string) *KerberosAttributes {
	s.KdcAdminPassword = &v
	return s
}

// SetRealm sets the Realm field's value.
func (s *KerberosAttributes) SetRealm(v string) *KerberosAttributes {
	s.Realm = &v
	return s
}

// A key-value pair.
type KeyValue struct {
	_ struct{} `type:"structure"`

	// The unique identifier of a key-value pair.
	Key *string `type:"string"`

	// The value part of the identified key.
	Value *string `type:"string"`
}

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

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

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

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

// This input determines which bootstrap actions to retrieve.
type ListBootstrapActionsInput struct {
	_ struct{} `type:"structure"`

	// The cluster identifier for the bootstrap actions to list.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// The pagination token that indicates the next set of results to retrieve.
	Marker *string `type:"string"`
}

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *ListBootstrapActionsInput) SetClusterId(v string) *ListBootstrapActionsInput {
	s.ClusterId = &v
	return s
}

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

// This output contains the bootstrap actions detail.
type ListBootstrapActionsOutput struct {
	_ struct{} `type:"structure"`

	// The bootstrap actions associated with the cluster.
	BootstrapActions []*Command `type:"list"`

	// The pagination token that indicates the next set of results to retrieve.
	Marker *string `type:"string"`
}

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

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

// SetBootstrapActions sets the BootstrapActions field's value.
func (s *ListBootstrapActionsOutput) SetBootstrapActions(v []*Command) *ListBootstrapActionsOutput {
	s.BootstrapActions = v
	return s
}

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

// This input determines how the ListClusters action filters the list of clusters
// that it returns.
type ListClustersInput struct {
	_ struct{} `type:"structure"`

	// The cluster state filters to apply when listing clusters. Clusters that change
	// state while this action runs may be not be returned as expected in the list
	// of clusters.
	ClusterStates []*string `type:"list" enum:"ClusterState"`

	// The creation date and time beginning value filter for listing clusters.
	CreatedAfter *time.Time `type:"timestamp"`

	// The creation date and time end value filter for listing clusters.
	CreatedBefore *time.Time `type:"timestamp"`

	// The pagination token that indicates the next set of results to retrieve.
	Marker *string `type:"string"`
}

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

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

// SetClusterStates sets the ClusterStates field's value.
func (s *ListClustersInput) SetClusterStates(v []*string) *ListClustersInput {
	s.ClusterStates = v
	return s
}

// SetCreatedAfter sets the CreatedAfter field's value.
func (s *ListClustersInput) SetCreatedAfter(v time.Time) *ListClustersInput {
	s.CreatedAfter = &v
	return s
}

// SetCreatedBefore sets the CreatedBefore field's value.
func (s *ListClustersInput) SetCreatedBefore(v time.Time) *ListClustersInput {
	s.CreatedBefore = &v
	return s
}

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

// This contains a ClusterSummaryList with the cluster details; for example,
// the cluster IDs, names, and status.
type ListClustersOutput struct {
	_ struct{} `type:"structure"`

	// The list of clusters for the account based on the given filters.
	Clusters []*ClusterSummary `type:"list"`

	// The pagination token that indicates the next set of results to retrieve.
	Marker *string `type:"string"`
}

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

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

// SetClusters sets the Clusters field's value.
func (s *ListClustersOutput) SetClusters(v []*ClusterSummary) *ListClustersOutput {
	s.Clusters = v
	return s
}

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

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

	// The unique identifier of the cluster.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// The pagination token that indicates the next set of results to retrieve.
	Marker *string `type:"string"`
}

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *ListInstanceFleetsInput) SetClusterId(v string) *ListInstanceFleetsInput {
	s.ClusterId = &v
	return s
}

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

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

	// The list of instance fleets for the cluster and given filters.
	InstanceFleets []*InstanceFleet `type:"list"`

	// The pagination token that indicates the next set of results to retrieve.
	Marker *string `type:"string"`
}

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

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

// SetInstanceFleets sets the InstanceFleets field's value.
func (s *ListInstanceFleetsOutput) SetInstanceFleets(v []*InstanceFleet) *ListInstanceFleetsOutput {
	s.InstanceFleets = v
	return s
}

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

// This input determines which instance groups to retrieve.
type ListInstanceGroupsInput struct {
	_ struct{} `type:"structure"`

	// The identifier of the cluster for which to list the instance groups.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// The pagination token that indicates the next set of results to retrieve.
	Marker *string `type:"string"`
}

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *ListInstanceGroupsInput) SetClusterId(v string) *ListInstanceGroupsInput {
	s.ClusterId = &v
	return s
}

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

// This input determines which instance groups to retrieve.
type ListInstanceGroupsOutput struct {
	_ struct{} `type:"structure"`

	// The list of instance groups for the cluster and given filters.
	InstanceGroups []*InstanceGroup `type:"list"`

	// The pagination token that indicates the next set of results to retrieve.
	Marker *string `type:"string"`
}

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

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

// SetInstanceGroups sets the InstanceGroups field's value.
func (s *ListInstanceGroupsOutput) SetInstanceGroups(v []*InstanceGroup) *ListInstanceGroupsOutput {
	s.InstanceGroups = v
	return s
}

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

// This input determines which instances to list.
type ListInstancesInput struct {
	_ struct{} `type:"structure"`

	// The identifier of the cluster for which to list the instances.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// The unique identifier of the instance fleet.
	InstanceFleetId *string `type:"string"`

	// The node type of the instance fleet. For example MASTER, CORE, or TASK.
	InstanceFleetType *string `type:"string" enum:"InstanceFleetType"`

	// The identifier of the instance group for which to list the instances.
	InstanceGroupId *string `type:"string"`

	// The type of instance group for which to list the instances.
	InstanceGroupTypes []*string `type:"list" enum:"InstanceGroupType"`

	// A list of instance states that will filter the instances returned with this
	// request.
	InstanceStates []*string `type:"list" enum:"InstanceState"`

	// The pagination token that indicates the next set of results to retrieve.
	Marker *string `type:"string"`
}

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *ListInstancesInput) SetClusterId(v string) *ListInstancesInput {
	s.ClusterId = &v
	return s
}

// SetInstanceFleetId sets the InstanceFleetId field's value.
func (s *ListInstancesInput) SetInstanceFleetId(v string) *ListInstancesInput {
	s.InstanceFleetId = &v
	return s
}

// SetInstanceFleetType sets the InstanceFleetType field's value.
func (s *ListInstancesInput) SetInstanceFleetType(v string) *ListInstancesInput {
	s.InstanceFleetType = &v
	return s
}

// SetInstanceGroupId sets the InstanceGroupId field's value.
func (s *ListInstancesInput) SetInstanceGroupId(v string) *ListInstancesInput {
	s.InstanceGroupId = &v
	return s
}

// SetInstanceGroupTypes sets the InstanceGroupTypes field's value.
func (s *ListInstancesInput) SetInstanceGroupTypes(v []*string) *ListInstancesInput {
	s.InstanceGroupTypes = v
	return s
}

// SetInstanceStates sets the InstanceStates field's value.
func (s *ListInstancesInput) SetInstanceStates(v []*string) *ListInstancesInput {
	s.InstanceStates = v
	return s
}

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

// This output contains the list of instances.
type ListInstancesOutput struct {
	_ struct{} `type:"structure"`

	// The list of instances for the cluster and given filters.
	Instances []*Instance `type:"list"`

	// The pagination token that indicates the next set of results to retrieve.
	Marker *string `type:"string"`
}

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

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

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

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

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

	// The unique ID of the editor associated with the notebook execution.
	EditorId *string `type:"string"`

	// The unique ID of the execution engine.
	ExecutionEngineId *string `type:"string"`

	// The beginning of time range filter for listing notebook executions. The default
	// is the timestamp of 30 days ago.
	From *time.Time `type:"timestamp"`

	// The pagination token, returned by a previous ListNotebookExecutions call,
	// that indicates the start of the list for this ListNotebookExecutions call.
	Marker *string `type:"string"`

	// The status filter for listing notebook executions.
	//
	//    * START_PENDING indicates that the cluster has received the execution
	//    request but execution has not begun.
	//
	//    * STARTING indicates that the execution is starting on the cluster.
	//
	//    * RUNNING indicates that the execution is being processed by the cluster.
	//
	//    * FINISHING indicates that execution processing is in the final stages.
	//
	//    * FINISHED indicates that the execution has completed without error.
	//
	//    * FAILING indicates that the execution is failing and will not finish
	//    successfully.
	//
	//    * FAILED indicates that the execution failed.
	//
	//    * STOP_PENDING indicates that the cluster has received a StopNotebookExecution
	//    request and the stop is pending.
	//
	//    * STOPPING indicates that the cluster is in the process of stopping the
	//    execution as a result of a StopNotebookExecution request.
	//
	//    * STOPPED indicates that the execution stopped because of a StopNotebookExecution
	//    request.
	Status *string `type:"string" enum:"NotebookExecutionStatus"`

	// The end of time range filter for listing notebook executions. The default
	// is the current timestamp.
	To *time.Time `type:"timestamp"`
}

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

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

// SetEditorId sets the EditorId field's value.
func (s *ListNotebookExecutionsInput) SetEditorId(v string) *ListNotebookExecutionsInput {
	s.EditorId = &v
	return s
}

// SetExecutionEngineId sets the ExecutionEngineId field's value.
func (s *ListNotebookExecutionsInput) SetExecutionEngineId(v string) *ListNotebookExecutionsInput {
	s.ExecutionEngineId = &v
	return s
}

// SetFrom sets the From field's value.
func (s *ListNotebookExecutionsInput) SetFrom(v time.Time) *ListNotebookExecutionsInput {
	s.From = &v
	return s
}

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

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

// SetTo sets the To field's value.
func (s *ListNotebookExecutionsInput) SetTo(v time.Time) *ListNotebookExecutionsInput {
	s.To = &v
	return s
}

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

	// A pagination token that a subsequent ListNotebookExecutions can use to determine
	// the next set of results to retrieve.
	Marker *string `type:"string"`

	// A list of notebook executions.
	NotebookExecutions []*NotebookExecutionSummary `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 ListNotebookExecutionsOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetNotebookExecutions sets the NotebookExecutions field's value.
func (s *ListNotebookExecutionsOutput) SetNotebookExecutions(v []*NotebookExecutionSummary) *ListNotebookExecutionsOutput {
	s.NotebookExecutions = v
	return s
}

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

	// Filters the results of the request. Prefix specifies the prefix of release
	// labels to return. Application specifies the application (with/without version)
	// of release labels to return.
	Filters *ReleaseLabelFilter `type:"structure"`

	// Defines the maximum number of release labels to return in a single response.
	// The default is 100.
	MaxResults *int64 `min:"1" type:"integer"`

	// Specifies the next page of results. If NextToken is not specified, which
	// is usually the case for the first request of ListReleaseLabels, the first
	// page of results are determined by other filtering parameters or by the latest
	// version. The ListReleaseLabels request fails if the identity (Amazon Web
	// Services account ID) and all filtering parameters are different from the
	// original request, or if the NextToken is expired or tampered with.
	NextToken *string `type:"string"`
}

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

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

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

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

// SetFilters sets the Filters field's value.
func (s *ListReleaseLabelsInput) SetFilters(v *ReleaseLabelFilter) *ListReleaseLabelsInput {
	s.Filters = v
	return s
}

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

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

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

	// Used to paginate the next page of results if specified in the next ListReleaseLabels
	// request.
	NextToken *string `type:"string"`

	// The returned release labels.
	ReleaseLabels []*string `type:"list"`
}

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

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

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

// SetReleaseLabels sets the ReleaseLabels field's value.
func (s *ListReleaseLabelsOutput) SetReleaseLabels(v []*string) *ListReleaseLabelsOutput {
	s.ReleaseLabels = v
	return s
}

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

	// The pagination token that indicates the set of results to retrieve.
	Marker *string `type:"string"`
}

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

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

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

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

	// A pagination token that indicates the next set of results to retrieve. Include
	// the marker in the next ListSecurityConfiguration call to retrieve the next
	// page of results, if required.
	Marker *string `type:"string"`

	// The creation date and time, and name, of each security configuration.
	SecurityConfigurations []*SecurityConfigurationSummary `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 ListSecurityConfigurationsOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetSecurityConfigurations sets the SecurityConfigurations field's value.
func (s *ListSecurityConfigurationsOutput) SetSecurityConfigurations(v []*SecurityConfigurationSummary) *ListSecurityConfigurationsOutput {
	s.SecurityConfigurations = v
	return s
}

// This input determines which steps to list.
type ListStepsInput struct {
	_ struct{} `type:"structure"`

	// The identifier of the cluster for which to list the steps.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// The maximum number of steps that a single ListSteps action returns is 50.
	// To return a longer list of steps, use multiple ListSteps actions along with
	// the Marker parameter, which is a pagination token that indicates the next
	// set of results to retrieve.
	Marker *string `type:"string"`

	// The filter to limit the step list based on the identifier of the steps. You
	// can specify a maximum of ten Step IDs. The character constraint applies to
	// the overall length of the array.
	StepIds []*string `type:"list"`

	// The filter to limit the step list based on certain states.
	StepStates []*string `type:"list" enum:"StepState"`
}

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *ListStepsInput) SetClusterId(v string) *ListStepsInput {
	s.ClusterId = &v
	return s
}

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

// SetStepIds sets the StepIds field's value.
func (s *ListStepsInput) SetStepIds(v []*string) *ListStepsInput {
	s.StepIds = v
	return s
}

// SetStepStates sets the StepStates field's value.
func (s *ListStepsInput) SetStepStates(v []*string) *ListStepsInput {
	s.StepStates = v
	return s
}

// This output contains the list of steps returned in reverse order. This means
// that the last step is the first element in the list.
type ListStepsOutput struct {
	_ struct{} `type:"structure"`

	// The maximum number of steps that a single ListSteps action returns is 50.
	// To return a longer list of steps, use multiple ListSteps actions along with
	// the Marker parameter, which is a pagination token that indicates the next
	// set of results to retrieve.
	Marker *string `type:"string"`

	// The filtered list of steps for the cluster.
	Steps []*StepSummary `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 ListStepsOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetSteps sets the Steps field's value.
func (s *ListStepsOutput) SetSteps(v []*StepSummary) *ListStepsOutput {
	s.Steps = v
	return s
}

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

	// Specifies whether to return session mappings for users or groups. If not
	// specified, the results include session mapping details for both users and
	// groups.
	IdentityType *string `type:"string" enum:"IdentityType"`

	// The pagination token that indicates the set of results to retrieve.
	Marker *string `type:"string"`

	// The ID of the Amazon EMR Studio.
	StudioId *string `type:"string"`
}

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

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

// SetIdentityType sets the IdentityType field's value.
func (s *ListStudioSessionMappingsInput) SetIdentityType(v string) *ListStudioSessionMappingsInput {
	s.IdentityType = &v
	return s
}

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

// SetStudioId sets the StudioId field's value.
func (s *ListStudioSessionMappingsInput) SetStudioId(v string) *ListStudioSessionMappingsInput {
	s.StudioId = &v
	return s
}

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

	// The pagination token that indicates the next set of results to retrieve.
	Marker *string `type:"string"`

	// A list of session mapping summary objects. Each object includes session mapping
	// details such as creation time, identity type (user or group), and Amazon
	// EMR Studio ID.
	SessionMappings []*SessionMappingSummary `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 ListStudioSessionMappingsOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetSessionMappings sets the SessionMappings field's value.
func (s *ListStudioSessionMappingsOutput) SetSessionMappings(v []*SessionMappingSummary) *ListStudioSessionMappingsOutput {
	s.SessionMappings = v
	return s
}

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

	// The pagination token that indicates the set of results to retrieve.
	Marker *string `type:"string"`
}

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

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

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

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

	// The pagination token that indicates the next set of results to retrieve.
	Marker *string `type:"string"`

	// The list of Studio summary objects.
	Studios []*StudioSummary `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 ListStudiosOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetStudios sets the Studios field's value.
func (s *ListStudiosOutput) SetStudios(v []*StudioSummary) *ListStudiosOutput {
	s.Studios = v
	return s
}

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

	// The pagination token that marks the next set of results to retrieve.
	Marker *string `type:"string"`

	// The Amazon EMR release label determines the versions of open-source application
	// packages (https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-app-versions-6.x.html)
	// that Amazon EMR has installed on the cluster. Release labels are in the format
	// emr-x.x.x, where x.x.x is an Amazon EMR release number such as emr-6.10.0.
	// For more information about Amazon EMR releases and their included application
	// versions and features, see the Amazon EMR Release Guide (https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html) .
	//
	// ReleaseLabel is a required field
	ReleaseLabel *string `type:"string" required:"true"`
}

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

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

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

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

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

// SetReleaseLabel sets the ReleaseLabel field's value.
func (s *ListSupportedInstanceTypesInput) SetReleaseLabel(v string) *ListSupportedInstanceTypesInput {
	s.ReleaseLabel = &v
	return s
}

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

	// The pagination token that marks the next set of results to retrieve.
	Marker *string `type:"string"`

	// The list of instance types that the release specified in ListSupportedInstanceTypesInput$ReleaseLabel
	// supports, filtered by Amazon Web Services Region.
	SupportedInstanceTypes []*SupportedInstanceType `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 ListSupportedInstanceTypesOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetSupportedInstanceTypes sets the SupportedInstanceTypes field's value.
func (s *ListSupportedInstanceTypesOutput) SetSupportedInstanceTypes(v []*SupportedInstanceType) *ListSupportedInstanceTypesOutput {
	s.SupportedInstanceTypes = v
	return s
}

// Managed scaling policy for an Amazon EMR cluster. The policy specifies the
// limits for resources that can be added or terminated from a cluster. The
// policy only applies to the core and task nodes. The master node cannot be
// scaled after initial configuration.
type ManagedScalingPolicy struct {
	_ struct{} `type:"structure"`

	// The Amazon EC2 unit limits for a managed scaling policy. The managed scaling
	// activity of a cluster is not allowed to go above or below these limits. The
	// limit only applies to the core and task nodes. The master node cannot be
	// scaled after initial configuration.
	ComputeLimits *ComputeLimits `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 ManagedScalingPolicy) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetComputeLimits sets the ComputeLimits field's value.
func (s *ManagedScalingPolicy) SetComputeLimits(v *ComputeLimits) *ManagedScalingPolicy {
	s.ComputeLimits = v
	return s
}

// A CloudWatch dimension, which is specified using a Key (known as a Name in
// CloudWatch), Value pair. By default, Amazon EMR uses one dimension whose
// Key is JobFlowID and Value is a variable representing the cluster ID, which
// is ${emr.clusterId}. This enables the rule to bootstrap when the cluster
// ID becomes available.
type MetricDimension struct {
	_ struct{} `type:"structure"`

	// The dimension name.
	Key *string `type:"string"`

	// The dimension value.
	Value *string `type:"string"`
}

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

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

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

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

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

	// The unique identifier of the cluster.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// The number of steps that can be executed concurrently. You can specify a
	// minimum of 1 step and a maximum of 256 steps. We recommend that you do not
	// change this parameter while steps are running or the ActionOnFailure setting
	// may not behave as expected. For more information see Step$ActionOnFailure.
	StepConcurrencyLevel *int64 `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 ModifyClusterInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *ModifyClusterInput) SetClusterId(v string) *ModifyClusterInput {
	s.ClusterId = &v
	return s
}

// SetStepConcurrencyLevel sets the StepConcurrencyLevel field's value.
func (s *ModifyClusterInput) SetStepConcurrencyLevel(v int64) *ModifyClusterInput {
	s.StepConcurrencyLevel = &v
	return s
}

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

	// The number of steps that can be executed concurrently.
	StepConcurrencyLevel *int64 `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 ModifyClusterOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetStepConcurrencyLevel sets the StepConcurrencyLevel field's value.
func (s *ModifyClusterOutput) SetStepConcurrencyLevel(v int64) *ModifyClusterOutput {
	s.StepConcurrencyLevel = &v
	return s
}

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

	// The unique identifier of the cluster.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// The configuration parameters of the instance fleet.
	//
	// InstanceFleet is a required field
	InstanceFleet *InstanceFleetModifyConfig `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 ModifyInstanceFleetInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *ModifyInstanceFleetInput) SetClusterId(v string) *ModifyInstanceFleetInput {
	s.ClusterId = &v
	return s
}

// SetInstanceFleet sets the InstanceFleet field's value.
func (s *ModifyInstanceFleetInput) SetInstanceFleet(v *InstanceFleetModifyConfig) *ModifyInstanceFleetInput {
	s.InstanceFleet = v
	return s
}

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

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

// Change the size of some instance groups.
type ModifyInstanceGroupsInput struct {
	_ struct{} `type:"structure"`

	// The ID of the cluster to which the instance group belongs.
	ClusterId *string `type:"string"`

	// Instance groups to change.
	InstanceGroups []*InstanceGroupModifyConfig `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 ModifyInstanceGroupsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *ModifyInstanceGroupsInput) SetClusterId(v string) *ModifyInstanceGroupsInput {
	s.ClusterId = &v
	return s
}

// SetInstanceGroups sets the InstanceGroups field's value.
func (s *ModifyInstanceGroupsInput) SetInstanceGroups(v []*InstanceGroupModifyConfig) *ModifyInstanceGroupsInput {
	s.InstanceGroups = v
	return s
}

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

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

// A notebook execution. An execution is a specific instance that an Amazon
// EMR Notebook is run using the StartNotebookExecution action.
type NotebookExecution struct {
	_ struct{} `type:"structure"`

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

	// The unique identifier of the Amazon EMR Notebook that is used for the notebook
	// execution.
	EditorId *string `type:"string"`

	// The timestamp when notebook execution ended.
	EndTime *time.Time `type:"timestamp"`

	// The environment variables associated with the notebook execution.
	EnvironmentVariables map[string]*string `type:"map"`

	// The execution engine, such as an Amazon EMR cluster, used to run the Amazon
	// EMR notebook and perform the notebook execution.
	ExecutionEngine *ExecutionEngineConfig `type:"structure"`

	// The reason for the latest status change of the notebook execution.
	LastStateChangeReason *string `type:"string"`

	// The unique identifier of a notebook execution.
	NotebookExecutionId *string `type:"string"`

	// A name for the notebook execution.
	NotebookExecutionName *string `type:"string"`

	// The unique identifier of the Amazon EC2 security group associated with the
	// Amazon EMR Notebook instance. For more information see Specifying Amazon
	// EC2 Security Groups for Amazon EMR Notebooks (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-notebooks-security-groups.html)
	// in the Amazon EMR Management Guide.
	NotebookInstanceSecurityGroupId *string `type:"string"`

	// Input parameters in JSON format passed to the Amazon EMR Notebook at runtime
	// for execution.
	NotebookParams *string `type:"string"`

	// The Amazon S3 location that stores the notebook execution input.
	NotebookS3Location *NotebookS3LocationForOutput_ `type:"structure"`

	// The output format for the notebook execution.
	OutputNotebookFormat *string `type:"string" enum:"OutputNotebookFormat"`

	// The Amazon S3 location for the notebook execution output.
	OutputNotebookS3Location *OutputNotebookS3LocationForOutput_ `type:"structure"`

	// The location of the notebook execution's output file in Amazon S3.
	OutputNotebookURI *string `type:"string"`

	// The timestamp when notebook execution started.
	StartTime *time.Time `type:"timestamp"`

	// The status of the notebook execution.
	//
	//    * START_PENDING indicates that the cluster has received the execution
	//    request but execution has not begun.
	//
	//    * STARTING indicates that the execution is starting on the cluster.
	//
	//    * RUNNING indicates that the execution is being processed by the cluster.
	//
	//    * FINISHING indicates that execution processing is in the final stages.
	//
	//    * FINISHED indicates that the execution has completed without error.
	//
	//    * FAILING indicates that the execution is failing and will not finish
	//    successfully.
	//
	//    * FAILED indicates that the execution failed.
	//
	//    * STOP_PENDING indicates that the cluster has received a StopNotebookExecution
	//    request and the stop is pending.
	//
	//    * STOPPING indicates that the cluster is in the process of stopping the
	//    execution as a result of a StopNotebookExecution request.
	//
	//    * STOPPED indicates that the execution stopped because of a StopNotebookExecution
	//    request.
	Status *string `type:"string" enum:"NotebookExecutionStatus"`

	// A list of tags associated with a notebook execution. Tags are user-defined
	// key-value pairs that consist of a required key string with a maximum of 128
	// characters and an optional value string with a maximum of 256 characters.
	Tags []*Tag `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 NotebookExecution) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetEditorId sets the EditorId field's value.
func (s *NotebookExecution) SetEditorId(v string) *NotebookExecution {
	s.EditorId = &v
	return s
}

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

// SetEnvironmentVariables sets the EnvironmentVariables field's value.
func (s *NotebookExecution) SetEnvironmentVariables(v map[string]*string) *NotebookExecution {
	s.EnvironmentVariables = v
	return s
}

// SetExecutionEngine sets the ExecutionEngine field's value.
func (s *NotebookExecution) SetExecutionEngine(v *ExecutionEngineConfig) *NotebookExecution {
	s.ExecutionEngine = v
	return s
}

// SetLastStateChangeReason sets the LastStateChangeReason field's value.
func (s *NotebookExecution) SetLastStateChangeReason(v string) *NotebookExecution {
	s.LastStateChangeReason = &v
	return s
}

// SetNotebookExecutionId sets the NotebookExecutionId field's value.
func (s *NotebookExecution) SetNotebookExecutionId(v string) *NotebookExecution {
	s.NotebookExecutionId = &v
	return s
}

// SetNotebookExecutionName sets the NotebookExecutionName field's value.
func (s *NotebookExecution) SetNotebookExecutionName(v string) *NotebookExecution {
	s.NotebookExecutionName = &v
	return s
}

// SetNotebookInstanceSecurityGroupId sets the NotebookInstanceSecurityGroupId field's value.
func (s *NotebookExecution) SetNotebookInstanceSecurityGroupId(v string) *NotebookExecution {
	s.NotebookInstanceSecurityGroupId = &v
	return s
}

// SetNotebookParams sets the NotebookParams field's value.
func (s *NotebookExecution) SetNotebookParams(v string) *NotebookExecution {
	s.NotebookParams = &v
	return s
}

// SetNotebookS3Location sets the NotebookS3Location field's value.
func (s *NotebookExecution) SetNotebookS3Location(v *NotebookS3LocationForOutput_) *NotebookExecution {
	s.NotebookS3Location = v
	return s
}

// SetOutputNotebookFormat sets the OutputNotebookFormat field's value.
func (s *NotebookExecution) SetOutputNotebookFormat(v string) *NotebookExecution {
	s.OutputNotebookFormat = &v
	return s
}

// SetOutputNotebookS3Location sets the OutputNotebookS3Location field's value.
func (s *NotebookExecution) SetOutputNotebookS3Location(v *OutputNotebookS3LocationForOutput_) *NotebookExecution {
	s.OutputNotebookS3Location = v
	return s
}

// SetOutputNotebookURI sets the OutputNotebookURI field's value.
func (s *NotebookExecution) SetOutputNotebookURI(v string) *NotebookExecution {
	s.OutputNotebookURI = &v
	return s
}

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

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

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

// Details for a notebook execution. The details include information such as
// the unique ID and status of the notebook execution.
type NotebookExecutionSummary struct {
	_ struct{} `type:"structure"`

	// The unique identifier of the editor associated with the notebook execution.
	EditorId *string `type:"string"`

	// The timestamp when notebook execution started.
	EndTime *time.Time `type:"timestamp"`

	// The unique ID of the execution engine for the notebook execution.
	ExecutionEngineId *string `type:"string"`

	// The unique identifier of the notebook execution.
	NotebookExecutionId *string `type:"string"`

	// The name of the notebook execution.
	NotebookExecutionName *string `type:"string"`

	// The Amazon S3 location that stores the notebook execution input.
	NotebookS3Location *NotebookS3LocationForOutput_ `type:"structure"`

	// The timestamp when notebook execution started.
	StartTime *time.Time `type:"timestamp"`

	// The status of the notebook execution.
	//
	//    * START_PENDING indicates that the cluster has received the execution
	//    request but execution has not begun.
	//
	//    * STARTING indicates that the execution is starting on the cluster.
	//
	//    * RUNNING indicates that the execution is being processed by the cluster.
	//
	//    * FINISHING indicates that execution processing is in the final stages.
	//
	//    * FINISHED indicates that the execution has completed without error.
	//
	//    * FAILING indicates that the execution is failing and will not finish
	//    successfully.
	//
	//    * FAILED indicates that the execution failed.
	//
	//    * STOP_PENDING indicates that the cluster has received a StopNotebookExecution
	//    request and the stop is pending.
	//
	//    * STOPPING indicates that the cluster is in the process of stopping the
	//    execution as a result of a StopNotebookExecution request.
	//
	//    * STOPPED indicates that the execution stopped because of a StopNotebookExecution
	//    request.
	Status *string `type:"string" enum:"NotebookExecutionStatus"`
}

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

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

// SetEditorId sets the EditorId field's value.
func (s *NotebookExecutionSummary) SetEditorId(v string) *NotebookExecutionSummary {
	s.EditorId = &v
	return s
}

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

// SetExecutionEngineId sets the ExecutionEngineId field's value.
func (s *NotebookExecutionSummary) SetExecutionEngineId(v string) *NotebookExecutionSummary {
	s.ExecutionEngineId = &v
	return s
}

// SetNotebookExecutionId sets the NotebookExecutionId field's value.
func (s *NotebookExecutionSummary) SetNotebookExecutionId(v string) *NotebookExecutionSummary {
	s.NotebookExecutionId = &v
	return s
}

// SetNotebookExecutionName sets the NotebookExecutionName field's value.
func (s *NotebookExecutionSummary) SetNotebookExecutionName(v string) *NotebookExecutionSummary {
	s.NotebookExecutionName = &v
	return s
}

// SetNotebookS3Location sets the NotebookS3Location field's value.
func (s *NotebookExecutionSummary) SetNotebookS3Location(v *NotebookS3LocationForOutput_) *NotebookExecutionSummary {
	s.NotebookS3Location = v
	return s
}

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

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

// The Amazon S3 location that stores the notebook execution input.
type NotebookS3LocationForOutput_ struct {
	_ struct{} `type:"structure"`

	// The Amazon S3 bucket that stores the notebook execution input.
	Bucket *string `type:"string"`

	// The key to the Amazon S3 location that stores the notebook execution input.
	Key *string `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 NotebookS3LocationForOutput_) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// The Amazon S3 location that stores the notebook execution input.
type NotebookS3LocationFromInput_ struct {
	_ struct{} `type:"structure"`

	// The Amazon S3 bucket that stores the notebook execution input.
	Bucket *string `type:"string"`

	// The key to the Amazon S3 location that stores the notebook execution input.
	Key *string `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 NotebookS3LocationFromInput_) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

// The Amazon Linux release specified for a cluster in the RunJobFlow request.
type OSRelease struct {
	_ struct{} `type:"structure"`

	// The Amazon Linux release specified for a cluster in the RunJobFlow request.
	// The format is as shown in Amazon Linux 2 Release Notes (https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-20220218.html).
	// For example, 2.0.20220218.1.
	Label *string `type:"string"`
}

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

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

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

// Describes the strategy for using unused Capacity Reservations for fulfilling
// On-Demand capacity.
type OnDemandCapacityReservationOptions struct {
	_ struct{} `type:"structure"`

	// Indicates the instance's Capacity Reservation preferences. Possible preferences
	// include:
	//
	//    * open - The instance can run in any open Capacity Reservation that has
	//    matching attributes (instance type, platform, Availability Zone).
	//
	//    * none - The instance avoids running in a Capacity Reservation even if
	//    one is available. The instance runs as an On-Demand Instance.
	CapacityReservationPreference *string `type:"string" enum:"OnDemandCapacityReservationPreference"`

	// The ARN of the Capacity Reservation resource group in which to run the instance.
	CapacityReservationResourceGroupArn *string `type:"string"`

	// Indicates whether to use unused Capacity Reservations for fulfilling On-Demand
	// capacity.
	//
	// If you specify use-capacity-reservations-first, the fleet uses unused Capacity
	// Reservations to fulfill On-Demand capacity up to the target On-Demand capacity.
	// If multiple instance pools have unused Capacity Reservations, the On-Demand
	// allocation strategy (lowest-price) is applied. If the number of unused Capacity
	// Reservations is less than the On-Demand target capacity, the remaining On-Demand
	// target capacity is launched according to the On-Demand allocation strategy
	// (lowest-price).
	//
	// If you do not specify a value, the fleet fulfills the On-Demand capacity
	// according to the chosen On-Demand allocation strategy.
	UsageStrategy *string `type:"string" enum:"OnDemandCapacityReservationUsageStrategy"`
}

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

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

// SetCapacityReservationPreference sets the CapacityReservationPreference field's value.
func (s *OnDemandCapacityReservationOptions) SetCapacityReservationPreference(v string) *OnDemandCapacityReservationOptions {
	s.CapacityReservationPreference = &v
	return s
}

// SetCapacityReservationResourceGroupArn sets the CapacityReservationResourceGroupArn field's value.
func (s *OnDemandCapacityReservationOptions) SetCapacityReservationResourceGroupArn(v string) *OnDemandCapacityReservationOptions {
	s.CapacityReservationResourceGroupArn = &v
	return s
}

// SetUsageStrategy sets the UsageStrategy field's value.
func (s *OnDemandCapacityReservationOptions) SetUsageStrategy(v string) *OnDemandCapacityReservationOptions {
	s.UsageStrategy = &v
	return s
}

// The launch specification for On-Demand Instances in the instance fleet, which
// determines the allocation strategy.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions. On-Demand Instances allocation
// strategy is available in Amazon EMR releases 5.12.1 and later.
type OnDemandProvisioningSpecification struct {
	_ struct{} `type:"structure"`

	// Specifies the strategy to use in launching On-Demand instance fleets. Currently,
	// the only option is lowest-price (the default), which launches the lowest
	// price first.
	//
	// AllocationStrategy is a required field
	AllocationStrategy *string `type:"string" required:"true" enum:"OnDemandProvisioningAllocationStrategy"`

	// The launch specification for On-Demand instances in the instance fleet, which
	// determines the allocation strategy.
	CapacityReservationOptions *OnDemandCapacityReservationOptions `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 OnDemandProvisioningSpecification) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAllocationStrategy sets the AllocationStrategy field's value.
func (s *OnDemandProvisioningSpecification) SetAllocationStrategy(v string) *OnDemandProvisioningSpecification {
	s.AllocationStrategy = &v
	return s
}

// SetCapacityReservationOptions sets the CapacityReservationOptions field's value.
func (s *OnDemandProvisioningSpecification) SetCapacityReservationOptions(v *OnDemandCapacityReservationOptions) *OnDemandProvisioningSpecification {
	s.CapacityReservationOptions = v
	return s
}

// The resize specification for On-Demand Instances in the instance fleet, which
// contains the resize timeout period.
type OnDemandResizingSpecification struct {
	_ struct{} `type:"structure"`

	// On-Demand resize timeout in minutes. If On-Demand Instances are not provisioned
	// within this time, the resize workflow stops. The minimum value is 5 minutes,
	// and the maximum value is 10,080 minutes (7 days). The timeout applies to
	// all resize workflows on the Instance Fleet. The resize could be triggered
	// by Amazon EMR Managed Scaling or by the customer (via Amazon EMR Console,
	// Amazon EMR CLI modify-instance-fleet or Amazon EMR SDK ModifyInstanceFleet
	// API) or by Amazon EMR due to Amazon EC2 Spot Reclamation.
	//
	// TimeoutDurationMinutes is a required field
	TimeoutDurationMinutes *int64 `type:"integer" required:"true"`
}

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

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

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

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

// SetTimeoutDurationMinutes sets the TimeoutDurationMinutes field's value.
func (s *OnDemandResizingSpecification) SetTimeoutDurationMinutes(v int64) *OnDemandResizingSpecification {
	s.TimeoutDurationMinutes = &v
	return s
}

// The Amazon S3 location that stores the notebook execution output.
type OutputNotebookS3LocationForOutput_ struct {
	_ struct{} `type:"structure"`

	// The Amazon S3 bucket that stores the notebook execution output.
	Bucket *string `type:"string"`

	// The key to the Amazon S3 location that stores the notebook execution output.
	Key *string `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 OutputNotebookS3LocationForOutput_) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// The Amazon S3 location that stores the notebook execution output.
type OutputNotebookS3LocationFromInput_ struct {
	_ struct{} `type:"structure"`

	// The Amazon S3 bucket that stores the notebook execution output.
	Bucket *string `type:"string"`

	// The key to the Amazon S3 location that stores the notebook execution output.
	Key *string `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 OutputNotebookS3LocationFromInput_) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

// Placement group configuration for an Amazon EMR cluster. The configuration
// specifies the placement strategy that can be applied to instance roles during
// cluster creation.
//
// To use this configuration, consider attaching managed policy AmazonElasticMapReducePlacementGroupPolicy
// to the Amazon EMR role.
type PlacementGroupConfig struct {
	_ struct{} `type:"structure"`

	// Role of the instance in the cluster.
	//
	// Starting with Amazon EMR release 5.23.0, the only supported instance role
	// is MASTER.
	//
	// InstanceRole is a required field
	InstanceRole *string `type:"string" required:"true" enum:"InstanceRoleType"`

	// Amazon EC2 Placement Group strategy associated with instance role.
	//
	// Starting with Amazon EMR release 5.23.0, the only supported placement strategy
	// is SPREAD for the MASTER instance role.
	PlacementStrategy *string `type:"string" enum:"PlacementGroupStrategy"`
}

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

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

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

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

// SetInstanceRole sets the InstanceRole field's value.
func (s *PlacementGroupConfig) SetInstanceRole(v string) *PlacementGroupConfig {
	s.InstanceRole = &v
	return s
}

// SetPlacementStrategy sets the PlacementStrategy field's value.
func (s *PlacementGroupConfig) SetPlacementStrategy(v string) *PlacementGroupConfig {
	s.PlacementStrategy = &v
	return s
}

// The Amazon EC2 Availability Zone configuration of the cluster (job flow).
type PlacementType struct {
	_ struct{} `type:"structure"`

	// The Amazon EC2 Availability Zone for the cluster. AvailabilityZone is used
	// for uniform instance groups, while AvailabilityZones (plural) is used for
	// instance fleets.
	AvailabilityZone *string `type:"string"`

	// When multiple Availability Zones are specified, Amazon EMR evaluates them
	// and launches instances in the optimal Availability Zone. AvailabilityZones
	// is used for instance fleets, while AvailabilityZone (singular) is used for
	// uniform instance groups.
	//
	// The instance fleet configuration is available only in Amazon EMR releases
	// 4.8.0 and later, excluding 5.0.x versions.
	AvailabilityZones []*string `type:"list"`
}

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

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

// SetAvailabilityZone sets the AvailabilityZone field's value.
func (s *PlacementType) SetAvailabilityZone(v string) *PlacementType {
	s.AvailabilityZone = &v
	return s
}

// SetAvailabilityZones sets the AvailabilityZones field's value.
func (s *PlacementType) SetAvailabilityZones(v []*string) *PlacementType {
	s.AvailabilityZones = v
	return s
}

// A list of port ranges that are permitted to allow inbound traffic from all
// public IP addresses. To specify a single port, use the same value for MinRange
// and MaxRange.
type PortRange struct {
	_ struct{} `type:"structure"`

	// The smallest port number in a specified range of port numbers.
	MaxRange *int64 `type:"integer"`

	// The smallest port number in a specified range of port numbers.
	//
	// MinRange is a required field
	MinRange *int64 `type:"integer" required:"true"`
}

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

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

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

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

// SetMaxRange sets the MaxRange field's value.
func (s *PortRange) SetMaxRange(v int64) *PortRange {
	s.MaxRange = &v
	return s
}

// SetMinRange sets the MinRange field's value.
func (s *PortRange) SetMinRange(v int64) *PortRange {
	s.MinRange = &v
	return s
}

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

	// Specifies the definition of the automatic scaling policy.
	//
	// AutoScalingPolicy is a required field
	AutoScalingPolicy *AutoScalingPolicy `type:"structure" required:"true"`

	// Specifies the ID of a cluster. The instance group to which the automatic
	// scaling policy is applied is within this cluster.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// Specifies the ID of the instance group to which the automatic scaling policy
	// is applied.
	//
	// InstanceGroupId is a required field
	InstanceGroupId *string `type:"string" required:"true"`
}

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

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *PutAutoScalingPolicyInput) SetClusterId(v string) *PutAutoScalingPolicyInput {
	s.ClusterId = &v
	return s
}

// SetInstanceGroupId sets the InstanceGroupId field's value.
func (s *PutAutoScalingPolicyInput) SetInstanceGroupId(v string) *PutAutoScalingPolicyInput {
	s.InstanceGroupId = &v
	return s
}

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

	// The automatic scaling policy definition.
	AutoScalingPolicy *AutoScalingPolicyDescription `type:"structure"`

	// The Amazon Resource Name (ARN) of the cluster.
	ClusterArn *string `min:"20" type:"string"`

	// Specifies the ID of a cluster. The instance group to which the automatic
	// scaling policy is applied is within this cluster.
	ClusterId *string `type:"string"`

	// Specifies the ID of the instance group to which the scaling policy is applied.
	InstanceGroupId *string `type:"string"`
}

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

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

// SetAutoScalingPolicy sets the AutoScalingPolicy field's value.
func (s *PutAutoScalingPolicyOutput) SetAutoScalingPolicy(v *AutoScalingPolicyDescription) *PutAutoScalingPolicyOutput {
	s.AutoScalingPolicy = v
	return s
}

// SetClusterArn sets the ClusterArn field's value.
func (s *PutAutoScalingPolicyOutput) SetClusterArn(v string) *PutAutoScalingPolicyOutput {
	s.ClusterArn = &v
	return s
}

// SetClusterId sets the ClusterId field's value.
func (s *PutAutoScalingPolicyOutput) SetClusterId(v string) *PutAutoScalingPolicyOutput {
	s.ClusterId = &v
	return s
}

// SetInstanceGroupId sets the InstanceGroupId field's value.
func (s *PutAutoScalingPolicyOutput) SetInstanceGroupId(v string) *PutAutoScalingPolicyOutput {
	s.InstanceGroupId = &v
	return s
}

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

	// Specifies the auto-termination policy to attach to the cluster.
	AutoTerminationPolicy *AutoTerminationPolicy `type:"structure"`

	// Specifies the ID of the Amazon EMR cluster to which the auto-termination
	// policy will be attached.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`
}

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

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

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

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

// SetAutoTerminationPolicy sets the AutoTerminationPolicy field's value.
func (s *PutAutoTerminationPolicyInput) SetAutoTerminationPolicy(v *AutoTerminationPolicy) *PutAutoTerminationPolicyInput {
	s.AutoTerminationPolicy = v
	return s
}

// SetClusterId sets the ClusterId field's value.
func (s *PutAutoTerminationPolicyInput) SetClusterId(v string) *PutAutoTerminationPolicyInput {
	s.ClusterId = &v
	return s
}

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

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

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

	// A configuration for Amazon EMR block public access. The configuration applies
	// to all clusters created in your account for the current Region. The configuration
	// specifies whether block public access is enabled. If block public access
	// is enabled, security groups associated with the cluster cannot have rules
	// that allow inbound traffic from 0.0.0.0/0 or ::/0 on a port, unless the port
	// is specified as an exception using PermittedPublicSecurityGroupRuleRanges
	// in the BlockPublicAccessConfiguration. By default, Port 22 (SSH) is an exception,
	// and public access is allowed on this port. You can change this by updating
	// BlockPublicSecurityGroupRules to remove the exception.
	//
	// For accounts that created clusters in a Region before November 25, 2019,
	// block public access is disabled by default in that Region. To use this feature,
	// you must manually enable and configure it. For accounts that did not create
	// an Amazon EMR cluster in a Region before this date, block public access is
	// enabled by default in that Region.
	//
	// BlockPublicAccessConfiguration is a required field
	BlockPublicAccessConfiguration *BlockPublicAccessConfiguration `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 PutBlockPublicAccessConfigurationInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetBlockPublicAccessConfiguration sets the BlockPublicAccessConfiguration field's value.
func (s *PutBlockPublicAccessConfigurationInput) SetBlockPublicAccessConfiguration(v *BlockPublicAccessConfiguration) *PutBlockPublicAccessConfigurationInput {
	s.BlockPublicAccessConfiguration = v
	return s
}

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

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

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

	// Specifies the ID of an Amazon EMR cluster where the managed scaling policy
	// is attached.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// Specifies the constraints for the managed scaling policy.
	//
	// ManagedScalingPolicy is a required field
	ManagedScalingPolicy *ManagedScalingPolicy `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 PutManagedScalingPolicyInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *PutManagedScalingPolicyInput) SetClusterId(v string) *PutManagedScalingPolicyInput {
	s.ClusterId = &v
	return s
}

// SetManagedScalingPolicy sets the ManagedScalingPolicy field's value.
func (s *PutManagedScalingPolicyInput) SetManagedScalingPolicy(v *ManagedScalingPolicy) *PutManagedScalingPolicyInput {
	s.ManagedScalingPolicy = v
	return s
}

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

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

// The release label filters by application or version prefix.
type ReleaseLabelFilter struct {
	_ struct{} `type:"structure"`

	// Optional release label application filter. For example, spark@2.1.0.
	Application *string `type:"string"`

	// Optional release label version prefix filter. For example, emr-5.
	Prefix *string `type:"string"`
}

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

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

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

// SetPrefix sets the Prefix field's value.
func (s *ReleaseLabelFilter) SetPrefix(v string) *ReleaseLabelFilter {
	s.Prefix = &v
	return s
}

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

	// Specifies the ID of a cluster. The instance group to which the automatic
	// scaling policy is applied is within this cluster.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`

	// Specifies the ID of the instance group to which the scaling policy is applied.
	//
	// InstanceGroupId is a required field
	InstanceGroupId *string `type:"string" required:"true"`
}

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *RemoveAutoScalingPolicyInput) SetClusterId(v string) *RemoveAutoScalingPolicyInput {
	s.ClusterId = &v
	return s
}

// SetInstanceGroupId sets the InstanceGroupId field's value.
func (s *RemoveAutoScalingPolicyInput) SetInstanceGroupId(v string) *RemoveAutoScalingPolicyInput {
	s.InstanceGroupId = &v
	return s
}

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

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

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

	// Specifies the ID of the Amazon EMR cluster from which the auto-termination
	// policy will be removed.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`
}

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *RemoveAutoTerminationPolicyInput) SetClusterId(v string) *RemoveAutoTerminationPolicyInput {
	s.ClusterId = &v
	return s
}

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

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

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

	// Specifies the ID of the cluster from which the managed scaling policy will
	// be removed.
	//
	// ClusterId is a required field
	ClusterId *string `type:"string" required:"true"`
}

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

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

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

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

// SetClusterId sets the ClusterId field's value.
func (s *RemoveManagedScalingPolicyInput) SetClusterId(v string) *RemoveManagedScalingPolicyInput {
	s.ClusterId = &v
	return s
}

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

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

// This input identifies an Amazon EMR resource and a list of tags to remove.
type RemoveTagsInput struct {
	_ struct{} `type:"structure"`

	// The Amazon EMR resource identifier from which tags will be removed. For example,
	// a cluster identifier or an Amazon EMR Studio ID.
	//
	// ResourceId is a required field
	ResourceId *string `type:"string" required:"true"`

	// A list of tag keys to remove from the resource.
	//
	// TagKeys is a required field
	TagKeys []*string `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 RemoveTagsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

// This output indicates the result of removing tags from the resource.
type RemoveTagsOutput 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 RemoveTagsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// Input to the RunJobFlow operation.
type RunJobFlowInput struct {
	_ struct{} `type:"structure"`

	// A JSON string for selecting additional features.
	AdditionalInfo *string `type:"string"`

	// Applies only to Amazon EMR AMI versions 3.x and 2.x. For Amazon EMR releases
	// 4.0 and later, ReleaseLabel is used. To specify a custom AMI, use CustomAmiID.
	AmiVersion *string `type:"string"`

	// Applies to Amazon EMR releases 4.0 and later. A case-insensitive list of
	// applications for Amazon EMR to install and configure when launching the cluster.
	// For a list of applications available for each Amazon EMR release version,
	// see the Amazon EMRRelease Guide (https://docs.aws.amazon.com/emr/latest/ReleaseGuide/).
	Applications []*Application `type:"list"`

	// An IAM role for automatic scaling policies. The default role is EMR_AutoScaling_DefaultRole.
	// The IAM role provides permissions that the automatic scaling feature requires
	// to launch and terminate Amazon EC2 instances in an instance group.
	AutoScalingRole *string `type:"string"`

	// An auto-termination policy for an Amazon EMR cluster. An auto-termination
	// policy defines the amount of idle time in seconds after which a cluster automatically
	// terminates. For alternative cluster termination options, see Control cluster
	// termination (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-termination.html).
	AutoTerminationPolicy *AutoTerminationPolicy `type:"structure"`

	// A list of bootstrap actions to run before Hadoop starts on the cluster nodes.
	BootstrapActions []*BootstrapActionConfig `type:"list"`

	// For Amazon EMR releases 4.0 and later. The list of configurations supplied
	// for the Amazon EMR cluster that you are creating.
	Configurations []*Configuration `type:"list"`

	// Available only in Amazon EMR releases 5.7.0 and later. The ID of a custom
	// Amazon EBS-backed Linux AMI. If specified, Amazon EMR uses this AMI when
	// it launches cluster Amazon EC2 instances. For more information about custom
	// AMIs in Amazon EMR, see Using a Custom AMI (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-custom-ami.html)
	// in the Amazon EMR Management Guide. If omitted, the cluster uses the base
	// Linux AMI for the ReleaseLabel specified. For Amazon EMR releases 2.x and
	// 3.x, use AmiVersion instead.
	//
	// For information about creating a custom AMI, see Creating an Amazon EBS-Backed
	// Linux AMI (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html)
	// in the Amazon Elastic Compute Cloud User Guide for Linux Instances. For information
	// about finding an AMI ID, see Finding a Linux AMI (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html).
	CustomAmiId *string `type:"string"`

	// The IOPS, of the Amazon EBS root device volume of the Linux AMI that is used
	// for each Amazon EC2 instance. Available in Amazon EMR releases 6.15.0 and
	// later.
	EbsRootVolumeIops *int64 `type:"integer"`

	// The size, in GiB, of the Amazon EBS root device volume of the Linux AMI that
	// is used for each Amazon EC2 instance. Available in Amazon EMR releases 4.x
	// and later.
	EbsRootVolumeSize *int64 `type:"integer"`

	// The throughput, in MiB/s, of the Amazon EBS root device volume of the Linux
	// AMI that is used for each Amazon EC2 instance. Available in Amazon EMR releases
	// 6.15.0 and later.
	EbsRootVolumeThroughput *int64 `type:"integer"`

	// A specification of the number and type of Amazon EC2 instances.
	//
	// Instances is a required field
	Instances *JobFlowInstancesConfig `type:"structure" required:"true"`

	// Also called instance profile and Amazon EC2 role. An IAM role for an Amazon
	// EMR cluster. The Amazon EC2 instances of the cluster assume this role. The
	// default role is EMR_EC2_DefaultRole. In order to use the default role, you
	// must have already created it using the CLI or console.
	JobFlowRole *string `type:"string"`

	// Attributes for Kerberos configuration when Kerberos authentication is enabled
	// using a security configuration. For more information see Use Kerberos Authentication
	// (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html)
	// in the Amazon EMR Management Guide.
	KerberosAttributes *KerberosAttributes `type:"structure"`

	// The KMS key used for encrypting log files. If a value is not provided, the
	// logs remain encrypted by AES-256. This attribute is only available with Amazon
	// EMR releases 5.30.0 and later, excluding Amazon EMR 6.0.0.
	LogEncryptionKmsKeyId *string `type:"string"`

	// The location in Amazon S3 to write the log files of the job flow. If a value
	// is not provided, logs are not created.
	LogUri *string `type:"string"`

	// The specified managed scaling policy for an Amazon EMR cluster.
	ManagedScalingPolicy *ManagedScalingPolicy `type:"structure"`

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

	//
	// For Amazon EMR releases 3.x and 2.x. For Amazon EMR releases 4.x and later,
	// use Applications.
	//
	// A list of strings that indicates third-party software to use with the job
	// flow that accepts a user argument list. Amazon EMR accepts and forwards the
	// argument list to the corresponding installation script as bootstrap action
	// arguments. For more information, see "Launch a Job Flow on the MapR Distribution
	// for Hadoop" in the Amazon EMR Developer Guide (https://docs.aws.amazon.com/emr/latest/DeveloperGuide/emr-dg.pdf).
	// Supported values are:
	//
	//    * "mapr-m3" - launch the cluster using MapR M3 Edition.
	//
	//    * "mapr-m5" - launch the cluster using MapR M5 Edition.
	//
	//    * "mapr" with the user arguments specifying "--edition,m3" or "--edition,m5"
	//    - launch the job flow using MapR M3 or M5 Edition respectively.
	//
	//    * "mapr-m7" - launch the cluster using MapR M7 Edition.
	//
	//    * "hunk" - launch the cluster with the Hunk Big Data Analytics Platform.
	//
	//    * "hue"- launch the cluster with Hue installed.
	//
	//    * "spark" - launch the cluster with Apache Spark installed.
	//
	//    * "ganglia" - launch the cluster with the Ganglia Monitoring System installed.
	NewSupportedProducts []*SupportedProductConfig `type:"list"`

	// Specifies a particular Amazon Linux release for all nodes in a cluster launch
	// RunJobFlow request. If a release is not specified, Amazon EMR uses the latest
	// validated Amazon Linux release for cluster launch.
	OSReleaseLabel *string `type:"string"`

	// The specified placement group configuration for an Amazon EMR cluster.
	PlacementGroupConfigs []*PlacementGroupConfig `type:"list"`

	// The Amazon EMR release label, which determines the version of open-source
	// application packages installed on the cluster. Release labels are in the
	// form emr-x.x.x, where x.x.x is an Amazon EMR release version such as emr-5.14.0.
	// For more information about Amazon EMR release versions and included application
	// versions and features, see https://docs.aws.amazon.com/emr/latest/ReleaseGuide/
	// (https://docs.aws.amazon.com/emr/latest/ReleaseGuide/). The release label
	// applies only to Amazon EMR releases version 4.0 and later. Earlier versions
	// use AmiVersion.
	ReleaseLabel *string `type:"string"`

	// Applies only when CustomAmiID is used. Specifies which updates from the Amazon
	// Linux AMI package repositories to apply automatically when the instance boots
	// using the AMI. If omitted, the default is SECURITY, which indicates that
	// only security updates are applied. If NONE is specified, no updates are applied,
	// and all updates must be applied manually.
	RepoUpgradeOnBoot *string `type:"string" enum:"RepoUpgradeOnBoot"`

	// Specifies the way that individual Amazon EC2 instances terminate when an
	// automatic scale-in activity occurs or an instance group is resized. TERMINATE_AT_INSTANCE_HOUR
	// indicates that Amazon EMR terminates nodes at the instance-hour boundary,
	// regardless of when the request to terminate the instance was submitted. This
	// option is only available with Amazon EMR 5.1.0 and later and is the default
	// for clusters created using that version. TERMINATE_AT_TASK_COMPLETION indicates
	// that Amazon EMR adds nodes to a deny list and drains tasks from nodes before
	// terminating the Amazon EC2 instances, regardless of the instance-hour boundary.
	// With either behavior, Amazon EMR removes the least active nodes first and
	// blocks instance termination if it could lead to HDFS corruption. TERMINATE_AT_TASK_COMPLETION
	// available only in Amazon EMR releases 4.1.0 and later, and is the default
	// for releases of Amazon EMR earlier than 5.1.0.
	ScaleDownBehavior *string `type:"string" enum:"ScaleDownBehavior"`

	// The name of a security configuration to apply to the cluster.
	SecurityConfiguration *string `type:"string"`

	// The IAM role that Amazon EMR assumes in order to access Amazon Web Services
	// resources on your behalf. If you've created a custom service role path, you
	// must specify it for the service role when you launch your cluster.
	ServiceRole *string `type:"string"`

	// Specifies the number of steps that can be executed concurrently. The default
	// value is 1. The maximum value is 256.
	StepConcurrencyLevel *int64 `type:"integer"`

	// A list of steps to run.
	Steps []*StepConfig `type:"list"`

	//
	// For Amazon EMR releases 3.x and 2.x. For Amazon EMR releases 4.x and later,
	// use Applications.
	//
	// A list of strings that indicates third-party software to use. For more information,
	// see the Amazon EMR Developer Guide (https://docs.aws.amazon.com/emr/latest/DeveloperGuide/emr-dg.pdf).
	// Currently supported values are:
	//
	//    * "mapr-m3" - launch the job flow using MapR M3 Edition.
	//
	//    * "mapr-m5" - launch the job flow using MapR M5 Edition.
	SupportedProducts []*string `type:"list"`

	// A list of tags to associate with a cluster and propagate to Amazon EC2 instances.
	Tags []*Tag `type:"list"`

	//
	// The VisibleToAllUsers parameter is no longer supported. By default, the value
	// is set to true. Setting it to false now has no effect.
	//
	// Set this value to true so that IAM principals in the Amazon Web Services
	// account associated with the cluster can perform Amazon EMR actions on the
	// cluster that their IAM policies allow. This value defaults to true for clusters
	// created using the Amazon EMR API or the CLI create-cluster (https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html)
	// command.
	//
	// When set to false, only the IAM principal that created the cluster and the
	// Amazon Web Services account root user can perform Amazon EMR actions for
	// the cluster, regardless of the IAM permissions policies attached to other
	// IAM principals. For more information, see Understanding the Amazon EMR cluster
	// VisibleToAllUsers setting (https://docs.aws.amazon.com/emr/latest/ManagementGuide/security_IAM_emr-with-IAM.html#security_set_visible_to_all_users)
	// in the Amazon EMR Management Guide.
	VisibleToAllUsers *bool `type:"boolean"`
}

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

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

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

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

// SetAdditionalInfo sets the AdditionalInfo field's value.
func (s *RunJobFlowInput) SetAdditionalInfo(v string) *RunJobFlowInput {
	s.AdditionalInfo = &v
	return s
}

// SetAmiVersion sets the AmiVersion field's value.
func (s *RunJobFlowInput) SetAmiVersion(v string) *RunJobFlowInput {
	s.AmiVersion = &v
	return s
}

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

// SetAutoScalingRole sets the AutoScalingRole field's value.
func (s *RunJobFlowInput) SetAutoScalingRole(v string) *RunJobFlowInput {
	s.AutoScalingRole = &v
	return s
}

// SetAutoTerminationPolicy sets the AutoTerminationPolicy field's value.
func (s *RunJobFlowInput) SetAutoTerminationPolicy(v *AutoTerminationPolicy) *RunJobFlowInput {
	s.AutoTerminationPolicy = v
	return s
}

// SetBootstrapActions sets the BootstrapActions field's value.
func (s *RunJobFlowInput) SetBootstrapActions(v []*BootstrapActionConfig) *RunJobFlowInput {
	s.BootstrapActions = v
	return s
}

// SetConfigurations sets the Configurations field's value.
func (s *RunJobFlowInput) SetConfigurations(v []*Configuration) *RunJobFlowInput {
	s.Configurations = v
	return s
}

// SetCustomAmiId sets the CustomAmiId field's value.
func (s *RunJobFlowInput) SetCustomAmiId(v string) *RunJobFlowInput {
	s.CustomAmiId = &v
	return s
}

// SetEbsRootVolumeIops sets the EbsRootVolumeIops field's value.
func (s *RunJobFlowInput) SetEbsRootVolumeIops(v int64) *RunJobFlowInput {
	s.EbsRootVolumeIops = &v
	return s
}

// SetEbsRootVolumeSize sets the EbsRootVolumeSize field's value.
func (s *RunJobFlowInput) SetEbsRootVolumeSize(v int64) *RunJobFlowInput {
	s.EbsRootVolumeSize = &v
	return s
}

// SetEbsRootVolumeThroughput sets the EbsRootVolumeThroughput field's value.
func (s *RunJobFlowInput) SetEbsRootVolumeThroughput(v int64) *RunJobFlowInput {
	s.EbsRootVolumeThroughput = &v
	return s
}

// SetInstances sets the Instances field's value.
func (s *RunJobFlowInput) SetInstances(v *JobFlowInstancesConfig) *RunJobFlowInput {
	s.Instances = v
	return s
}

// SetJobFlowRole sets the JobFlowRole field's value.
func (s *RunJobFlowInput) SetJobFlowRole(v string) *RunJobFlowInput {
	s.JobFlowRole = &v
	return s
}

// SetKerberosAttributes sets the KerberosAttributes field's value.
func (s *RunJobFlowInput) SetKerberosAttributes(v *KerberosAttributes) *RunJobFlowInput {
	s.KerberosAttributes = v
	return s
}

// SetLogEncryptionKmsKeyId sets the LogEncryptionKmsKeyId field's value.
func (s *RunJobFlowInput) SetLogEncryptionKmsKeyId(v string) *RunJobFlowInput {
	s.LogEncryptionKmsKeyId = &v
	return s
}

// SetLogUri sets the LogUri field's value.
func (s *RunJobFlowInput) SetLogUri(v string) *RunJobFlowInput {
	s.LogUri = &v
	return s
}

// SetManagedScalingPolicy sets the ManagedScalingPolicy field's value.
func (s *RunJobFlowInput) SetManagedScalingPolicy(v *ManagedScalingPolicy) *RunJobFlowInput {
	s.ManagedScalingPolicy = v
	return s
}

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

// SetNewSupportedProducts sets the NewSupportedProducts field's value.
func (s *RunJobFlowInput) SetNewSupportedProducts(v []*SupportedProductConfig) *RunJobFlowInput {
	s.NewSupportedProducts = v
	return s
}

// SetOSReleaseLabel sets the OSReleaseLabel field's value.
func (s *RunJobFlowInput) SetOSReleaseLabel(v string) *RunJobFlowInput {
	s.OSReleaseLabel = &v
	return s
}

// SetPlacementGroupConfigs sets the PlacementGroupConfigs field's value.
func (s *RunJobFlowInput) SetPlacementGroupConfigs(v []*PlacementGroupConfig) *RunJobFlowInput {
	s.PlacementGroupConfigs = v
	return s
}

// SetReleaseLabel sets the ReleaseLabel field's value.
func (s *RunJobFlowInput) SetReleaseLabel(v string) *RunJobFlowInput {
	s.ReleaseLabel = &v
	return s
}

// SetRepoUpgradeOnBoot sets the RepoUpgradeOnBoot field's value.
func (s *RunJobFlowInput) SetRepoUpgradeOnBoot(v string) *RunJobFlowInput {
	s.RepoUpgradeOnBoot = &v
	return s
}

// SetScaleDownBehavior sets the ScaleDownBehavior field's value.
func (s *RunJobFlowInput) SetScaleDownBehavior(v string) *RunJobFlowInput {
	s.ScaleDownBehavior = &v
	return s
}

// SetSecurityConfiguration sets the SecurityConfiguration field's value.
func (s *RunJobFlowInput) SetSecurityConfiguration(v string) *RunJobFlowInput {
	s.SecurityConfiguration = &v
	return s
}

// SetServiceRole sets the ServiceRole field's value.
func (s *RunJobFlowInput) SetServiceRole(v string) *RunJobFlowInput {
	s.ServiceRole = &v
	return s
}

// SetStepConcurrencyLevel sets the StepConcurrencyLevel field's value.
func (s *RunJobFlowInput) SetStepConcurrencyLevel(v int64) *RunJobFlowInput {
	s.StepConcurrencyLevel = &v
	return s
}

// SetSteps sets the Steps field's value.
func (s *RunJobFlowInput) SetSteps(v []*StepConfig) *RunJobFlowInput {
	s.Steps = v
	return s
}

// SetSupportedProducts sets the SupportedProducts field's value.
func (s *RunJobFlowInput) SetSupportedProducts(v []*string) *RunJobFlowInput {
	s.SupportedProducts = v
	return s
}

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

// SetVisibleToAllUsers sets the VisibleToAllUsers field's value.
func (s *RunJobFlowInput) SetVisibleToAllUsers(v bool) *RunJobFlowInput {
	s.VisibleToAllUsers = &v
	return s
}

// The result of the RunJobFlow operation.
type RunJobFlowOutput struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the cluster.
	ClusterArn *string `min:"20" type:"string"`

	// A unique identifier for the job flow.
	JobFlowId *string `type:"string"`
}

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

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

// SetClusterArn sets the ClusterArn field's value.
func (s *RunJobFlowOutput) SetClusterArn(v string) *RunJobFlowOutput {
	s.ClusterArn = &v
	return s
}

// SetJobFlowId sets the JobFlowId field's value.
func (s *RunJobFlowOutput) SetJobFlowId(v string) *RunJobFlowOutput {
	s.JobFlowId = &v
	return s
}

// The type of adjustment the automatic scaling activity makes when triggered,
// and the periodicity of the adjustment.
type ScalingAction struct {
	_ struct{} `type:"structure"`

	// Not available for instance groups. Instance groups use the market type specified
	// for the group.
	Market *string `type:"string" enum:"MarketType"`

	// The type of adjustment the automatic scaling activity makes when triggered,
	// and the periodicity of the adjustment.
	//
	// SimpleScalingPolicyConfiguration is a required field
	SimpleScalingPolicyConfiguration *SimpleScalingPolicyConfiguration `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 ScalingAction) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetMarket sets the Market field's value.
func (s *ScalingAction) SetMarket(v string) *ScalingAction {
	s.Market = &v
	return s
}

// SetSimpleScalingPolicyConfiguration sets the SimpleScalingPolicyConfiguration field's value.
func (s *ScalingAction) SetSimpleScalingPolicyConfiguration(v *SimpleScalingPolicyConfiguration) *ScalingAction {
	s.SimpleScalingPolicyConfiguration = v
	return s
}

// The upper and lower Amazon EC2 instance limits for an automatic scaling policy.
// Automatic scaling activities triggered by automatic scaling rules will not
// cause an instance group to grow above or below these limits.
type ScalingConstraints struct {
	_ struct{} `type:"structure"`

	// The upper boundary of Amazon EC2 instances in an instance group beyond which
	// scaling activities are not allowed to grow. Scale-out activities will not
	// add instances beyond this boundary.
	//
	// MaxCapacity is a required field
	MaxCapacity *int64 `type:"integer" required:"true"`

	// The lower boundary of Amazon EC2 instances in an instance group below which
	// scaling activities are not allowed to shrink. Scale-in activities will not
	// terminate instances below this boundary.
	//
	// MinCapacity is a required field
	MinCapacity *int64 `type:"integer" required:"true"`
}

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

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

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

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

// SetMaxCapacity sets the MaxCapacity field's value.
func (s *ScalingConstraints) SetMaxCapacity(v int64) *ScalingConstraints {
	s.MaxCapacity = &v
	return s
}

// SetMinCapacity sets the MinCapacity field's value.
func (s *ScalingConstraints) SetMinCapacity(v int64) *ScalingConstraints {
	s.MinCapacity = &v
	return s
}

// A scale-in or scale-out rule that defines scaling activity, including the
// CloudWatch metric alarm that triggers activity, how Amazon EC2 instances
// are added or removed, and the periodicity of adjustments. The automatic scaling
// policy for an instance group can comprise one or more automatic scaling rules.
type ScalingRule struct {
	_ struct{} `type:"structure"`

	// The conditions that trigger an automatic scaling activity.
	//
	// Action is a required field
	Action *ScalingAction `type:"structure" required:"true"`

	// A friendly, more verbose description of the automatic scaling rule.
	Description *string `type:"string"`

	// The name used to identify an automatic scaling rule. Rule names must be unique
	// within a scaling policy.
	//
	// Name is a required field
	Name *string `type:"string" required:"true"`

	// The CloudWatch alarm definition that determines when automatic scaling activity
	// is triggered.
	//
	// Trigger is a required field
	Trigger *ScalingTrigger `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 ScalingRule) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAction sets the Action field's value.
func (s *ScalingRule) SetAction(v *ScalingAction) *ScalingRule {
	s.Action = v
	return s
}

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

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

// SetTrigger sets the Trigger field's value.
func (s *ScalingRule) SetTrigger(v *ScalingTrigger) *ScalingRule {
	s.Trigger = v
	return s
}

// The conditions that trigger an automatic scaling activity.
type ScalingTrigger struct {
	_ struct{} `type:"structure"`

	// The definition of a CloudWatch metric alarm. When the defined alarm conditions
	// are met along with other trigger parameters, scaling activity begins.
	//
	// CloudWatchAlarmDefinition is a required field
	CloudWatchAlarmDefinition *CloudWatchAlarmDefinition `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 ScalingTrigger) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetCloudWatchAlarmDefinition sets the CloudWatchAlarmDefinition field's value.
func (s *ScalingTrigger) SetCloudWatchAlarmDefinition(v *CloudWatchAlarmDefinition) *ScalingTrigger {
	s.CloudWatchAlarmDefinition = v
	return s
}

// Configuration of the script to run during a bootstrap action.
type ScriptBootstrapActionConfig struct {
	_ struct{} `type:"structure"`

	// A list of command line arguments to pass to the bootstrap action script.
	Args []*string `type:"list"`

	// Location in Amazon S3 of the script to run during a bootstrap action.
	//
	// Path is a required field
	Path *string `type:"string" required:"true"`
}

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

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

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

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

// SetArgs sets the Args field's value.
func (s *ScriptBootstrapActionConfig) SetArgs(v []*string) *ScriptBootstrapActionConfig {
	s.Args = v
	return s
}

// SetPath sets the Path field's value.
func (s *ScriptBootstrapActionConfig) SetPath(v string) *ScriptBootstrapActionConfig {
	s.Path = &v
	return s
}

// The creation date and time, and name, of a security configuration.
type SecurityConfigurationSummary struct {
	_ struct{} `type:"structure"`

	// The date and time the security configuration was created.
	CreationDateTime *time.Time `type:"timestamp"`

	// The name of the security configuration.
	Name *string `type:"string"`
}

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

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

// SetCreationDateTime sets the CreationDateTime field's value.
func (s *SecurityConfigurationSummary) SetCreationDateTime(v time.Time) *SecurityConfigurationSummary {
	s.CreationDateTime = &v
	return s
}

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

// Details for an Amazon EMR Studio session mapping including creation time,
// user or group ID, Studio ID, and so on.
type SessionMappingDetail struct {
	_ struct{} `type:"structure"`

	// The time the session mapping was created.
	CreationTime *time.Time `type:"timestamp"`

	// The globally unique identifier (GUID) of the user or group.
	IdentityId *string `type:"string"`

	// The name of the user or group. For more information, see UserName (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_User.html#singlesignon-Type-User-UserName)
	// and DisplayName (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_Group.html#singlesignon-Type-Group-DisplayName)
	// in the IAM Identity Center Identity Store API Reference.
	IdentityName *string `type:"string"`

	// Specifies whether the identity mapped to the Amazon EMR Studio is a user
	// or a group.
	IdentityType *string `type:"string" enum:"IdentityType"`

	// The time the session mapping was last modified.
	LastModifiedTime *time.Time `type:"timestamp"`

	// The Amazon Resource Name (ARN) of the session policy associated with the
	// user or group.
	SessionPolicyArn *string `type:"string"`

	// The ID of the Amazon EMR Studio.
	StudioId *string `type:"string"`
}

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

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

// SetCreationTime sets the CreationTime field's value.
func (s *SessionMappingDetail) SetCreationTime(v time.Time) *SessionMappingDetail {
	s.CreationTime = &v
	return s
}

// SetIdentityId sets the IdentityId field's value.
func (s *SessionMappingDetail) SetIdentityId(v string) *SessionMappingDetail {
	s.IdentityId = &v
	return s
}

// SetIdentityName sets the IdentityName field's value.
func (s *SessionMappingDetail) SetIdentityName(v string) *SessionMappingDetail {
	s.IdentityName = &v
	return s
}

// SetIdentityType sets the IdentityType field's value.
func (s *SessionMappingDetail) SetIdentityType(v string) *SessionMappingDetail {
	s.IdentityType = &v
	return s
}

// SetLastModifiedTime sets the LastModifiedTime field's value.
func (s *SessionMappingDetail) SetLastModifiedTime(v time.Time) *SessionMappingDetail {
	s.LastModifiedTime = &v
	return s
}

// SetSessionPolicyArn sets the SessionPolicyArn field's value.
func (s *SessionMappingDetail) SetSessionPolicyArn(v string) *SessionMappingDetail {
	s.SessionPolicyArn = &v
	return s
}

// SetStudioId sets the StudioId field's value.
func (s *SessionMappingDetail) SetStudioId(v string) *SessionMappingDetail {
	s.StudioId = &v
	return s
}

// Details for an Amazon EMR Studio session mapping. The details do not include
// the time the session mapping was last modified.
type SessionMappingSummary struct {
	_ struct{} `type:"structure"`

	// The time the session mapping was created.
	CreationTime *time.Time `type:"timestamp"`

	// The globally unique identifier (GUID) of the user or group from the IAM Identity
	// Center Identity Store.
	IdentityId *string `type:"string"`

	// The name of the user or group. For more information, see UserName (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_User.html#singlesignon-Type-User-UserName)
	// and DisplayName (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_Group.html#singlesignon-Type-Group-DisplayName)
	// in the IAM Identity Center Identity Store API Reference.
	IdentityName *string `type:"string"`

	// Specifies whether the identity mapped to the Amazon EMR Studio is a user
	// or a group.
	IdentityType *string `type:"string" enum:"IdentityType"`

	// The Amazon Resource Name (ARN) of the session policy associated with the
	// user or group.
	SessionPolicyArn *string `type:"string"`

	// The ID of the Amazon EMR Studio.
	StudioId *string `type:"string"`
}

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

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

// SetCreationTime sets the CreationTime field's value.
func (s *SessionMappingSummary) SetCreationTime(v time.Time) *SessionMappingSummary {
	s.CreationTime = &v
	return s
}

// SetIdentityId sets the IdentityId field's value.
func (s *SessionMappingSummary) SetIdentityId(v string) *SessionMappingSummary {
	s.IdentityId = &v
	return s
}

// SetIdentityName sets the IdentityName field's value.
func (s *SessionMappingSummary) SetIdentityName(v string) *SessionMappingSummary {
	s.IdentityName = &v
	return s
}

// SetIdentityType sets the IdentityType field's value.
func (s *SessionMappingSummary) SetIdentityType(v string) *SessionMappingSummary {
	s.IdentityType = &v
	return s
}

// SetSessionPolicyArn sets the SessionPolicyArn field's value.
func (s *SessionMappingSummary) SetSessionPolicyArn(v string) *SessionMappingSummary {
	s.SessionPolicyArn = &v
	return s
}

// SetStudioId sets the StudioId field's value.
func (s *SessionMappingSummary) SetStudioId(v string) *SessionMappingSummary {
	s.StudioId = &v
	return s
}

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

	// A list of strings that uniquely identify the clusters to protect. This identifier
	// is returned by RunJobFlow (https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html)
	// and can also be obtained from DescribeJobFlows (https://docs.aws.amazon.com/emr/latest/APIReference/API_DescribeJobFlows.html).
	//
	// JobFlowIds is a required field
	JobFlowIds []*string `type:"list" required:"true"`

	// A Boolean that indicates whether to terminate the cluster after all steps
	// are executed.
	//
	// KeepJobFlowAliveWhenNoSteps is a required field
	KeepJobFlowAliveWhenNoSteps *bool `type:"boolean" required:"true"`
}

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

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

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

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

// SetJobFlowIds sets the JobFlowIds field's value.
func (s *SetKeepJobFlowAliveWhenNoStepsInput) SetJobFlowIds(v []*string) *SetKeepJobFlowAliveWhenNoStepsInput {
	s.JobFlowIds = v
	return s
}

// SetKeepJobFlowAliveWhenNoSteps sets the KeepJobFlowAliveWhenNoSteps field's value.
func (s *SetKeepJobFlowAliveWhenNoStepsInput) SetKeepJobFlowAliveWhenNoSteps(v bool) *SetKeepJobFlowAliveWhenNoStepsInput {
	s.KeepJobFlowAliveWhenNoSteps = &v
	return s
}

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

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

// The input argument to the TerminationProtection operation.
type SetTerminationProtectionInput struct {
	_ struct{} `type:"structure"`

	// A list of strings that uniquely identify the clusters to protect. This identifier
	// is returned by RunJobFlow and can also be obtained from DescribeJobFlows .
	//
	// JobFlowIds is a required field
	JobFlowIds []*string `type:"list" required:"true"`

	// A Boolean that indicates whether to protect the cluster and prevent the Amazon
	// EC2 instances in the cluster from shutting down due to API calls, user intervention,
	// or job-flow error.
	//
	// TerminationProtected is a required field
	TerminationProtected *bool `type:"boolean" required:"true"`
}

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

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

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

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

// SetJobFlowIds sets the JobFlowIds field's value.
func (s *SetTerminationProtectionInput) SetJobFlowIds(v []*string) *SetTerminationProtectionInput {
	s.JobFlowIds = v
	return s
}

// SetTerminationProtected sets the TerminationProtected field's value.
func (s *SetTerminationProtectionInput) SetTerminationProtected(v bool) *SetTerminationProtectionInput {
	s.TerminationProtected = &v
	return s
}

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

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

// The input to the SetVisibleToAllUsers action.
type SetVisibleToAllUsersInput struct {
	_ struct{} `type:"structure"`

	// The unique identifier of the job flow (cluster).
	//
	// JobFlowIds is a required field
	JobFlowIds []*string `type:"list" required:"true"`

	// A value of true indicates that an IAM principal in the Amazon Web Services
	// account can perform Amazon EMR actions on the cluster that the IAM policies
	// attached to the principal allow. A value of false indicates that only the
	// IAM principal that created the cluster and the Amazon Web Services root user
	// can perform Amazon EMR actions on the cluster.
	//
	// VisibleToAllUsers is a required field
	VisibleToAllUsers *bool `type:"boolean" required:"true"`
}

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

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

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

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

// SetJobFlowIds sets the JobFlowIds field's value.
func (s *SetVisibleToAllUsersInput) SetJobFlowIds(v []*string) *SetVisibleToAllUsersInput {
	s.JobFlowIds = v
	return s
}

// SetVisibleToAllUsers sets the VisibleToAllUsers field's value.
func (s *SetVisibleToAllUsersInput) SetVisibleToAllUsers(v bool) *SetVisibleToAllUsersInput {
	s.VisibleToAllUsers = &v
	return s
}

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

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

// Policy for customizing shrink operations. Allows configuration of decommissioning
// timeout and targeted instance shrinking.
type ShrinkPolicy struct {
	_ struct{} `type:"structure"`

	// The desired timeout for decommissioning an instance. Overrides the default
	// YARN decommissioning timeout.
	DecommissionTimeout *int64 `type:"integer"`

	// Custom policy for requesting termination protection or termination of specific
	// instances when shrinking an instance group.
	InstanceResizePolicy *InstanceResizePolicy `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 ShrinkPolicy) String() string {
	return awsutil.Prettify(s)
}

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

// SetDecommissionTimeout sets the DecommissionTimeout field's value.
func (s *ShrinkPolicy) SetDecommissionTimeout(v int64) *ShrinkPolicy {
	s.DecommissionTimeout = &v
	return s
}

// SetInstanceResizePolicy sets the InstanceResizePolicy field's value.
func (s *ShrinkPolicy) SetInstanceResizePolicy(v *InstanceResizePolicy) *ShrinkPolicy {
	s.InstanceResizePolicy = v
	return s
}

// An automatic scaling configuration, which describes how the policy adds or
// removes instances, the cooldown period, and the number of Amazon EC2 instances
// that will be added each time the CloudWatch metric alarm condition is satisfied.
type SimpleScalingPolicyConfiguration struct {
	_ struct{} `type:"structure"`

	// The way in which Amazon EC2 instances are added (if ScalingAdjustment is
	// a positive number) or terminated (if ScalingAdjustment is a negative number)
	// each time the scaling activity is triggered. CHANGE_IN_CAPACITY is the default.
	// CHANGE_IN_CAPACITY indicates that the Amazon EC2 instance count increments
	// or decrements by ScalingAdjustment, which should be expressed as an integer.
	// PERCENT_CHANGE_IN_CAPACITY indicates the instance count increments or decrements
	// by the percentage specified by ScalingAdjustment, which should be expressed
	// as an integer. For example, 20 indicates an increase in 20% increments of
	// cluster capacity. EXACT_CAPACITY indicates the scaling activity results in
	// an instance group with the number of Amazon EC2 instances specified by ScalingAdjustment,
	// which should be expressed as a positive integer.
	AdjustmentType *string `type:"string" enum:"AdjustmentType"`

	// The amount of time, in seconds, after a scaling activity completes before
	// any further trigger-related scaling activities can start. The default value
	// is 0.
	CoolDown *int64 `type:"integer"`

	// The amount by which to scale in or scale out, based on the specified AdjustmentType.
	// A positive value adds to the instance group's Amazon EC2 instance count while
	// a negative number removes instances. If AdjustmentType is set to EXACT_CAPACITY,
	// the number should only be a positive integer. If AdjustmentType is set to
	// PERCENT_CHANGE_IN_CAPACITY, the value should express the percentage as an
	// integer. For example, -20 indicates a decrease in 20% increments of cluster
	// capacity.
	//
	// ScalingAdjustment is a required field
	ScalingAdjustment *int64 `type:"integer" required:"true"`
}

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

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

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

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

// SetAdjustmentType sets the AdjustmentType field's value.
func (s *SimpleScalingPolicyConfiguration) SetAdjustmentType(v string) *SimpleScalingPolicyConfiguration {
	s.AdjustmentType = &v
	return s
}

// SetCoolDown sets the CoolDown field's value.
func (s *SimpleScalingPolicyConfiguration) SetCoolDown(v int64) *SimpleScalingPolicyConfiguration {
	s.CoolDown = &v
	return s
}

// SetScalingAdjustment sets the ScalingAdjustment field's value.
func (s *SimpleScalingPolicyConfiguration) SetScalingAdjustment(v int64) *SimpleScalingPolicyConfiguration {
	s.ScalingAdjustment = &v
	return s
}

// The returned release label application names or versions.
type SimplifiedApplication struct {
	_ struct{} `type:"structure"`

	// The returned release label application name. For example, hadoop.
	Name *string `type:"string"`

	// The returned release label application version. For example, 3.2.1.
	Version *string `type:"string"`
}

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

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

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

// SetVersion sets the Version field's value.
func (s *SimplifiedApplication) SetVersion(v string) *SimplifiedApplication {
	s.Version = &v
	return s
}

// The launch specification for Spot Instances in the instance fleet, which
// determines the defined duration, provisioning timeout behavior, and allocation
// strategy.
//
// The instance fleet configuration is available only in Amazon EMR releases
// 4.8.0 and later, excluding 5.0.x versions. Spot Instance allocation strategy
// is available in Amazon EMR releases 5.12.1 and later.
//
// Spot Instances with a defined duration (also known as Spot blocks) are no
// longer available to new customers from July 1, 2021. For customers who have
// previously used the feature, we will continue to support Spot Instances with
// a defined duration until December 31, 2022.
type SpotProvisioningSpecification struct {
	_ struct{} `type:"structure"`

	// Specifies one of the following strategies to launch Spot Instance fleets:
	// price-capacity-optimized, capacity-optimized, lowest-price, or diversified.
	// For more information on the provisioning strategies, see Allocation strategies
	// for Spot Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html)
	// in the Amazon EC2 User Guide for Linux Instances.
	//
	// When you launch a Spot Instance fleet with the old console, it automatically
	// launches with the capacity-optimized strategy. You can't change the allocation
	// strategy from the old console.
	AllocationStrategy *string `type:"string" enum:"SpotProvisioningAllocationStrategy"`

	// The defined duration for Spot Instances (also known as Spot blocks) in minutes.
	// When specified, the Spot Instance does not terminate before the defined duration
	// expires, and defined duration pricing for Spot Instances applies. Valid values
	// are 60, 120, 180, 240, 300, or 360. The duration period starts as soon as
	// a Spot Instance receives its instance ID. At the end of the duration, Amazon
	// EC2 marks the Spot Instance for termination and provides a Spot Instance
	// termination notice, which gives the instance a two-minute warning before
	// it terminates.
	//
	// Spot Instances with a defined duration (also known as Spot blocks) are no
	// longer available to new customers from July 1, 2021. For customers who have
	// previously used the feature, we will continue to support Spot Instances with
	// a defined duration until December 31, 2022.
	BlockDurationMinutes *int64 `type:"integer"`

	// The action to take when TargetSpotCapacity has not been fulfilled when the
	// TimeoutDurationMinutes has expired; that is, when all Spot Instances could
	// not be provisioned within the Spot provisioning timeout. Valid values are
	// TERMINATE_CLUSTER and SWITCH_TO_ON_DEMAND. SWITCH_TO_ON_DEMAND specifies
	// that if no Spot Instances are available, On-Demand Instances should be provisioned
	// to fulfill any remaining Spot capacity.
	//
	// TimeoutAction is a required field
	TimeoutAction *string `type:"string" required:"true" enum:"SpotProvisioningTimeoutAction"`

	// The Spot provisioning timeout period in minutes. If Spot Instances are not
	// provisioned within this time period, the TimeOutAction is taken. Minimum
	// value is 5 and maximum value is 1440. The timeout applies only during initial
	// provisioning, when the cluster is first created.
	//
	// TimeoutDurationMinutes is a required field
	TimeoutDurationMinutes *int64 `type:"integer" required:"true"`
}

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

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

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

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

// SetAllocationStrategy sets the AllocationStrategy field's value.
func (s *SpotProvisioningSpecification) SetAllocationStrategy(v string) *SpotProvisioningSpecification {
	s.AllocationStrategy = &v
	return s
}

// SetBlockDurationMinutes sets the BlockDurationMinutes field's value.
func (s *SpotProvisioningSpecification) SetBlockDurationMinutes(v int64) *SpotProvisioningSpecification {
	s.BlockDurationMinutes = &v
	return s
}

// SetTimeoutAction sets the TimeoutAction field's value.
func (s *SpotProvisioningSpecification) SetTimeoutAction(v string) *SpotProvisioningSpecification {
	s.TimeoutAction = &v
	return s
}

// SetTimeoutDurationMinutes sets the TimeoutDurationMinutes field's value.
func (s *SpotProvisioningSpecification) SetTimeoutDurationMinutes(v int64) *SpotProvisioningSpecification {
	s.TimeoutDurationMinutes = &v
	return s
}

// The resize specification for Spot Instances in the instance fleet, which
// contains the resize timeout period.
type SpotResizingSpecification struct {
	_ struct{} `type:"structure"`

	// Spot resize timeout in minutes. If Spot Instances are not provisioned within
	// this time, the resize workflow will stop provisioning of Spot instances.
	// Minimum value is 5 minutes and maximum value is 10,080 minutes (7 days).
	// The timeout applies to all resize workflows on the Instance Fleet. The resize
	// could be triggered by Amazon EMR Managed Scaling or by the customer (via
	// Amazon EMR Console, Amazon EMR CLI modify-instance-fleet or Amazon EMR SDK
	// ModifyInstanceFleet API) or by Amazon EMR due to Amazon EC2 Spot Reclamation.
	//
	// TimeoutDurationMinutes is a required field
	TimeoutDurationMinutes *int64 `type:"integer" required:"true"`
}

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

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SpotResizingSpecification) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SpotResizingSpecification) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SpotResizingSpecification"}
	if s.TimeoutDurationMinutes == nil {
		invalidParams.Add(request.NewErrParamRequired("TimeoutDurationMinutes"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetTimeoutDurationMinutes sets the TimeoutDurationMinutes field's value.
func (s *SpotResizingSpecification) SetTimeoutDurationMinutes(v int64) *SpotResizingSpecification {
	s.TimeoutDurationMinutes = &v
	return s
}

type StartNotebookExecutionInput struct {
	_ struct{} `type:"structure"`

	// The unique identifier of the Amazon EMR Notebook to use for notebook execution.
	EditorId *string `type:"string"`

	// The environment variables associated with the notebook execution.
	EnvironmentVariables map[string]*string `type:"map"`

	// Specifies the execution engine (cluster) that runs the notebook execution.
	//
	// ExecutionEngine is a required field
	ExecutionEngine *ExecutionEngineConfig `type:"structure" required:"true"`

	// An optional name for the notebook execution.
	NotebookExecutionName *string `type:"string"`

	// The unique identifier of the Amazon EC2 security group to associate with
	// the Amazon EMR Notebook for this notebook execution.
	NotebookInstanceSecurityGroupId *string `type:"string"`

	// Input parameters in JSON format passed to the Amazon EMR Notebook at runtime
	// for execution.
	NotebookParams *string `type:"string"`

	// The Amazon S3 location for the notebook execution input.
	NotebookS3Location *NotebookS3LocationFromInput_ `type:"structure"`

	// The output format for the notebook execution.
	OutputNotebookFormat *string `type:"string" enum:"OutputNotebookFormat"`

	// The Amazon S3 location for the notebook execution output.
	OutputNotebookS3Location *OutputNotebookS3LocationFromInput_ `type:"structure"`

	// The path and file name of the notebook file for this execution, relative
	// to the path specified for the Amazon EMR Notebook. For example, if you specify
	// a path of s3://MyBucket/MyNotebooks when you create an Amazon EMR Notebook
	// for a notebook with an ID of e-ABCDEFGHIJK1234567890ABCD (the EditorID of
	// this request), and you specify a RelativePath of my_notebook_executions/notebook_execution.ipynb,
	// the location of the file for the notebook execution is s3://MyBucket/MyNotebooks/e-ABCDEFGHIJK1234567890ABCD/my_notebook_executions/notebook_execution.ipynb.
	RelativePath *string `type:"string"`

	// The name or ARN of the IAM role that is used as the service role for Amazon
	// EMR (the Amazon EMR role) for the notebook execution.
	//
	// ServiceRole is a required field
	ServiceRole *string `type:"string" required:"true"`

	// A list of tags associated with a notebook execution. Tags are user-defined
	// key-value pairs that consist of a required key string with a maximum of 128
	// characters and an optional value string with a maximum of 256 characters.
	Tags []*Tag `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 StartNotebookExecutionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartNotebookExecutionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StartNotebookExecutionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StartNotebookExecutionInput"}
	if s.ExecutionEngine == nil {
		invalidParams.Add(request.NewErrParamRequired("ExecutionEngine"))
	}
	if s.ServiceRole == nil {
		invalidParams.Add(request.NewErrParamRequired("ServiceRole"))
	}
	if s.ExecutionEngine != nil {
		if err := s.ExecutionEngine.Validate(); err != nil {
			invalidParams.AddNested("ExecutionEngine", err.(request.ErrInvalidParams))
		}
	}
	if s.NotebookS3Location != nil {
		if err := s.NotebookS3Location.Validate(); err != nil {
			invalidParams.AddNested("NotebookS3Location", err.(request.ErrInvalidParams))
		}
	}
	if s.OutputNotebookS3Location != nil {
		if err := s.OutputNotebookS3Location.Validate(); err != nil {
			invalidParams.AddNested("OutputNotebookS3Location", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEditorId sets the EditorId field's value.
func (s *StartNotebookExecutionInput) SetEditorId(v string) *StartNotebookExecutionInput {
	s.EditorId = &v
	return s
}

// SetEnvironmentVariables sets the EnvironmentVariables field's value.
func (s *StartNotebookExecutionInput) SetEnvironmentVariables(v map[string]*string) *StartNotebookExecutionInput {
	s.EnvironmentVariables = v
	return s
}

// SetExecutionEngine sets the ExecutionEngine field's value.
func (s *StartNotebookExecutionInput) SetExecutionEngine(v *ExecutionEngineConfig) *StartNotebookExecutionInput {
	s.ExecutionEngine = v
	return s
}

// SetNotebookExecutionName sets the NotebookExecutionName field's value.
func (s *StartNotebookExecutionInput) SetNotebookExecutionName(v string) *StartNotebookExecutionInput {
	s.NotebookExecutionName = &v
	return s
}

// SetNotebookInstanceSecurityGroupId sets the NotebookInstanceSecurityGroupId field's value.
func (s *StartNotebookExecutionInput) SetNotebookInstanceSecurityGroupId(v string) *StartNotebookExecutionInput {
	s.NotebookInstanceSecurityGroupId = &v
	return s
}

// SetNotebookParams sets the NotebookParams field's value.
func (s *StartNotebookExecutionInput) SetNotebookParams(v string) *StartNotebookExecutionInput {
	s.NotebookParams = &v
	return s
}

// SetNotebookS3Location sets the NotebookS3Location field's value.
func (s *StartNotebookExecutionInput) SetNotebookS3Location(v *NotebookS3LocationFromInput_) *StartNotebookExecutionInput {
	s.NotebookS3Location = v
	return s
}

// SetOutputNotebookFormat sets the OutputNotebookFormat field's value.
func (s *StartNotebookExecutionInput) SetOutputNotebookFormat(v string) *StartNotebookExecutionInput {
	s.OutputNotebookFormat = &v
	return s
}

// SetOutputNotebookS3Location sets the OutputNotebookS3Location field's value.
func (s *StartNotebookExecutionInput) SetOutputNotebookS3Location(v *OutputNotebookS3LocationFromInput_) *StartNotebookExecutionInput {
	s.OutputNotebookS3Location = v
	return s
}

// SetRelativePath sets the RelativePath field's value.
func (s *StartNotebookExecutionInput) SetRelativePath(v string) *StartNotebookExecutionInput {
	s.RelativePath = &v
	return s
}

// SetServiceRole sets the ServiceRole field's value.
func (s *StartNotebookExecutionInput) SetServiceRole(v string) *StartNotebookExecutionInput {
	s.ServiceRole = &v
	return s
}

// SetTags sets the Tags field's value.
func (s *StartNotebookExecutionInput) SetTags(v []*Tag) *StartNotebookExecutionInput {
	s.Tags = v
	return s
}

type StartNotebookExecutionOutput struct {
	_ struct{} `type:"structure"`

	// The unique identifier of the notebook execution.
	NotebookExecutionId *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartNotebookExecutionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StartNotebookExecutionOutput) GoString() string {
	return s.String()
}

// SetNotebookExecutionId sets the NotebookExecutionId field's value.
func (s *StartNotebookExecutionOutput) SetNotebookExecutionId(v string) *StartNotebookExecutionOutput {
	s.NotebookExecutionId = &v
	return s
}

// This represents a step in a cluster.
type Step struct {
	_ struct{} `type:"structure"`

	// The action to take when the cluster step fails. Possible values are TERMINATE_CLUSTER,
	// CANCEL_AND_WAIT, and CONTINUE. TERMINATE_JOB_FLOW is provided for backward
	// compatibility. We recommend using TERMINATE_CLUSTER instead.
	//
	// If a cluster's StepConcurrencyLevel is greater than 1, do not use AddJobFlowSteps
	// to submit a step with this parameter set to CANCEL_AND_WAIT or TERMINATE_CLUSTER.
	// The step is not submitted and the action fails with a message that the ActionOnFailure
	// setting is not valid.
	//
	// If you change a cluster's StepConcurrencyLevel to be greater than 1 while
	// a step is running, the ActionOnFailure parameter may not behave as you expect.
	// In this case, for a step that fails with this parameter set to CANCEL_AND_WAIT,
	// pending steps and the running step are not canceled; for a step that fails
	// with this parameter set to TERMINATE_CLUSTER, the cluster does not terminate.
	ActionOnFailure *string `type:"string" enum:"ActionOnFailure"`

	// The Hadoop job configuration of the cluster step.
	Config *HadoopStepConfig `type:"structure"`

	// The Amazon Resource Name (ARN) of the runtime role for a step on the cluster.
	// The runtime role can be a cross-account IAM role. The runtime role ARN is
	// a combination of account ID, role name, and role type using the following
	// format: arn:partition:service:region:account:resource.
	//
	// For example, arn:aws:IAM::1234567890:role/ReadOnly is a correctly formatted
	// runtime role ARN.
	ExecutionRoleArn *string `type:"string"`

	// The identifier of the cluster step.
	Id *string `type:"string"`

	// The name of the cluster step.
	Name *string `type:"string"`

	// The current execution status details of the cluster step.
	Status *StepStatus `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 Step) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Step) GoString() string {
	return s.String()
}

// SetActionOnFailure sets the ActionOnFailure field's value.
func (s *Step) SetActionOnFailure(v string) *Step {
	s.ActionOnFailure = &v
	return s
}

// SetConfig sets the Config field's value.
func (s *Step) SetConfig(v *HadoopStepConfig) *Step {
	s.Config = v
	return s
}

// SetExecutionRoleArn sets the ExecutionRoleArn field's value.
func (s *Step) SetExecutionRoleArn(v string) *Step {
	s.ExecutionRoleArn = &v
	return s
}

// SetId sets the Id field's value.
func (s *Step) SetId(v string) *Step {
	s.Id = &v
	return s
}

// SetName sets the Name field's value.
func (s *Step) SetName(v string) *Step {
	s.Name = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *Step) SetStatus(v *StepStatus) *Step {
	s.Status = v
	return s
}

// Specification for a cluster (job flow) step.
type StepConfig struct {
	_ struct{} `type:"structure"`

	// The action to take when the step fails. Use one of the following values:
	//
	//    * TERMINATE_CLUSTER - Shuts down the cluster.
	//
	//    * CANCEL_AND_WAIT - Cancels any pending steps and returns the cluster
	//    to the WAITING state.
	//
	//    * CONTINUE - Continues to the next step in the queue.
	//
	//    * TERMINATE_JOB_FLOW - Shuts down the cluster. TERMINATE_JOB_FLOW is provided
	//    for backward compatibility. We recommend using TERMINATE_CLUSTER instead.
	//
	// If a cluster's StepConcurrencyLevel is greater than 1, do not use AddJobFlowSteps
	// to submit a step with this parameter set to CANCEL_AND_WAIT or TERMINATE_CLUSTER.
	// The step is not submitted and the action fails with a message that the ActionOnFailure
	// setting is not valid.
	//
	// If you change a cluster's StepConcurrencyLevel to be greater than 1 while
	// a step is running, the ActionOnFailure parameter may not behave as you expect.
	// In this case, for a step that fails with this parameter set to CANCEL_AND_WAIT,
	// pending steps and the running step are not canceled; for a step that fails
	// with this parameter set to TERMINATE_CLUSTER, the cluster does not terminate.
	ActionOnFailure *string `type:"string" enum:"ActionOnFailure"`

	// The JAR file used for the step.
	//
	// HadoopJarStep is a required field
	HadoopJarStep *HadoopJarStepConfig `type:"structure" required:"true"`

	// The name of the step.
	//
	// Name is a required field
	Name *string `type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StepConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StepConfig) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StepConfig) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StepConfig"}
	if s.HadoopJarStep == nil {
		invalidParams.Add(request.NewErrParamRequired("HadoopJarStep"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.HadoopJarStep != nil {
		if err := s.HadoopJarStep.Validate(); err != nil {
			invalidParams.AddNested("HadoopJarStep", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetActionOnFailure sets the ActionOnFailure field's value.
func (s *StepConfig) SetActionOnFailure(v string) *StepConfig {
	s.ActionOnFailure = &v
	return s
}

// SetHadoopJarStep sets the HadoopJarStep field's value.
func (s *StepConfig) SetHadoopJarStep(v *HadoopJarStepConfig) *StepConfig {
	s.HadoopJarStep = v
	return s
}

// SetName sets the Name field's value.
func (s *StepConfig) SetName(v string) *StepConfig {
	s.Name = &v
	return s
}

// Combines the execution state and configuration of a step.
type StepDetail struct {
	_ struct{} `type:"structure"`

	// The description of the step status.
	//
	// ExecutionStatusDetail is a required field
	ExecutionStatusDetail *StepExecutionStatusDetail `type:"structure" required:"true"`

	// The step configuration.
	//
	// StepConfig is a required field
	StepConfig *StepConfig `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 StepDetail) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StepDetail) GoString() string {
	return s.String()
}

// SetExecutionStatusDetail sets the ExecutionStatusDetail field's value.
func (s *StepDetail) SetExecutionStatusDetail(v *StepExecutionStatusDetail) *StepDetail {
	s.ExecutionStatusDetail = v
	return s
}

// SetStepConfig sets the StepConfig field's value.
func (s *StepDetail) SetStepConfig(v *StepConfig) *StepDetail {
	s.StepConfig = v
	return s
}

// The execution state of a step.
type StepExecutionStatusDetail struct {
	_ struct{} `type:"structure"`

	// The creation date and time of the step.
	//
	// CreationDateTime is a required field
	CreationDateTime *time.Time `type:"timestamp" required:"true"`

	// The completion date and time of the step.
	EndDateTime *time.Time `type:"timestamp"`

	// A description of the step's current state.
	LastStateChangeReason *string `type:"string"`

	// The start date and time of the step.
	StartDateTime *time.Time `type:"timestamp"`

	// The state of the step.
	//
	// State is a required field
	State *string `type:"string" required:"true" enum:"StepExecutionState"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StepExecutionStatusDetail) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StepExecutionStatusDetail) GoString() string {
	return s.String()
}

// SetCreationDateTime sets the CreationDateTime field's value.
func (s *StepExecutionStatusDetail) SetCreationDateTime(v time.Time) *StepExecutionStatusDetail {
	s.CreationDateTime = &v
	return s
}

// SetEndDateTime sets the EndDateTime field's value.
func (s *StepExecutionStatusDetail) SetEndDateTime(v time.Time) *StepExecutionStatusDetail {
	s.EndDateTime = &v
	return s
}

// SetLastStateChangeReason sets the LastStateChangeReason field's value.
func (s *StepExecutionStatusDetail) SetLastStateChangeReason(v string) *StepExecutionStatusDetail {
	s.LastStateChangeReason = &v
	return s
}

// SetStartDateTime sets the StartDateTime field's value.
func (s *StepExecutionStatusDetail) SetStartDateTime(v time.Time) *StepExecutionStatusDetail {
	s.StartDateTime = &v
	return s
}

// SetState sets the State field's value.
func (s *StepExecutionStatusDetail) SetState(v string) *StepExecutionStatusDetail {
	s.State = &v
	return s
}

// The details of the step state change reason.
type StepStateChangeReason struct {
	_ struct{} `type:"structure"`

	// The programmable code for the state change reason. Note: Currently, the service
	// provides no code for the state change.
	Code *string `type:"string" enum:"StepStateChangeReasonCode"`

	// The descriptive message for the state change reason.
	Message *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StepStateChangeReason) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StepStateChangeReason) GoString() string {
	return s.String()
}

// SetCode sets the Code field's value.
func (s *StepStateChangeReason) SetCode(v string) *StepStateChangeReason {
	s.Code = &v
	return s
}

// SetMessage sets the Message field's value.
func (s *StepStateChangeReason) SetMessage(v string) *StepStateChangeReason {
	s.Message = &v
	return s
}

// The execution status details of the cluster step.
type StepStatus struct {
	_ struct{} `type:"structure"`

	// The details for the step failure including reason, message, and log file
	// path where the root cause was identified.
	FailureDetails *FailureDetails `type:"structure"`

	// The execution state of the cluster step.
	State *string `type:"string" enum:"StepState"`

	// The reason for the step execution status change.
	StateChangeReason *StepStateChangeReason `type:"structure"`

	// The timeline of the cluster step status over time.
	Timeline *StepTimeline `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 StepStatus) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StepStatus) GoString() string {
	return s.String()
}

// SetFailureDetails sets the FailureDetails field's value.
func (s *StepStatus) SetFailureDetails(v *FailureDetails) *StepStatus {
	s.FailureDetails = v
	return s
}

// SetState sets the State field's value.
func (s *StepStatus) SetState(v string) *StepStatus {
	s.State = &v
	return s
}

// SetStateChangeReason sets the StateChangeReason field's value.
func (s *StepStatus) SetStateChangeReason(v *StepStateChangeReason) *StepStatus {
	s.StateChangeReason = v
	return s
}

// SetTimeline sets the Timeline field's value.
func (s *StepStatus) SetTimeline(v *StepTimeline) *StepStatus {
	s.Timeline = v
	return s
}

// The summary of the cluster step.
type StepSummary struct {
	_ struct{} `type:"structure"`

	// The action to take when the cluster step fails. Possible values are TERMINATE_CLUSTER,
	// CANCEL_AND_WAIT, and CONTINUE. TERMINATE_JOB_FLOW is available for backward
	// compatibility.
	ActionOnFailure *string `type:"string" enum:"ActionOnFailure"`

	// The Hadoop job configuration of the cluster step.
	Config *HadoopStepConfig `type:"structure"`

	// The identifier of the cluster step.
	Id *string `type:"string"`

	// The name of the cluster step.
	Name *string `type:"string"`

	// The current execution status details of the cluster step.
	Status *StepStatus `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 StepSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StepSummary) GoString() string {
	return s.String()
}

// SetActionOnFailure sets the ActionOnFailure field's value.
func (s *StepSummary) SetActionOnFailure(v string) *StepSummary {
	s.ActionOnFailure = &v
	return s
}

// SetConfig sets the Config field's value.
func (s *StepSummary) SetConfig(v *HadoopStepConfig) *StepSummary {
	s.Config = v
	return s
}

// SetId sets the Id field's value.
func (s *StepSummary) SetId(v string) *StepSummary {
	s.Id = &v
	return s
}

// SetName sets the Name field's value.
func (s *StepSummary) SetName(v string) *StepSummary {
	s.Name = &v
	return s
}

// SetStatus sets the Status field's value.
func (s *StepSummary) SetStatus(v *StepStatus) *StepSummary {
	s.Status = v
	return s
}

// The timeline of the cluster step lifecycle.
type StepTimeline struct {
	_ struct{} `type:"structure"`

	// The date and time when the cluster step was created.
	CreationDateTime *time.Time `type:"timestamp"`

	// The date and time when the cluster step execution completed or failed.
	EndDateTime *time.Time `type:"timestamp"`

	// The date and time when the cluster step execution started.
	StartDateTime *time.Time `type:"timestamp"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StepTimeline) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StepTimeline) GoString() string {
	return s.String()
}

// SetCreationDateTime sets the CreationDateTime field's value.
func (s *StepTimeline) SetCreationDateTime(v time.Time) *StepTimeline {
	s.CreationDateTime = &v
	return s
}

// SetEndDateTime sets the EndDateTime field's value.
func (s *StepTimeline) SetEndDateTime(v time.Time) *StepTimeline {
	s.EndDateTime = &v
	return s
}

// SetStartDateTime sets the StartDateTime field's value.
func (s *StepTimeline) SetStartDateTime(v time.Time) *StepTimeline {
	s.StartDateTime = &v
	return s
}

type StopNotebookExecutionInput struct {
	_ struct{} `type:"structure"`

	// The unique identifier of the notebook execution.
	//
	// NotebookExecutionId is a required field
	NotebookExecutionId *string `type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopNotebookExecutionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopNotebookExecutionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StopNotebookExecutionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StopNotebookExecutionInput"}
	if s.NotebookExecutionId == nil {
		invalidParams.Add(request.NewErrParamRequired("NotebookExecutionId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetNotebookExecutionId sets the NotebookExecutionId field's value.
func (s *StopNotebookExecutionInput) SetNotebookExecutionId(v string) *StopNotebookExecutionInput {
	s.NotebookExecutionId = &v
	return s
}

type StopNotebookExecutionOutput 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 StopNotebookExecutionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StopNotebookExecutionOutput) GoString() string {
	return s.String()
}

// Details for an Amazon EMR Studio including ID, creation time, name, and so
// on.
type Studio struct {
	_ struct{} `type:"structure"`

	// Specifies whether the Amazon EMR Studio authenticates users with IAM or IAM
	// Identity Center.
	AuthMode *string `type:"string" enum:"AuthMode"`

	// The time the Amazon EMR Studio was created.
	CreationTime *time.Time `type:"timestamp"`

	// The Amazon S3 location to back up Amazon EMR Studio Workspaces and notebook
	// files.
	DefaultS3Location *string `type:"string"`

	// The detailed description of the Amazon EMR Studio.
	Description *string `type:"string"`

	// The KMS key identifier (ARN) used to encrypt Amazon EMR Studio workspace
	// and notebook files when backed up to Amazon S3.
	EncryptionKeyArn *string `type:"string"`

	// The ID of the Engine security group associated with the Amazon EMR Studio.
	// The Engine security group allows inbound network traffic from resources in
	// the Workspace security group.
	EngineSecurityGroupId *string `type:"string"`

	// The ARN of the IAM Identity Center instance the Studio application belongs
	// to.
	IdcInstanceArn *string `min:"20" type:"string"`

	// Indicates whether the Studio has REQUIRED or OPTIONAL IAM Identity Center
	// user assignment. If the value is set to REQUIRED, users must be explicitly
	// assigned to the Studio application to access the Studio.
	IdcUserAssignment *string `type:"string" enum:"IdcUserAssignment"`

	// Your identity provider's authentication endpoint. Amazon EMR Studio redirects
	// federated users to this endpoint for authentication when logging in to a
	// Studio with the Studio URL.
	IdpAuthUrl *string `type:"string"`

	// The name of your identity provider's RelayState parameter.
	IdpRelayStateParameterName *string `type:"string"`

	// The name of the Amazon EMR Studio.
	Name *string `type:"string"`

	// The name of the IAM role assumed by the Amazon EMR Studio.
	ServiceRole *string `type:"string"`

	// The Amazon Resource Name (ARN) of the Amazon EMR Studio.
	StudioArn *string `type:"string"`

	// The ID of the Amazon EMR Studio.
	StudioId *string `type:"string"`

	// The list of IDs of the subnets associated with the Amazon EMR Studio.
	SubnetIds []*string `type:"list"`

	// A list of tags associated with the Amazon EMR Studio.
	Tags []*Tag `type:"list"`

	// Indicates whether the Studio has Trusted identity propagation enabled. The
	// default value is false.
	TrustedIdentityPropagationEnabled *bool `type:"boolean"`

	// The unique access URL of the Amazon EMR Studio.
	Url *string `type:"string"`

	// The name of the IAM role assumed by users logged in to the Amazon EMR Studio.
	// A Studio only requires a UserRole when you use IAM authentication.
	UserRole *string `type:"string"`

	// The ID of the VPC associated with the Amazon EMR Studio.
	VpcId *string `type:"string"`

	// The ID of the Workspace security group associated with the Amazon EMR Studio.
	// The Workspace security group allows outbound network traffic to resources
	// in the Engine security group and to the internet.
	WorkspaceSecurityGroupId *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Studio) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Studio) GoString() string {
	return s.String()
}

// SetAuthMode sets the AuthMode field's value.
func (s *Studio) SetAuthMode(v string) *Studio {
	s.AuthMode = &v
	return s
}

// SetCreationTime sets the CreationTime field's value.
func (s *Studio) SetCreationTime(v time.Time) *Studio {
	s.CreationTime = &v
	return s
}

// SetDefaultS3Location sets the DefaultS3Location field's value.
func (s *Studio) SetDefaultS3Location(v string) *Studio {
	s.DefaultS3Location = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *Studio) SetDescription(v string) *Studio {
	s.Description = &v
	return s
}

// SetEncryptionKeyArn sets the EncryptionKeyArn field's value.
func (s *Studio) SetEncryptionKeyArn(v string) *Studio {
	s.EncryptionKeyArn = &v
	return s
}

// SetEngineSecurityGroupId sets the EngineSecurityGroupId field's value.
func (s *Studio) SetEngineSecurityGroupId(v string) *Studio {
	s.EngineSecurityGroupId = &v
	return s
}

// SetIdcInstanceArn sets the IdcInstanceArn field's value.
func (s *Studio) SetIdcInstanceArn(v string) *Studio {
	s.IdcInstanceArn = &v
	return s
}

// SetIdcUserAssignment sets the IdcUserAssignment field's value.
func (s *Studio) SetIdcUserAssignment(v string) *Studio {
	s.IdcUserAssignment = &v
	return s
}

// SetIdpAuthUrl sets the IdpAuthUrl field's value.
func (s *Studio) SetIdpAuthUrl(v string) *Studio {
	s.IdpAuthUrl = &v
	return s
}

// SetIdpRelayStateParameterName sets the IdpRelayStateParameterName field's value.
func (s *Studio) SetIdpRelayStateParameterName(v string) *Studio {
	s.IdpRelayStateParameterName = &v
	return s
}

// SetName sets the Name field's value.
func (s *Studio) SetName(v string) *Studio {
	s.Name = &v
	return s
}

// SetServiceRole sets the ServiceRole field's value.
func (s *Studio) SetServiceRole(v string) *Studio {
	s.ServiceRole = &v
	return s
}

// SetStudioArn sets the StudioArn field's value.
func (s *Studio) SetStudioArn(v string) *Studio {
	s.StudioArn = &v
	return s
}

// SetStudioId sets the StudioId field's value.
func (s *Studio) SetStudioId(v string) *Studio {
	s.StudioId = &v
	return s
}

// SetSubnetIds sets the SubnetIds field's value.
func (s *Studio) SetSubnetIds(v []*string) *Studio {
	s.SubnetIds = v
	return s
}

// SetTags sets the Tags field's value.
func (s *Studio) SetTags(v []*Tag) *Studio {
	s.Tags = v
	return s
}

// SetTrustedIdentityPropagationEnabled sets the TrustedIdentityPropagationEnabled field's value.
func (s *Studio) SetTrustedIdentityPropagationEnabled(v bool) *Studio {
	s.TrustedIdentityPropagationEnabled = &v
	return s
}

// SetUrl sets the Url field's value.
func (s *Studio) SetUrl(v string) *Studio {
	s.Url = &v
	return s
}

// SetUserRole sets the UserRole field's value.
func (s *Studio) SetUserRole(v string) *Studio {
	s.UserRole = &v
	return s
}

// SetVpcId sets the VpcId field's value.
func (s *Studio) SetVpcId(v string) *Studio {
	s.VpcId = &v
	return s
}

// SetWorkspaceSecurityGroupId sets the WorkspaceSecurityGroupId field's value.
func (s *Studio) SetWorkspaceSecurityGroupId(v string) *Studio {
	s.WorkspaceSecurityGroupId = &v
	return s
}

// Details for an Amazon EMR Studio, including ID, Name, VPC, and Description.
// To fetch additional details such as subnets, IAM roles, security groups,
// and tags for the Studio, use the DescribeStudio API.
type StudioSummary struct {
	_ struct{} `type:"structure"`

	// Specifies whether the Studio authenticates users using IAM or IAM Identity
	// Center.
	AuthMode *string `type:"string" enum:"AuthMode"`

	// The time when the Amazon EMR Studio was created.
	CreationTime *time.Time `type:"timestamp"`

	// The detailed description of the Amazon EMR Studio.
	Description *string `type:"string"`

	// The name of the Amazon EMR Studio.
	Name *string `type:"string"`

	// The ID of the Amazon EMR Studio.
	StudioId *string `type:"string"`

	// The unique access URL of the Amazon EMR Studio.
	Url *string `type:"string"`

	// The ID of the Virtual Private Cloud (Amazon VPC) associated with the Amazon
	// EMR Studio.
	VpcId *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StudioSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s StudioSummary) GoString() string {
	return s.String()
}

// SetAuthMode sets the AuthMode field's value.
func (s *StudioSummary) SetAuthMode(v string) *StudioSummary {
	s.AuthMode = &v
	return s
}

// SetCreationTime sets the CreationTime field's value.
func (s *StudioSummary) SetCreationTime(v time.Time) *StudioSummary {
	s.CreationTime = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *StudioSummary) SetDescription(v string) *StudioSummary {
	s.Description = &v
	return s
}

// SetName sets the Name field's value.
func (s *StudioSummary) SetName(v string) *StudioSummary {
	s.Name = &v
	return s
}

// SetStudioId sets the StudioId field's value.
func (s *StudioSummary) SetStudioId(v string) *StudioSummary {
	s.StudioId = &v
	return s
}

// SetUrl sets the Url field's value.
func (s *StudioSummary) SetUrl(v string) *StudioSummary {
	s.Url = &v
	return s
}

// SetVpcId sets the VpcId field's value.
func (s *StudioSummary) SetVpcId(v string) *StudioSummary {
	s.VpcId = &v
	return s
}

// An instance type that the specified Amazon EMR release supports.
type SupportedInstanceType struct {
	_ struct{} `type:"structure"`

	// The CPU architecture, for example X86_64 or AARCH64.
	Architecture *string `type:"string"`

	// Indicates whether the SupportedInstanceType supports Amazon EBS optimization.
	EbsOptimizedAvailable *bool `type:"boolean"`

	// Indicates whether the SupportedInstanceType uses Amazon EBS optimization
	// by default.
	EbsOptimizedByDefault *bool `type:"boolean"`

	// Indicates whether the SupportedInstanceType only supports Amazon EBS.
	EbsStorageOnly *bool `type:"boolean"`

	// The Amazon EC2 family and generation for the SupportedInstanceType.
	InstanceFamilyId *string `type:"string"`

	// Indicates whether the SupportedInstanceType only supports 64-bit architecture.
	Is64BitsOnly *bool `type:"boolean"`

	// The amount of memory that is available to Amazon EMR from the SupportedInstanceType.
	// The kernel and hypervisor software consume some memory, so this value might
	// be lower than the overall memory for the instance type.
	MemoryGB *float64 `type:"float"`

	// Number of disks for the SupportedInstanceType. This value is 0 for Amazon
	// EBS-only instance types.
	NumberOfDisks *int64 `type:"integer"`

	// StorageGB represents the storage capacity of the SupportedInstanceType. This
	// value is 0 for Amazon EBS-only instance types.
	StorageGB *int64 `type:"integer"`

	// The Amazon EC2 instance type (http://aws.amazon.com/ec2/instance-types/),
	// for example m5.xlarge, of the SupportedInstanceType.
	Type *string `type:"string"`

	// The number of vCPUs available for the SupportedInstanceType.
	VCPU *int64 `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 SupportedInstanceType) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SupportedInstanceType) GoString() string {
	return s.String()
}

// SetArchitecture sets the Architecture field's value.
func (s *SupportedInstanceType) SetArchitecture(v string) *SupportedInstanceType {
	s.Architecture = &v
	return s
}

// SetEbsOptimizedAvailable sets the EbsOptimizedAvailable field's value.
func (s *SupportedInstanceType) SetEbsOptimizedAvailable(v bool) *SupportedInstanceType {
	s.EbsOptimizedAvailable = &v
	return s
}

// SetEbsOptimizedByDefault sets the EbsOptimizedByDefault field's value.
func (s *SupportedInstanceType) SetEbsOptimizedByDefault(v bool) *SupportedInstanceType {
	s.EbsOptimizedByDefault = &v
	return s
}

// SetEbsStorageOnly sets the EbsStorageOnly field's value.
func (s *SupportedInstanceType) SetEbsStorageOnly(v bool) *SupportedInstanceType {
	s.EbsStorageOnly = &v
	return s
}

// SetInstanceFamilyId sets the InstanceFamilyId field's value.
func (s *SupportedInstanceType) SetInstanceFamilyId(v string) *SupportedInstanceType {
	s.InstanceFamilyId = &v
	return s
}

// SetIs64BitsOnly sets the Is64BitsOnly field's value.
func (s *SupportedInstanceType) SetIs64BitsOnly(v bool) *SupportedInstanceType {
	s.Is64BitsOnly = &v
	return s
}

// SetMemoryGB sets the MemoryGB field's value.
func (s *SupportedInstanceType) SetMemoryGB(v float64) *SupportedInstanceType {
	s.MemoryGB = &v
	return s
}

// SetNumberOfDisks sets the NumberOfDisks field's value.
func (s *SupportedInstanceType) SetNumberOfDisks(v int64) *SupportedInstanceType {
	s.NumberOfDisks = &v
	return s
}

// SetStorageGB sets the StorageGB field's value.
func (s *SupportedInstanceType) SetStorageGB(v int64) *SupportedInstanceType {
	s.StorageGB = &v
	return s
}

// SetType sets the Type field's value.
func (s *SupportedInstanceType) SetType(v string) *SupportedInstanceType {
	s.Type = &v
	return s
}

// SetVCPU sets the VCPU field's value.
func (s *SupportedInstanceType) SetVCPU(v int64) *SupportedInstanceType {
	s.VCPU = &v
	return s
}

// The list of supported product configurations that allow user-supplied arguments.
// Amazon EMR accepts these arguments and forwards them to the corresponding
// installation script as bootstrap action arguments.
type SupportedProductConfig struct {
	_ struct{} `type:"structure"`

	// The list of user-supplied arguments.
	Args []*string `type:"list"`

	// The name of the product configuration.
	Name *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SupportedProductConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SupportedProductConfig) GoString() string {
	return s.String()
}

// SetArgs sets the Args field's value.
func (s *SupportedProductConfig) SetArgs(v []*string) *SupportedProductConfig {
	s.Args = v
	return s
}

// SetName sets the Name field's value.
func (s *SupportedProductConfig) SetName(v string) *SupportedProductConfig {
	s.Name = &v
	return s
}

// A key-value pair containing user-defined metadata that you can associate
// with an Amazon EMR resource. Tags make it easier to associate clusters in
// various ways, such as grouping clusters to track your Amazon EMR resource
// allocation costs. For more information, see Tag Clusters (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-tags.html).
type Tag struct {
	_ struct{} `type:"structure"`

	// A user-defined key, which is the minimum required information for a valid
	// tag. For more information, see Tag (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-tags.html).
	Key *string `type:"string"`

	// A user-defined value, which is optional in a tag. For more information, see
	// Tag Clusters (https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-tags.html).
	Value *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tag) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Tag) GoString() string {
	return s.String()
}

// SetKey sets the Key field's value.
func (s *Tag) SetKey(v string) *Tag {
	s.Key = &v
	return s
}

// SetValue sets the Value field's value.
func (s *Tag) SetValue(v string) *Tag {
	s.Value = &v
	return s
}

// Input to the TerminateJobFlows operation.
type TerminateJobFlowsInput struct {
	_ struct{} `type:"structure"`

	// A list of job flows to be shut down.
	//
	// JobFlowIds is a required field
	JobFlowIds []*string `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 TerminateJobFlowsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TerminateJobFlowsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TerminateJobFlowsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TerminateJobFlowsInput"}
	if s.JobFlowIds == nil {
		invalidParams.Add(request.NewErrParamRequired("JobFlowIds"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetJobFlowIds sets the JobFlowIds field's value.
func (s *TerminateJobFlowsInput) SetJobFlowIds(v []*string) *TerminateJobFlowsInput {
	s.JobFlowIds = v
	return s
}

type TerminateJobFlowsOutput 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 TerminateJobFlowsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TerminateJobFlowsOutput) GoString() string {
	return s.String()
}

type UpdateStudioInput struct {
	_ struct{} `type:"structure"`

	// The Amazon S3 location to back up Workspaces and notebook files for the Amazon
	// EMR Studio.
	DefaultS3Location *string `type:"string"`

	// A detailed description to assign to the Amazon EMR Studio.
	Description *string `type:"string"`

	// The KMS key identifier (ARN) used to encrypt Amazon EMR Studio workspace
	// and notebook files when backed up to Amazon S3.
	EncryptionKeyArn *string `type:"string"`

	// A descriptive name for the Amazon EMR Studio.
	Name *string `type:"string"`

	// The ID of the Amazon EMR Studio to update.
	//
	// StudioId is a required field
	StudioId *string `type:"string" required:"true"`

	// A list of subnet IDs to associate with the Amazon EMR Studio. The list can
	// include new subnet IDs, but must also include all of the subnet IDs previously
	// associated with the Studio. The list order does not matter. A Studio can
	// have a maximum of 5 subnets. The subnets must belong to the same VPC as the
	// Studio.
	SubnetIds []*string `type:"list"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateStudioInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateStudioInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateStudioInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateStudioInput"}
	if s.StudioId == nil {
		invalidParams.Add(request.NewErrParamRequired("StudioId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDefaultS3Location sets the DefaultS3Location field's value.
func (s *UpdateStudioInput) SetDefaultS3Location(v string) *UpdateStudioInput {
	s.DefaultS3Location = &v
	return s
}

// SetDescription sets the Description field's value.
func (s *UpdateStudioInput) SetDescription(v string) *UpdateStudioInput {
	s.Description = &v
	return s
}

// SetEncryptionKeyArn sets the EncryptionKeyArn field's value.
func (s *UpdateStudioInput) SetEncryptionKeyArn(v string) *UpdateStudioInput {
	s.EncryptionKeyArn = &v
	return s
}

// SetName sets the Name field's value.
func (s *UpdateStudioInput) SetName(v string) *UpdateStudioInput {
	s.Name = &v
	return s
}

// SetStudioId sets the StudioId field's value.
func (s *UpdateStudioInput) SetStudioId(v string) *UpdateStudioInput {
	s.StudioId = &v
	return s
}

// SetSubnetIds sets the SubnetIds field's value.
func (s *UpdateStudioInput) SetSubnetIds(v []*string) *UpdateStudioInput {
	s.SubnetIds = v
	return s
}

type UpdateStudioOutput 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 UpdateStudioOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateStudioOutput) GoString() string {
	return s.String()
}

type UpdateStudioSessionMappingInput struct {
	_ struct{} `type:"structure"`

	// The globally unique identifier (GUID) of the user or group. For more information,
	// see UserId (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_User.html#singlesignon-Type-User-UserId)
	// and GroupId (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_Group.html#singlesignon-Type-Group-GroupId)
	// in the IAM Identity Center Identity Store API Reference. Either IdentityName
	// or IdentityId must be specified.
	IdentityId *string `type:"string"`

	// The name of the user or group to update. For more information, see UserName
	// (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_User.html#singlesignon-Type-User-UserName)
	// and DisplayName (https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_Group.html#singlesignon-Type-Group-DisplayName)
	// in the IAM Identity Center Identity Store API Reference. Either IdentityName
	// or IdentityId must be specified.
	IdentityName *string `type:"string"`

	// Specifies whether the identity to update is a user or a group.
	//
	// IdentityType is a required field
	IdentityType *string `type:"string" required:"true" enum:"IdentityType"`

	// The Amazon Resource Name (ARN) of the session policy to associate with the
	// specified user or group.
	//
	// SessionPolicyArn is a required field
	SessionPolicyArn *string `type:"string" required:"true"`

	// The ID of the Amazon EMR Studio.
	//
	// StudioId is a required field
	StudioId *string `type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateStudioSessionMappingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateStudioSessionMappingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateStudioSessionMappingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateStudioSessionMappingInput"}
	if s.IdentityType == nil {
		invalidParams.Add(request.NewErrParamRequired("IdentityType"))
	}
	if s.SessionPolicyArn == nil {
		invalidParams.Add(request.NewErrParamRequired("SessionPolicyArn"))
	}
	if s.StudioId == nil {
		invalidParams.Add(request.NewErrParamRequired("StudioId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetIdentityId sets the IdentityId field's value.
func (s *UpdateStudioSessionMappingInput) SetIdentityId(v string) *UpdateStudioSessionMappingInput {
	s.IdentityId = &v
	return s
}

// SetIdentityName sets the IdentityName field's value.
func (s *UpdateStudioSessionMappingInput) SetIdentityName(v string) *UpdateStudioSessionMappingInput {
	s.IdentityName = &v
	return s
}

// SetIdentityType sets the IdentityType field's value.
func (s *UpdateStudioSessionMappingInput) SetIdentityType(v string) *UpdateStudioSessionMappingInput {
	s.IdentityType = &v
	return s
}

// SetSessionPolicyArn sets the SessionPolicyArn field's value.
func (s *UpdateStudioSessionMappingInput) SetSessionPolicyArn(v string) *UpdateStudioSessionMappingInput {
	s.SessionPolicyArn = &v
	return s
}

// SetStudioId sets the StudioId field's value.
func (s *UpdateStudioSessionMappingInput) SetStudioId(v string) *UpdateStudioSessionMappingInput {
	s.StudioId = &v
	return s
}

type UpdateStudioSessionMappingOutput 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 UpdateStudioSessionMappingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UpdateStudioSessionMappingOutput) GoString() string {
	return s.String()
}

// The username and password that you use to connect to cluster endpoints.
type UsernamePassword struct {
	_ struct{} `type:"structure" sensitive:"true"`

	// The password associated with the temporary credentials that you use to connect
	// to cluster endpoints.
	Password *string `type:"string"`

	// The username associated with the temporary credentials that you use to connect
	// to cluster endpoints.
	Username *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UsernamePassword) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s UsernamePassword) GoString() string {
	return s.String()
}

// SetPassword sets the Password field's value.
func (s *UsernamePassword) SetPassword(v string) *UsernamePassword {
	s.Password = &v
	return s
}

// SetUsername sets the Username field's value.
func (s *UsernamePassword) SetUsername(v string) *UsernamePassword {
	s.Username = &v
	return s
}

// EBS volume specifications such as volume type, IOPS, size (GiB) and throughput
// (MiB/s) that are requested for the EBS volume attached to an Amazon EC2 instance
// in the cluster.
type VolumeSpecification struct {
	_ struct{} `type:"structure"`

	// The number of I/O operations per second (IOPS) that the volume supports.
	Iops *int64 `type:"integer"`

	// The volume size, in gibibytes (GiB). This can be a number from 1 - 1024.
	// If the volume type is EBS-optimized, the minimum value is 10.
	//
	// SizeInGB is a required field
	SizeInGB *int64 `type:"integer" required:"true"`

	// The throughput, in mebibyte per second (MiB/s). This optional parameter can
	// be a number from 125 - 1000 and is valid only for gp3 volumes.
	Throughput *int64 `type:"integer"`

	// The volume type. Volume types supported are gp3, gp2, io1, st1, sc1, and
	// standard.
	//
	// VolumeType is a required field
	VolumeType *string `type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VolumeSpecification) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VolumeSpecification) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *VolumeSpecification) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "VolumeSpecification"}
	if s.SizeInGB == nil {
		invalidParams.Add(request.NewErrParamRequired("SizeInGB"))
	}
	if s.VolumeType == nil {
		invalidParams.Add(request.NewErrParamRequired("VolumeType"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetIops sets the Iops field's value.
func (s *VolumeSpecification) SetIops(v int64) *VolumeSpecification {
	s.Iops = &v
	return s
}

// SetSizeInGB sets the SizeInGB field's value.
func (s *VolumeSpecification) SetSizeInGB(v int64) *VolumeSpecification {
	s.SizeInGB = &v
	return s
}

// SetThroughput sets the Throughput field's value.
func (s *VolumeSpecification) SetThroughput(v int64) *VolumeSpecification {
	s.Throughput = &v
	return s
}

// SetVolumeType sets the VolumeType field's value.
func (s *VolumeSpecification) SetVolumeType(v string) *VolumeSpecification {
	s.VolumeType = &v
	return s
}

const (
	// ActionOnFailureTerminateJobFlow is a ActionOnFailure enum value
	ActionOnFailureTerminateJobFlow = "TERMINATE_JOB_FLOW"

	// ActionOnFailureTerminateCluster is a ActionOnFailure enum value
	ActionOnFailureTerminateCluster = "TERMINATE_CLUSTER"

	// ActionOnFailureCancelAndWait is a ActionOnFailure enum value
	ActionOnFailureCancelAndWait = "CANCEL_AND_WAIT"

	// ActionOnFailureContinue is a ActionOnFailure enum value
	ActionOnFailureContinue = "CONTINUE"
)

// ActionOnFailure_Values returns all elements of the ActionOnFailure enum
func ActionOnFailure_Values() []string {
	return []string{
		ActionOnFailureTerminateJobFlow,
		ActionOnFailureTerminateCluster,
		ActionOnFailureCancelAndWait,
		ActionOnFailureContinue,
	}
}

const (
	// AdjustmentTypeChangeInCapacity is a AdjustmentType enum value
	AdjustmentTypeChangeInCapacity = "CHANGE_IN_CAPACITY"

	// AdjustmentTypePercentChangeInCapacity is a AdjustmentType enum value
	AdjustmentTypePercentChangeInCapacity = "PERCENT_CHANGE_IN_CAPACITY"

	// AdjustmentTypeExactCapacity is a AdjustmentType enum value
	AdjustmentTypeExactCapacity = "EXACT_CAPACITY"
)

// AdjustmentType_Values returns all elements of the AdjustmentType enum
func AdjustmentType_Values() []string {
	return []string{
		AdjustmentTypeChangeInCapacity,
		AdjustmentTypePercentChangeInCapacity,
		AdjustmentTypeExactCapacity,
	}
}

const (
	// AuthModeSso is a AuthMode enum value
	AuthModeSso = "SSO"

	// AuthModeIam is a AuthMode enum value
	AuthModeIam = "IAM"
)

// AuthMode_Values returns all elements of the AuthMode enum
func AuthMode_Values() []string {
	return []string{
		AuthModeSso,
		AuthModeIam,
	}
}

const (
	// AutoScalingPolicyStatePending is a AutoScalingPolicyState enum value
	AutoScalingPolicyStatePending = "PENDING"

	// AutoScalingPolicyStateAttaching is a AutoScalingPolicyState enum value
	AutoScalingPolicyStateAttaching = "ATTACHING"

	// AutoScalingPolicyStateAttached is a AutoScalingPolicyState enum value
	AutoScalingPolicyStateAttached = "ATTACHED"

	// AutoScalingPolicyStateDetaching is a AutoScalingPolicyState enum value
	AutoScalingPolicyStateDetaching = "DETACHING"

	// AutoScalingPolicyStateDetached is a AutoScalingPolicyState enum value
	AutoScalingPolicyStateDetached = "DETACHED"

	// AutoScalingPolicyStateFailed is a AutoScalingPolicyState enum value
	AutoScalingPolicyStateFailed = "FAILED"
)

// AutoScalingPolicyState_Values returns all elements of the AutoScalingPolicyState enum
func AutoScalingPolicyState_Values() []string {
	return []string{
		AutoScalingPolicyStatePending,
		AutoScalingPolicyStateAttaching,
		AutoScalingPolicyStateAttached,
		AutoScalingPolicyStateDetaching,
		AutoScalingPolicyStateDetached,
		AutoScalingPolicyStateFailed,
	}
}

const (
	// AutoScalingPolicyStateChangeReasonCodeUserRequest is a AutoScalingPolicyStateChangeReasonCode enum value
	AutoScalingPolicyStateChangeReasonCodeUserRequest = "USER_REQUEST"

	// AutoScalingPolicyStateChangeReasonCodeProvisionFailure is a AutoScalingPolicyStateChangeReasonCode enum value
	AutoScalingPolicyStateChangeReasonCodeProvisionFailure = "PROVISION_FAILURE"

	// AutoScalingPolicyStateChangeReasonCodeCleanupFailure is a AutoScalingPolicyStateChangeReasonCode enum value
	AutoScalingPolicyStateChangeReasonCodeCleanupFailure = "CLEANUP_FAILURE"
)

// AutoScalingPolicyStateChangeReasonCode_Values returns all elements of the AutoScalingPolicyStateChangeReasonCode enum
func AutoScalingPolicyStateChangeReasonCode_Values() []string {
	return []string{
		AutoScalingPolicyStateChangeReasonCodeUserRequest,
		AutoScalingPolicyStateChangeReasonCodeProvisionFailure,
		AutoScalingPolicyStateChangeReasonCodeCleanupFailure,
	}
}

const (
	// CancelStepsRequestStatusSubmitted is a CancelStepsRequestStatus enum value
	CancelStepsRequestStatusSubmitted = "SUBMITTED"

	// CancelStepsRequestStatusFailed is a CancelStepsRequestStatus enum value
	CancelStepsRequestStatusFailed = "FAILED"
)

// CancelStepsRequestStatus_Values returns all elements of the CancelStepsRequestStatus enum
func CancelStepsRequestStatus_Values() []string {
	return []string{
		CancelStepsRequestStatusSubmitted,
		CancelStepsRequestStatusFailed,
	}
}

const (
	// ClusterStateStarting is a ClusterState enum value
	ClusterStateStarting = "STARTING"

	// ClusterStateBootstrapping is a ClusterState enum value
	ClusterStateBootstrapping = "BOOTSTRAPPING"

	// ClusterStateRunning is a ClusterState enum value
	ClusterStateRunning = "RUNNING"

	// ClusterStateWaiting is a ClusterState enum value
	ClusterStateWaiting = "WAITING"

	// ClusterStateTerminating is a ClusterState enum value
	ClusterStateTerminating = "TERMINATING"

	// ClusterStateTerminated is a ClusterState enum value
	ClusterStateTerminated = "TERMINATED"

	// ClusterStateTerminatedWithErrors is a ClusterState enum value
	ClusterStateTerminatedWithErrors = "TERMINATED_WITH_ERRORS"
)

// ClusterState_Values returns all elements of the ClusterState enum
func ClusterState_Values() []string {
	return []string{
		ClusterStateStarting,
		ClusterStateBootstrapping,
		ClusterStateRunning,
		ClusterStateWaiting,
		ClusterStateTerminating,
		ClusterStateTerminated,
		ClusterStateTerminatedWithErrors,
	}
}

const (
	// ClusterStateChangeReasonCodeInternalError is a ClusterStateChangeReasonCode enum value
	ClusterStateChangeReasonCodeInternalError = "INTERNAL_ERROR"

	// ClusterStateChangeReasonCodeValidationError is a ClusterStateChangeReasonCode enum value
	ClusterStateChangeReasonCodeValidationError = "VALIDATION_ERROR"

	// ClusterStateChangeReasonCodeInstanceFailure is a ClusterStateChangeReasonCode enum value
	ClusterStateChangeReasonCodeInstanceFailure = "INSTANCE_FAILURE"

	// ClusterStateChangeReasonCodeInstanceFleetTimeout is a ClusterStateChangeReasonCode enum value
	ClusterStateChangeReasonCodeInstanceFleetTimeout = "INSTANCE_FLEET_TIMEOUT"

	// ClusterStateChangeReasonCodeBootstrapFailure is a ClusterStateChangeReasonCode enum value
	ClusterStateChangeReasonCodeBootstrapFailure = "BOOTSTRAP_FAILURE"

	// ClusterStateChangeReasonCodeUserRequest is a ClusterStateChangeReasonCode enum value
	ClusterStateChangeReasonCodeUserRequest = "USER_REQUEST"

	// ClusterStateChangeReasonCodeStepFailure is a ClusterStateChangeReasonCode enum value
	ClusterStateChangeReasonCodeStepFailure = "STEP_FAILURE"

	// ClusterStateChangeReasonCodeAllStepsCompleted is a ClusterStateChangeReasonCode enum value
	ClusterStateChangeReasonCodeAllStepsCompleted = "ALL_STEPS_COMPLETED"
)

// ClusterStateChangeReasonCode_Values returns all elements of the ClusterStateChangeReasonCode enum
func ClusterStateChangeReasonCode_Values() []string {
	return []string{
		ClusterStateChangeReasonCodeInternalError,
		ClusterStateChangeReasonCodeValidationError,
		ClusterStateChangeReasonCodeInstanceFailure,
		ClusterStateChangeReasonCodeInstanceFleetTimeout,
		ClusterStateChangeReasonCodeBootstrapFailure,
		ClusterStateChangeReasonCodeUserRequest,
		ClusterStateChangeReasonCodeStepFailure,
		ClusterStateChangeReasonCodeAllStepsCompleted,
	}
}

const (
	// ComparisonOperatorGreaterThanOrEqual is a ComparisonOperator enum value
	ComparisonOperatorGreaterThanOrEqual = "GREATER_THAN_OR_EQUAL"

	// ComparisonOperatorGreaterThan is a ComparisonOperator enum value
	ComparisonOperatorGreaterThan = "GREATER_THAN"

	// ComparisonOperatorLessThan is a ComparisonOperator enum value
	ComparisonOperatorLessThan = "LESS_THAN"

	// ComparisonOperatorLessThanOrEqual is a ComparisonOperator enum value
	ComparisonOperatorLessThanOrEqual = "LESS_THAN_OR_EQUAL"
)

// ComparisonOperator_Values returns all elements of the ComparisonOperator enum
func ComparisonOperator_Values() []string {
	return []string{
		ComparisonOperatorGreaterThanOrEqual,
		ComparisonOperatorGreaterThan,
		ComparisonOperatorLessThan,
		ComparisonOperatorLessThanOrEqual,
	}
}

const (
	// ComputeLimitsUnitTypeInstanceFleetUnits is a ComputeLimitsUnitType enum value
	ComputeLimitsUnitTypeInstanceFleetUnits = "InstanceFleetUnits"

	// ComputeLimitsUnitTypeInstances is a ComputeLimitsUnitType enum value
	ComputeLimitsUnitTypeInstances = "Instances"

	// ComputeLimitsUnitTypeVcpu is a ComputeLimitsUnitType enum value
	ComputeLimitsUnitTypeVcpu = "VCPU"
)

// ComputeLimitsUnitType_Values returns all elements of the ComputeLimitsUnitType enum
func ComputeLimitsUnitType_Values() []string {
	return []string{
		ComputeLimitsUnitTypeInstanceFleetUnits,
		ComputeLimitsUnitTypeInstances,
		ComputeLimitsUnitTypeVcpu,
	}
}

const (
	// ExecutionEngineTypeEmr is a ExecutionEngineType enum value
	ExecutionEngineTypeEmr = "EMR"
)

// ExecutionEngineType_Values returns all elements of the ExecutionEngineType enum
func ExecutionEngineType_Values() []string {
	return []string{
		ExecutionEngineTypeEmr,
	}
}

const (
	// IdcUserAssignmentRequired is a IdcUserAssignment enum value
	IdcUserAssignmentRequired = "REQUIRED"

	// IdcUserAssignmentOptional is a IdcUserAssignment enum value
	IdcUserAssignmentOptional = "OPTIONAL"
)

// IdcUserAssignment_Values returns all elements of the IdcUserAssignment enum
func IdcUserAssignment_Values() []string {
	return []string{
		IdcUserAssignmentRequired,
		IdcUserAssignmentOptional,
	}
}

const (
	// IdentityTypeUser is a IdentityType enum value
	IdentityTypeUser = "USER"

	// IdentityTypeGroup is a IdentityType enum value
	IdentityTypeGroup = "GROUP"
)

// IdentityType_Values returns all elements of the IdentityType enum
func IdentityType_Values() []string {
	return []string{
		IdentityTypeUser,
		IdentityTypeGroup,
	}
}

const (
	// InstanceCollectionTypeInstanceFleet is a InstanceCollectionType enum value
	InstanceCollectionTypeInstanceFleet = "INSTANCE_FLEET"

	// InstanceCollectionTypeInstanceGroup is a InstanceCollectionType enum value
	InstanceCollectionTypeInstanceGroup = "INSTANCE_GROUP"
)

// InstanceCollectionType_Values returns all elements of the InstanceCollectionType enum
func InstanceCollectionType_Values() []string {
	return []string{
		InstanceCollectionTypeInstanceFleet,
		InstanceCollectionTypeInstanceGroup,
	}
}

const (
	// InstanceFleetStateProvisioning is a InstanceFleetState enum value
	InstanceFleetStateProvisioning = "PROVISIONING"

	// InstanceFleetStateBootstrapping is a InstanceFleetState enum value
	InstanceFleetStateBootstrapping = "BOOTSTRAPPING"

	// InstanceFleetStateRunning is a InstanceFleetState enum value
	InstanceFleetStateRunning = "RUNNING"

	// InstanceFleetStateResizing is a InstanceFleetState enum value
	InstanceFleetStateResizing = "RESIZING"

	// InstanceFleetStateSuspended is a InstanceFleetState enum value
	InstanceFleetStateSuspended = "SUSPENDED"

	// InstanceFleetStateTerminating is a InstanceFleetState enum value
	InstanceFleetStateTerminating = "TERMINATING"

	// InstanceFleetStateTerminated is a InstanceFleetState enum value
	InstanceFleetStateTerminated = "TERMINATED"
)

// InstanceFleetState_Values returns all elements of the InstanceFleetState enum
func InstanceFleetState_Values() []string {
	return []string{
		InstanceFleetStateProvisioning,
		InstanceFleetStateBootstrapping,
		InstanceFleetStateRunning,
		InstanceFleetStateResizing,
		InstanceFleetStateSuspended,
		InstanceFleetStateTerminating,
		InstanceFleetStateTerminated,
	}
}

const (
	// InstanceFleetStateChangeReasonCodeInternalError is a InstanceFleetStateChangeReasonCode enum value
	InstanceFleetStateChangeReasonCodeInternalError = "INTERNAL_ERROR"

	// InstanceFleetStateChangeReasonCodeValidationError is a InstanceFleetStateChangeReasonCode enum value
	InstanceFleetStateChangeReasonCodeValidationError = "VALIDATION_ERROR"

	// InstanceFleetStateChangeReasonCodeInstanceFailure is a InstanceFleetStateChangeReasonCode enum value
	InstanceFleetStateChangeReasonCodeInstanceFailure = "INSTANCE_FAILURE"

	// InstanceFleetStateChangeReasonCodeClusterTerminated is a InstanceFleetStateChangeReasonCode enum value
	InstanceFleetStateChangeReasonCodeClusterTerminated = "CLUSTER_TERMINATED"
)

// InstanceFleetStateChangeReasonCode_Values returns all elements of the InstanceFleetStateChangeReasonCode enum
func InstanceFleetStateChangeReasonCode_Values() []string {
	return []string{
		InstanceFleetStateChangeReasonCodeInternalError,
		InstanceFleetStateChangeReasonCodeValidationError,
		InstanceFleetStateChangeReasonCodeInstanceFailure,
		InstanceFleetStateChangeReasonCodeClusterTerminated,
	}
}

const (
	// InstanceFleetTypeMaster is a InstanceFleetType enum value
	InstanceFleetTypeMaster = "MASTER"

	// InstanceFleetTypeCore is a InstanceFleetType enum value
	InstanceFleetTypeCore = "CORE"

	// InstanceFleetTypeTask is a InstanceFleetType enum value
	InstanceFleetTypeTask = "TASK"
)

// InstanceFleetType_Values returns all elements of the InstanceFleetType enum
func InstanceFleetType_Values() []string {
	return []string{
		InstanceFleetTypeMaster,
		InstanceFleetTypeCore,
		InstanceFleetTypeTask,
	}
}

const (
	// InstanceGroupStateProvisioning is a InstanceGroupState enum value
	InstanceGroupStateProvisioning = "PROVISIONING"

	// InstanceGroupStateBootstrapping is a InstanceGroupState enum value
	InstanceGroupStateBootstrapping = "BOOTSTRAPPING"

	// InstanceGroupStateRunning is a InstanceGroupState enum value
	InstanceGroupStateRunning = "RUNNING"

	// InstanceGroupStateReconfiguring is a InstanceGroupState enum value
	InstanceGroupStateReconfiguring = "RECONFIGURING"

	// InstanceGroupStateResizing is a InstanceGroupState enum value
	InstanceGroupStateResizing = "RESIZING"

	// InstanceGroupStateSuspended is a InstanceGroupState enum value
	InstanceGroupStateSuspended = "SUSPENDED"

	// InstanceGroupStateTerminating is a InstanceGroupState enum value
	InstanceGroupStateTerminating = "TERMINATING"

	// InstanceGroupStateTerminated is a InstanceGroupState enum value
	InstanceGroupStateTerminated = "TERMINATED"

	// InstanceGroupStateArrested is a InstanceGroupState enum value
	InstanceGroupStateArrested = "ARRESTED"

	// InstanceGroupStateShuttingDown is a InstanceGroupState enum value
	InstanceGroupStateShuttingDown = "SHUTTING_DOWN"

	// InstanceGroupStateEnded is a InstanceGroupState enum value
	InstanceGroupStateEnded = "ENDED"
)

// InstanceGroupState_Values returns all elements of the InstanceGroupState enum
func InstanceGroupState_Values() []string {
	return []string{
		InstanceGroupStateProvisioning,
		InstanceGroupStateBootstrapping,
		InstanceGroupStateRunning,
		InstanceGroupStateReconfiguring,
		InstanceGroupStateResizing,
		InstanceGroupStateSuspended,
		InstanceGroupStateTerminating,
		InstanceGroupStateTerminated,
		InstanceGroupStateArrested,
		InstanceGroupStateShuttingDown,
		InstanceGroupStateEnded,
	}
}

const (
	// InstanceGroupStateChangeReasonCodeInternalError is a InstanceGroupStateChangeReasonCode enum value
	InstanceGroupStateChangeReasonCodeInternalError = "INTERNAL_ERROR"

	// InstanceGroupStateChangeReasonCodeValidationError is a InstanceGroupStateChangeReasonCode enum value
	InstanceGroupStateChangeReasonCodeValidationError = "VALIDATION_ERROR"

	// InstanceGroupStateChangeReasonCodeInstanceFailure is a InstanceGroupStateChangeReasonCode enum value
	InstanceGroupStateChangeReasonCodeInstanceFailure = "INSTANCE_FAILURE"

	// InstanceGroupStateChangeReasonCodeClusterTerminated is a InstanceGroupStateChangeReasonCode enum value
	InstanceGroupStateChangeReasonCodeClusterTerminated = "CLUSTER_TERMINATED"
)

// InstanceGroupStateChangeReasonCode_Values returns all elements of the InstanceGroupStateChangeReasonCode enum
func InstanceGroupStateChangeReasonCode_Values() []string {
	return []string{
		InstanceGroupStateChangeReasonCodeInternalError,
		InstanceGroupStateChangeReasonCodeValidationError,
		InstanceGroupStateChangeReasonCodeInstanceFailure,
		InstanceGroupStateChangeReasonCodeClusterTerminated,
	}
}

const (
	// InstanceGroupTypeMaster is a InstanceGroupType enum value
	InstanceGroupTypeMaster = "MASTER"

	// InstanceGroupTypeCore is a InstanceGroupType enum value
	InstanceGroupTypeCore = "CORE"

	// InstanceGroupTypeTask is a InstanceGroupType enum value
	InstanceGroupTypeTask = "TASK"
)

// InstanceGroupType_Values returns all elements of the InstanceGroupType enum
func InstanceGroupType_Values() []string {
	return []string{
		InstanceGroupTypeMaster,
		InstanceGroupTypeCore,
		InstanceGroupTypeTask,
	}
}

const (
	// InstanceRoleTypeMaster is a InstanceRoleType enum value
	InstanceRoleTypeMaster = "MASTER"

	// InstanceRoleTypeCore is a InstanceRoleType enum value
	InstanceRoleTypeCore = "CORE"

	// InstanceRoleTypeTask is a InstanceRoleType enum value
	InstanceRoleTypeTask = "TASK"
)

// InstanceRoleType_Values returns all elements of the InstanceRoleType enum
func InstanceRoleType_Values() []string {
	return []string{
		InstanceRoleTypeMaster,
		InstanceRoleTypeCore,
		InstanceRoleTypeTask,
	}
}

const (
	// InstanceStateAwaitingFulfillment is a InstanceState enum value
	InstanceStateAwaitingFulfillment = "AWAITING_FULFILLMENT"

	// InstanceStateProvisioning is a InstanceState enum value
	InstanceStateProvisioning = "PROVISIONING"

	// InstanceStateBootstrapping is a InstanceState enum value
	InstanceStateBootstrapping = "BOOTSTRAPPING"

	// InstanceStateRunning is a InstanceState enum value
	InstanceStateRunning = "RUNNING"

	// InstanceStateTerminated is a InstanceState enum value
	InstanceStateTerminated = "TERMINATED"
)

// InstanceState_Values returns all elements of the InstanceState enum
func InstanceState_Values() []string {
	return []string{
		InstanceStateAwaitingFulfillment,
		InstanceStateProvisioning,
		InstanceStateBootstrapping,
		InstanceStateRunning,
		InstanceStateTerminated,
	}
}

const (
	// InstanceStateChangeReasonCodeInternalError is a InstanceStateChangeReasonCode enum value
	InstanceStateChangeReasonCodeInternalError = "INTERNAL_ERROR"

	// InstanceStateChangeReasonCodeValidationError is a InstanceStateChangeReasonCode enum value
	InstanceStateChangeReasonCodeValidationError = "VALIDATION_ERROR"

	// InstanceStateChangeReasonCodeInstanceFailure is a InstanceStateChangeReasonCode enum value
	InstanceStateChangeReasonCodeInstanceFailure = "INSTANCE_FAILURE"

	// InstanceStateChangeReasonCodeBootstrapFailure is a InstanceStateChangeReasonCode enum value
	InstanceStateChangeReasonCodeBootstrapFailure = "BOOTSTRAP_FAILURE"

	// InstanceStateChangeReasonCodeClusterTerminated is a InstanceStateChangeReasonCode enum value
	InstanceStateChangeReasonCodeClusterTerminated = "CLUSTER_TERMINATED"
)

// InstanceStateChangeReasonCode_Values returns all elements of the InstanceStateChangeReasonCode enum
func InstanceStateChangeReasonCode_Values() []string {
	return []string{
		InstanceStateChangeReasonCodeInternalError,
		InstanceStateChangeReasonCodeValidationError,
		InstanceStateChangeReasonCodeInstanceFailure,
		InstanceStateChangeReasonCodeBootstrapFailure,
		InstanceStateChangeReasonCodeClusterTerminated,
	}
}

// The type of instance.
const (
	// JobFlowExecutionStateStarting is a JobFlowExecutionState enum value
	JobFlowExecutionStateStarting = "STARTING"

	// JobFlowExecutionStateBootstrapping is a JobFlowExecutionState enum value
	JobFlowExecutionStateBootstrapping = "BOOTSTRAPPING"

	// JobFlowExecutionStateRunning is a JobFlowExecutionState enum value
	JobFlowExecutionStateRunning = "RUNNING"

	// JobFlowExecutionStateWaiting is a JobFlowExecutionState enum value
	JobFlowExecutionStateWaiting = "WAITING"

	// JobFlowExecutionStateShuttingDown is a JobFlowExecutionState enum value
	JobFlowExecutionStateShuttingDown = "SHUTTING_DOWN"

	// JobFlowExecutionStateTerminated is a JobFlowExecutionState enum value
	JobFlowExecutionStateTerminated = "TERMINATED"

	// JobFlowExecutionStateCompleted is a JobFlowExecutionState enum value
	JobFlowExecutionStateCompleted = "COMPLETED"

	// JobFlowExecutionStateFailed is a JobFlowExecutionState enum value
	JobFlowExecutionStateFailed = "FAILED"
)

// JobFlowExecutionState_Values returns all elements of the JobFlowExecutionState enum
func JobFlowExecutionState_Values() []string {
	return []string{
		JobFlowExecutionStateStarting,
		JobFlowExecutionStateBootstrapping,
		JobFlowExecutionStateRunning,
		JobFlowExecutionStateWaiting,
		JobFlowExecutionStateShuttingDown,
		JobFlowExecutionStateTerminated,
		JobFlowExecutionStateCompleted,
		JobFlowExecutionStateFailed,
	}
}

const (
	// MarketTypeOnDemand is a MarketType enum value
	MarketTypeOnDemand = "ON_DEMAND"

	// MarketTypeSpot is a MarketType enum value
	MarketTypeSpot = "SPOT"
)

// MarketType_Values returns all elements of the MarketType enum
func MarketType_Values() []string {
	return []string{
		MarketTypeOnDemand,
		MarketTypeSpot,
	}
}

const (
	// NotebookExecutionStatusStartPending is a NotebookExecutionStatus enum value
	NotebookExecutionStatusStartPending = "START_PENDING"

	// NotebookExecutionStatusStarting is a NotebookExecutionStatus enum value
	NotebookExecutionStatusStarting = "STARTING"

	// NotebookExecutionStatusRunning is a NotebookExecutionStatus enum value
	NotebookExecutionStatusRunning = "RUNNING"

	// NotebookExecutionStatusFinishing is a NotebookExecutionStatus enum value
	NotebookExecutionStatusFinishing = "FINISHING"

	// NotebookExecutionStatusFinished is a NotebookExecutionStatus enum value
	NotebookExecutionStatusFinished = "FINISHED"

	// NotebookExecutionStatusFailing is a NotebookExecutionStatus enum value
	NotebookExecutionStatusFailing = "FAILING"

	// NotebookExecutionStatusFailed is a NotebookExecutionStatus enum value
	NotebookExecutionStatusFailed = "FAILED"

	// NotebookExecutionStatusStopPending is a NotebookExecutionStatus enum value
	NotebookExecutionStatusStopPending = "STOP_PENDING"

	// NotebookExecutionStatusStopping is a NotebookExecutionStatus enum value
	NotebookExecutionStatusStopping = "STOPPING"

	// NotebookExecutionStatusStopped is a NotebookExecutionStatus enum value
	NotebookExecutionStatusStopped = "STOPPED"
)

// NotebookExecutionStatus_Values returns all elements of the NotebookExecutionStatus enum
func NotebookExecutionStatus_Values() []string {
	return []string{
		NotebookExecutionStatusStartPending,
		NotebookExecutionStatusStarting,
		NotebookExecutionStatusRunning,
		NotebookExecutionStatusFinishing,
		NotebookExecutionStatusFinished,
		NotebookExecutionStatusFailing,
		NotebookExecutionStatusFailed,
		NotebookExecutionStatusStopPending,
		NotebookExecutionStatusStopping,
		NotebookExecutionStatusStopped,
	}
}

const (
	// OnDemandCapacityReservationPreferenceOpen is a OnDemandCapacityReservationPreference enum value
	OnDemandCapacityReservationPreferenceOpen = "open"

	// OnDemandCapacityReservationPreferenceNone is a OnDemandCapacityReservationPreference enum value
	OnDemandCapacityReservationPreferenceNone = "none"
)

// OnDemandCapacityReservationPreference_Values returns all elements of the OnDemandCapacityReservationPreference enum
func OnDemandCapacityReservationPreference_Values() []string {
	return []string{
		OnDemandCapacityReservationPreferenceOpen,
		OnDemandCapacityReservationPreferenceNone,
	}
}

const (
	// OnDemandCapacityReservationUsageStrategyUseCapacityReservationsFirst is a OnDemandCapacityReservationUsageStrategy enum value
	OnDemandCapacityReservationUsageStrategyUseCapacityReservationsFirst = "use-capacity-reservations-first"
)

// OnDemandCapacityReservationUsageStrategy_Values returns all elements of the OnDemandCapacityReservationUsageStrategy enum
func OnDemandCapacityReservationUsageStrategy_Values() []string {
	return []string{
		OnDemandCapacityReservationUsageStrategyUseCapacityReservationsFirst,
	}
}

const (
	// OnDemandProvisioningAllocationStrategyLowestPrice is a OnDemandProvisioningAllocationStrategy enum value
	OnDemandProvisioningAllocationStrategyLowestPrice = "lowest-price"
)

// OnDemandProvisioningAllocationStrategy_Values returns all elements of the OnDemandProvisioningAllocationStrategy enum
func OnDemandProvisioningAllocationStrategy_Values() []string {
	return []string{
		OnDemandProvisioningAllocationStrategyLowestPrice,
	}
}

const (
	// OutputNotebookFormatHtml is a OutputNotebookFormat enum value
	OutputNotebookFormatHtml = "HTML"
)

// OutputNotebookFormat_Values returns all elements of the OutputNotebookFormat enum
func OutputNotebookFormat_Values() []string {
	return []string{
		OutputNotebookFormatHtml,
	}
}

const (
	// PlacementGroupStrategySpread is a PlacementGroupStrategy enum value
	PlacementGroupStrategySpread = "SPREAD"

	// PlacementGroupStrategyPartition is a PlacementGroupStrategy enum value
	PlacementGroupStrategyPartition = "PARTITION"

	// PlacementGroupStrategyCluster is a PlacementGroupStrategy enum value
	PlacementGroupStrategyCluster = "CLUSTER"

	// PlacementGroupStrategyNone is a PlacementGroupStrategy enum value
	PlacementGroupStrategyNone = "NONE"
)

// PlacementGroupStrategy_Values returns all elements of the PlacementGroupStrategy enum
func PlacementGroupStrategy_Values() []string {
	return []string{
		PlacementGroupStrategySpread,
		PlacementGroupStrategyPartition,
		PlacementGroupStrategyCluster,
		PlacementGroupStrategyNone,
	}
}

const (
	// ReconfigurationTypeOverwrite is a ReconfigurationType enum value
	ReconfigurationTypeOverwrite = "OVERWRITE"

	// ReconfigurationTypeMerge is a ReconfigurationType enum value
	ReconfigurationTypeMerge = "MERGE"
)

// ReconfigurationType_Values returns all elements of the ReconfigurationType enum
func ReconfigurationType_Values() []string {
	return []string{
		ReconfigurationTypeOverwrite,
		ReconfigurationTypeMerge,
	}
}

const (
	// RepoUpgradeOnBootSecurity is a RepoUpgradeOnBoot enum value
	RepoUpgradeOnBootSecurity = "SECURITY"

	// RepoUpgradeOnBootNone is a RepoUpgradeOnBoot enum value
	RepoUpgradeOnBootNone = "NONE"
)

// RepoUpgradeOnBoot_Values returns all elements of the RepoUpgradeOnBoot enum
func RepoUpgradeOnBoot_Values() []string {
	return []string{
		RepoUpgradeOnBootSecurity,
		RepoUpgradeOnBootNone,
	}
}

const (
	// ScaleDownBehaviorTerminateAtInstanceHour is a ScaleDownBehavior enum value
	ScaleDownBehaviorTerminateAtInstanceHour = "TERMINATE_AT_INSTANCE_HOUR"

	// ScaleDownBehaviorTerminateAtTaskCompletion is a ScaleDownBehavior enum value
	ScaleDownBehaviorTerminateAtTaskCompletion = "TERMINATE_AT_TASK_COMPLETION"
)

// ScaleDownBehavior_Values returns all elements of the ScaleDownBehavior enum
func ScaleDownBehavior_Values() []string {
	return []string{
		ScaleDownBehaviorTerminateAtInstanceHour,
		ScaleDownBehaviorTerminateAtTaskCompletion,
	}
}

const (
	// SpotProvisioningAllocationStrategyCapacityOptimized is a SpotProvisioningAllocationStrategy enum value
	SpotProvisioningAllocationStrategyCapacityOptimized = "capacity-optimized"

	// SpotProvisioningAllocationStrategyPriceCapacityOptimized is a SpotProvisioningAllocationStrategy enum value
	SpotProvisioningAllocationStrategyPriceCapacityOptimized = "price-capacity-optimized"

	// SpotProvisioningAllocationStrategyLowestPrice is a SpotProvisioningAllocationStrategy enum value
	SpotProvisioningAllocationStrategyLowestPrice = "lowest-price"

	// SpotProvisioningAllocationStrategyDiversified is a SpotProvisioningAllocationStrategy enum value
	SpotProvisioningAllocationStrategyDiversified = "diversified"
)

// SpotProvisioningAllocationStrategy_Values returns all elements of the SpotProvisioningAllocationStrategy enum
func SpotProvisioningAllocationStrategy_Values() []string {
	return []string{
		SpotProvisioningAllocationStrategyCapacityOptimized,
		SpotProvisioningAllocationStrategyPriceCapacityOptimized,
		SpotProvisioningAllocationStrategyLowestPrice,
		SpotProvisioningAllocationStrategyDiversified,
	}
}

const (
	// SpotProvisioningTimeoutActionSwitchToOnDemand is a SpotProvisioningTimeoutAction enum value
	SpotProvisioningTimeoutActionSwitchToOnDemand = "SWITCH_TO_ON_DEMAND"

	// SpotProvisioningTimeoutActionTerminateCluster is a SpotProvisioningTimeoutAction enum value
	SpotProvisioningTimeoutActionTerminateCluster = "TERMINATE_CLUSTER"
)

// SpotProvisioningTimeoutAction_Values returns all elements of the SpotProvisioningTimeoutAction enum
func SpotProvisioningTimeoutAction_Values() []string {
	return []string{
		SpotProvisioningTimeoutActionSwitchToOnDemand,
		SpotProvisioningTimeoutActionTerminateCluster,
	}
}

const (
	// StatisticSampleCount is a Statistic enum value
	StatisticSampleCount = "SAMPLE_COUNT"

	// StatisticAverage is a Statistic enum value
	StatisticAverage = "AVERAGE"

	// StatisticSum is a Statistic enum value
	StatisticSum = "SUM"

	// StatisticMinimum is a Statistic enum value
	StatisticMinimum = "MINIMUM"

	// StatisticMaximum is a Statistic enum value
	StatisticMaximum = "MAXIMUM"
)

// Statistic_Values returns all elements of the Statistic enum
func Statistic_Values() []string {
	return []string{
		StatisticSampleCount,
		StatisticAverage,
		StatisticSum,
		StatisticMinimum,
		StatisticMaximum,
	}
}

const (
	// StepCancellationOptionSendInterrupt is a StepCancellationOption enum value
	StepCancellationOptionSendInterrupt = "SEND_INTERRUPT"

	// StepCancellationOptionTerminateProcess is a StepCancellationOption enum value
	StepCancellationOptionTerminateProcess = "TERMINATE_PROCESS"
)

// StepCancellationOption_Values returns all elements of the StepCancellationOption enum
func StepCancellationOption_Values() []string {
	return []string{
		StepCancellationOptionSendInterrupt,
		StepCancellationOptionTerminateProcess,
	}
}

const (
	// StepExecutionStatePending is a StepExecutionState enum value
	StepExecutionStatePending = "PENDING"

	// StepExecutionStateRunning is a StepExecutionState enum value
	StepExecutionStateRunning = "RUNNING"

	// StepExecutionStateContinue is a StepExecutionState enum value
	StepExecutionStateContinue = "CONTINUE"

	// StepExecutionStateCompleted is a StepExecutionState enum value
	StepExecutionStateCompleted = "COMPLETED"

	// StepExecutionStateCancelled is a StepExecutionState enum value
	StepExecutionStateCancelled = "CANCELLED"

	// StepExecutionStateFailed is a StepExecutionState enum value
	StepExecutionStateFailed = "FAILED"

	// StepExecutionStateInterrupted is a StepExecutionState enum value
	StepExecutionStateInterrupted = "INTERRUPTED"
)

// StepExecutionState_Values returns all elements of the StepExecutionState enum
func StepExecutionState_Values() []string {
	return []string{
		StepExecutionStatePending,
		StepExecutionStateRunning,
		StepExecutionStateContinue,
		StepExecutionStateCompleted,
		StepExecutionStateCancelled,
		StepExecutionStateFailed,
		StepExecutionStateInterrupted,
	}
}

const (
	// StepStatePending is a StepState enum value
	StepStatePending = "PENDING"

	// StepStateCancelPending is a StepState enum value
	StepStateCancelPending = "CANCEL_PENDING"

	// StepStateRunning is a StepState enum value
	StepStateRunning = "RUNNING"

	// StepStateCompleted is a StepState enum value
	StepStateCompleted = "COMPLETED"

	// StepStateCancelled is a StepState enum value
	StepStateCancelled = "CANCELLED"

	// StepStateFailed is a StepState enum value
	StepStateFailed = "FAILED"

	// StepStateInterrupted is a StepState enum value
	StepStateInterrupted = "INTERRUPTED"
)

// StepState_Values returns all elements of the StepState enum
func StepState_Values() []string {
	return []string{
		StepStatePending,
		StepStateCancelPending,
		StepStateRunning,
		StepStateCompleted,
		StepStateCancelled,
		StepStateFailed,
		StepStateInterrupted,
	}
}

const (
	// StepStateChangeReasonCodeNone is a StepStateChangeReasonCode enum value
	StepStateChangeReasonCodeNone = "NONE"
)

// StepStateChangeReasonCode_Values returns all elements of the StepStateChangeReasonCode enum
func StepStateChangeReasonCode_Values() []string {
	return []string{
		StepStateChangeReasonCodeNone,
	}
}

const (
	// UnitNone is a Unit enum value
	UnitNone = "NONE"

	// UnitSeconds is a Unit enum value
	UnitSeconds = "SECONDS"

	// UnitMicroSeconds is a Unit enum value
	UnitMicroSeconds = "MICRO_SECONDS"

	// UnitMilliSeconds is a Unit enum value
	UnitMilliSeconds = "MILLI_SECONDS"

	// UnitBytes is a Unit enum value
	UnitBytes = "BYTES"

	// UnitKiloBytes is a Unit enum value
	UnitKiloBytes = "KILO_BYTES"

	// UnitMegaBytes is a Unit enum value
	UnitMegaBytes = "MEGA_BYTES"

	// UnitGigaBytes is a Unit enum value
	UnitGigaBytes = "GIGA_BYTES"

	// UnitTeraBytes is a Unit enum value
	UnitTeraBytes = "TERA_BYTES"

	// UnitBits is a Unit enum value
	UnitBits = "BITS"

	// UnitKiloBits is a Unit enum value
	UnitKiloBits = "KILO_BITS"

	// UnitMegaBits is a Unit enum value
	UnitMegaBits = "MEGA_BITS"

	// UnitGigaBits is a Unit enum value
	UnitGigaBits = "GIGA_BITS"

	// UnitTeraBits is a Unit enum value
	UnitTeraBits = "TERA_BITS"

	// UnitPercent is a Unit enum value
	UnitPercent = "PERCENT"

	// UnitCount is a Unit enum value
	UnitCount = "COUNT"

	// UnitBytesPerSecond is a Unit enum value
	UnitBytesPerSecond = "BYTES_PER_SECOND"

	// UnitKiloBytesPerSecond is a Unit enum value
	UnitKiloBytesPerSecond = "KILO_BYTES_PER_SECOND"

	// UnitMegaBytesPerSecond is a Unit enum value
	UnitMegaBytesPerSecond = "MEGA_BYTES_PER_SECOND"

	// UnitGigaBytesPerSecond is a Unit enum value
	UnitGigaBytesPerSecond = "GIGA_BYTES_PER_SECOND"

	// UnitTeraBytesPerSecond is a Unit enum value
	UnitTeraBytesPerSecond = "TERA_BYTES_PER_SECOND"

	// UnitBitsPerSecond is a Unit enum value
	UnitBitsPerSecond = "BITS_PER_SECOND"

	// UnitKiloBitsPerSecond is a Unit enum value
	UnitKiloBitsPerSecond = "KILO_BITS_PER_SECOND"

	// UnitMegaBitsPerSecond is a Unit enum value
	UnitMegaBitsPerSecond = "MEGA_BITS_PER_SECOND"

	// UnitGigaBitsPerSecond is a Unit enum value
	UnitGigaBitsPerSecond = "GIGA_BITS_PER_SECOND"

	// UnitTeraBitsPerSecond is a Unit enum value
	UnitTeraBitsPerSecond = "TERA_BITS_PER_SECOND"

	// UnitCountPerSecond is a Unit enum value
	UnitCountPerSecond = "COUNT_PER_SECOND"
)

// Unit_Values returns all elements of the Unit enum
func Unit_Values() []string {
	return []string{
		UnitNone,
		UnitSeconds,
		UnitMicroSeconds,
		UnitMilliSeconds,
		UnitBytes,
		UnitKiloBytes,
		UnitMegaBytes,
		UnitGigaBytes,
		UnitTeraBytes,
		UnitBits,
		UnitKiloBits,
		UnitMegaBits,
		UnitGigaBits,
		UnitTeraBits,
		UnitPercent,
		UnitCount,
		UnitBytesPerSecond,
		UnitKiloBytesPerSecond,
		UnitMegaBytesPerSecond,
		UnitGigaBytesPerSecond,
		UnitTeraBytesPerSecond,
		UnitBitsPerSecond,
		UnitKiloBitsPerSecond,
		UnitMegaBitsPerSecond,
		UnitGigaBitsPerSecond,
		UnitTeraBitsPerSecond,
		UnitCountPerSecond,
	}
}
© 2026 GrazzMean
Beegazpacho


Let’s  Start  Your  Online  Journey  with  Beegazpacho 

Welcome to Beegazpacho,
where creativity meets strategy,
and innovation drives success.


Contact
Now


OUR CLIENTS

WhatsApp-Image-2021-12-06.png
Untitled-design-11.png
niaf-logo.png
20220406-163308-scaled.jpg
karchi-logo.png
20220405-171252.png
20220405-171309.png
20220321-161603.png
20220321-161611.png
20220321-161628.png
20220321-161244.png
20220321-161256.png
20220321-161450.png
20220321-161205.png
20220226-170222.png
20220321-161051.png
20211202-170852.png
Untitled-design-9
pidilite-png-logo-colour
logo-black-e1706125740216-qisosldqhzgcaerhdt6n4t3m4s50jr0iik48z0h5vk
Fraikin-Dayim-logo-1
hpcl-logo-2-1
services

Transforming Ideas into
Success

.01
Digital Marketing

We drive growth through data-driven strategies and cutting-edge techniques.

Learn More

.02
SEO

Improve your online visibility and rank higher on search engines with our expert SEO services.

Learn More

.03
Website Designing

We design websites that are not only visually stunning but also user-centric, ensuring seamless navigation and enhanced user experience.

Learn More

.04
App Development

Our apps are crafted to be intuitive, engaging, and functional, providing your users with an exceptional mobile experience.

Learn More

.05
Social Media Ads

Target the right audience with precision and creativity to maximize engagement and conversions.

Learn More

.06
Google Ads

Maximize ROI with precision-targeted campaigns on Google’s powerful ad platform.

Learn More

.07
Google My Business

Optimize your local presence with strategies that put your business on the map and attract more customers.

Learn More

.08
Graphic Designing

Our designs tell your brand’s story in a visually compelling way.

Learn More

.09
3D Videos

Bring your product to life with immersive and dynamic 3D explainer videos.

Learn More

about BEEGAZPACHO

creating special Things
For special brands

Join the ranks of successful brands by partnering with Beegazpacho

00+

Happy Customer

00+

Continents

Our vision is not just to be a service provider but to be your partner in growth. We see ourselves as an extension of your team, working tirelessly to ensure that your brand not only meets its goals but surpasses them.

Explore
more

Our Recent Work

Crafted with Passion and Precision

Connect now


Web Design
Design, Development & Identity

Logo Design
Design, Development & Identity

Creative Brand design
Design, Development & Identity

Product Design Marketing
Design, Development & Identity

DIGITAL MARKETING
SEO
WEBSITE DESIGNING
APP DEVELOPMENT
SOCIAL MEDIA ADS
GOOGLE ADS
GOOGLE MY BUSINESS
GRAPHIC DESINING
3D VIDEOS
Client Stories

Hear It from Those Who Know Us Best

Our clients’ success stories speak volumes about our commitment to excellence. Don’t just take our word for it—hear directly from the brands we’ve partnered with. Their testimonials highlight our ability to bring visions to life and create a lasting impact on their businesses.

“Beegazpacho feels like an extension of our team. Their content marketing and social media expertise have elevated our brand. They listen, adapt, and always deliver on time. We look forward to continuing this partnership.”

— Sarah Williams

Head of Marketing, GreenPlanet Apparel

“Beegazpacho’s data-driven strategies helped us improve our online ads, optimize our website, and enhance branding. We’ve seen great ROI and increased visibility. Their professionalism is unmatched.”

— Arvind Shah

CEO, InnovateTech Solutions

“Partnering with Beegazpacho has been a game-changer for our brand. Their creative ad campaigns and SEO services have boosted our online presence and significantly increased leads and sales. We couldn’t ask for a better partner!”

— Rina Kapoor

Marketing Director, Luxury Home Interiors

“Beegazpacho feels like an extension of our team. Their content marketing and social media expertise have elevated our brand. They listen, adapt, and always deliver on time. We look forward to continuing this partnership.”

— Sarah Williams

Head of Marketing, GreenPlanet Apparel

“Beegazpacho’s data-driven strategies helped us improve our online ads, optimize our website, and enhance branding. We’ve seen great ROI and increased visibility. Their professionalism is unmatched.”

— Arvind Shah

CEO, InnovateTech Solutions

“Partnering with Beegazpacho has been a game-changer for our brand. Their creative ad campaigns and SEO services have boosted our online presence and significantly increased leads and sales. We couldn’t ask for a better partner!”

— Rina Kapoor

Marketing Director, Luxury Home Interiors