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

package cloudwatchevidently

import (
	"fmt"
	"time"

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

const opBatchEvaluateFeature = "BatchEvaluateFeature"

// BatchEvaluateFeatureRequest generates a "aws/request.Request" representing the
// client's request for the BatchEvaluateFeature 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 BatchEvaluateFeature for more information on using the BatchEvaluateFeature
// 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 BatchEvaluateFeatureRequest method.
//	req, resp := client.BatchEvaluateFeatureRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/BatchEvaluateFeature
func (c *CloudWatchEvidently) BatchEvaluateFeatureRequest(input *BatchEvaluateFeatureInput) (req *request.Request, output *BatchEvaluateFeatureOutput) {
	op := &request.Operation{
		Name:       opBatchEvaluateFeature,
		HTTPMethod: "POST",
		HTTPPath:   "/projects/{project}/evaluations",
	}

	if input == nil {
		input = &BatchEvaluateFeatureInput{}
	}

	output = &BatchEvaluateFeatureOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Build.PushBackNamed(protocol.NewHostPrefixHandler("dataplane.", nil))
	req.Handlers.Build.PushBackNamed(protocol.ValidateEndpointHostHandler)
	return
}

// BatchEvaluateFeature API operation for Amazon CloudWatch Evidently.
//
// This operation assigns feature variation to user sessions. For each user
// session, you pass in an entityID that represents the user. Evidently then
// checks the evaluation rules and assigns the variation.
//
// The first rules that are evaluated are the override rules. If the user's
// entityID matches an override rule, the user is served the variation specified
// by that rule.
//
// Next, if there is a launch of the feature, the user might be assigned to
// a variation in the launch. The chance of this depends on the percentage of
// users that are allocated to that launch. If the user is enrolled in the launch,
// the variation they are served depends on the allocation of the various feature
// variations used for the launch.
//
// If the user is not assigned to a launch, and there is an ongoing experiment
// for this feature, the user might be assigned to a variation in the experiment.
// The chance of this depends on the percentage of users that are allocated
// to that experiment. If the user is enrolled in the experiment, the variation
// they are served depends on the allocation of the various feature variations
// used for the experiment.
//
// If the user is not assigned to a launch or experiment, they are served the
// default variation.
//
// 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 CloudWatch Evidently's
// API operation BatchEvaluateFeature for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/BatchEvaluateFeature
func (c *CloudWatchEvidently) BatchEvaluateFeature(input *BatchEvaluateFeatureInput) (*BatchEvaluateFeatureOutput, error) {
	req, out := c.BatchEvaluateFeatureRequest(input)
	return out, req.Send()
}

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

const opCreateExperiment = "CreateExperiment"

// CreateExperimentRequest generates a "aws/request.Request" representing the
// client's request for the CreateExperiment 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 CreateExperiment for more information on using the CreateExperiment
// 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 CreateExperimentRequest method.
//	req, resp := client.CreateExperimentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/CreateExperiment
func (c *CloudWatchEvidently) CreateExperimentRequest(input *CreateExperimentInput) (req *request.Request, output *CreateExperimentOutput) {
	op := &request.Operation{
		Name:       opCreateExperiment,
		HTTPMethod: "POST",
		HTTPPath:   "/projects/{project}/experiments",
	}

	if input == nil {
		input = &CreateExperimentInput{}
	}

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

// CreateExperiment API operation for Amazon CloudWatch Evidently.
//
// Creates an Evidently experiment. Before you create an experiment, you must
// create the feature to use for the experiment.
//
// An experiment helps you make feature design decisions based on evidence and
// data. An experiment can test as many as five variations at once. Evidently
// collects experiment data and analyzes it by statistical methods, and provides
// clear recommendations about which variations perform better.
//
// You can optionally specify a segment to have the experiment consider only
// certain audience types in the experiment, such as using only user sessions
// from a certain location or who use a certain internet browser.
//
// Don't use this operation to update an existing experiment. Instead, use UpdateExperiment
// (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_UpdateExperiment.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 CloudWatch Evidently's
// API operation CreateExperiment for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ServiceQuotaExceededException
//     The request would cause a service quota to be exceeded.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/CreateExperiment
func (c *CloudWatchEvidently) CreateExperiment(input *CreateExperimentInput) (*CreateExperimentOutput, error) {
	req, out := c.CreateExperimentRequest(input)
	return out, req.Send()
}

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

const opCreateFeature = "CreateFeature"

// CreateFeatureRequest generates a "aws/request.Request" representing the
// client's request for the CreateFeature 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 CreateFeature for more information on using the CreateFeature
// 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 CreateFeatureRequest method.
//	req, resp := client.CreateFeatureRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/CreateFeature
func (c *CloudWatchEvidently) CreateFeatureRequest(input *CreateFeatureInput) (req *request.Request, output *CreateFeatureOutput) {
	op := &request.Operation{
		Name:       opCreateFeature,
		HTTPMethod: "POST",
		HTTPPath:   "/projects/{project}/features",
	}

	if input == nil {
		input = &CreateFeatureInput{}
	}

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

// CreateFeature API operation for Amazon CloudWatch Evidently.
//
// Creates an Evidently feature that you want to launch or test. You can define
// up to five variations of a feature, and use these variations in your launches
// and experiments. A feature must be created in a project. For information
// about creating a project, see CreateProject (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_CreateProject.html).
//
// Don't use this operation to update an existing feature. Instead, use UpdateFeature
// (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_UpdateFeature.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 CloudWatch Evidently's
// API operation CreateFeature for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ServiceQuotaExceededException
//     The request would cause a service quota to be exceeded.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/CreateFeature
func (c *CloudWatchEvidently) CreateFeature(input *CreateFeatureInput) (*CreateFeatureOutput, error) {
	req, out := c.CreateFeatureRequest(input)
	return out, req.Send()
}

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

const opCreateLaunch = "CreateLaunch"

// CreateLaunchRequest generates a "aws/request.Request" representing the
// client's request for the CreateLaunch 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 CreateLaunch for more information on using the CreateLaunch
// 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 CreateLaunchRequest method.
//	req, resp := client.CreateLaunchRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/CreateLaunch
func (c *CloudWatchEvidently) CreateLaunchRequest(input *CreateLaunchInput) (req *request.Request, output *CreateLaunchOutput) {
	op := &request.Operation{
		Name:       opCreateLaunch,
		HTTPMethod: "POST",
		HTTPPath:   "/projects/{project}/launches",
	}

	if input == nil {
		input = &CreateLaunchInput{}
	}

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

// CreateLaunch API operation for Amazon CloudWatch Evidently.
//
// Creates a launch of a given feature. Before you create a launch, you must
// create the feature to use for the launch.
//
// You can use a launch to safely validate new features by serving them to a
// specified percentage of your users while you roll out the feature. You can
// monitor the performance of the new feature to help you decide when to ramp
// up traffic to more users. This helps you reduce risk and identify unintended
// consequences before you fully launch the feature.
//
// Don't use this operation to update an existing launch. Instead, use UpdateLaunch
// (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_UpdateLaunch.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 CloudWatch Evidently's
// API operation CreateLaunch for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ServiceQuotaExceededException
//     The request would cause a service quota to be exceeded.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/CreateLaunch
func (c *CloudWatchEvidently) CreateLaunch(input *CreateLaunchInput) (*CreateLaunchOutput, error) {
	req, out := c.CreateLaunchRequest(input)
	return out, req.Send()
}

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

const opCreateProject = "CreateProject"

// CreateProjectRequest generates a "aws/request.Request" representing the
// client's request for the CreateProject 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 CreateProject for more information on using the CreateProject
// 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 CreateProjectRequest method.
//	req, resp := client.CreateProjectRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/CreateProject
func (c *CloudWatchEvidently) CreateProjectRequest(input *CreateProjectInput) (req *request.Request, output *CreateProjectOutput) {
	op := &request.Operation{
		Name:       opCreateProject,
		HTTPMethod: "POST",
		HTTPPath:   "/projects",
	}

	if input == nil {
		input = &CreateProjectInput{}
	}

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

// CreateProject API operation for Amazon CloudWatch Evidently.
//
// Creates a project, which is the logical object in Evidently that can contain
// features, launches, and experiments. Use projects to group similar features
// together.
//
// To update an existing project, use UpdateProject (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_UpdateProject.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 CloudWatch Evidently's
// API operation CreateProject for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ServiceQuotaExceededException
//     The request would cause a service quota to be exceeded.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/CreateProject
func (c *CloudWatchEvidently) CreateProject(input *CreateProjectInput) (*CreateProjectOutput, error) {
	req, out := c.CreateProjectRequest(input)
	return out, req.Send()
}

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

const opCreateSegment = "CreateSegment"

// CreateSegmentRequest generates a "aws/request.Request" representing the
// client's request for the CreateSegment 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 CreateSegment for more information on using the CreateSegment
// 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 CreateSegmentRequest method.
//	req, resp := client.CreateSegmentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/CreateSegment
func (c *CloudWatchEvidently) CreateSegmentRequest(input *CreateSegmentInput) (req *request.Request, output *CreateSegmentOutput) {
	op := &request.Operation{
		Name:       opCreateSegment,
		HTTPMethod: "POST",
		HTTPPath:   "/segments",
	}

	if input == nil {
		input = &CreateSegmentInput{}
	}

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

// CreateSegment API operation for Amazon CloudWatch Evidently.
//
// Use this operation to define a segment of your audience. A segment is a portion
// of your audience that share one or more characteristics. Examples could be
// Chrome browser users, users in Europe, or Firefox browser users in Europe
// who also fit other criteria that your application collects, such as age.
//
// Using a segment in an experiment limits that experiment to evaluate only
// the users who match the segment criteria. Using one or more segments in a
// launch allows you to define different traffic splits for the different audience
// segments.
//
// For more information about segment pattern syntax, see Segment rule pattern
// syntax (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Evidently-segments.html#CloudWatch-Evidently-segments-syntax.html).
//
// The pattern that you define for a segment is matched against the value of
// evaluationContext, which is passed into Evidently in the EvaluateFeature
// (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_EvaluateFeature.html)
// operation, when Evidently assigns a feature variation to a user.
//
// 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 CloudWatch Evidently's
// API operation CreateSegment for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ServiceQuotaExceededException
//     The request would cause a service quota to be exceeded.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/CreateSegment
func (c *CloudWatchEvidently) CreateSegment(input *CreateSegmentInput) (*CreateSegmentOutput, error) {
	req, out := c.CreateSegmentRequest(input)
	return out, req.Send()
}

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

const opDeleteExperiment = "DeleteExperiment"

// DeleteExperimentRequest generates a "aws/request.Request" representing the
// client's request for the DeleteExperiment 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 DeleteExperiment for more information on using the DeleteExperiment
// 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 DeleteExperimentRequest method.
//	req, resp := client.DeleteExperimentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/DeleteExperiment
func (c *CloudWatchEvidently) DeleteExperimentRequest(input *DeleteExperimentInput) (req *request.Request, output *DeleteExperimentOutput) {
	op := &request.Operation{
		Name:       opDeleteExperiment,
		HTTPMethod: "DELETE",
		HTTPPath:   "/projects/{project}/experiments/{experiment}",
	}

	if input == nil {
		input = &DeleteExperimentInput{}
	}

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

// DeleteExperiment API operation for Amazon CloudWatch Evidently.
//
// Deletes an Evidently experiment. The feature used for the experiment is not
// deleted.
//
// To stop an experiment without deleting it, use StopExperiment (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_StopExperiment.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 CloudWatch Evidently's
// API operation DeleteExperiment for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - InternalServerException
//     Unexpected error while processing the request. Retry the request.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ServiceUnavailableException
//     The service was unavailable. Retry the request.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/DeleteExperiment
func (c *CloudWatchEvidently) DeleteExperiment(input *DeleteExperimentInput) (*DeleteExperimentOutput, error) {
	req, out := c.DeleteExperimentRequest(input)
	return out, req.Send()
}

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

const opDeleteFeature = "DeleteFeature"

// DeleteFeatureRequest generates a "aws/request.Request" representing the
// client's request for the DeleteFeature 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 DeleteFeature for more information on using the DeleteFeature
// 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 DeleteFeatureRequest method.
//	req, resp := client.DeleteFeatureRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/DeleteFeature
func (c *CloudWatchEvidently) DeleteFeatureRequest(input *DeleteFeatureInput) (req *request.Request, output *DeleteFeatureOutput) {
	op := &request.Operation{
		Name:       opDeleteFeature,
		HTTPMethod: "DELETE",
		HTTPPath:   "/projects/{project}/features/{feature}",
	}

	if input == nil {
		input = &DeleteFeatureInput{}
	}

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

// DeleteFeature API operation for Amazon CloudWatch Evidently.
//
// Deletes an Evidently feature.
//
// 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 CloudWatch Evidently's
// API operation DeleteFeature for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/DeleteFeature
func (c *CloudWatchEvidently) DeleteFeature(input *DeleteFeatureInput) (*DeleteFeatureOutput, error) {
	req, out := c.DeleteFeatureRequest(input)
	return out, req.Send()
}

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

const opDeleteLaunch = "DeleteLaunch"

// DeleteLaunchRequest generates a "aws/request.Request" representing the
// client's request for the DeleteLaunch 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 DeleteLaunch for more information on using the DeleteLaunch
// 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 DeleteLaunchRequest method.
//	req, resp := client.DeleteLaunchRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/DeleteLaunch
func (c *CloudWatchEvidently) DeleteLaunchRequest(input *DeleteLaunchInput) (req *request.Request, output *DeleteLaunchOutput) {
	op := &request.Operation{
		Name:       opDeleteLaunch,
		HTTPMethod: "DELETE",
		HTTPPath:   "/projects/{project}/launches/{launch}",
	}

	if input == nil {
		input = &DeleteLaunchInput{}
	}

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

// DeleteLaunch API operation for Amazon CloudWatch Evidently.
//
// Deletes an Evidently launch. The feature used for the launch is not deleted.
//
// To stop a launch without deleting it, use StopLaunch (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_StopLaunch.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 CloudWatch Evidently's
// API operation DeleteLaunch for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/DeleteLaunch
func (c *CloudWatchEvidently) DeleteLaunch(input *DeleteLaunchInput) (*DeleteLaunchOutput, error) {
	req, out := c.DeleteLaunchRequest(input)
	return out, req.Send()
}

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

const opDeleteProject = "DeleteProject"

// DeleteProjectRequest generates a "aws/request.Request" representing the
// client's request for the DeleteProject 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 DeleteProject for more information on using the DeleteProject
// 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 DeleteProjectRequest method.
//	req, resp := client.DeleteProjectRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/DeleteProject
func (c *CloudWatchEvidently) DeleteProjectRequest(input *DeleteProjectInput) (req *request.Request, output *DeleteProjectOutput) {
	op := &request.Operation{
		Name:       opDeleteProject,
		HTTPMethod: "DELETE",
		HTTPPath:   "/projects/{project}",
	}

	if input == nil {
		input = &DeleteProjectInput{}
	}

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

// DeleteProject API operation for Amazon CloudWatch Evidently.
//
// Deletes an Evidently project. Before you can delete a project, you must delete
// all the features that the project contains. To delete a feature, use DeleteFeature
// (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_DeleteFeature.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 CloudWatch Evidently's
// API operation DeleteProject for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/DeleteProject
func (c *CloudWatchEvidently) DeleteProject(input *DeleteProjectInput) (*DeleteProjectOutput, error) {
	req, out := c.DeleteProjectRequest(input)
	return out, req.Send()
}

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

const opDeleteSegment = "DeleteSegment"

// DeleteSegmentRequest generates a "aws/request.Request" representing the
// client's request for the DeleteSegment 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 DeleteSegment for more information on using the DeleteSegment
// 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 DeleteSegmentRequest method.
//	req, resp := client.DeleteSegmentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/DeleteSegment
func (c *CloudWatchEvidently) DeleteSegmentRequest(input *DeleteSegmentInput) (req *request.Request, output *DeleteSegmentOutput) {
	op := &request.Operation{
		Name:       opDeleteSegment,
		HTTPMethod: "DELETE",
		HTTPPath:   "/segments/{segment}",
	}

	if input == nil {
		input = &DeleteSegmentInput{}
	}

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

// DeleteSegment API operation for Amazon CloudWatch Evidently.
//
// Deletes a segment. You can't delete a segment that is being used in a launch
// or experiment, even if that launch or experiment is not currently 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 CloudWatch Evidently's
// API operation DeleteSegment for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/DeleteSegment
func (c *CloudWatchEvidently) DeleteSegment(input *DeleteSegmentInput) (*DeleteSegmentOutput, error) {
	req, out := c.DeleteSegmentRequest(input)
	return out, req.Send()
}

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

const opEvaluateFeature = "EvaluateFeature"

// EvaluateFeatureRequest generates a "aws/request.Request" representing the
// client's request for the EvaluateFeature 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 EvaluateFeature for more information on using the EvaluateFeature
// 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 EvaluateFeatureRequest method.
//	req, resp := client.EvaluateFeatureRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/EvaluateFeature
func (c *CloudWatchEvidently) EvaluateFeatureRequest(input *EvaluateFeatureInput) (req *request.Request, output *EvaluateFeatureOutput) {
	op := &request.Operation{
		Name:       opEvaluateFeature,
		HTTPMethod: "POST",
		HTTPPath:   "/projects/{project}/evaluations/{feature}",
	}

	if input == nil {
		input = &EvaluateFeatureInput{}
	}

	output = &EvaluateFeatureOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Build.PushBackNamed(protocol.NewHostPrefixHandler("dataplane.", nil))
	req.Handlers.Build.PushBackNamed(protocol.ValidateEndpointHostHandler)
	return
}

// EvaluateFeature API operation for Amazon CloudWatch Evidently.
//
// This operation assigns a feature variation to one given user session. You
// pass in an entityID that represents the user. Evidently then checks the evaluation
// rules and assigns the variation.
//
// The first rules that are evaluated are the override rules. If the user's
// entityID matches an override rule, the user is served the variation specified
// by that rule.
//
// If there is a current launch with this feature that uses segment overrides,
// and if the user session's evaluationContext matches a segment rule defined
// in a segment override, the configuration in the segment overrides is used.
// For more information about segments, see CreateSegment (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_CreateSegment.html)
// and Use segments to focus your audience (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Evidently-segments.html).
//
// If there is a launch with no segment overrides, the user might be assigned
// to a variation in the launch. The chance of this depends on the percentage
// of users that are allocated to that launch. If the user is enrolled in the
// launch, the variation they are served depends on the allocation of the various
// feature variations used for the launch.
//
// If the user is not assigned to a launch, and there is an ongoing experiment
// for this feature, the user might be assigned to a variation in the experiment.
// The chance of this depends on the percentage of users that are allocated
// to that experiment.
//
// If the experiment uses a segment, then only user sessions with evaluationContext
// values that match the segment rule are used in the experiment.
//
// If the user is enrolled in the experiment, the variation they are served
// depends on the allocation of the various feature variations used for the
// experiment.
//
// If the user is not assigned to a launch or experiment, they are served the
// default variation.
//
// 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 CloudWatch Evidently's
// API operation EvaluateFeature for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/EvaluateFeature
func (c *CloudWatchEvidently) EvaluateFeature(input *EvaluateFeatureInput) (*EvaluateFeatureOutput, error) {
	req, out := c.EvaluateFeatureRequest(input)
	return out, req.Send()
}

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

const opGetExperiment = "GetExperiment"

// GetExperimentRequest generates a "aws/request.Request" representing the
// client's request for the GetExperiment 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 GetExperiment for more information on using the GetExperiment
// 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 GetExperimentRequest method.
//	req, resp := client.GetExperimentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/GetExperiment
func (c *CloudWatchEvidently) GetExperimentRequest(input *GetExperimentInput) (req *request.Request, output *GetExperimentOutput) {
	op := &request.Operation{
		Name:       opGetExperiment,
		HTTPMethod: "GET",
		HTTPPath:   "/projects/{project}/experiments/{experiment}",
	}

	if input == nil {
		input = &GetExperimentInput{}
	}

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

// GetExperiment API operation for Amazon CloudWatch Evidently.
//
// Returns the details about one experiment. You must already know the experiment
// name. To retrieve a list of experiments in your account, use ListExperiments
// (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_ListExperiments.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 CloudWatch Evidently's
// API operation GetExperiment for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/GetExperiment
func (c *CloudWatchEvidently) GetExperiment(input *GetExperimentInput) (*GetExperimentOutput, error) {
	req, out := c.GetExperimentRequest(input)
	return out, req.Send()
}

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

const opGetExperimentResults = "GetExperimentResults"

// GetExperimentResultsRequest generates a "aws/request.Request" representing the
// client's request for the GetExperimentResults 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 GetExperimentResults for more information on using the GetExperimentResults
// 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 GetExperimentResultsRequest method.
//	req, resp := client.GetExperimentResultsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/GetExperimentResults
func (c *CloudWatchEvidently) GetExperimentResultsRequest(input *GetExperimentResultsInput) (req *request.Request, output *GetExperimentResultsOutput) {
	op := &request.Operation{
		Name:       opGetExperimentResults,
		HTTPMethod: "POST",
		HTTPPath:   "/projects/{project}/experiments/{experiment}/results",
	}

	if input == nil {
		input = &GetExperimentResultsInput{}
	}

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

// GetExperimentResults API operation for Amazon CloudWatch Evidently.
//
// Retrieves the results of a running or completed experiment. No results are
// available until there have been 100 events for each variation and at least
// 10 minutes have passed since the start of the experiment. To increase the
// statistical power, Evidently performs an additional offline p-value analysis
// at the end of the experiment. Offline p-value analysis can detect statistical
// significance in some cases where the anytime p-values used during the experiment
// do not find statistical significance.
//
// Experiment results are available up to 63 days after the start of the experiment.
// They are not available after that because of CloudWatch data retention policies.
//
// 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 CloudWatch Evidently's
// API operation GetExperimentResults for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/GetExperimentResults
func (c *CloudWatchEvidently) GetExperimentResults(input *GetExperimentResultsInput) (*GetExperimentResultsOutput, error) {
	req, out := c.GetExperimentResultsRequest(input)
	return out, req.Send()
}

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

const opGetFeature = "GetFeature"

// GetFeatureRequest generates a "aws/request.Request" representing the
// client's request for the GetFeature 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 GetFeature for more information on using the GetFeature
// 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 GetFeatureRequest method.
//	req, resp := client.GetFeatureRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/GetFeature
func (c *CloudWatchEvidently) GetFeatureRequest(input *GetFeatureInput) (req *request.Request, output *GetFeatureOutput) {
	op := &request.Operation{
		Name:       opGetFeature,
		HTTPMethod: "GET",
		HTTPPath:   "/projects/{project}/features/{feature}",
	}

	if input == nil {
		input = &GetFeatureInput{}
	}

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

// GetFeature API operation for Amazon CloudWatch Evidently.
//
// Returns the details about one feature. You must already know the feature
// name. To retrieve a list of features in your account, use ListFeatures (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_ListFeatures.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 CloudWatch Evidently's
// API operation GetFeature for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/GetFeature
func (c *CloudWatchEvidently) GetFeature(input *GetFeatureInput) (*GetFeatureOutput, error) {
	req, out := c.GetFeatureRequest(input)
	return out, req.Send()
}

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

const opGetLaunch = "GetLaunch"

// GetLaunchRequest generates a "aws/request.Request" representing the
// client's request for the GetLaunch 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 GetLaunch for more information on using the GetLaunch
// 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 GetLaunchRequest method.
//	req, resp := client.GetLaunchRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/GetLaunch
func (c *CloudWatchEvidently) GetLaunchRequest(input *GetLaunchInput) (req *request.Request, output *GetLaunchOutput) {
	op := &request.Operation{
		Name:       opGetLaunch,
		HTTPMethod: "GET",
		HTTPPath:   "/projects/{project}/launches/{launch}",
	}

	if input == nil {
		input = &GetLaunchInput{}
	}

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

// GetLaunch API operation for Amazon CloudWatch Evidently.
//
// Returns the details about one launch. You must already know the launch name.
// To retrieve a list of launches in your account, use ListLaunches (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_ListLaunches.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 CloudWatch Evidently's
// API operation GetLaunch for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/GetLaunch
func (c *CloudWatchEvidently) GetLaunch(input *GetLaunchInput) (*GetLaunchOutput, error) {
	req, out := c.GetLaunchRequest(input)
	return out, req.Send()
}

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

const opGetProject = "GetProject"

// GetProjectRequest generates a "aws/request.Request" representing the
// client's request for the GetProject 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 GetProject for more information on using the GetProject
// 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 GetProjectRequest method.
//	req, resp := client.GetProjectRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/GetProject
func (c *CloudWatchEvidently) GetProjectRequest(input *GetProjectInput) (req *request.Request, output *GetProjectOutput) {
	op := &request.Operation{
		Name:       opGetProject,
		HTTPMethod: "GET",
		HTTPPath:   "/projects/{project}",
	}

	if input == nil {
		input = &GetProjectInput{}
	}

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

// GetProject API operation for Amazon CloudWatch Evidently.
//
// Returns the details about one launch. You must already know the project name.
// To retrieve a list of projects in your account, use ListProjects (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_ListProjects.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 CloudWatch Evidently's
// API operation GetProject for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/GetProject
func (c *CloudWatchEvidently) GetProject(input *GetProjectInput) (*GetProjectOutput, error) {
	req, out := c.GetProjectRequest(input)
	return out, req.Send()
}

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

const opGetSegment = "GetSegment"

// GetSegmentRequest generates a "aws/request.Request" representing the
// client's request for the GetSegment 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 GetSegment for more information on using the GetSegment
// 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 GetSegmentRequest method.
//	req, resp := client.GetSegmentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/GetSegment
func (c *CloudWatchEvidently) GetSegmentRequest(input *GetSegmentInput) (req *request.Request, output *GetSegmentOutput) {
	op := &request.Operation{
		Name:       opGetSegment,
		HTTPMethod: "GET",
		HTTPPath:   "/segments/{segment}",
	}

	if input == nil {
		input = &GetSegmentInput{}
	}

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

// GetSegment API operation for Amazon CloudWatch Evidently.
//
// Returns information about the specified segment. Specify the segment you
// want to view by specifying its ARN.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CloudWatch Evidently's
// API operation GetSegment for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/GetSegment
func (c *CloudWatchEvidently) GetSegment(input *GetSegmentInput) (*GetSegmentOutput, error) {
	req, out := c.GetSegmentRequest(input)
	return out, req.Send()
}

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

const opListExperiments = "ListExperiments"

// ListExperimentsRequest generates a "aws/request.Request" representing the
// client's request for the ListExperiments 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 ListExperiments for more information on using the ListExperiments
// 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 ListExperimentsRequest method.
//	req, resp := client.ListExperimentsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/ListExperiments
func (c *CloudWatchEvidently) ListExperimentsRequest(input *ListExperimentsInput) (req *request.Request, output *ListExperimentsOutput) {
	op := &request.Operation{
		Name:       opListExperiments,
		HTTPMethod: "GET",
		HTTPPath:   "/projects/{project}/experiments",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListExperimentsInput{}
	}

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

// ListExperiments API operation for Amazon CloudWatch Evidently.
//
// Returns configuration details about all the experiments in the specified
// project.
//
// 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 CloudWatch Evidently's
// API operation ListExperiments for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/ListExperiments
func (c *CloudWatchEvidently) ListExperiments(input *ListExperimentsInput) (*ListExperimentsOutput, error) {
	req, out := c.ListExperimentsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListFeatures = "ListFeatures"

// ListFeaturesRequest generates a "aws/request.Request" representing the
// client's request for the ListFeatures 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 ListFeatures for more information on using the ListFeatures
// 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 ListFeaturesRequest method.
//	req, resp := client.ListFeaturesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/ListFeatures
func (c *CloudWatchEvidently) ListFeaturesRequest(input *ListFeaturesInput) (req *request.Request, output *ListFeaturesOutput) {
	op := &request.Operation{
		Name:       opListFeatures,
		HTTPMethod: "GET",
		HTTPPath:   "/projects/{project}/features",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListFeaturesInput{}
	}

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

// ListFeatures API operation for Amazon CloudWatch Evidently.
//
// Returns configuration details about all the features in the specified project.
//
// 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 CloudWatch Evidently's
// API operation ListFeatures for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/ListFeatures
func (c *CloudWatchEvidently) ListFeatures(input *ListFeaturesInput) (*ListFeaturesOutput, error) {
	req, out := c.ListFeaturesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListLaunches = "ListLaunches"

// ListLaunchesRequest generates a "aws/request.Request" representing the
// client's request for the ListLaunches 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 ListLaunches for more information on using the ListLaunches
// 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 ListLaunchesRequest method.
//	req, resp := client.ListLaunchesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/ListLaunches
func (c *CloudWatchEvidently) ListLaunchesRequest(input *ListLaunchesInput) (req *request.Request, output *ListLaunchesOutput) {
	op := &request.Operation{
		Name:       opListLaunches,
		HTTPMethod: "GET",
		HTTPPath:   "/projects/{project}/launches",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListLaunchesInput{}
	}

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

// ListLaunches API operation for Amazon CloudWatch Evidently.
//
// Returns configuration details about all the launches in the specified project.
//
// 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 CloudWatch Evidently's
// API operation ListLaunches for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/ListLaunches
func (c *CloudWatchEvidently) ListLaunches(input *ListLaunchesInput) (*ListLaunchesOutput, error) {
	req, out := c.ListLaunchesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListProjects = "ListProjects"

// ListProjectsRequest generates a "aws/request.Request" representing the
// client's request for the ListProjects 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 ListProjects for more information on using the ListProjects
// 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 ListProjectsRequest method.
//	req, resp := client.ListProjectsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/ListProjects
func (c *CloudWatchEvidently) ListProjectsRequest(input *ListProjectsInput) (req *request.Request, output *ListProjectsOutput) {
	op := &request.Operation{
		Name:       opListProjects,
		HTTPMethod: "GET",
		HTTPPath:   "/projects",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListProjectsInput{}
	}

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

// ListProjects API operation for Amazon CloudWatch Evidently.
//
// Returns configuration details about all the projects in the current Region
// in your account.
//
// 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 CloudWatch Evidently's
// API operation ListProjects for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/ListProjects
func (c *CloudWatchEvidently) ListProjects(input *ListProjectsInput) (*ListProjectsOutput, error) {
	req, out := c.ListProjectsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListSegmentReferences = "ListSegmentReferences"

// ListSegmentReferencesRequest generates a "aws/request.Request" representing the
// client's request for the ListSegmentReferences 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 ListSegmentReferences for more information on using the ListSegmentReferences
// 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 ListSegmentReferencesRequest method.
//	req, resp := client.ListSegmentReferencesRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/ListSegmentReferences
func (c *CloudWatchEvidently) ListSegmentReferencesRequest(input *ListSegmentReferencesInput) (req *request.Request, output *ListSegmentReferencesOutput) {
	op := &request.Operation{
		Name:       opListSegmentReferences,
		HTTPMethod: "GET",
		HTTPPath:   "/segments/{segment}/references",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListSegmentReferencesInput{}
	}

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

// ListSegmentReferences API operation for Amazon CloudWatch Evidently.
//
// Use this operation to find which experiments or launches are using a specified
// segment.
//
// 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 CloudWatch Evidently's
// API operation ListSegmentReferences for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/ListSegmentReferences
func (c *CloudWatchEvidently) ListSegmentReferences(input *ListSegmentReferencesInput) (*ListSegmentReferencesOutput, error) {
	req, out := c.ListSegmentReferencesRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListSegments = "ListSegments"

// ListSegmentsRequest generates a "aws/request.Request" representing the
// client's request for the ListSegments 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 ListSegments for more information on using the ListSegments
// 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 ListSegmentsRequest method.
//	req, resp := client.ListSegmentsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/ListSegments
func (c *CloudWatchEvidently) ListSegmentsRequest(input *ListSegmentsInput) (req *request.Request, output *ListSegmentsOutput) {
	op := &request.Operation{
		Name:       opListSegments,
		HTTPMethod: "GET",
		HTTPPath:   "/segments",
		Paginator: &request.Paginator{
			InputTokens:     []string{"nextToken"},
			OutputTokens:    []string{"nextToken"},
			LimitToken:      "maxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListSegmentsInput{}
	}

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

// ListSegments API operation for Amazon CloudWatch Evidently.
//
// Returns a list of audience segments that you have created in your account
// in this Region.
//
// 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 CloudWatch Evidently's
// API operation ListSegments for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/ListSegments
func (c *CloudWatchEvidently) ListSegments(input *ListSegmentsInput) (*ListSegmentsOutput, error) {
	req, out := c.ListSegmentsRequest(input)
	return out, req.Send()
}

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

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

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

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

	return p.Err()
}

const opListTagsForResource = "ListTagsForResource"

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

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

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

// ListTagsForResource API operation for Amazon CloudWatch Evidently.
//
// Displays the tags associated with an Evidently resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CloudWatch Evidently's
// API operation ListTagsForResource for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/ListTagsForResource
func (c *CloudWatchEvidently) ListTagsForResource(input *ListTagsForResourceInput) (*ListTagsForResourceOutput, error) {
	req, out := c.ListTagsForResourceRequest(input)
	return out, req.Send()
}

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

const opPutProjectEvents = "PutProjectEvents"

// PutProjectEventsRequest generates a "aws/request.Request" representing the
// client's request for the PutProjectEvents 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 PutProjectEvents for more information on using the PutProjectEvents
// 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 PutProjectEventsRequest method.
//	req, resp := client.PutProjectEventsRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/PutProjectEvents
func (c *CloudWatchEvidently) PutProjectEventsRequest(input *PutProjectEventsInput) (req *request.Request, output *PutProjectEventsOutput) {
	op := &request.Operation{
		Name:       opPutProjectEvents,
		HTTPMethod: "POST",
		HTTPPath:   "/events/projects/{project}",
	}

	if input == nil {
		input = &PutProjectEventsInput{}
	}

	output = &PutProjectEventsOutput{}
	req = c.newRequest(op, input, output)
	req.Handlers.Build.PushBackNamed(protocol.NewHostPrefixHandler("dataplane.", nil))
	req.Handlers.Build.PushBackNamed(protocol.ValidateEndpointHostHandler)
	return
}

// PutProjectEvents API operation for Amazon CloudWatch Evidently.
//
// Sends performance events to Evidently. These events can be used to evaluate
// a launch or an experiment.
//
// 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 CloudWatch Evidently's
// API operation PutProjectEvents for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/PutProjectEvents
func (c *CloudWatchEvidently) PutProjectEvents(input *PutProjectEventsInput) (*PutProjectEventsOutput, error) {
	req, out := c.PutProjectEventsRequest(input)
	return out, req.Send()
}

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

const opStartExperiment = "StartExperiment"

// StartExperimentRequest generates a "aws/request.Request" representing the
// client's request for the StartExperiment 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 StartExperiment for more information on using the StartExperiment
// 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 StartExperimentRequest method.
//	req, resp := client.StartExperimentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/StartExperiment
func (c *CloudWatchEvidently) StartExperimentRequest(input *StartExperimentInput) (req *request.Request, output *StartExperimentOutput) {
	op := &request.Operation{
		Name:       opStartExperiment,
		HTTPMethod: "POST",
		HTTPPath:   "/projects/{project}/experiments/{experiment}/start",
	}

	if input == nil {
		input = &StartExperimentInput{}
	}

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

// StartExperiment API operation for Amazon CloudWatch Evidently.
//
// Starts an existing experiment. To create an experiment, use CreateExperiment
// (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_CreateExperiment.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 CloudWatch Evidently's
// API operation StartExperiment for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ServiceQuotaExceededException
//     The request would cause a service quota to be exceeded.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/StartExperiment
func (c *CloudWatchEvidently) StartExperiment(input *StartExperimentInput) (*StartExperimentOutput, error) {
	req, out := c.StartExperimentRequest(input)
	return out, req.Send()
}

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

const opStartLaunch = "StartLaunch"

// StartLaunchRequest generates a "aws/request.Request" representing the
// client's request for the StartLaunch 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 StartLaunch for more information on using the StartLaunch
// 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 StartLaunchRequest method.
//	req, resp := client.StartLaunchRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/StartLaunch
func (c *CloudWatchEvidently) StartLaunchRequest(input *StartLaunchInput) (req *request.Request, output *StartLaunchOutput) {
	op := &request.Operation{
		Name:       opStartLaunch,
		HTTPMethod: "POST",
		HTTPPath:   "/projects/{project}/launches/{launch}/start",
	}

	if input == nil {
		input = &StartLaunchInput{}
	}

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

// StartLaunch API operation for Amazon CloudWatch Evidently.
//
// Starts an existing launch. To create a launch, use CreateLaunch (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_CreateLaunch.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 CloudWatch Evidently's
// API operation StartLaunch for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ServiceQuotaExceededException
//     The request would cause a service quota to be exceeded.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/StartLaunch
func (c *CloudWatchEvidently) StartLaunch(input *StartLaunchInput) (*StartLaunchOutput, error) {
	req, out := c.StartLaunchRequest(input)
	return out, req.Send()
}

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

const opStopExperiment = "StopExperiment"

// StopExperimentRequest generates a "aws/request.Request" representing the
// client's request for the StopExperiment 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 StopExperiment for more information on using the StopExperiment
// 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 StopExperimentRequest method.
//	req, resp := client.StopExperimentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/StopExperiment
func (c *CloudWatchEvidently) StopExperimentRequest(input *StopExperimentInput) (req *request.Request, output *StopExperimentOutput) {
	op := &request.Operation{
		Name:       opStopExperiment,
		HTTPMethod: "POST",
		HTTPPath:   "/projects/{project}/experiments/{experiment}/cancel",
	}

	if input == nil {
		input = &StopExperimentInput{}
	}

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

// StopExperiment API operation for Amazon CloudWatch Evidently.
//
// Stops an experiment that is currently running. If you stop an experiment,
// you can't resume it or restart it.
//
// 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 CloudWatch Evidently's
// API operation StopExperiment for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ServiceQuotaExceededException
//     The request would cause a service quota to be exceeded.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/StopExperiment
func (c *CloudWatchEvidently) StopExperiment(input *StopExperimentInput) (*StopExperimentOutput, error) {
	req, out := c.StopExperimentRequest(input)
	return out, req.Send()
}

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

const opStopLaunch = "StopLaunch"

// StopLaunchRequest generates a "aws/request.Request" representing the
// client's request for the StopLaunch 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 StopLaunch for more information on using the StopLaunch
// 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 StopLaunchRequest method.
//	req, resp := client.StopLaunchRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/StopLaunch
func (c *CloudWatchEvidently) StopLaunchRequest(input *StopLaunchInput) (req *request.Request, output *StopLaunchOutput) {
	op := &request.Operation{
		Name:       opStopLaunch,
		HTTPMethod: "POST",
		HTTPPath:   "/projects/{project}/launches/{launch}/cancel",
	}

	if input == nil {
		input = &StopLaunchInput{}
	}

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

// StopLaunch API operation for Amazon CloudWatch Evidently.
//
// Stops a launch that is currently running. After you stop a launch, you will
// not be able to resume it or restart it. Also, it will not be evaluated as
// a rule for traffic allocation, and the traffic that was allocated to the
// launch will instead be available to the feature's experiment, if there is
// one. Otherwise, all traffic will be served the default variation after the
// launch is stopped.
//
// 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 CloudWatch Evidently's
// API operation StopLaunch for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/StopLaunch
func (c *CloudWatchEvidently) StopLaunch(input *StopLaunchInput) (*StopLaunchOutput, error) {
	req, out := c.StopLaunchRequest(input)
	return out, req.Send()
}

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

const opTagResource = "TagResource"

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

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

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

// TagResource API operation for Amazon CloudWatch Evidently.
//
// Assigns one or more tags (key-value pairs) to the specified CloudWatch Evidently
// resource. Projects, features, launches, and experiments can be tagged.
//
// Tags can help you organize and categorize your resources. You can also use
// them to scope user permissions by granting a user permission to access or
// change only resources with certain tag values.
//
// Tags don't have any semantic meaning to Amazon Web Services and are interpreted
// strictly as strings of characters.
//
// You can use the TagResource action with a resource that already has tags.
// If you specify a new tag key for the resource, this tag is appended to the
// list of tags associated with the alarm. If you specify a tag key that is
// already associated with the resource, the new tag value that you specify
// replaces the previous value for that tag.
//
// You can associate as many as 50 tags with a resource.
//
// For more information, see Tagging Amazon Web Services resources (https://docs.aws.amazon.com/general/latest/gr/aws_tagging.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 CloudWatch Evidently's
// API operation TagResource for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/TagResource
func (c *CloudWatchEvidently) TagResource(input *TagResourceInput) (*TagResourceOutput, error) {
	req, out := c.TagResourceRequest(input)
	return out, req.Send()
}

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

const opTestSegmentPattern = "TestSegmentPattern"

// TestSegmentPatternRequest generates a "aws/request.Request" representing the
// client's request for the TestSegmentPattern 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 TestSegmentPattern for more information on using the TestSegmentPattern
// 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 TestSegmentPatternRequest method.
//	req, resp := client.TestSegmentPatternRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/TestSegmentPattern
func (c *CloudWatchEvidently) TestSegmentPatternRequest(input *TestSegmentPatternInput) (req *request.Request, output *TestSegmentPatternOutput) {
	op := &request.Operation{
		Name:       opTestSegmentPattern,
		HTTPMethod: "POST",
		HTTPPath:   "/test-segment-pattern",
	}

	if input == nil {
		input = &TestSegmentPatternInput{}
	}

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

// TestSegmentPattern API operation for Amazon CloudWatch Evidently.
//
// Use this operation to test a rules pattern that you plan to use to create
// an audience segment. For more information about segments, see CreateSegment
// (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_CreateSegment.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 CloudWatch Evidently's
// API operation TestSegmentPattern for usage and error information.
//
// Returned Error Types:
//
//   - ThrottlingException
//     The request was denied because of request throttling. Retry the request.
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/TestSegmentPattern
func (c *CloudWatchEvidently) TestSegmentPattern(input *TestSegmentPatternInput) (*TestSegmentPatternOutput, error) {
	req, out := c.TestSegmentPatternRequest(input)
	return out, req.Send()
}

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

const opUntagResource = "UntagResource"

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

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

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

// UntagResource API operation for Amazon CloudWatch Evidently.
//
// Removes one or more tags from the specified resource.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CloudWatch Evidently's
// API operation UntagResource for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/UntagResource
func (c *CloudWatchEvidently) UntagResource(input *UntagResourceInput) (*UntagResourceOutput, error) {
	req, out := c.UntagResourceRequest(input)
	return out, req.Send()
}

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

const opUpdateExperiment = "UpdateExperiment"

// UpdateExperimentRequest generates a "aws/request.Request" representing the
// client's request for the UpdateExperiment 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 UpdateExperiment for more information on using the UpdateExperiment
// 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 UpdateExperimentRequest method.
//	req, resp := client.UpdateExperimentRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/UpdateExperiment
func (c *CloudWatchEvidently) UpdateExperimentRequest(input *UpdateExperimentInput) (req *request.Request, output *UpdateExperimentOutput) {
	op := &request.Operation{
		Name:       opUpdateExperiment,
		HTTPMethod: "PATCH",
		HTTPPath:   "/projects/{project}/experiments/{experiment}",
	}

	if input == nil {
		input = &UpdateExperimentInput{}
	}

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

// UpdateExperiment API operation for Amazon CloudWatch Evidently.
//
// Updates an Evidently experiment.
//
// Don't use this operation to update an experiment's tag. Instead, use TagResource
// (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_TagResource.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 CloudWatch Evidently's
// API operation UpdateExperiment for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/UpdateExperiment
func (c *CloudWatchEvidently) UpdateExperiment(input *UpdateExperimentInput) (*UpdateExperimentOutput, error) {
	req, out := c.UpdateExperimentRequest(input)
	return out, req.Send()
}

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

const opUpdateFeature = "UpdateFeature"

// UpdateFeatureRequest generates a "aws/request.Request" representing the
// client's request for the UpdateFeature 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 UpdateFeature for more information on using the UpdateFeature
// 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 UpdateFeatureRequest method.
//	req, resp := client.UpdateFeatureRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/UpdateFeature
func (c *CloudWatchEvidently) UpdateFeatureRequest(input *UpdateFeatureInput) (req *request.Request, output *UpdateFeatureOutput) {
	op := &request.Operation{
		Name:       opUpdateFeature,
		HTTPMethod: "PATCH",
		HTTPPath:   "/projects/{project}/features/{feature}",
	}

	if input == nil {
		input = &UpdateFeatureInput{}
	}

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

// UpdateFeature API operation for Amazon CloudWatch Evidently.
//
// Updates an existing feature.
//
// You can't use this operation to update the tags of an existing feature. Instead,
// use TagResource (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_TagResource.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 CloudWatch Evidently's
// API operation UpdateFeature for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ServiceQuotaExceededException
//     The request would cause a service quota to be exceeded.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/UpdateFeature
func (c *CloudWatchEvidently) UpdateFeature(input *UpdateFeatureInput) (*UpdateFeatureOutput, error) {
	req, out := c.UpdateFeatureRequest(input)
	return out, req.Send()
}

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

const opUpdateLaunch = "UpdateLaunch"

// UpdateLaunchRequest generates a "aws/request.Request" representing the
// client's request for the UpdateLaunch 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 UpdateLaunch for more information on using the UpdateLaunch
// 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 UpdateLaunchRequest method.
//	req, resp := client.UpdateLaunchRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/UpdateLaunch
func (c *CloudWatchEvidently) UpdateLaunchRequest(input *UpdateLaunchInput) (req *request.Request, output *UpdateLaunchOutput) {
	op := &request.Operation{
		Name:       opUpdateLaunch,
		HTTPMethod: "PATCH",
		HTTPPath:   "/projects/{project}/launches/{launch}",
	}

	if input == nil {
		input = &UpdateLaunchInput{}
	}

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

// UpdateLaunch API operation for Amazon CloudWatch Evidently.
//
// Updates a launch of a given feature.
//
// Don't use this operation to update the tags of an existing launch. Instead,
// use TagResource (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_TagResource.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 CloudWatch Evidently's
// API operation UpdateLaunch for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/UpdateLaunch
func (c *CloudWatchEvidently) UpdateLaunch(input *UpdateLaunchInput) (*UpdateLaunchOutput, error) {
	req, out := c.UpdateLaunchRequest(input)
	return out, req.Send()
}

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

const opUpdateProject = "UpdateProject"

// UpdateProjectRequest generates a "aws/request.Request" representing the
// client's request for the UpdateProject 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 UpdateProject for more information on using the UpdateProject
// 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 UpdateProjectRequest method.
//	req, resp := client.UpdateProjectRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/UpdateProject
func (c *CloudWatchEvidently) UpdateProjectRequest(input *UpdateProjectInput) (req *request.Request, output *UpdateProjectOutput) {
	op := &request.Operation{
		Name:       opUpdateProject,
		HTTPMethod: "PATCH",
		HTTPPath:   "/projects/{project}",
	}

	if input == nil {
		input = &UpdateProjectInput{}
	}

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

// UpdateProject API operation for Amazon CloudWatch Evidently.
//
// Updates the description of an existing project.
//
// To create a new project, use CreateProject (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_CreateProject.html).
//
// Don't use this operation to update the data storage options of a project.
// Instead, use UpdateProjectDataDelivery (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_UpdateProjectDataDelivery.html).
//
// Don't use this operation to update the tags of a project. Instead, use TagResource
// (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_TagResource.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 CloudWatch Evidently's
// API operation UpdateProject for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ServiceQuotaExceededException
//     The request would cause a service quota to be exceeded.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/UpdateProject
func (c *CloudWatchEvidently) UpdateProject(input *UpdateProjectInput) (*UpdateProjectOutput, error) {
	req, out := c.UpdateProjectRequest(input)
	return out, req.Send()
}

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

const opUpdateProjectDataDelivery = "UpdateProjectDataDelivery"

// UpdateProjectDataDeliveryRequest generates a "aws/request.Request" representing the
// client's request for the UpdateProjectDataDelivery 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 UpdateProjectDataDelivery for more information on using the UpdateProjectDataDelivery
// 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 UpdateProjectDataDeliveryRequest method.
//	req, resp := client.UpdateProjectDataDeliveryRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/UpdateProjectDataDelivery
func (c *CloudWatchEvidently) UpdateProjectDataDeliveryRequest(input *UpdateProjectDataDeliveryInput) (req *request.Request, output *UpdateProjectDataDeliveryOutput) {
	op := &request.Operation{
		Name:       opUpdateProjectDataDelivery,
		HTTPMethod: "PATCH",
		HTTPPath:   "/projects/{project}/data-delivery",
	}

	if input == nil {
		input = &UpdateProjectDataDeliveryInput{}
	}

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

// UpdateProjectDataDelivery API operation for Amazon CloudWatch Evidently.
//
// Updates the data storage options for this project. If you store evaluation
// events, you an keep them and analyze them on your own. If you choose not
// to store evaluation events, Evidently deletes them after using them to produce
// metrics and other experiment results that you can view.
//
// You can't specify both cloudWatchLogs and s3Destination in the same operation.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon CloudWatch Evidently's
// API operation UpdateProjectDataDelivery for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The value of a parameter in the request caused an error.
//
//   - ConflictException
//     A resource was in an inconsistent state during an update or a deletion.
//
//   - ServiceQuotaExceededException
//     The request would cause a service quota to be exceeded.
//
//   - ResourceNotFoundException
//     The request references a resource that does not exist.
//
//   - AccessDeniedException
//     You do not have sufficient permissions to perform this action.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/evidently-2021-02-01/UpdateProjectDataDelivery
func (c *CloudWatchEvidently) UpdateProjectDataDelivery(input *UpdateProjectDataDeliveryInput) (*UpdateProjectDataDeliveryOutput, error) {
	req, out := c.UpdateProjectDataDeliveryRequest(input)
	return out, req.Send()
}

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

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

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

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

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

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

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

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

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

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

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

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

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

	// The name or ARN of the project that contains the feature being evaluated.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" type:"string" required:"true"`

	// An array of structures, where each structure assigns a feature variation
	// to one user session.
	//
	// Requests is a required field
	Requests []*EvaluationRequest `locationName:"requests" min:"1" type:"list" required:"true"`
}

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

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

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

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

// SetProject sets the Project field's value.
func (s *BatchEvaluateFeatureInput) SetProject(v string) *BatchEvaluateFeatureInput {
	s.Project = &v
	return s
}

// SetRequests sets the Requests field's value.
func (s *BatchEvaluateFeatureInput) SetRequests(v []*EvaluationRequest) *BatchEvaluateFeatureInput {
	s.Requests = v
	return s
}

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

	// An array of structures, where each structure displays the results of one
	// feature evaluation assignment to one user session.
	Results []*EvaluationResult `locationName:"results" 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 BatchEvaluateFeatureOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetResults sets the Results field's value.
func (s *BatchEvaluateFeatureOutput) SetResults(v []*EvaluationResult) *BatchEvaluateFeatureOutput {
	s.Results = v
	return s
}

// A structure containing the CloudWatch Logs log group where the project stores
// evaluation events.
type CloudWatchLogsDestination struct {
	_ struct{} `type:"structure"`

	// The name of the log group where the project stores evaluation events.
	LogGroup *string `locationName:"logGroup" 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 CloudWatchLogsDestination) String() string {
	return awsutil.Prettify(s)
}

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

// SetLogGroup sets the LogGroup field's value.
func (s *CloudWatchLogsDestination) SetLogGroup(v string) *CloudWatchLogsDestination {
	s.LogGroup = &v
	return s
}

// A structure containing the CloudWatch Logs log group where the project stores
// evaluation events.
type CloudWatchLogsDestinationConfig struct {
	_ struct{} `type:"structure"`

	// The name of the log group where the project stores evaluation events.
	LogGroup *string `locationName:"logGroup" 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 CloudWatchLogsDestinationConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetLogGroup sets the LogGroup field's value.
func (s *CloudWatchLogsDestinationConfig) SetLogGroup(v string) *CloudWatchLogsDestinationConfig {
	s.LogGroup = &v
	return s
}

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

	Message_ *string `locationName:"message" type:"string"`

	// The ID of the resource that caused the exception.
	ResourceId *string `locationName:"resourceId" type:"string"`

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

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

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

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

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

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

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

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

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

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

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

	// An optional description of the experiment.
	Description *string `locationName:"description" type:"string"`

	// An array of structures that defines the metrics used for the experiment,
	// and whether a higher or lower value for each metric is the goal.
	//
	// MetricGoals is a required field
	MetricGoals []*MetricGoalConfig `locationName:"metricGoals" min:"1" type:"list" required:"true"`

	// A name for the new experiment.
	//
	// Name is a required field
	Name *string `locationName:"name" min:"1" type:"string" required:"true"`

	// A structure that contains the configuration of which variation to use as
	// the "control" version. tThe "control" version is used for comparison with
	// other variations. This structure also specifies how much experiment traffic
	// is allocated to each variation.
	OnlineAbConfig *OnlineAbConfig `locationName:"onlineAbConfig" type:"structure"`

	// The name or ARN of the project that you want to create the new experiment
	// in.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" type:"string" required:"true"`

	// When Evidently assigns a particular user session to an experiment, it must
	// use a randomization ID to determine which variation the user session is served.
	// This randomization ID is a combination of the entity ID and randomizationSalt.
	// If you omit randomizationSalt, Evidently uses the experiment name as the
	// randomizationSalt.
	RandomizationSalt *string `locationName:"randomizationSalt" type:"string"`

	// The portion of the available audience that you want to allocate to this experiment,
	// in thousandths of a percent. The available audience is the total audience
	// minus the audience that you have allocated to overrides or current launches
	// of this feature.
	//
	// This is represented in thousandths of a percent. For example, specify 10,000
	// to allocate 10% of the available audience.
	SamplingRate *int64 `locationName:"samplingRate" type:"long"`

	// Specifies an audience segment to use in the experiment. When a segment is
	// used in an experiment, only user sessions that match the segment pattern
	// are used in the experiment.
	Segment *string `locationName:"segment" type:"string"`

	// Assigns one or more tags (key-value pairs) to the experiment.
	//
	// Tags can help you organize and categorize your resources. You can also use
	// them to scope user permissions by granting a user permission to access or
	// change only resources with certain tag values.
	//
	// Tags don't have any semantic meaning to Amazon Web Services and are interpreted
	// strictly as strings of characters.
	//
	// You can associate as many as 50 tags with an experiment.
	//
	// For more information, see Tagging Amazon Web Services resources (https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html).
	Tags map[string]*string `locationName:"tags" type:"map"`

	// An array of structures that describe the configuration of each feature variation
	// used in the experiment.
	//
	// Treatments is a required field
	Treatments []*TreatmentConfig `locationName:"treatments" 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 CreateExperimentInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

// SetMetricGoals sets the MetricGoals field's value.
func (s *CreateExperimentInput) SetMetricGoals(v []*MetricGoalConfig) *CreateExperimentInput {
	s.MetricGoals = v
	return s
}

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

// SetOnlineAbConfig sets the OnlineAbConfig field's value.
func (s *CreateExperimentInput) SetOnlineAbConfig(v *OnlineAbConfig) *CreateExperimentInput {
	s.OnlineAbConfig = v
	return s
}

// SetProject sets the Project field's value.
func (s *CreateExperimentInput) SetProject(v string) *CreateExperimentInput {
	s.Project = &v
	return s
}

// SetRandomizationSalt sets the RandomizationSalt field's value.
func (s *CreateExperimentInput) SetRandomizationSalt(v string) *CreateExperimentInput {
	s.RandomizationSalt = &v
	return s
}

// SetSamplingRate sets the SamplingRate field's value.
func (s *CreateExperimentInput) SetSamplingRate(v int64) *CreateExperimentInput {
	s.SamplingRate = &v
	return s
}

// SetSegment sets the Segment field's value.
func (s *CreateExperimentInput) SetSegment(v string) *CreateExperimentInput {
	s.Segment = &v
	return s
}

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

// SetTreatments sets the Treatments field's value.
func (s *CreateExperimentInput) SetTreatments(v []*TreatmentConfig) *CreateExperimentInput {
	s.Treatments = v
	return s
}

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

	// A structure containing the configuration details of the experiment that you
	// created.
	//
	// Experiment is a required field
	Experiment *Experiment `locationName:"experiment" 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 CreateExperimentOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetExperiment sets the Experiment field's value.
func (s *CreateExperimentOutput) SetExperiment(v *Experiment) *CreateExperimentOutput {
	s.Experiment = v
	return s
}

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

	// The name of the variation to use as the default variation. The default variation
	// is served to users who are not allocated to any ongoing launches or experiments
	// of this feature.
	//
	// This variation must also be listed in the variations structure.
	//
	// If you omit defaultVariation, the first variation listed in the variations
	// structure is used as the default variation.
	DefaultVariation *string `locationName:"defaultVariation" min:"1" type:"string"`

	// An optional description of the feature.
	Description *string `locationName:"description" type:"string"`

	// Specify users that should always be served a specific variation of a feature.
	// Each user is specified by a key-value pair . For each key, specify a user
	// by entering their user ID, account ID, or some other identifier. For the
	// value, specify the name of the variation that they are to be served.
	//
	// This parameter is limited to 2500 overrides or a total of 40KB. The 40KB
	// limit includes an overhead of 6 bytes per override.
	EntityOverrides map[string]*string `locationName:"entityOverrides" type:"map"`

	// Specify ALL_RULES to activate the traffic allocation specified by any ongoing
	// launches or experiments. Specify DEFAULT_VARIATION to serve the default variation
	// to all users instead.
	EvaluationStrategy *string `locationName:"evaluationStrategy" type:"string" enum:"FeatureEvaluationStrategy"`

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

	// The name or ARN of the project that is to contain the new feature.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" type:"string" required:"true"`

	// Assigns one or more tags (key-value pairs) to the feature.
	//
	// Tags can help you organize and categorize your resources. You can also use
	// them to scope user permissions by granting a user permission to access or
	// change only resources with certain tag values.
	//
	// Tags don't have any semantic meaning to Amazon Web Services and are interpreted
	// strictly as strings of characters.
	//
	// You can associate as many as 50 tags with a feature.
	//
	// For more information, see Tagging Amazon Web Services resources (https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html).
	Tags map[string]*string `locationName:"tags" type:"map"`

	// An array of structures that contain the configuration of the feature's different
	// variations.
	//
	// Variations is a required field
	Variations []*VariationConfig `locationName:"variations" min:"1" type:"list" required:"true"`
}

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

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

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

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

// SetDefaultVariation sets the DefaultVariation field's value.
func (s *CreateFeatureInput) SetDefaultVariation(v string) *CreateFeatureInput {
	s.DefaultVariation = &v
	return s
}

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

// SetEntityOverrides sets the EntityOverrides field's value.
func (s *CreateFeatureInput) SetEntityOverrides(v map[string]*string) *CreateFeatureInput {
	s.EntityOverrides = v
	return s
}

// SetEvaluationStrategy sets the EvaluationStrategy field's value.
func (s *CreateFeatureInput) SetEvaluationStrategy(v string) *CreateFeatureInput {
	s.EvaluationStrategy = &v
	return s
}

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

// SetProject sets the Project field's value.
func (s *CreateFeatureInput) SetProject(v string) *CreateFeatureInput {
	s.Project = &v
	return s
}

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

// SetVariations sets the Variations field's value.
func (s *CreateFeatureInput) SetVariations(v []*VariationConfig) *CreateFeatureInput {
	s.Variations = v
	return s
}

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

	// A structure that contains information about the new feature.
	Feature *Feature `locationName:"feature" 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 CreateFeatureOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetFeature sets the Feature field's value.
func (s *CreateFeatureOutput) SetFeature(v *Feature) *CreateFeatureOutput {
	s.Feature = v
	return s
}

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

	// An optional description for the launch.
	Description *string `locationName:"description" type:"string"`

	// An array of structures that contains the feature and variations that are
	// to be used for the launch.
	//
	// Groups is a required field
	Groups []*LaunchGroupConfig `locationName:"groups" min:"1" type:"list" required:"true"`

	// An array of structures that define the metrics that will be used to monitor
	// the launch performance.
	MetricMonitors []*MetricMonitorConfig `locationName:"metricMonitors" type:"list"`

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

	// The name or ARN of the project that you want to create the launch in.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" type:"string" required:"true"`

	// When Evidently assigns a particular user session to a launch, it must use
	// a randomization ID to determine which variation the user session is served.
	// This randomization ID is a combination of the entity ID and randomizationSalt.
	// If you omit randomizationSalt, Evidently uses the launch name as the randomizationSalt.
	RandomizationSalt *string `locationName:"randomizationSalt" type:"string"`

	// An array of structures that define the traffic allocation percentages among
	// the feature variations during each step of the launch.
	ScheduledSplitsConfig *ScheduledSplitsLaunchConfig `locationName:"scheduledSplitsConfig" type:"structure"`

	// Assigns one or more tags (key-value pairs) to the launch.
	//
	// Tags can help you organize and categorize your resources. You can also use
	// them to scope user permissions by granting a user permission to access or
	// change only resources with certain tag values.
	//
	// Tags don't have any semantic meaning to Amazon Web Services and are interpreted
	// strictly as strings of characters.
	//
	// You can associate as many as 50 tags with a launch.
	//
	// For more information, see Tagging Amazon Web Services resources (https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html).
	Tags map[string]*string `locationName:"tags" type:"map"`
}

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

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

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

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

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

// SetGroups sets the Groups field's value.
func (s *CreateLaunchInput) SetGroups(v []*LaunchGroupConfig) *CreateLaunchInput {
	s.Groups = v
	return s
}

// SetMetricMonitors sets the MetricMonitors field's value.
func (s *CreateLaunchInput) SetMetricMonitors(v []*MetricMonitorConfig) *CreateLaunchInput {
	s.MetricMonitors = v
	return s
}

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

// SetProject sets the Project field's value.
func (s *CreateLaunchInput) SetProject(v string) *CreateLaunchInput {
	s.Project = &v
	return s
}

// SetRandomizationSalt sets the RandomizationSalt field's value.
func (s *CreateLaunchInput) SetRandomizationSalt(v string) *CreateLaunchInput {
	s.RandomizationSalt = &v
	return s
}

// SetScheduledSplitsConfig sets the ScheduledSplitsConfig field's value.
func (s *CreateLaunchInput) SetScheduledSplitsConfig(v *ScheduledSplitsLaunchConfig) *CreateLaunchInput {
	s.ScheduledSplitsConfig = v
	return s
}

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

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

	// A structure that contains the configuration of the launch that was created.
	//
	// Launch is a required field
	Launch *Launch `locationName:"launch" 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 CreateLaunchOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetLaunch sets the Launch field's value.
func (s *CreateLaunchOutput) SetLaunch(v *Launch) *CreateLaunchOutput {
	s.Launch = v
	return s
}

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

	// Use this parameter if the project will use client-side evaluation powered
	// by AppConfig. Client-side evaluation allows your application to assign variations
	// to user sessions locally instead of by calling the EvaluateFeature (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_EvaluateFeature.html)
	// operation. This mitigates the latency and availability risks that come with
	// an API call. For more information, see Client-side evaluation - powered by
	// AppConfig. (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Evidently-client-side-evaluation.html)
	//
	// This parameter is a structure that contains information about the AppConfig
	// application and environment that will be used as for client-side evaluation.
	//
	// To create a project that uses client-side evaluation, you must have the evidently:ExportProjectAsConfiguration
	// permission.
	AppConfigResource *ProjectAppConfigResourceConfig `locationName:"appConfigResource" type:"structure"`

	// A structure that contains information about where Evidently is to store evaluation
	// events for longer term storage, if you choose to do so. If you choose not
	// to store these events, Evidently deletes them after using them to produce
	// metrics and other experiment results that you can view.
	DataDelivery *ProjectDataDeliveryConfig `locationName:"dataDelivery" type:"structure"`

	// An optional description of the project.
	Description *string `locationName:"description" type:"string"`

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

	// Assigns one or more tags (key-value pairs) to the project.
	//
	// Tags can help you organize and categorize your resources. You can also use
	// them to scope user permissions by granting a user permission to access or
	// change only resources with certain tag values.
	//
	// Tags don't have any semantic meaning to Amazon Web Services and are interpreted
	// strictly as strings of characters.
	//
	// You can associate as many as 50 tags with a project.
	//
	// For more information, see Tagging Amazon Web Services resources (https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html).
	Tags map[string]*string `locationName:"tags" type:"map"`
}

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

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

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

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

// SetAppConfigResource sets the AppConfigResource field's value.
func (s *CreateProjectInput) SetAppConfigResource(v *ProjectAppConfigResourceConfig) *CreateProjectInput {
	s.AppConfigResource = v
	return s
}

// SetDataDelivery sets the DataDelivery field's value.
func (s *CreateProjectInput) SetDataDelivery(v *ProjectDataDeliveryConfig) *CreateProjectInput {
	s.DataDelivery = v
	return s
}

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

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

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

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

	// A structure that contains information about the created project.
	//
	// Project is a required field
	Project *Project `locationName:"project" 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 CreateProjectOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetProject sets the Project field's value.
func (s *CreateProjectOutput) SetProject(v *Project) *CreateProjectOutput {
	s.Project = v
	return s
}

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

	// An optional description for this segment.
	Description *string `locationName:"description" type:"string"`

	// A name for the segment.
	//
	// Name is a required field
	Name *string `locationName:"name" min:"1" type:"string" required:"true"`

	// The pattern to use for the segment. For more information about pattern syntax,
	// see Segment rule pattern syntax (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Evidently-segments.html#CloudWatch-Evidently-segments-syntax.html).
	//
	// Pattern is a required field
	Pattern *string `locationName:"pattern" min:"1" type:"string" required:"true"`

	// Assigns one or more tags (key-value pairs) to the segment.
	//
	// Tags can help you organize and categorize your resources. You can also use
	// them to scope user permissions by granting a user permission to access or
	// change only resources with certain tag values.
	//
	// Tags don't have any semantic meaning to Amazon Web Services and are interpreted
	// strictly as strings of characters.
	//
	// You can associate as many as 50 tags with a segment.
	//
	// For more information, see Tagging Amazon Web Services resources (https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html).
	Tags map[string]*string `locationName:"tags" type:"map"`
}

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

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

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

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

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

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

// SetPattern sets the Pattern field's value.
func (s *CreateSegmentInput) SetPattern(v string) *CreateSegmentInput {
	s.Pattern = &v
	return s
}

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

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

	// A structure that contains the complete information about the segment that
	// was just created.
	//
	// Segment is a required field
	Segment *Segment `locationName:"segment" 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 CreateSegmentOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetSegment sets the Segment field's value.
func (s *CreateSegmentOutput) SetSegment(v *Segment) *CreateSegmentOutput {
	s.Segment = v
	return s
}

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

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

	// The name or ARN of the project that contains the experiment to delete.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 DeleteExperimentInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetExperiment sets the Experiment field's value.
func (s *DeleteExperimentInput) SetExperiment(v string) *DeleteExperimentInput {
	s.Experiment = &v
	return s
}

// SetProject sets the Project field's value.
func (s *DeleteExperimentInput) SetProject(v string) *DeleteExperimentInput {
	s.Project = &v
	return s
}

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

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

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

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

	// The name or ARN of the project that contains the feature to delete.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 DeleteFeatureInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetFeature sets the Feature field's value.
func (s *DeleteFeatureInput) SetFeature(v string) *DeleteFeatureInput {
	s.Feature = &v
	return s
}

// SetProject sets the Project field's value.
func (s *DeleteFeatureInput) SetProject(v string) *DeleteFeatureInput {
	s.Project = &v
	return s
}

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

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

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

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

	// The name or ARN of the project that contains the launch to delete.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 DeleteLaunchInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetLaunch sets the Launch field's value.
func (s *DeleteLaunchInput) SetLaunch(v string) *DeleteLaunchInput {
	s.Launch = &v
	return s
}

// SetProject sets the Project field's value.
func (s *DeleteLaunchInput) SetProject(v string) *DeleteLaunchInput {
	s.Project = &v
	return s
}

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

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

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

	// The name or ARN of the project to delete.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 DeleteProjectInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetProject sets the Project field's value.
func (s *DeleteProjectInput) SetProject(v string) *DeleteProjectInput {
	s.Project = &v
	return s
}

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

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

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

	// Specifies the segment to delete.
	//
	// Segment is a required field
	Segment *string `location:"uri" locationName:"segment" 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 DeleteSegmentInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetSegment sets the Segment field's value.
func (s *DeleteSegmentInput) SetSegment(v string) *DeleteSegmentInput {
	s.Segment = &v
	return s
}

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

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

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

	// An internal ID that represents a unique user of the application. This entityID
	// is checked against any override rules assigned for this feature.
	//
	// EntityId is a required field
	EntityId *string `locationName:"entityId" min:"1" type:"string" required:"true"`

	// A JSON object of attributes that you can optionally pass in as part of the
	// evaluation event sent to Evidently from the user session. Evidently can use
	// this value to match user sessions with defined audience segments. For more
	// information, see Use segments to focus your audience (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Evidently-segments.html).
	//
	// If you include this parameter, the value must be a JSON object. A JSON array
	// is not supported.
	EvaluationContext *string `locationName:"evaluationContext" type:"string"`

	// The name of the feature being evaluated.
	//
	// Feature is a required field
	Feature *string `location:"uri" locationName:"feature" min:"1" type:"string" required:"true"`

	// The name or ARN of the project that contains this feature.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 EvaluateFeatureInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetEntityId sets the EntityId field's value.
func (s *EvaluateFeatureInput) SetEntityId(v string) *EvaluateFeatureInput {
	s.EntityId = &v
	return s
}

// SetEvaluationContext sets the EvaluationContext field's value.
func (s *EvaluateFeatureInput) SetEvaluationContext(v string) *EvaluateFeatureInput {
	s.EvaluationContext = &v
	return s
}

// SetFeature sets the Feature field's value.
func (s *EvaluateFeatureInput) SetFeature(v string) *EvaluateFeatureInput {
	s.Feature = &v
	return s
}

// SetProject sets the Project field's value.
func (s *EvaluateFeatureInput) SetProject(v string) *EvaluateFeatureInput {
	s.Project = &v
	return s
}

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

	// If this user was assigned to a launch or experiment, this field lists the
	// launch or experiment name.
	Details *string `locationName:"details" type:"string"`

	// Specifies the reason that the user session was assigned this variation. Possible
	// values include DEFAULT, meaning the user was served the default variation;
	// LAUNCH_RULE_MATCH, if the user session was enrolled in a launch; EXPERIMENT_RULE_MATCH,
	// if the user session was enrolled in an experiment; or ENTITY_OVERRIDES_MATCH,
	// if the user's entityId matches an override rule.
	Reason *string `locationName:"reason" type:"string"`

	// The value assigned to this variation to differentiate it from the other variations
	// of this feature.
	Value *VariableValue `locationName:"value" type:"structure"`

	// The name of the variation that was served to the user session.
	Variation *string `locationName:"variation" 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 EvaluateFeatureOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetDetails sets the Details field's value.
func (s *EvaluateFeatureOutput) SetDetails(v string) *EvaluateFeatureOutput {
	s.Details = &v
	return s
}

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

// SetValue sets the Value field's value.
func (s *EvaluateFeatureOutput) SetValue(v *VariableValue) *EvaluateFeatureOutput {
	s.Value = v
	return s
}

// SetVariation sets the Variation field's value.
func (s *EvaluateFeatureOutput) SetVariation(v string) *EvaluateFeatureOutput {
	s.Variation = &v
	return s
}

// This structure assigns a feature variation to one user session.
type EvaluationRequest struct {
	_ struct{} `type:"structure"`

	// An internal ID that represents a unique user session of the application.
	// This entityID is checked against any override rules assigned for this feature.
	//
	// EntityId is a required field
	EntityId *string `locationName:"entityId" min:"1" type:"string" required:"true"`

	// A JSON block of attributes that you can optionally pass in. This JSON block
	// is included in the evaluation events sent to Evidently from the user session.
	EvaluationContext *string `locationName:"evaluationContext" type:"string"`

	// The name of the feature being evaluated.
	//
	// Feature is a required field
	Feature *string `locationName:"feature" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetEntityId sets the EntityId field's value.
func (s *EvaluationRequest) SetEntityId(v string) *EvaluationRequest {
	s.EntityId = &v
	return s
}

// SetEvaluationContext sets the EvaluationContext field's value.
func (s *EvaluationRequest) SetEvaluationContext(v string) *EvaluationRequest {
	s.EvaluationContext = &v
	return s
}

// SetFeature sets the Feature field's value.
func (s *EvaluationRequest) SetFeature(v string) *EvaluationRequest {
	s.Feature = &v
	return s
}

// This structure displays the results of one feature evaluation assignment
// to one user session.
type EvaluationResult struct {
	_ struct{} `type:"structure"`

	// If this user was assigned to a launch or experiment, this field lists the
	// launch or experiment name.
	Details *string `locationName:"details" type:"string"`

	// An internal ID that represents a unique user session of the application.
	//
	// EntityId is a required field
	EntityId *string `locationName:"entityId" min:"1" type:"string" required:"true"`

	// The name of the feature being evaluated.
	//
	// Feature is a required field
	Feature *string `locationName:"feature" min:"1" type:"string" required:"true"`

	// The name or ARN of the project that contains the feature being evaluated.
	Project *string `locationName:"project" type:"string"`

	// Specifies the reason that the user session was assigned this variation. Possible
	// values include DEFAULT, meaning the user was served the default variation;
	// LAUNCH_RULE_MATCH, if the user session was enrolled in a launch; or EXPERIMENT_RULE_MATCH,
	// if the user session was enrolled in an experiment.
	Reason *string `locationName:"reason" type:"string"`

	// The value assigned to this variation to differentiate it from the other variations
	// of this feature.
	Value *VariableValue `locationName:"value" type:"structure"`

	// The name of the variation that was served to the user session.
	Variation *string `locationName:"variation" 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 EvaluationResult) String() string {
	return awsutil.Prettify(s)
}

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

// SetDetails sets the Details field's value.
func (s *EvaluationResult) SetDetails(v string) *EvaluationResult {
	s.Details = &v
	return s
}

// SetEntityId sets the EntityId field's value.
func (s *EvaluationResult) SetEntityId(v string) *EvaluationResult {
	s.EntityId = &v
	return s
}

// SetFeature sets the Feature field's value.
func (s *EvaluationResult) SetFeature(v string) *EvaluationResult {
	s.Feature = &v
	return s
}

// SetProject sets the Project field's value.
func (s *EvaluationResult) SetProject(v string) *EvaluationResult {
	s.Project = &v
	return s
}

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

// SetValue sets the Value field's value.
func (s *EvaluationResult) SetValue(v *VariableValue) *EvaluationResult {
	s.Value = v
	return s
}

// SetVariation sets the Variation field's value.
func (s *EvaluationResult) SetVariation(v string) *EvaluationResult {
	s.Variation = &v
	return s
}

// A structure that contains the information about an evaluation rule for this
// feature, if it is used in a launch or experiment.
type EvaluationRule struct {
	_ struct{} `type:"structure"`

	// The name of the experiment or launch.
	Name *string `locationName:"name" type:"string"`

	// This value is aws.evidently.splits if this is an evaluation rule for a launch,
	// and it is aws.evidently.onlineab if this is an evaluation rule for an experiment.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true"`
}

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

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

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

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

// A structure that contains the information about one evaluation event or custom
// event sent to Evidently. This is a JSON payload. If this event specifies
// a pre-defined event type, the payload must follow the defined event schema.
type Event struct {
	_ struct{} `type:"structure"`

	// The event data.
	//
	// Data is a required field
	Data *string `locationName:"data" type:"string" required:"true"`

	// The timestamp of the event.
	//
	// Timestamp is a required field
	Timestamp *time.Time `locationName:"timestamp" type:"timestamp" required:"true"`

	// aws.evidently.evaluation specifies an evaluation event, which determines
	// which feature variation that a user sees. aws.evidently.custom specifies
	// a custom event, which generates metrics from user actions such as clicks
	// and checkouts.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true" enum:"EventType"`
}

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

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

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

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

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

// SetTimestamp sets the Timestamp field's value.
func (s *Event) SetTimestamp(v time.Time) *Event {
	s.Timestamp = &v
	return s
}

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

// A structure containing the configuration details of an experiment.
type Experiment struct {
	_ struct{} `type:"structure"`

	// The ARN of the experiment.
	//
	// Arn is a required field
	Arn *string `locationName:"arn" type:"string" required:"true"`

	// The date and time that the experiment is first created.
	//
	// CreatedTime is a required field
	CreatedTime *time.Time `locationName:"createdTime" type:"timestamp" required:"true"`

	// A description of the experiment.
	Description *string `locationName:"description" type:"string"`

	// A structure that contains the date and time that the experiment started and
	// ended.
	Execution *ExperimentExecution `locationName:"execution" type:"structure"`

	// The date and time that the experiment was most recently updated.
	//
	// LastUpdatedTime is a required field
	LastUpdatedTime *time.Time `locationName:"lastUpdatedTime" type:"timestamp" required:"true"`

	// An array of structures that defines the metrics used for the experiment,
	// and whether a higher or lower value for each metric is the goal.
	MetricGoals []*MetricGoal `locationName:"metricGoals" min:"1" type:"list"`

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

	// A structure that contains the configuration of which variation to use as
	// the "control" version. The "control" version is used for comparison with
	// other variations. This structure also specifies how much experiment traffic
	// is allocated to each variation.
	OnlineAbDefinition *OnlineAbDefinition `locationName:"onlineAbDefinition" type:"structure"`

	// The name or ARN of the project that contains this experiment.
	Project *string `locationName:"project" type:"string"`

	// This value is used when Evidently assigns a particular user session to the
	// experiment. It helps create a randomization ID to determine which variation
	// the user session is served. This randomization ID is a combination of the
	// entity ID and randomizationSalt.
	RandomizationSalt *string `locationName:"randomizationSalt" type:"string"`

	// In thousandths of a percent, the amount of the available audience that is
	// allocated to this experiment. The available audience is the total audience
	// minus the audience that you have allocated to overrides or current launches
	// of this feature.
	//
	// This is represented in thousandths of a percent, so a value of 10,000 is
	// 10% of the available audience.
	SamplingRate *int64 `locationName:"samplingRate" type:"long"`

	// A structure that contains the time and date that Evidently completed the
	// analysis of the experiment.
	Schedule *ExperimentSchedule `locationName:"schedule" type:"structure"`

	// The audience segment being used for the experiment, if a segment is being
	// used.
	Segment *string `locationName:"segment" type:"string"`

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

	// If the experiment was stopped, this is the string that was entered by the
	// person who stopped the experiment, to explain why it was stopped.
	StatusReason *string `locationName:"statusReason" type:"string"`

	// The list of tag keys and values associated with this experiment.
	Tags map[string]*string `locationName:"tags" type:"map"`

	// An array of structures that describe the configuration of each feature variation
	// used in the experiment.
	Treatments []*Treatment `locationName:"treatments" min:"2" type:"list"`

	// The type of this experiment. Currently, this value must be aws.experiment.onlineab.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true" enum:"ExperimentType"`
}

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

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

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

// SetCreatedTime sets the CreatedTime field's value.
func (s *Experiment) SetCreatedTime(v time.Time) *Experiment {
	s.CreatedTime = &v
	return s
}

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

// SetExecution sets the Execution field's value.
func (s *Experiment) SetExecution(v *ExperimentExecution) *Experiment {
	s.Execution = v
	return s
}

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

// SetMetricGoals sets the MetricGoals field's value.
func (s *Experiment) SetMetricGoals(v []*MetricGoal) *Experiment {
	s.MetricGoals = v
	return s
}

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

// SetOnlineAbDefinition sets the OnlineAbDefinition field's value.
func (s *Experiment) SetOnlineAbDefinition(v *OnlineAbDefinition) *Experiment {
	s.OnlineAbDefinition = v
	return s
}

// SetProject sets the Project field's value.
func (s *Experiment) SetProject(v string) *Experiment {
	s.Project = &v
	return s
}

// SetRandomizationSalt sets the RandomizationSalt field's value.
func (s *Experiment) SetRandomizationSalt(v string) *Experiment {
	s.RandomizationSalt = &v
	return s
}

// SetSamplingRate sets the SamplingRate field's value.
func (s *Experiment) SetSamplingRate(v int64) *Experiment {
	s.SamplingRate = &v
	return s
}

// SetSchedule sets the Schedule field's value.
func (s *Experiment) SetSchedule(v *ExperimentSchedule) *Experiment {
	s.Schedule = v
	return s
}

// SetSegment sets the Segment field's value.
func (s *Experiment) SetSegment(v string) *Experiment {
	s.Segment = &v
	return s
}

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

// SetStatusReason sets the StatusReason field's value.
func (s *Experiment) SetStatusReason(v string) *Experiment {
	s.StatusReason = &v
	return s
}

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

// SetTreatments sets the Treatments field's value.
func (s *Experiment) SetTreatments(v []*Treatment) *Experiment {
	s.Treatments = v
	return s
}

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

// This structure contains the date and time that the experiment started and
// ended.
type ExperimentExecution struct {
	_ struct{} `type:"structure"`

	// The date and time that the experiment ended.
	EndedTime *time.Time `locationName:"endedTime" type:"timestamp"`

	// The date and time that the experiment started.
	StartedTime *time.Time `locationName:"startedTime" 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 ExperimentExecution) String() string {
	return awsutil.Prettify(s)
}

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

// SetEndedTime sets the EndedTime field's value.
func (s *ExperimentExecution) SetEndedTime(v time.Time) *ExperimentExecution {
	s.EndedTime = &v
	return s
}

// SetStartedTime sets the StartedTime field's value.
func (s *ExperimentExecution) SetStartedTime(v time.Time) *ExperimentExecution {
	s.StartedTime = &v
	return s
}

// A structure that contains results of an experiment.
type ExperimentReport struct {
	_ struct{} `type:"structure"`

	// The content of the report.
	Content *string `locationName:"content" type:"string"`

	// The name of the metric that is analyzed in this experiment report.
	MetricName *string `locationName:"metricName" min:"1" type:"string"`

	// The type of analysis used for this report.
	ReportName *string `locationName:"reportName" type:"string" enum:"ExperimentReportName"`

	// The name of the variation that this report pertains to.
	TreatmentName *string `locationName:"treatmentName" 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 ExperimentReport) String() string {
	return awsutil.Prettify(s)
}

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

// SetContent sets the Content field's value.
func (s *ExperimentReport) SetContent(v string) *ExperimentReport {
	s.Content = &v
	return s
}

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

// SetReportName sets the ReportName field's value.
func (s *ExperimentReport) SetReportName(v string) *ExperimentReport {
	s.ReportName = &v
	return s
}

// SetTreatmentName sets the TreatmentName field's value.
func (s *ExperimentReport) SetTreatmentName(v string) *ExperimentReport {
	s.TreatmentName = &v
	return s
}

// A structure that contains experiment results for one metric that is monitored
// in the experiment.
type ExperimentResultsData struct {
	_ struct{} `type:"structure"`

	// The name of the metric.
	MetricName *string `locationName:"metricName" min:"1" type:"string"`

	// The experiment statistic that these results pertain to.
	ResultStat *string `locationName:"resultStat" type:"string" enum:"ExperimentResultResponseType"`

	// The treatment, or variation, that returned the values in this structure.
	TreatmentName *string `locationName:"treatmentName" min:"1" type:"string"`

	// The values for the metricName that were recorded in the experiment.
	Values []*float64 `locationName:"values" 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 ExperimentResultsData) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetResultStat sets the ResultStat field's value.
func (s *ExperimentResultsData) SetResultStat(v string) *ExperimentResultsData {
	s.ResultStat = &v
	return s
}

// SetTreatmentName sets the TreatmentName field's value.
func (s *ExperimentResultsData) SetTreatmentName(v string) *ExperimentResultsData {
	s.TreatmentName = &v
	return s
}

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

// This structure contains the time and date that Evidently completed the analysis
// of the experiment.
type ExperimentSchedule struct {
	_ struct{} `type:"structure"`

	// The time and date that Evidently completed the analysis of the experiment.
	AnalysisCompleteTime *time.Time `locationName:"analysisCompleteTime" 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 ExperimentSchedule) String() string {
	return awsutil.Prettify(s)
}

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

// SetAnalysisCompleteTime sets the AnalysisCompleteTime field's value.
func (s *ExperimentSchedule) SetAnalysisCompleteTime(v time.Time) *ExperimentSchedule {
	s.AnalysisCompleteTime = &v
	return s
}

// This structure contains information about one Evidently feature in your account.
type Feature struct {
	_ struct{} `type:"structure"`

	// The ARN of the feature.
	//
	// Arn is a required field
	Arn *string `locationName:"arn" type:"string" required:"true"`

	// The date and time that the feature is created.
	//
	// CreatedTime is a required field
	CreatedTime *time.Time `locationName:"createdTime" type:"timestamp" required:"true"`

	// The name of the variation that is used as the default variation. The default
	// variation is served to users who are not allocated to any ongoing launches
	// or experiments of this feature.
	//
	// This variation must also be listed in the variations structure.
	//
	// If you omit defaultVariation, the first variation listed in the variations
	// structure is used as the default variation.
	DefaultVariation *string `locationName:"defaultVariation" min:"1" type:"string"`

	// The description of the feature.
	Description *string `locationName:"description" type:"string"`

	// A set of key-value pairs that specify users who should always be served a
	// specific variation of a feature. Each key specifies a user using their user
	// ID, account ID, or some other identifier. The value specifies the name of
	// the variation that the user is to be served.
	//
	// For the override to be successful, the value of the key must match the entityId
	// used in the EvaluateFeature (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_EvaluateFeature.html)
	// operation.
	EntityOverrides map[string]*string `locationName:"entityOverrides" type:"map"`

	// An array of structures that define the evaluation rules for the feature.
	EvaluationRules []*EvaluationRule `locationName:"evaluationRules" type:"list"`

	// If this value is ALL_RULES, the traffic allocation specified by any ongoing
	// launches or experiments is being used. If this is DEFAULT_VARIATION, the
	// default variation is being served to all users.
	//
	// EvaluationStrategy is a required field
	EvaluationStrategy *string `locationName:"evaluationStrategy" type:"string" required:"true" enum:"FeatureEvaluationStrategy"`

	// The date and time that the feature was most recently updated.
	//
	// LastUpdatedTime is a required field
	LastUpdatedTime *time.Time `locationName:"lastUpdatedTime" type:"timestamp" required:"true"`

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

	// The name or ARN of the project that contains the feature.
	Project *string `locationName:"project" type:"string"`

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

	// The list of tag keys and values associated with this feature.
	Tags map[string]*string `locationName:"tags" type:"map"`

	// Defines the type of value used to define the different feature variations.
	// For more information, see Variation types (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Evidently-variationtypes.html)
	//
	// ValueType is a required field
	ValueType *string `locationName:"valueType" type:"string" required:"true" enum:"VariationValueType"`

	// An array of structures that contain the configuration of the feature's different
	// variations.
	//
	// Variations is a required field
	Variations []*Variation `locationName:"variations" 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 Feature) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetCreatedTime sets the CreatedTime field's value.
func (s *Feature) SetCreatedTime(v time.Time) *Feature {
	s.CreatedTime = &v
	return s
}

// SetDefaultVariation sets the DefaultVariation field's value.
func (s *Feature) SetDefaultVariation(v string) *Feature {
	s.DefaultVariation = &v
	return s
}

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

// SetEntityOverrides sets the EntityOverrides field's value.
func (s *Feature) SetEntityOverrides(v map[string]*string) *Feature {
	s.EntityOverrides = v
	return s
}

// SetEvaluationRules sets the EvaluationRules field's value.
func (s *Feature) SetEvaluationRules(v []*EvaluationRule) *Feature {
	s.EvaluationRules = v
	return s
}

// SetEvaluationStrategy sets the EvaluationStrategy field's value.
func (s *Feature) SetEvaluationStrategy(v string) *Feature {
	s.EvaluationStrategy = &v
	return s
}

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

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

// SetProject sets the Project field's value.
func (s *Feature) SetProject(v string) *Feature {
	s.Project = &v
	return s
}

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

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

// SetValueType sets the ValueType field's value.
func (s *Feature) SetValueType(v string) *Feature {
	s.ValueType = &v
	return s
}

// SetVariations sets the Variations field's value.
func (s *Feature) SetVariations(v []*Variation) *Feature {
	s.Variations = v
	return s
}

// This structure contains information about one Evidently feature in your account.
type FeatureSummary struct {
	_ struct{} `type:"structure"`

	// The ARN of the feature.
	//
	// Arn is a required field
	Arn *string `locationName:"arn" type:"string" required:"true"`

	// The date and time that the feature is created.
	//
	// CreatedTime is a required field
	CreatedTime *time.Time `locationName:"createdTime" type:"timestamp" required:"true"`

	// The name of the variation that is used as the default variation. The default
	// variation is served to users who are not allocated to any ongoing launches
	// or experiments of this feature.
	DefaultVariation *string `locationName:"defaultVariation" min:"1" type:"string"`

	// An array of structures that define
	EvaluationRules []*EvaluationRule `locationName:"evaluationRules" type:"list"`

	// If this value is ALL_RULES, the traffic allocation specified by any ongoing
	// launches or experiments is being used. If this is DEFAULT_VARIATION, the
	// default variation is being served to all users.
	//
	// EvaluationStrategy is a required field
	EvaluationStrategy *string `locationName:"evaluationStrategy" type:"string" required:"true" enum:"FeatureEvaluationStrategy"`

	// The date and time that the feature was most recently updated.
	//
	// LastUpdatedTime is a required field
	LastUpdatedTime *time.Time `locationName:"lastUpdatedTime" type:"timestamp" required:"true"`

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

	// The name or ARN of the project that contains the feature.
	Project *string `locationName:"project" type:"string"`

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

	// The list of tag keys and values associated with this feature.
	Tags map[string]*string `locationName:"tags" type:"map"`
}

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

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

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

// SetCreatedTime sets the CreatedTime field's value.
func (s *FeatureSummary) SetCreatedTime(v time.Time) *FeatureSummary {
	s.CreatedTime = &v
	return s
}

// SetDefaultVariation sets the DefaultVariation field's value.
func (s *FeatureSummary) SetDefaultVariation(v string) *FeatureSummary {
	s.DefaultVariation = &v
	return s
}

// SetEvaluationRules sets the EvaluationRules field's value.
func (s *FeatureSummary) SetEvaluationRules(v []*EvaluationRule) *FeatureSummary {
	s.EvaluationRules = v
	return s
}

// SetEvaluationStrategy sets the EvaluationStrategy field's value.
func (s *FeatureSummary) SetEvaluationStrategy(v string) *FeatureSummary {
	s.EvaluationStrategy = &v
	return s
}

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

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

// SetProject sets the Project field's value.
func (s *FeatureSummary) SetProject(v string) *FeatureSummary {
	s.Project = &v
	return s
}

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

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

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

	// The name of the experiment that you want to see the details of.
	//
	// Experiment is a required field
	Experiment *string `location:"uri" locationName:"experiment" min:"1" type:"string" required:"true"`

	// The name or ARN of the project that contains the experiment.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 GetExperimentInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetExperiment sets the Experiment field's value.
func (s *GetExperimentInput) SetExperiment(v string) *GetExperimentInput {
	s.Experiment = &v
	return s
}

// SetProject sets the Project field's value.
func (s *GetExperimentInput) SetProject(v string) *GetExperimentInput {
	s.Project = &v
	return s
}

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

	// A structure containing the configuration details of the experiment.
	Experiment *Experiment `locationName:"experiment" 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 GetExperimentOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetExperiment sets the Experiment field's value.
func (s *GetExperimentOutput) SetExperiment(v *Experiment) *GetExperimentOutput {
	s.Experiment = v
	return s
}

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

	// The statistic used to calculate experiment results. Currently the only valid
	// value is mean, which uses the mean of the collected values as the statistic.
	BaseStat *string `locationName:"baseStat" type:"string" enum:"ExperimentBaseStat"`

	// The date and time that the experiment ended, if it is completed. This must
	// be no longer than 30 days after the experiment start time.
	EndTime *time.Time `locationName:"endTime" type:"timestamp"`

	// The name of the experiment to retrieve the results of.
	//
	// Experiment is a required field
	Experiment *string `location:"uri" locationName:"experiment" min:"1" type:"string" required:"true"`

	// The names of the experiment metrics that you want to see the results of.
	//
	// MetricNames is a required field
	MetricNames []*string `locationName:"metricNames" min:"1" type:"list" required:"true"`

	// In seconds, the amount of time to aggregate results together.
	Period *int64 `locationName:"period" min:"300" type:"long"`

	// The name or ARN of the project that contains the experiment that you want
	// to see the results of.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" type:"string" required:"true"`

	// The names of the report types that you want to see. Currently, BayesianInference
	// is the only valid value.
	ReportNames []*string `locationName:"reportNames" type:"list" enum:"ExperimentReportName"`

	// The statistics that you want to see in the returned results.
	//
	//    * PValue specifies to use p-values for the results. A p-value is used
	//    in hypothesis testing to measure how often you are willing to make a mistake
	//    in rejecting the null hypothesis. A general practice is to reject the
	//    null hypothesis and declare that the results are statistically significant
	//    when the p-value is less than 0.05.
	//
	//    * ConfidenceInterval specifies a confidence interval for the results.
	//    The confidence interval represents the range of values for the chosen
	//    metric that is likely to contain the true difference between the baseStat
	//    of a variation and the baseline. Evidently returns the 95% confidence
	//    interval.
	//
	//    * TreatmentEffect is the difference in the statistic specified by the
	//    baseStat parameter between each variation and the default variation.
	//
	//    * BaseStat returns the statistical values collected for the metric for
	//    each variation. The statistic uses the same statistic specified in the
	//    baseStat parameter. Therefore, if baseStat is mean, this returns the mean
	//    of the values collected for each variation.
	ResultStats []*string `locationName:"resultStats" type:"list" enum:"ExperimentResultRequestType"`

	// The date and time that the experiment started.
	StartTime *time.Time `locationName:"startTime" type:"timestamp"`

	// The names of the experiment treatments that you want to see the results for.
	//
	// TreatmentNames is a required field
	TreatmentNames []*string `locationName:"treatmentNames" min:"1" type:"list" required:"true"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetExperimentResultsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetExperimentResultsInput"}
	if s.Experiment == nil {
		invalidParams.Add(request.NewErrParamRequired("Experiment"))
	}
	if s.Experiment != nil && len(*s.Experiment) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Experiment", 1))
	}
	if s.MetricNames == nil {
		invalidParams.Add(request.NewErrParamRequired("MetricNames"))
	}
	if s.MetricNames != nil && len(s.MetricNames) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("MetricNames", 1))
	}
	if s.Period != nil && *s.Period < 300 {
		invalidParams.Add(request.NewErrParamMinValue("Period", 300))
	}
	if s.Project == nil {
		invalidParams.Add(request.NewErrParamRequired("Project"))
	}
	if s.Project != nil && len(*s.Project) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("Project", 1))
	}
	if s.TreatmentNames == nil {
		invalidParams.Add(request.NewErrParamRequired("TreatmentNames"))
	}
	if s.TreatmentNames != nil && len(s.TreatmentNames) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("TreatmentNames", 1))
	}

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

// SetBaseStat sets the BaseStat field's value.
func (s *GetExperimentResultsInput) SetBaseStat(v string) *GetExperimentResultsInput {
	s.BaseStat = &v
	return s
}

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

// SetExperiment sets the Experiment field's value.
func (s *GetExperimentResultsInput) SetExperiment(v string) *GetExperimentResultsInput {
	s.Experiment = &v
	return s
}

// SetMetricNames sets the MetricNames field's value.
func (s *GetExperimentResultsInput) SetMetricNames(v []*string) *GetExperimentResultsInput {
	s.MetricNames = v
	return s
}

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

// SetProject sets the Project field's value.
func (s *GetExperimentResultsInput) SetProject(v string) *GetExperimentResultsInput {
	s.Project = &v
	return s
}

// SetReportNames sets the ReportNames field's value.
func (s *GetExperimentResultsInput) SetReportNames(v []*string) *GetExperimentResultsInput {
	s.ReportNames = v
	return s
}

// SetResultStats sets the ResultStats field's value.
func (s *GetExperimentResultsInput) SetResultStats(v []*string) *GetExperimentResultsInput {
	s.ResultStats = v
	return s
}

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

// SetTreatmentNames sets the TreatmentNames field's value.
func (s *GetExperimentResultsInput) SetTreatmentNames(v []*string) *GetExperimentResultsInput {
	s.TreatmentNames = v
	return s
}

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

	// If the experiment doesn't yet have enough events to provide valid results,
	// this field is returned with the message Not enough events to generate results.
	// If there are enough events to provide valid results, this field is not returned.
	Details *string `locationName:"details" type:"string"`

	// An array of structures that include the reports that you requested.
	Reports []*ExperimentReport `locationName:"reports" type:"list"`

	// An array of structures that include experiment results including metric names
	// and values.
	ResultsData []*ExperimentResultsData `locationName:"resultsData" type:"list"`

	// The timestamps of each result returned.
	Timestamps []*time.Time `locationName:"timestamps" 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 GetExperimentResultsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetDetails sets the Details field's value.
func (s *GetExperimentResultsOutput) SetDetails(v string) *GetExperimentResultsOutput {
	s.Details = &v
	return s
}

// SetReports sets the Reports field's value.
func (s *GetExperimentResultsOutput) SetReports(v []*ExperimentReport) *GetExperimentResultsOutput {
	s.Reports = v
	return s
}

// SetResultsData sets the ResultsData field's value.
func (s *GetExperimentResultsOutput) SetResultsData(v []*ExperimentResultsData) *GetExperimentResultsOutput {
	s.ResultsData = v
	return s
}

// SetTimestamps sets the Timestamps field's value.
func (s *GetExperimentResultsOutput) SetTimestamps(v []*time.Time) *GetExperimentResultsOutput {
	s.Timestamps = v
	return s
}

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

	// The name of the feature that you want to retrieve information for.
	//
	// Feature is a required field
	Feature *string `location:"uri" locationName:"feature" min:"1" type:"string" required:"true"`

	// The name or ARN of the project that contains the feature.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 GetFeatureInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetFeature sets the Feature field's value.
func (s *GetFeatureInput) SetFeature(v string) *GetFeatureInput {
	s.Feature = &v
	return s
}

// SetProject sets the Project field's value.
func (s *GetFeatureInput) SetProject(v string) *GetFeatureInput {
	s.Project = &v
	return s
}

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

	// A structure containing the configuration details of the feature.
	//
	// Feature is a required field
	Feature *Feature `locationName:"feature" 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 GetFeatureOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetFeature sets the Feature field's value.
func (s *GetFeatureOutput) SetFeature(v *Feature) *GetFeatureOutput {
	s.Feature = v
	return s
}

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

	// The name of the launch that you want to see the details of.
	//
	// Launch is a required field
	Launch *string `location:"uri" locationName:"launch" min:"1" type:"string" required:"true"`

	// The name or ARN of the project that contains the launch.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 GetLaunchInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetLaunch sets the Launch field's value.
func (s *GetLaunchInput) SetLaunch(v string) *GetLaunchInput {
	s.Launch = &v
	return s
}

// SetProject sets the Project field's value.
func (s *GetLaunchInput) SetProject(v string) *GetLaunchInput {
	s.Project = &v
	return s
}

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

	// A structure containing the configuration details of the launch.
	Launch *Launch `locationName:"launch" 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 GetLaunchOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetLaunch sets the Launch field's value.
func (s *GetLaunchOutput) SetLaunch(v *Launch) *GetLaunchOutput {
	s.Launch = v
	return s
}

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

	// The name or ARN of the project that you want to see the details of.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 GetProjectInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetProject sets the Project field's value.
func (s *GetProjectInput) SetProject(v string) *GetProjectInput {
	s.Project = &v
	return s
}

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

	// A structure containing the configuration details of the project.
	//
	// Project is a required field
	Project *Project `locationName:"project" 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 GetProjectOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetProject sets the Project field's value.
func (s *GetProjectOutput) SetProject(v *Project) *GetProjectOutput {
	s.Project = v
	return s
}

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

	// The ARN of the segment to return information for.
	//
	// Segment is a required field
	Segment *string `location:"uri" locationName:"segment" 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 GetSegmentInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetSegment sets the Segment field's value.
func (s *GetSegmentInput) SetSegment(v string) *GetSegmentInput {
	s.Segment = &v
	return s
}

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

	// A structure that contains the complete information about the segment.
	//
	// Segment is a required field
	Segment *Segment `locationName:"segment" 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 GetSegmentOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetSegment sets the Segment field's value.
func (s *GetSegmentOutput) SetSegment(v *Segment) *GetSegmentOutput {
	s.Segment = v
	return s
}

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

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

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

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

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

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

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

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

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

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

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

// This structure contains the configuration details of one Evidently launch.
type Launch struct {
	_ struct{} `type:"structure"`

	// The ARN of the launch.
	//
	// Arn is a required field
	Arn *string `locationName:"arn" type:"string" required:"true"`

	// The date and time that the launch is created.
	//
	// CreatedTime is a required field
	CreatedTime *time.Time `locationName:"createdTime" type:"timestamp" required:"true"`

	// The description of the launch.
	Description *string `locationName:"description" type:"string"`

	// A structure that contains information about the start and end times of the
	// launch.
	Execution *LaunchExecution `locationName:"execution" type:"structure"`

	// An array of structures that define the feature variations that are being
	// used in the launch.
	Groups []*LaunchGroup `locationName:"groups" type:"list"`

	// The date and time that the launch was most recently updated.
	//
	// LastUpdatedTime is a required field
	LastUpdatedTime *time.Time `locationName:"lastUpdatedTime" type:"timestamp" required:"true"`

	// An array of structures that define the metrics that are being used to monitor
	// the launch performance.
	MetricMonitors []*MetricMonitor `locationName:"metricMonitors" type:"list"`

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

	// The name or ARN of the project that contains the launch.
	Project *string `locationName:"project" type:"string"`

	// This value is used when Evidently assigns a particular user session to the
	// launch, to help create a randomization ID to determine which variation the
	// user session is served. This randomization ID is a combination of the entity
	// ID and randomizationSalt.
	RandomizationSalt *string `locationName:"randomizationSalt" type:"string"`

	// An array of structures that define the traffic allocation percentages among
	// the feature variations during each step of the launch.
	ScheduledSplitsDefinition *ScheduledSplitsLaunchDefinition `locationName:"scheduledSplitsDefinition" type:"structure"`

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

	// If the launch was stopped, this is the string that was entered by the person
	// who stopped the launch, to explain why it was stopped.
	StatusReason *string `locationName:"statusReason" type:"string"`

	// The list of tag keys and values associated with this launch.
	Tags map[string]*string `locationName:"tags" type:"map"`

	// The type of launch.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true" enum:"LaunchType"`
}

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

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

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

// SetCreatedTime sets the CreatedTime field's value.
func (s *Launch) SetCreatedTime(v time.Time) *Launch {
	s.CreatedTime = &v
	return s
}

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

// SetExecution sets the Execution field's value.
func (s *Launch) SetExecution(v *LaunchExecution) *Launch {
	s.Execution = v
	return s
}

// SetGroups sets the Groups field's value.
func (s *Launch) SetGroups(v []*LaunchGroup) *Launch {
	s.Groups = v
	return s
}

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

// SetMetricMonitors sets the MetricMonitors field's value.
func (s *Launch) SetMetricMonitors(v []*MetricMonitor) *Launch {
	s.MetricMonitors = v
	return s
}

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

// SetProject sets the Project field's value.
func (s *Launch) SetProject(v string) *Launch {
	s.Project = &v
	return s
}

// SetRandomizationSalt sets the RandomizationSalt field's value.
func (s *Launch) SetRandomizationSalt(v string) *Launch {
	s.RandomizationSalt = &v
	return s
}

// SetScheduledSplitsDefinition sets the ScheduledSplitsDefinition field's value.
func (s *Launch) SetScheduledSplitsDefinition(v *ScheduledSplitsLaunchDefinition) *Launch {
	s.ScheduledSplitsDefinition = v
	return s
}

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

// SetStatusReason sets the StatusReason field's value.
func (s *Launch) SetStatusReason(v string) *Launch {
	s.StatusReason = &v
	return s
}

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

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

// This structure contains information about the start and end times of the
// launch.
type LaunchExecution struct {
	_ struct{} `type:"structure"`

	// The date and time that the launch ended.
	EndedTime *time.Time `locationName:"endedTime" type:"timestamp"`

	// The date and time that the launch started.
	StartedTime *time.Time `locationName:"startedTime" 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 LaunchExecution) String() string {
	return awsutil.Prettify(s)
}

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

// SetEndedTime sets the EndedTime field's value.
func (s *LaunchExecution) SetEndedTime(v time.Time) *LaunchExecution {
	s.EndedTime = &v
	return s
}

// SetStartedTime sets the StartedTime field's value.
func (s *LaunchExecution) SetStartedTime(v time.Time) *LaunchExecution {
	s.StartedTime = &v
	return s
}

// A structure that defines one launch group in a launch. A launch group is
// a variation of the feature that you are including in the launch.
type LaunchGroup struct {
	_ struct{} `type:"structure"`

	// A description of the launch group.
	Description *string `locationName:"description" type:"string"`

	// The feature variation for this launch group. This is a key-value pair.
	//
	// FeatureVariations is a required field
	FeatureVariations map[string]*string `locationName:"featureVariations" type:"map" required:"true"`

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

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

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

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

// SetFeatureVariations sets the FeatureVariations field's value.
func (s *LaunchGroup) SetFeatureVariations(v map[string]*string) *LaunchGroup {
	s.FeatureVariations = v
	return s
}

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

// A structure that defines one launch group in a launch. A launch group is
// a variation of the feature that you are including in the launch.
type LaunchGroupConfig struct {
	_ struct{} `type:"structure"`

	// A description of the launch group.
	Description *string `locationName:"description" type:"string"`

	// The feature that this launch is using.
	//
	// Feature is a required field
	Feature *string `locationName:"feature" min:"1" type:"string" required:"true"`

	// A name for this launch group.
	//
	// Name is a required field
	Name *string `locationName:"name" min:"1" type:"string" required:"true"`

	// The feature variation to use for this launch group.
	//
	// Variation is a required field
	Variation *string `locationName:"variation" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

// SetFeature sets the Feature field's value.
func (s *LaunchGroupConfig) SetFeature(v string) *LaunchGroupConfig {
	s.Feature = &v
	return s
}

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

// SetVariation sets the Variation field's value.
func (s *LaunchGroupConfig) SetVariation(v string) *LaunchGroupConfig {
	s.Variation = &v
	return s
}

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

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

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

	// The name or ARN of the project to return the experiment list from.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" type:"string" required:"true"`

	// Use this optional parameter to limit the returned results to only the experiments
	// with the status that you specify here.
	Status *string `location:"querystring" locationName:"status" type:"string" enum:"ExperimentStatus"`
}

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

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

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

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

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

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

// SetProject sets the Project field's value.
func (s *ListExperimentsInput) SetProject(v string) *ListExperimentsInput {
	s.Project = &v
	return s
}

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

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

	// An array of structures that contain the configuration details of the experiments
	// in the specified project.
	Experiments []*Experiment `locationName:"experiments" type:"list"`

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

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

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

// SetExperiments sets the Experiments field's value.
func (s *ListExperimentsOutput) SetExperiments(v []*Experiment) *ListExperimentsOutput {
	s.Experiments = v
	return s
}

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

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

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

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

	// The name or ARN of the project to return the feature list from.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 ListFeaturesInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

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

// SetProject sets the Project field's value.
func (s *ListFeaturesInput) SetProject(v string) *ListFeaturesInput {
	s.Project = &v
	return s
}

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

	// An array of structures that contain the configuration details of the features
	// in the specified project.
	Features []*FeatureSummary `locationName:"features" type:"list"`

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

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

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

// SetFeatures sets the Features field's value.
func (s *ListFeaturesOutput) SetFeatures(v []*FeatureSummary) *ListFeaturesOutput {
	s.Features = v
	return s
}

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

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

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

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

	// The name or ARN of the project to return the launch list from.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" type:"string" required:"true"`

	// Use this optional parameter to limit the returned results to only the launches
	// with the status that you specify here.
	Status *string `location:"querystring" locationName:"status" type:"string" enum:"LaunchStatus"`
}

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

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

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

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

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

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

// SetProject sets the Project field's value.
func (s *ListLaunchesInput) SetProject(v string) *ListLaunchesInput {
	s.Project = &v
	return s
}

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

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

	// An array of structures that contain the configuration details of the launches
	// in the specified project.
	Launches []*Launch `locationName:"launches" type:"list"`

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

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

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

// SetLaunches sets the Launches field's value.
func (s *ListLaunchesOutput) SetLaunches(v []*Launch) *ListLaunchesOutput {
	s.Launches = v
	return s
}

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

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

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

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

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

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

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

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

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

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

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

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

	// An array of structures that contain the configuration details of the projects
	// in the Region.
	Projects []*ProjectSummary `locationName:"projects" 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 ListProjectsOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetProjects sets the Projects field's value.
func (s *ListProjectsOutput) SetProjects(v []*ProjectSummary) *ListProjectsOutput {
	s.Projects = v
	return s
}

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

	// The maximum number of results to include in the response. If you omit this,
	// the default of 50 is used.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

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

	// The ARN of the segment that you want to view information for.
	//
	// Segment is a required field
	Segment *string `location:"uri" locationName:"segment" type:"string" required:"true"`

	// Specifies whether to return information about launches or experiments that
	// use this segment.
	//
	// Type is a required field
	Type *string `location:"querystring" locationName:"type" type:"string" required:"true" enum:"SegmentReferenceResourceType"`
}

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

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

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

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

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

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

// SetSegment sets the Segment field's value.
func (s *ListSegmentReferencesInput) SetSegment(v string) *ListSegmentReferencesInput {
	s.Segment = &v
	return s
}

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

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

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

	// An array of structures, where each structure contains information about one
	// experiment or launch that uses this segment.
	ReferencedBy []*RefResource `locationName:"referencedBy" 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 ListSegmentReferencesOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetReferencedBy sets the ReferencedBy field's value.
func (s *ListSegmentReferencesOutput) SetReferencedBy(v []*RefResource) *ListSegmentReferencesOutput {
	s.ReferencedBy = v
	return s
}

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

	// The maximum number of results to include in the response. If you omit this,
	// the default of 50 is used.
	MaxResults *int64 `location:"querystring" locationName:"maxResults" min:"1" type:"integer"`

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

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

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

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

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

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

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

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

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

	// An array of structures that contain information about the segments in this
	// Region.
	Segments []*Segment `locationName:"segments" 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 ListSegmentsOutput) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetSegments sets the Segments field's value.
func (s *ListSegmentsOutput) SetSegments(v []*Segment) *ListSegmentsOutput {
	s.Segments = v
	return s
}

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

	// The ARN of the resource that you want to see the tags of.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`
}

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

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

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

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

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

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

	// The list of tag keys and values associated with the resource you specified.
	Tags map[string]*string `locationName:"tags" type:"map"`
}

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

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

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

// This structure defines a metric that is being used to evaluate the variations
// during a launch or experiment.
type MetricDefinition struct {
	_ struct{} `type:"structure"`

	// The entity, such as a user or session, that does an action that causes a
	// metric value to be recorded.
	EntityIdKey *string `locationName:"entityIdKey" min:"1" type:"string"`

	// The EventBridge event pattern that defines how the metric is recorded.
	//
	// For more information about EventBridge event patterns, see Amazon EventBridge
	// event patterns (https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html).
	EventPattern *string `locationName:"eventPattern" type:"string"`

	// The name of the metric.
	Name *string `locationName:"name" min:"1" type:"string"`

	// The label for the units that the metric is measuring.
	UnitLabel *string `locationName:"unitLabel" min:"1" type:"string"`

	// The value that is tracked to produce the metric.
	ValueKey *string `locationName:"valueKey" 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 MetricDefinition) String() string {
	return awsutil.Prettify(s)
}

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

// SetEntityIdKey sets the EntityIdKey field's value.
func (s *MetricDefinition) SetEntityIdKey(v string) *MetricDefinition {
	s.EntityIdKey = &v
	return s
}

// SetEventPattern sets the EventPattern field's value.
func (s *MetricDefinition) SetEventPattern(v string) *MetricDefinition {
	s.EventPattern = &v
	return s
}

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

// SetUnitLabel sets the UnitLabel field's value.
func (s *MetricDefinition) SetUnitLabel(v string) *MetricDefinition {
	s.UnitLabel = &v
	return s
}

// SetValueKey sets the ValueKey field's value.
func (s *MetricDefinition) SetValueKey(v string) *MetricDefinition {
	s.ValueKey = &v
	return s
}

// This structure defines a metric that you want to use to evaluate the variations
// during a launch or experiment.
type MetricDefinitionConfig struct {
	_ struct{} `type:"structure"`

	// The entity, such as a user or session, that does an action that causes a
	// metric value to be recorded. An example is userDetails.userID.
	//
	// EntityIdKey is a required field
	EntityIdKey *string `locationName:"entityIdKey" min:"1" type:"string" required:"true"`

	// The EventBridge event pattern that defines how the metric is recorded.
	//
	// For more information about EventBridge event patterns, see Amazon EventBridge
	// event patterns (https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html).
	EventPattern *string `locationName:"eventPattern" type:"string"`

	// A name for the metric.
	//
	// Name is a required field
	Name *string `locationName:"name" min:"1" type:"string" required:"true"`

	// A label for the units that the metric is measuring.
	UnitLabel *string `locationName:"unitLabel" min:"1" type:"string"`

	// The value that is tracked to produce the metric.
	//
	// ValueKey is a required field
	ValueKey *string `locationName:"valueKey" min:"1" type:"string" required:"true"`
}

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

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

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

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

// SetEntityIdKey sets the EntityIdKey field's value.
func (s *MetricDefinitionConfig) SetEntityIdKey(v string) *MetricDefinitionConfig {
	s.EntityIdKey = &v
	return s
}

// SetEventPattern sets the EventPattern field's value.
func (s *MetricDefinitionConfig) SetEventPattern(v string) *MetricDefinitionConfig {
	s.EventPattern = &v
	return s
}

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

// SetUnitLabel sets the UnitLabel field's value.
func (s *MetricDefinitionConfig) SetUnitLabel(v string) *MetricDefinitionConfig {
	s.UnitLabel = &v
	return s
}

// SetValueKey sets the ValueKey field's value.
func (s *MetricDefinitionConfig) SetValueKey(v string) *MetricDefinitionConfig {
	s.ValueKey = &v
	return s
}

// A structure that tells Evidently whether higher or lower values are desired
// for a metric that is used in an experiment.
type MetricGoal struct {
	_ struct{} `type:"structure"`

	// INCREASE means that a variation with a higher number for this metric is performing
	// better.
	//
	// DECREASE means that a variation with a lower number for this metric is performing
	// better.
	DesiredChange *string `locationName:"desiredChange" type:"string" enum:"ChangeDirectionEnum"`

	// A structure that contains details about the metric.
	//
	// MetricDefinition is a required field
	MetricDefinition *MetricDefinition `locationName:"metricDefinition" 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 MetricGoal) String() string {
	return awsutil.Prettify(s)
}

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

// SetDesiredChange sets the DesiredChange field's value.
func (s *MetricGoal) SetDesiredChange(v string) *MetricGoal {
	s.DesiredChange = &v
	return s
}

// SetMetricDefinition sets the MetricDefinition field's value.
func (s *MetricGoal) SetMetricDefinition(v *MetricDefinition) *MetricGoal {
	s.MetricDefinition = v
	return s
}

// Use this structure to tell Evidently whether higher or lower values are desired
// for a metric that is used in an experiment.
type MetricGoalConfig struct {
	_ struct{} `type:"structure"`

	// INCREASE means that a variation with a higher number for this metric is performing
	// better.
	//
	// DECREASE means that a variation with a lower number for this metric is performing
	// better.
	DesiredChange *string `locationName:"desiredChange" type:"string" enum:"ChangeDirectionEnum"`

	// A structure that contains details about the metric.
	//
	// MetricDefinition is a required field
	MetricDefinition *MetricDefinitionConfig `locationName:"metricDefinition" 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 MetricGoalConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetDesiredChange sets the DesiredChange field's value.
func (s *MetricGoalConfig) SetDesiredChange(v string) *MetricGoalConfig {
	s.DesiredChange = &v
	return s
}

// SetMetricDefinition sets the MetricDefinition field's value.
func (s *MetricGoalConfig) SetMetricDefinition(v *MetricDefinitionConfig) *MetricGoalConfig {
	s.MetricDefinition = v
	return s
}

// A structure that defines a metric to be used to monitor performance of the
// variations during a launch.
type MetricMonitor struct {
	_ struct{} `type:"structure"`

	// A structure that defines the metric.
	//
	// MetricDefinition is a required field
	MetricDefinition *MetricDefinition `locationName:"metricDefinition" 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 MetricMonitor) String() string {
	return awsutil.Prettify(s)
}

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

// SetMetricDefinition sets the MetricDefinition field's value.
func (s *MetricMonitor) SetMetricDefinition(v *MetricDefinition) *MetricMonitor {
	s.MetricDefinition = v
	return s
}

// A structure that defines a metric to be used to monitor performance of the
// variations during a launch.
type MetricMonitorConfig struct {
	_ struct{} `type:"structure"`

	// A structure that defines the metric.
	//
	// MetricDefinition is a required field
	MetricDefinition *MetricDefinitionConfig `locationName:"metricDefinition" 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 MetricMonitorConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetMetricDefinition sets the MetricDefinition field's value.
func (s *MetricMonitorConfig) SetMetricDefinition(v *MetricDefinitionConfig) *MetricMonitorConfig {
	s.MetricDefinition = v
	return s
}

// A structure that contains the configuration of which variation to use as
// the "control" version. The "control" version is used for comparison with
// other variations. This structure also specifies how much experiment traffic
// is allocated to each variation.
type OnlineAbConfig struct {
	_ struct{} `type:"structure"`

	// The name of the variation that is to be the default variation that the other
	// variations are compared to.
	ControlTreatmentName *string `locationName:"controlTreatmentName" min:"1" type:"string"`

	// A set of key-value pairs. The keys are variation names, and the values are
	// the portion of experiment traffic to be assigned to that variation. Specify
	// the traffic portion in thousandths of a percent, so 20,000 for a variation
	// would allocate 20% of the experiment traffic to that variation.
	TreatmentWeights map[string]*int64 `locationName:"treatmentWeights" 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 OnlineAbConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetControlTreatmentName sets the ControlTreatmentName field's value.
func (s *OnlineAbConfig) SetControlTreatmentName(v string) *OnlineAbConfig {
	s.ControlTreatmentName = &v
	return s
}

// SetTreatmentWeights sets the TreatmentWeights field's value.
func (s *OnlineAbConfig) SetTreatmentWeights(v map[string]*int64) *OnlineAbConfig {
	s.TreatmentWeights = v
	return s
}

// A structure that contains the configuration of which variation to use as
// the "control" version. The "control" version is used for comparison with
// other variations. This structure also specifies how much experiment traffic
// is allocated to each variation.
type OnlineAbDefinition struct {
	_ struct{} `type:"structure"`

	// The name of the variation that is the default variation that the other variations
	// are compared to.
	ControlTreatmentName *string `locationName:"controlTreatmentName" min:"1" type:"string"`

	// A set of key-value pairs. The keys are variation names, and the values are
	// the portion of experiment traffic to be assigned to that variation. The traffic
	// portion is specified in thousandths of a percent, so 20,000 for a variation
	// would allocate 20% of the experiment traffic to that variation.
	TreatmentWeights map[string]*int64 `locationName:"treatmentWeights" 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 OnlineAbDefinition) String() string {
	return awsutil.Prettify(s)
}

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

// SetControlTreatmentName sets the ControlTreatmentName field's value.
func (s *OnlineAbDefinition) SetControlTreatmentName(v string) *OnlineAbDefinition {
	s.ControlTreatmentName = &v
	return s
}

// SetTreatmentWeights sets the TreatmentWeights field's value.
func (s *OnlineAbDefinition) SetTreatmentWeights(v map[string]*int64) *OnlineAbDefinition {
	s.TreatmentWeights = v
	return s
}

// This structure defines a project, which is the logical object in Evidently
// that can contain features, launches, and experiments. Use projects to group
// similar features together.
type Project struct {
	_ struct{} `type:"structure"`

	// The number of ongoing experiments currently in the project.
	ActiveExperimentCount *int64 `locationName:"activeExperimentCount" type:"long"`

	// The number of ongoing launches currently in the project.
	ActiveLaunchCount *int64 `locationName:"activeLaunchCount" type:"long"`

	// This structure defines the configuration of how your application integrates
	// with AppConfig to run client-side evaluation.
	AppConfigResource *ProjectAppConfigResource `locationName:"appConfigResource" type:"structure"`

	// The name or ARN of the project.
	//
	// Arn is a required field
	Arn *string `locationName:"arn" type:"string" required:"true"`

	// The date and time that the project is created.
	//
	// CreatedTime is a required field
	CreatedTime *time.Time `locationName:"createdTime" type:"timestamp" required:"true"`

	// A structure that contains information about where Evidently is to store evaluation
	// events for longer term storage.
	DataDelivery *ProjectDataDelivery `locationName:"dataDelivery" type:"structure"`

	// The user-entered description of the project.
	Description *string `locationName:"description" type:"string"`

	// The number of experiments currently in the project. This includes all experiments
	// that have been created and not deleted, whether they are ongoing or not.
	ExperimentCount *int64 `locationName:"experimentCount" type:"long"`

	// The number of features currently in the project.
	FeatureCount *int64 `locationName:"featureCount" type:"long"`

	// The date and time that the project was most recently updated.
	//
	// LastUpdatedTime is a required field
	LastUpdatedTime *time.Time `locationName:"lastUpdatedTime" type:"timestamp" required:"true"`

	// The number of launches currently in the project. This includes all launches
	// that have been created and not deleted, whether they are ongoing or not.
	LaunchCount *int64 `locationName:"launchCount" type:"long"`

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

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

	// The list of tag keys and values associated with this project.
	Tags map[string]*string `locationName:"tags" type:"map"`
}

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

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

// SetActiveExperimentCount sets the ActiveExperimentCount field's value.
func (s *Project) SetActiveExperimentCount(v int64) *Project {
	s.ActiveExperimentCount = &v
	return s
}

// SetActiveLaunchCount sets the ActiveLaunchCount field's value.
func (s *Project) SetActiveLaunchCount(v int64) *Project {
	s.ActiveLaunchCount = &v
	return s
}

// SetAppConfigResource sets the AppConfigResource field's value.
func (s *Project) SetAppConfigResource(v *ProjectAppConfigResource) *Project {
	s.AppConfigResource = v
	return s
}

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

// SetCreatedTime sets the CreatedTime field's value.
func (s *Project) SetCreatedTime(v time.Time) *Project {
	s.CreatedTime = &v
	return s
}

// SetDataDelivery sets the DataDelivery field's value.
func (s *Project) SetDataDelivery(v *ProjectDataDelivery) *Project {
	s.DataDelivery = v
	return s
}

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

// SetExperimentCount sets the ExperimentCount field's value.
func (s *Project) SetExperimentCount(v int64) *Project {
	s.ExperimentCount = &v
	return s
}

// SetFeatureCount sets the FeatureCount field's value.
func (s *Project) SetFeatureCount(v int64) *Project {
	s.FeatureCount = &v
	return s
}

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

// SetLaunchCount sets the LaunchCount field's value.
func (s *Project) SetLaunchCount(v int64) *Project {
	s.LaunchCount = &v
	return s
}

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

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

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

// This is a structure that defines the configuration of how your application
// integrates with AppConfig to run client-side evaluation.
type ProjectAppConfigResource struct {
	_ struct{} `type:"structure"`

	// The ID of the AppConfig application to use for client-side evaluation.
	//
	// ApplicationId is a required field
	ApplicationId *string `locationName:"applicationId" type:"string" required:"true"`

	// The ID of the AppConfig profile to use for client-side evaluation.
	//
	// ConfigurationProfileId is a required field
	ConfigurationProfileId *string `locationName:"configurationProfileId" type:"string" required:"true"`

	// The ID of the AppConfig environment to use for client-side evaluation. This
	// must be an environment that is within the application that you specify for
	// applicationId.
	//
	// EnvironmentId is a required field
	EnvironmentId *string `locationName:"environmentId" 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 ProjectAppConfigResource) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetConfigurationProfileId sets the ConfigurationProfileId field's value.
func (s *ProjectAppConfigResource) SetConfigurationProfileId(v string) *ProjectAppConfigResource {
	s.ConfigurationProfileId = &v
	return s
}

// SetEnvironmentId sets the EnvironmentId field's value.
func (s *ProjectAppConfigResource) SetEnvironmentId(v string) *ProjectAppConfigResource {
	s.EnvironmentId = &v
	return s
}

// Use this parameter to configure client-side evaluation for your project.
// Client-side evaluation allows your application to assign variations to user
// sessions locally instead of by calling the EvaluateFeature (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_EvaluateFeature.html)
// operation to assign the variations. This mitigates the latency and availability
// risks that come with an API call.
//
// ProjectAppConfigResource is a structure that defines the configuration of
// how your application integrates with AppConfig to run client-side evaluation.
type ProjectAppConfigResourceConfig struct {
	_ struct{} `type:"structure"`

	// The ID of the AppConfig application to use for client-side evaluation.
	ApplicationId *string `locationName:"applicationId" type:"string"`

	// The ID of the AppConfig environment to use for client-side evaluation. This
	// must be an environment that is within the application that you specify for
	// applicationId.
	EnvironmentId *string `locationName:"environmentId" 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 ProjectAppConfigResourceConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetEnvironmentId sets the EnvironmentId field's value.
func (s *ProjectAppConfigResourceConfig) SetEnvironmentId(v string) *ProjectAppConfigResourceConfig {
	s.EnvironmentId = &v
	return s
}

// A structure that contains information about where Evidently is to store evaluation
// events for longer term storage.
type ProjectDataDelivery struct {
	_ struct{} `type:"structure"`

	// If the project stores evaluation events in CloudWatch Logs, this structure
	// stores the log group name.
	CloudWatchLogs *CloudWatchLogsDestination `locationName:"cloudWatchLogs" type:"structure"`

	// If the project stores evaluation events in an Amazon S3 bucket, this structure
	// stores the bucket name and bucket prefix.
	S3Destination *S3Destination `locationName:"s3Destination" 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 ProjectDataDelivery) String() string {
	return awsutil.Prettify(s)
}

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

// SetCloudWatchLogs sets the CloudWatchLogs field's value.
func (s *ProjectDataDelivery) SetCloudWatchLogs(v *CloudWatchLogsDestination) *ProjectDataDelivery {
	s.CloudWatchLogs = v
	return s
}

// SetS3Destination sets the S3Destination field's value.
func (s *ProjectDataDelivery) SetS3Destination(v *S3Destination) *ProjectDataDelivery {
	s.S3Destination = v
	return s
}

// A structure that contains information about where Evidently is to store evaluation
// events for longer term storage.
type ProjectDataDeliveryConfig struct {
	_ struct{} `type:"structure"`

	// If the project stores evaluation events in CloudWatch Logs, this structure
	// stores the log group name.
	CloudWatchLogs *CloudWatchLogsDestinationConfig `locationName:"cloudWatchLogs" type:"structure"`

	// If the project stores evaluation events in an Amazon S3 bucket, this structure
	// stores the bucket name and bucket prefix.
	S3Destination *S3DestinationConfig `locationName:"s3Destination" 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 ProjectDataDeliveryConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetCloudWatchLogs sets the CloudWatchLogs field's value.
func (s *ProjectDataDeliveryConfig) SetCloudWatchLogs(v *CloudWatchLogsDestinationConfig) *ProjectDataDeliveryConfig {
	s.CloudWatchLogs = v
	return s
}

// SetS3Destination sets the S3Destination field's value.
func (s *ProjectDataDeliveryConfig) SetS3Destination(v *S3DestinationConfig) *ProjectDataDeliveryConfig {
	s.S3Destination = v
	return s
}

// A structure that contains configuration information about an Evidently project.
type ProjectSummary struct {
	_ struct{} `type:"structure"`

	// The number of experiments currently in the project.
	ActiveExperimentCount *int64 `locationName:"activeExperimentCount" type:"long"`

	// The number of ongoing launches currently in the project.
	ActiveLaunchCount *int64 `locationName:"activeLaunchCount" type:"long"`

	// The name or ARN of the project.
	//
	// Arn is a required field
	Arn *string `locationName:"arn" type:"string" required:"true"`

	// The date and time that the project is created.
	//
	// CreatedTime is a required field
	CreatedTime *time.Time `locationName:"createdTime" type:"timestamp" required:"true"`

	// The description of the project.
	Description *string `locationName:"description" type:"string"`

	// The number of experiments currently in the project.
	ExperimentCount *int64 `locationName:"experimentCount" type:"long"`

	// The number of features currently in the project.
	FeatureCount *int64 `locationName:"featureCount" type:"long"`

	// The date and time that the project was most recently updated.
	//
	// LastUpdatedTime is a required field
	LastUpdatedTime *time.Time `locationName:"lastUpdatedTime" type:"timestamp" required:"true"`

	// The number of launches currently in the project, including launches that
	// are ongoing, completed, and not started yet.
	LaunchCount *int64 `locationName:"launchCount" type:"long"`

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

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

	// The list of tag keys and values associated with this project.
	Tags map[string]*string `locationName:"tags" type:"map"`
}

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

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

// SetActiveExperimentCount sets the ActiveExperimentCount field's value.
func (s *ProjectSummary) SetActiveExperimentCount(v int64) *ProjectSummary {
	s.ActiveExperimentCount = &v
	return s
}

// SetActiveLaunchCount sets the ActiveLaunchCount field's value.
func (s *ProjectSummary) SetActiveLaunchCount(v int64) *ProjectSummary {
	s.ActiveLaunchCount = &v
	return s
}

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

// SetCreatedTime sets the CreatedTime field's value.
func (s *ProjectSummary) SetCreatedTime(v time.Time) *ProjectSummary {
	s.CreatedTime = &v
	return s
}

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

// SetExperimentCount sets the ExperimentCount field's value.
func (s *ProjectSummary) SetExperimentCount(v int64) *ProjectSummary {
	s.ExperimentCount = &v
	return s
}

// SetFeatureCount sets the FeatureCount field's value.
func (s *ProjectSummary) SetFeatureCount(v int64) *ProjectSummary {
	s.FeatureCount = &v
	return s
}

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

// SetLaunchCount sets the LaunchCount field's value.
func (s *ProjectSummary) SetLaunchCount(v int64) *ProjectSummary {
	s.LaunchCount = &v
	return s
}

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

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

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

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

	// An array of event structures that contain the performance data that is being
	// sent to Evidently.
	//
	// Events is a required field
	Events []*Event `locationName:"events" type:"list" required:"true"`

	// The name or ARN of the project to write the events to.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 PutProjectEventsInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetEvents sets the Events field's value.
func (s *PutProjectEventsInput) SetEvents(v []*Event) *PutProjectEventsInput {
	s.Events = v
	return s
}

// SetProject sets the Project field's value.
func (s *PutProjectEventsInput) SetProject(v string) *PutProjectEventsInput {
	s.Project = &v
	return s
}

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

	// A structure that contains Evidently's response to the sent events, including
	// an event ID and error codes, if any.
	EventResults []*PutProjectEventsResultEntry `locationName:"eventResults" type:"list"`

	// The number of events in the operation that could not be used by Evidently.
	FailedEventCount *int64 `locationName:"failedEventCount" 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 PutProjectEventsOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEventResults sets the EventResults field's value.
func (s *PutProjectEventsOutput) SetEventResults(v []*PutProjectEventsResultEntry) *PutProjectEventsOutput {
	s.EventResults = v
	return s
}

// SetFailedEventCount sets the FailedEventCount field's value.
func (s *PutProjectEventsOutput) SetFailedEventCount(v int64) *PutProjectEventsOutput {
	s.FailedEventCount = &v
	return s
}

// A structure that contains Evidently's response to the sent events, including
// an event ID and error codes, if any.
type PutProjectEventsResultEntry struct {
	_ struct{} `type:"structure"`

	// If the PutProjectEvents operation has an error, the error code is returned
	// here.
	ErrorCode *string `locationName:"errorCode" min:"1" type:"string"`

	// If the PutProjectEvents operation has an error, the error message is returned
	// here.
	ErrorMessage *string `locationName:"errorMessage" min:"1" type:"string"`

	// A unique ID assigned to this PutProjectEvents operation.
	EventId *string `locationName:"eventId" min:"36" 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 PutProjectEventsResultEntry) String() string {
	return awsutil.Prettify(s)
}

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

// SetErrorCode sets the ErrorCode field's value.
func (s *PutProjectEventsResultEntry) SetErrorCode(v string) *PutProjectEventsResultEntry {
	s.ErrorCode = &v
	return s
}

// SetErrorMessage sets the ErrorMessage field's value.
func (s *PutProjectEventsResultEntry) SetErrorMessage(v string) *PutProjectEventsResultEntry {
	s.ErrorMessage = &v
	return s
}

// SetEventId sets the EventId field's value.
func (s *PutProjectEventsResultEntry) SetEventId(v string) *PutProjectEventsResultEntry {
	s.EventId = &v
	return s
}

// A structure that contains information about one experiment or launch that
// uses the specified segment.
type RefResource struct {
	_ struct{} `type:"structure"`

	// The ARN of the experiment or launch.
	Arn *string `locationName:"arn" type:"string"`

	// The day and time that this experiment or launch ended.
	EndTime *string `locationName:"endTime" type:"string"`

	// The day and time that this experiment or launch was most recently updated.
	LastUpdatedOn *string `locationName:"lastUpdatedOn" type:"string"`

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

	// The day and time that this experiment or launch started.
	StartTime *string `locationName:"startTime" type:"string"`

	// The status of the experiment or launch.
	Status *string `locationName:"status" type:"string"`

	// Specifies whether the resource that this structure contains information about
	// is an experiment or a launch.
	//
	// Type is a required field
	Type *string `locationName:"type" type:"string" required:"true"`
}

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

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

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

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

// SetLastUpdatedOn sets the LastUpdatedOn field's value.
func (s *RefResource) SetLastUpdatedOn(v string) *RefResource {
	s.LastUpdatedOn = &v
	return s
}

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

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

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

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

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

	Message_ *string `locationName:"message" type:"string"`

	// The ID of the resource that caused the exception.
	ResourceId *string `locationName:"resourceId" type:"string"`

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

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

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

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

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

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

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

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

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

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

// If the project stores evaluation events in an Amazon S3 bucket, this structure
// stores the bucket name and bucket prefix.
type S3Destination struct {
	_ struct{} `type:"structure"`

	// The name of the bucket in which Evidently stores evaluation events.
	Bucket *string `locationName:"bucket" min:"3" type:"string"`

	// The bucket prefix in which Evidently stores evaluation events.
	Prefix *string `locationName:"prefix" 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 S3Destination) String() string {
	return awsutil.Prettify(s)
}

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

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

// SetPrefix sets the Prefix field's value.
func (s *S3Destination) SetPrefix(v string) *S3Destination {
	s.Prefix = &v
	return s
}

// If the project stores evaluation events in an Amazon S3 bucket, this structure
// stores the bucket name and bucket prefix.
type S3DestinationConfig struct {
	_ struct{} `type:"structure"`

	// The name of the bucket in which Evidently stores evaluation events.
	Bucket *string `locationName:"bucket" min:"3" type:"string"`

	// The bucket prefix in which Evidently stores evaluation events.
	Prefix *string `locationName:"prefix" 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 S3DestinationConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

// SetPrefix sets the Prefix field's value.
func (s *S3DestinationConfig) SetPrefix(v string) *S3DestinationConfig {
	s.Prefix = &v
	return s
}

// This structure defines the traffic allocation percentages among the feature
// variations during one step of a launch, and the start time of that step.
type ScheduledSplit struct {
	_ struct{} `type:"structure"`

	// The traffic allocation percentages among the feature variations during one
	// step of a launch. This is a set of key-value pairs. The keys are variation
	// names. The values represent the percentage of traffic to allocate to that
	// variation during this step.
	//
	// The values is expressed in thousandths of a percent, so assigning a weight
	// of 50000 assigns 50% of traffic to that variation.
	//
	// If the sum of the weights for all the variations in a segment override does
	// not add up to 100,000, then the remaining traffic that matches this segment
	// is not assigned by this segment override, and instead moves on to the next
	// segment override or the default traffic split.
	GroupWeights map[string]*int64 `locationName:"groupWeights" type:"map"`

	// Use this parameter to specify different traffic splits for one or more audience
	// segments. A segment is a portion of your audience that share one or more
	// characteristics. Examples could be Chrome browser users, users in Europe,
	// or Firefox browser users in Europe who also fit other criteria that your
	// application collects, such as age.
	//
	// This parameter is an array of up to six segment override objects. Each of
	// these objects specifies a segment that you have already created, and defines
	// the traffic split for that segment.
	SegmentOverrides []*SegmentOverride `locationName:"segmentOverrides" type:"list"`

	// The date and time that this step of the launch starts.
	//
	// StartTime is a required field
	StartTime *time.Time `locationName:"startTime" 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 ScheduledSplit) String() string {
	return awsutil.Prettify(s)
}

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

// SetGroupWeights sets the GroupWeights field's value.
func (s *ScheduledSplit) SetGroupWeights(v map[string]*int64) *ScheduledSplit {
	s.GroupWeights = v
	return s
}

// SetSegmentOverrides sets the SegmentOverrides field's value.
func (s *ScheduledSplit) SetSegmentOverrides(v []*SegmentOverride) *ScheduledSplit {
	s.SegmentOverrides = v
	return s
}

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

// This structure defines the traffic allocation percentages among the feature
// variations during one step of a launch, and the start time of that step.
type ScheduledSplitConfig struct {
	_ struct{} `type:"structure"`

	// The traffic allocation percentages among the feature variations during one
	// step of a launch. This is a set of key-value pairs. The keys are variation
	// names. The values represent the percentage of traffic to allocate to that
	// variation during this step.
	//
	// The values is expressed in thousandths of a percent, so assigning a weight
	// of 50000 assigns 50% of traffic to that variation.
	//
	// If the sum of the weights for all the variations in a segment override does
	// not add up to 100,000, then the remaining traffic that matches this segment
	// is not assigned by this segment override, and instead moves on to the next
	// segment override or the default traffic split.
	//
	// GroupWeights is a required field
	GroupWeights map[string]*int64 `locationName:"groupWeights" type:"map" required:"true"`

	// Use this parameter to specify different traffic splits for one or more audience
	// segments. A segment is a portion of your audience that share one or more
	// characteristics. Examples could be Chrome browser users, users in Europe,
	// or Firefox browser users in Europe who also fit other criteria that your
	// application collects, such as age.
	//
	// This parameter is an array of up to six segment override objects. Each of
	// these objects specifies a segment that you have already created, and defines
	// the traffic split for that segment.
	SegmentOverrides []*SegmentOverride `locationName:"segmentOverrides" type:"list"`

	// The date and time that this step of the launch starts.
	//
	// StartTime is a required field
	StartTime *time.Time `locationName:"startTime" 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 ScheduledSplitConfig) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetGroupWeights sets the GroupWeights field's value.
func (s *ScheduledSplitConfig) SetGroupWeights(v map[string]*int64) *ScheduledSplitConfig {
	s.GroupWeights = v
	return s
}

// SetSegmentOverrides sets the SegmentOverrides field's value.
func (s *ScheduledSplitConfig) SetSegmentOverrides(v []*SegmentOverride) *ScheduledSplitConfig {
	s.SegmentOverrides = v
	return s
}

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

// An array of structures that define the traffic allocation percentages among
// the feature variations during each step of a launch. This also defines the
// start time of each step.
type ScheduledSplitsLaunchConfig struct {
	_ struct{} `type:"structure"`

	// An array of structures that define the traffic allocation percentages among
	// the feature variations during each step of the launch. This also defines
	// the start time of each step.
	//
	// Steps is a required field
	Steps []*ScheduledSplitConfig `locationName:"steps" min:"1" type:"list" required:"true"`
}

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

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

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

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

// An array of structures that define the traffic allocation percentages among
// the feature variations during each step of a launch. This also defines the
// start time of each step.
type ScheduledSplitsLaunchDefinition struct {
	_ struct{} `type:"structure"`

	// An array of structures that define the traffic allocation percentages among
	// the feature variations during each step of the launch. This also defines
	// the start time of each step.
	Steps []*ScheduledSplit `locationName:"steps" min:"1" type:"list"`
}

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

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

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

// This structure contains information about one audience segment. You can use
// segments in your experiments and launches to narrow the user sessions used
// for experiment or launch to only the user sessions that match one or more
// criteria.
type Segment struct {
	_ struct{} `type:"structure"`

	// The ARN of the segment.
	//
	// Arn is a required field
	Arn *string `locationName:"arn" type:"string" required:"true"`

	// The date and time that this segment was created.
	//
	// CreatedTime is a required field
	CreatedTime *time.Time `locationName:"createdTime" type:"timestamp" required:"true"`

	// The customer-created description for this segment.
	Description *string `locationName:"description" type:"string"`

	// The number of experiments that this segment is used in. This count includes
	// all current experiments, not just those that are currently running.
	ExperimentCount *int64 `locationName:"experimentCount" type:"long"`

	// The date and time that this segment was most recently updated.
	//
	// LastUpdatedTime is a required field
	LastUpdatedTime *time.Time `locationName:"lastUpdatedTime" type:"timestamp" required:"true"`

	// The number of launches that this segment is used in. This count includes
	// all current launches, not just those that are currently running.
	LaunchCount *int64 `locationName:"launchCount" type:"long"`

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

	// The pattern that defines the attributes to use to evalute whether a user
	// session will be in the segment. For more information about the pattern syntax,
	// see Segment rule pattern syntax (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Evidently-segments.html).
	//
	// Pattern is a required field
	Pattern *string `locationName:"pattern" min:"1" type:"string" required:"true"`

	// The list of tag keys and values associated with this launch.
	Tags map[string]*string `locationName:"tags" type:"map"`
}

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

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

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

// SetCreatedTime sets the CreatedTime field's value.
func (s *Segment) SetCreatedTime(v time.Time) *Segment {
	s.CreatedTime = &v
	return s
}

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

// SetExperimentCount sets the ExperimentCount field's value.
func (s *Segment) SetExperimentCount(v int64) *Segment {
	s.ExperimentCount = &v
	return s
}

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

// SetLaunchCount sets the LaunchCount field's value.
func (s *Segment) SetLaunchCount(v int64) *Segment {
	s.LaunchCount = &v
	return s
}

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

// SetPattern sets the Pattern field's value.
func (s *Segment) SetPattern(v string) *Segment {
	s.Pattern = &v
	return s
}

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

// This structure specifies a segment that you have already created, and defines
// the traffic split for that segment to be used in a launch.
type SegmentOverride struct {
	_ struct{} `type:"structure"`

	// A number indicating the order to use to evaluate segment overrides, if there
	// are more than one. Segment overrides with lower numbers are evaluated first.
	//
	// EvaluationOrder is a required field
	EvaluationOrder *int64 `locationName:"evaluationOrder" type:"long" required:"true"`

	// The ARN of the segment to use.
	//
	// Segment is a required field
	Segment *string `locationName:"segment" type:"string" required:"true"`

	// The traffic allocation percentages among the feature variations to assign
	// to this segment. This is a set of key-value pairs. The keys are variation
	// names. The values represent the amount of traffic to allocate to that variation
	// for this segment. This is expressed in thousandths of a percent, so a weight
	// of 50000 represents 50% of traffic.
	//
	// Weights is a required field
	Weights map[string]*int64 `locationName:"weights" type:"map" required:"true"`
}

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

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

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

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

// SetEvaluationOrder sets the EvaluationOrder field's value.
func (s *SegmentOverride) SetEvaluationOrder(v int64) *SegmentOverride {
	s.EvaluationOrder = &v
	return s
}

// SetSegment sets the Segment field's value.
func (s *SegmentOverride) SetSegment(v string) *SegmentOverride {
	s.Segment = &v
	return s
}

// SetWeights sets the Weights field's value.
func (s *SegmentOverride) SetWeights(v map[string]*int64) *SegmentOverride {
	s.Weights = v
	return s
}

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

	Message_ *string `locationName:"message" type:"string"`

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

	// The ID of the resource that caused the exception.
	ResourceId *string `locationName:"resourceId" type:"string"`

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

	// The ID of the service that is associated with the error.
	ServiceCode *string `locationName:"serviceCode" type:"string"`
}

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

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

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

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

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

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

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

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

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

// The service was unavailable. Retry the request.
type ServiceUnavailableException 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 ServiceUnavailableException) String() string {
	return awsutil.Prettify(s)
}

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

func newErrorServiceUnavailableException(v protocol.ResponseMetadata) error {
	return &ServiceUnavailableException{
		RespMetadata: v,
	}
}

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

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

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

func (s *ServiceUnavailableException) 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 *ServiceUnavailableException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

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

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

	// The date and time to end the experiment. This must be no more than 30 days
	// after the experiment starts.
	//
	// AnalysisCompleteTime is a required field
	AnalysisCompleteTime *time.Time `locationName:"analysisCompleteTime" type:"timestamp" required:"true"`

	// The name of the experiment to start.
	//
	// Experiment is a required field
	Experiment *string `location:"uri" locationName:"experiment" min:"1" type:"string" required:"true"`

	// The name or ARN of the project that contains the experiment to start.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 StartExperimentInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAnalysisCompleteTime sets the AnalysisCompleteTime field's value.
func (s *StartExperimentInput) SetAnalysisCompleteTime(v time.Time) *StartExperimentInput {
	s.AnalysisCompleteTime = &v
	return s
}

// SetExperiment sets the Experiment field's value.
func (s *StartExperimentInput) SetExperiment(v string) *StartExperimentInput {
	s.Experiment = &v
	return s
}

// SetProject sets the Project field's value.
func (s *StartExperimentInput) SetProject(v string) *StartExperimentInput {
	s.Project = &v
	return s
}

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

	// A timestamp that indicates when the experiment started.
	StartedTime *time.Time `locationName:"startedTime" 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 StartExperimentOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetStartedTime sets the StartedTime field's value.
func (s *StartExperimentOutput) SetStartedTime(v time.Time) *StartExperimentOutput {
	s.StartedTime = &v
	return s
}

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

	// The name of the launch to start.
	//
	// Launch is a required field
	Launch *string `location:"uri" locationName:"launch" min:"1" type:"string" required:"true"`

	// The name or ARN of the project that contains the launch to start.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 StartLaunchInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetLaunch sets the Launch field's value.
func (s *StartLaunchInput) SetLaunch(v string) *StartLaunchInput {
	s.Launch = &v
	return s
}

// SetProject sets the Project field's value.
func (s *StartLaunchInput) SetProject(v string) *StartLaunchInput {
	s.Project = &v
	return s
}

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

	// A structure that contains information about the launch that was started.
	//
	// Launch is a required field
	Launch *Launch `locationName:"launch" 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 StartLaunchOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetLaunch sets the Launch field's value.
func (s *StartLaunchOutput) SetLaunch(v *Launch) *StartLaunchOutput {
	s.Launch = v
	return s
}

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

	// Specify whether the experiment is to be considered COMPLETED or CANCELLED
	// after it stops.
	DesiredState *string `locationName:"desiredState" type:"string" enum:"ExperimentStopDesiredState"`

	// The name of the experiment to stop.
	//
	// Experiment is a required field
	Experiment *string `location:"uri" locationName:"experiment" min:"1" type:"string" required:"true"`

	// The name or ARN of the project that contains the experiment to stop.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" type:"string" required:"true"`

	// A string that describes why you are stopping the experiment.
	Reason *string `locationName:"reason" 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 StopExperimentInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetDesiredState sets the DesiredState field's value.
func (s *StopExperimentInput) SetDesiredState(v string) *StopExperimentInput {
	s.DesiredState = &v
	return s
}

// SetExperiment sets the Experiment field's value.
func (s *StopExperimentInput) SetExperiment(v string) *StopExperimentInput {
	s.Experiment = &v
	return s
}

// SetProject sets the Project field's value.
func (s *StopExperimentInput) SetProject(v string) *StopExperimentInput {
	s.Project = &v
	return s
}

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

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

	// The date and time that the experiment stopped.
	EndedTime *time.Time `locationName:"endedTime" 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 StopExperimentOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEndedTime sets the EndedTime field's value.
func (s *StopExperimentOutput) SetEndedTime(v time.Time) *StopExperimentOutput {
	s.EndedTime = &v
	return s
}

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

	// Specify whether to consider the launch as COMPLETED or CANCELLED after it
	// stops.
	DesiredState *string `locationName:"desiredState" type:"string" enum:"LaunchStopDesiredState"`

	// The name of the launch to stop.
	//
	// Launch is a required field
	Launch *string `location:"uri" locationName:"launch" min:"1" type:"string" required:"true"`

	// The name or ARN of the project that contains the launch that you want to
	// stop.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" type:"string" required:"true"`

	// A string that describes why you are stopping the launch.
	Reason *string `locationName:"reason" 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 StopLaunchInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetDesiredState sets the DesiredState field's value.
func (s *StopLaunchInput) SetDesiredState(v string) *StopLaunchInput {
	s.DesiredState = &v
	return s
}

// SetLaunch sets the Launch field's value.
func (s *StopLaunchInput) SetLaunch(v string) *StopLaunchInput {
	s.Launch = &v
	return s
}

// SetProject sets the Project field's value.
func (s *StopLaunchInput) SetProject(v string) *StopLaunchInput {
	s.Project = &v
	return s
}

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

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

	// The date and time that the launch stopped.
	EndedTime *time.Time `locationName:"endedTime" 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 StopLaunchOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetEndedTime sets the EndedTime field's value.
func (s *StopLaunchOutput) SetEndedTime(v time.Time) *StopLaunchOutput {
	s.EndedTime = &v
	return s
}

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

	// The ARN of the CloudWatch Evidently resource that you're adding tags to.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`

	// The list of key-value pairs to associate with the resource.
	//
	// Tags is a required field
	Tags map[string]*string `locationName:"tags" type:"map" required:"true"`
}

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

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

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

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

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

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

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

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

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

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

	// The pattern to test.
	//
	// Pattern is a required field
	Pattern *string `locationName:"pattern" min:"1" type:"string" required:"true"`

	// A sample evaluationContext JSON block to test against the specified pattern.
	//
	// Payload is a required field
	Payload *string `locationName:"payload" 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 TestSegmentPatternInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetPattern sets the Pattern field's value.
func (s *TestSegmentPatternInput) SetPattern(v string) *TestSegmentPatternInput {
	s.Pattern = &v
	return s
}

// SetPayload sets the Payload field's value.
func (s *TestSegmentPatternInput) SetPayload(v string) *TestSegmentPatternInput {
	s.Payload = &v
	return s
}

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

	// Returns true if the pattern matches the payload.
	//
	// Match is a required field
	Match *bool `locationName:"match" 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 TestSegmentPatternOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetMatch sets the Match field's value.
func (s *TestSegmentPatternOutput) SetMatch(v bool) *TestSegmentPatternOutput {
	s.Match = &v
	return s
}

// The request was denied because of request throttling. Retry the request.
type ThrottlingException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`

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

	// The ID of the service that is associated with the error.
	ServiceCode *string `locationName:"serviceCode" type:"string"`
}

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

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

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

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

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

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

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

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

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

// A structure that defines one treatment in an experiment. A treatment is a
// variation of the feature that you are including in the experiment.
type Treatment struct {
	_ struct{} `type:"structure"`

	// The description of the treatment.
	Description *string `locationName:"description" type:"string"`

	// The feature variation used for this treatment. This is a key-value pair.
	// The key is the feature name, and the value is the variation name.
	FeatureVariations map[string]*string `locationName:"featureVariations" type:"map"`

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

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

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

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

// SetFeatureVariations sets the FeatureVariations field's value.
func (s *Treatment) SetFeatureVariations(v map[string]*string) *Treatment {
	s.FeatureVariations = v
	return s
}

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

// A structure that defines one treatment in an experiment. A treatment is a
// variation of the feature that you are including in the experiment.
type TreatmentConfig struct {
	_ struct{} `type:"structure"`

	// A description for this treatment.
	Description *string `locationName:"description" type:"string"`

	// The feature that this experiment is testing.
	//
	// Feature is a required field
	Feature *string `locationName:"feature" min:"1" type:"string" required:"true"`

	// A name for this treatment.
	//
	// Name is a required field
	Name *string `locationName:"name" min:"1" type:"string" required:"true"`

	// The name of the variation to use as this treatment in the experiment.
	//
	// Variation is a required field
	Variation *string `locationName:"variation" min:"1" type:"string" required:"true"`
}

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

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

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

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

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

// SetFeature sets the Feature field's value.
func (s *TreatmentConfig) SetFeature(v string) *TreatmentConfig {
	s.Feature = &v
	return s
}

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

// SetVariation sets the Variation field's value.
func (s *TreatmentConfig) SetVariation(v string) *TreatmentConfig {
	s.Variation = &v
	return s
}

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

	// The ARN of the CloudWatch Evidently resource that you're removing tags from.
	//
	// ResourceArn is a required field
	ResourceArn *string `location:"uri" locationName:"resourceArn" type:"string" required:"true"`

	// The list of tag keys to remove from the resource.
	//
	// TagKeys is a required field
	TagKeys []*string `location:"querystring" locationName:"tagKeys" type:"list" required:"true"`
}

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

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

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

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

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

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

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

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

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

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

	// An optional description of the experiment.
	Description *string `locationName:"description" type:"string"`

	// The name of the experiment to update.
	//
	// Experiment is a required field
	Experiment *string `location:"uri" locationName:"experiment" min:"1" type:"string" required:"true"`

	// An array of structures that defines the metrics used for the experiment,
	// and whether a higher or lower value for each metric is the goal.
	MetricGoals []*MetricGoalConfig `locationName:"metricGoals" min:"1" type:"list"`

	// A structure that contains the configuration of which variation o use as the
	// "control" version. The "control" version is used for comparison with other
	// variations. This structure also specifies how much experiment traffic is
	// allocated to each variation.
	OnlineAbConfig *OnlineAbConfig `locationName:"onlineAbConfig" type:"structure"`

	// The name or ARN of the project that contains the experiment that you want
	// to update.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" type:"string" required:"true"`

	// When Evidently assigns a particular user session to an experiment, it must
	// use a randomization ID to determine which variation the user session is served.
	// This randomization ID is a combination of the entity ID and randomizationSalt.
	// If you omit randomizationSalt, Evidently uses the experiment name as the
	// randomizationSalt.
	RandomizationSalt *string `locationName:"randomizationSalt" type:"string"`

	// Removes a segment from being used in an experiment. You can't use this parameter
	// if the experiment is currently running.
	RemoveSegment *bool `locationName:"removeSegment" type:"boolean"`

	// The portion of the available audience that you want to allocate to this experiment,
	// in thousandths of a percent. The available audience is the total audience
	// minus the audience that you have allocated to overrides or current launches
	// of this feature.
	//
	// This is represented in thousandths of a percent. For example, specify 20,000
	// to allocate 20% of the available audience.
	SamplingRate *int64 `locationName:"samplingRate" type:"long"`

	// Adds an audience segment to an experiment. When a segment is used in an experiment,
	// only user sessions that match the segment pattern are used in the experiment.
	// You can't use this parameter if the experiment is currently running.
	Segment *string `locationName:"segment" type:"string"`

	// An array of structures that define the variations being tested in the experiment.
	Treatments []*TreatmentConfig `locationName:"treatments" 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 UpdateExperimentInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

// SetExperiment sets the Experiment field's value.
func (s *UpdateExperimentInput) SetExperiment(v string) *UpdateExperimentInput {
	s.Experiment = &v
	return s
}

// SetMetricGoals sets the MetricGoals field's value.
func (s *UpdateExperimentInput) SetMetricGoals(v []*MetricGoalConfig) *UpdateExperimentInput {
	s.MetricGoals = v
	return s
}

// SetOnlineAbConfig sets the OnlineAbConfig field's value.
func (s *UpdateExperimentInput) SetOnlineAbConfig(v *OnlineAbConfig) *UpdateExperimentInput {
	s.OnlineAbConfig = v
	return s
}

// SetProject sets the Project field's value.
func (s *UpdateExperimentInput) SetProject(v string) *UpdateExperimentInput {
	s.Project = &v
	return s
}

// SetRandomizationSalt sets the RandomizationSalt field's value.
func (s *UpdateExperimentInput) SetRandomizationSalt(v string) *UpdateExperimentInput {
	s.RandomizationSalt = &v
	return s
}

// SetRemoveSegment sets the RemoveSegment field's value.
func (s *UpdateExperimentInput) SetRemoveSegment(v bool) *UpdateExperimentInput {
	s.RemoveSegment = &v
	return s
}

// SetSamplingRate sets the SamplingRate field's value.
func (s *UpdateExperimentInput) SetSamplingRate(v int64) *UpdateExperimentInput {
	s.SamplingRate = &v
	return s
}

// SetSegment sets the Segment field's value.
func (s *UpdateExperimentInput) SetSegment(v string) *UpdateExperimentInput {
	s.Segment = &v
	return s
}

// SetTreatments sets the Treatments field's value.
func (s *UpdateExperimentInput) SetTreatments(v []*TreatmentConfig) *UpdateExperimentInput {
	s.Treatments = v
	return s
}

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

	// A structure containing the configuration details of the experiment that was
	// updated.
	//
	// Experiment is a required field
	Experiment *Experiment `locationName:"experiment" 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 UpdateExperimentOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetExperiment sets the Experiment field's value.
func (s *UpdateExperimentOutput) SetExperiment(v *Experiment) *UpdateExperimentOutput {
	s.Experiment = v
	return s
}

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

	// To update variation configurations for this feature, or add new ones, specify
	// this structure. In this array, include any variations that you want to add
	// or update. If the array includes a variation name that already exists for
	// this feature, it is updated. If it includes a new variation name, it is added
	// as a new variation.
	AddOrUpdateVariations []*VariationConfig `locationName:"addOrUpdateVariations" min:"1" type:"list"`

	// The name of the variation to use as the default variation. The default variation
	// is served to users who are not allocated to any ongoing launches or experiments
	// of this feature.
	DefaultVariation *string `locationName:"defaultVariation" min:"1" type:"string"`

	// An optional description of the feature.
	Description *string `locationName:"description" type:"string"`

	// Specified users that should always be served a specific variation of a feature.
	// Each user is specified by a key-value pair . For each key, specify a user
	// by entering their user ID, account ID, or some other identifier. For the
	// value, specify the name of the variation that they are to be served.
	//
	// This parameter is limited to 2500 overrides or a total of 40KB. The 40KB
	// limit includes an overhead of 6 bytes per override.
	EntityOverrides map[string]*string `locationName:"entityOverrides" type:"map"`

	// Specify ALL_RULES to activate the traffic allocation specified by any ongoing
	// launches or experiments. Specify DEFAULT_VARIATION to serve the default variation
	// to all users instead.
	EvaluationStrategy *string `locationName:"evaluationStrategy" type:"string" enum:"FeatureEvaluationStrategy"`

	// The name of the feature to be updated.
	//
	// Feature is a required field
	Feature *string `location:"uri" locationName:"feature" min:"1" type:"string" required:"true"`

	// The name or ARN of the project that contains the feature to be updated.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" type:"string" required:"true"`

	// Removes a variation from the feature. If the variation you specify doesn't
	// exist, then this makes no change and does not report an error.
	//
	// This operation fails if you try to remove a variation that is part of an
	// ongoing launch or experiment.
	RemoveVariations []*string `locationName:"removeVariations" 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 UpdateFeatureInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAddOrUpdateVariations sets the AddOrUpdateVariations field's value.
func (s *UpdateFeatureInput) SetAddOrUpdateVariations(v []*VariationConfig) *UpdateFeatureInput {
	s.AddOrUpdateVariations = v
	return s
}

// SetDefaultVariation sets the DefaultVariation field's value.
func (s *UpdateFeatureInput) SetDefaultVariation(v string) *UpdateFeatureInput {
	s.DefaultVariation = &v
	return s
}

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

// SetEntityOverrides sets the EntityOverrides field's value.
func (s *UpdateFeatureInput) SetEntityOverrides(v map[string]*string) *UpdateFeatureInput {
	s.EntityOverrides = v
	return s
}

// SetEvaluationStrategy sets the EvaluationStrategy field's value.
func (s *UpdateFeatureInput) SetEvaluationStrategy(v string) *UpdateFeatureInput {
	s.EvaluationStrategy = &v
	return s
}

// SetFeature sets the Feature field's value.
func (s *UpdateFeatureInput) SetFeature(v string) *UpdateFeatureInput {
	s.Feature = &v
	return s
}

// SetProject sets the Project field's value.
func (s *UpdateFeatureInput) SetProject(v string) *UpdateFeatureInput {
	s.Project = &v
	return s
}

// SetRemoveVariations sets the RemoveVariations field's value.
func (s *UpdateFeatureInput) SetRemoveVariations(v []*string) *UpdateFeatureInput {
	s.RemoveVariations = v
	return s
}

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

	// A structure that contains information about the updated feature.
	//
	// Feature is a required field
	Feature *Feature `locationName:"feature" 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 UpdateFeatureOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetFeature sets the Feature field's value.
func (s *UpdateFeatureOutput) SetFeature(v *Feature) *UpdateFeatureOutput {
	s.Feature = v
	return s
}

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

	// An optional description for the launch.
	Description *string `locationName:"description" type:"string"`

	// An array of structures that contains the feature and variations that are
	// to be used for the launch.
	Groups []*LaunchGroupConfig `locationName:"groups" min:"1" type:"list"`

	// The name of the launch that is to be updated.
	//
	// Launch is a required field
	Launch *string `location:"uri" locationName:"launch" min:"1" type:"string" required:"true"`

	// An array of structures that define the metrics that will be used to monitor
	// the launch performance.
	MetricMonitors []*MetricMonitorConfig `locationName:"metricMonitors" type:"list"`

	// The name or ARN of the project that contains the launch that you want to
	// update.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" type:"string" required:"true"`

	// When Evidently assigns a particular user session to a launch, it must use
	// a randomization ID to determine which variation the user session is served.
	// This randomization ID is a combination of the entity ID and randomizationSalt.
	// If you omit randomizationSalt, Evidently uses the launch name as the randomizationSalt.
	RandomizationSalt *string `locationName:"randomizationSalt" type:"string"`

	// An array of structures that define the traffic allocation percentages among
	// the feature variations during each step of the launch.
	ScheduledSplitsConfig *ScheduledSplitsLaunchConfig `locationName:"scheduledSplitsConfig" 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 UpdateLaunchInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

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

// SetGroups sets the Groups field's value.
func (s *UpdateLaunchInput) SetGroups(v []*LaunchGroupConfig) *UpdateLaunchInput {
	s.Groups = v
	return s
}

// SetLaunch sets the Launch field's value.
func (s *UpdateLaunchInput) SetLaunch(v string) *UpdateLaunchInput {
	s.Launch = &v
	return s
}

// SetMetricMonitors sets the MetricMonitors field's value.
func (s *UpdateLaunchInput) SetMetricMonitors(v []*MetricMonitorConfig) *UpdateLaunchInput {
	s.MetricMonitors = v
	return s
}

// SetProject sets the Project field's value.
func (s *UpdateLaunchInput) SetProject(v string) *UpdateLaunchInput {
	s.Project = &v
	return s
}

// SetRandomizationSalt sets the RandomizationSalt field's value.
func (s *UpdateLaunchInput) SetRandomizationSalt(v string) *UpdateLaunchInput {
	s.RandomizationSalt = &v
	return s
}

// SetScheduledSplitsConfig sets the ScheduledSplitsConfig field's value.
func (s *UpdateLaunchInput) SetScheduledSplitsConfig(v *ScheduledSplitsLaunchConfig) *UpdateLaunchInput {
	s.ScheduledSplitsConfig = v
	return s
}

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

	// A structure that contains the new configuration of the launch that was updated.
	//
	// Launch is a required field
	Launch *Launch `locationName:"launch" 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 UpdateLaunchOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetLaunch sets the Launch field's value.
func (s *UpdateLaunchOutput) SetLaunch(v *Launch) *UpdateLaunchOutput {
	s.Launch = v
	return s
}

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

	// A structure containing the CloudWatch Logs log group where you want to store
	// evaluation events.
	CloudWatchLogs *CloudWatchLogsDestinationConfig `locationName:"cloudWatchLogs" type:"structure"`

	// The name or ARN of the project that you want to modify the data storage options
	// for.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" type:"string" required:"true"`

	// A structure containing the S3 bucket name and bucket prefix where you want
	// to store evaluation events.
	S3Destination *S3DestinationConfig `locationName:"s3Destination" 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 UpdateProjectDataDeliveryInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetCloudWatchLogs sets the CloudWatchLogs field's value.
func (s *UpdateProjectDataDeliveryInput) SetCloudWatchLogs(v *CloudWatchLogsDestinationConfig) *UpdateProjectDataDeliveryInput {
	s.CloudWatchLogs = v
	return s
}

// SetProject sets the Project field's value.
func (s *UpdateProjectDataDeliveryInput) SetProject(v string) *UpdateProjectDataDeliveryInput {
	s.Project = &v
	return s
}

// SetS3Destination sets the S3Destination field's value.
func (s *UpdateProjectDataDeliveryInput) SetS3Destination(v *S3DestinationConfig) *UpdateProjectDataDeliveryInput {
	s.S3Destination = v
	return s
}

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

	// A structure containing details about the project that you updated.
	//
	// Project is a required field
	Project *Project `locationName:"project" 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 UpdateProjectDataDeliveryOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetProject sets the Project field's value.
func (s *UpdateProjectDataDeliveryOutput) SetProject(v *Project) *UpdateProjectDataDeliveryOutput {
	s.Project = v
	return s
}

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

	// Use this parameter if the project will use client-side evaluation powered
	// by AppConfig. Client-side evaluation allows your application to assign variations
	// to user sessions locally instead of by calling the EvaluateFeature (https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_EvaluateFeature.html)
	// operation. This mitigates the latency and availability risks that come with
	// an API call. allows you to
	//
	// This parameter is a structure that contains information about the AppConfig
	// application that will be used for client-side evaluation.
	AppConfigResource *ProjectAppConfigResourceConfig `locationName:"appConfigResource" type:"structure"`

	// An optional description of the project.
	Description *string `locationName:"description" type:"string"`

	// The name or ARN of the project to update.
	//
	// Project is a required field
	Project *string `location:"uri" locationName:"project" 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 UpdateProjectInput) String() string {
	return awsutil.Prettify(s)
}

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

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

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

// SetAppConfigResource sets the AppConfigResource field's value.
func (s *UpdateProjectInput) SetAppConfigResource(v *ProjectAppConfigResourceConfig) *UpdateProjectInput {
	s.AppConfigResource = v
	return s
}

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

// SetProject sets the Project field's value.
func (s *UpdateProjectInput) SetProject(v string) *UpdateProjectInput {
	s.Project = &v
	return s
}

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

	// A structure containing information about the updated project.
	//
	// Project is a required field
	Project *Project `locationName:"project" 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 UpdateProjectOutput) String() string {
	return awsutil.Prettify(s)
}

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

// SetProject sets the Project field's value.
func (s *UpdateProjectOutput) SetProject(v *Project) *UpdateProjectOutput {
	s.Project = v
	return s
}

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

	// The parameter that caused the exception.
	FieldList []*ValidationExceptionField `locationName:"fieldList" type:"list"`

	Message_ *string `locationName:"message" type:"string"`

	// A reason for the error.
	Reason *string `locationName:"reason" type:"string" enum:"ValidationExceptionReason"`
}

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

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

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

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

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

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

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

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

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

// A structure containing an error name and message.
type ValidationExceptionField struct {
	_ struct{} `type:"structure"`

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

	// The error name.
	//
	// Name is a required field
	Name *string `locationName:"name" type:"string" required:"true"`
}

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

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

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

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

// The value assigned to a feature variation. This structure must contain exactly
// one field. It can be boolValue, doubleValue, longValue, or stringValue.
type VariableValue struct {
	_ struct{} `type:"structure"`

	// If this feature uses the Boolean variation type, this field contains the
	// Boolean value of this variation.
	BoolValue *bool `locationName:"boolValue" type:"boolean"`

	// If this feature uses the double integer variation type, this field contains
	// the double integer value of this variation.
	DoubleValue *float64 `locationName:"doubleValue" type:"double"`

	// If this feature uses the long variation type, this field contains the long
	// value of this variation.
	LongValue *int64 `locationName:"longValue" type:"long"`

	// If this feature uses the string variation type, this field contains the string
	// value of this variation.
	StringValue *string `locationName:"stringValue" 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 VariableValue) String() string {
	return awsutil.Prettify(s)
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *VariableValue) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "VariableValue"}
	if s.LongValue != nil && *s.LongValue < -9.007199254740991e+15 {
		invalidParams.Add(request.NewErrParamMinValue("LongValue", -9.007199254740991e+15))
	}

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

// SetBoolValue sets the BoolValue field's value.
func (s *VariableValue) SetBoolValue(v bool) *VariableValue {
	s.BoolValue = &v
	return s
}

// SetDoubleValue sets the DoubleValue field's value.
func (s *VariableValue) SetDoubleValue(v float64) *VariableValue {
	s.DoubleValue = &v
	return s
}

// SetLongValue sets the LongValue field's value.
func (s *VariableValue) SetLongValue(v int64) *VariableValue {
	s.LongValue = &v
	return s
}

// SetStringValue sets the StringValue field's value.
func (s *VariableValue) SetStringValue(v string) *VariableValue {
	s.StringValue = &v
	return s
}

// This structure contains the name and variation value of one variation of
// a feature.
type Variation struct {
	_ struct{} `type:"structure"`

	// The name of the variation.
	Name *string `locationName:"name" min:"1" type:"string"`

	// The value assigned to this variation.
	Value *VariableValue `locationName:"value" type:"structure"`
}

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

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

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

// SetValue sets the Value field's value.
func (s *Variation) SetValue(v *VariableValue) *Variation {
	s.Value = v
	return s
}

// This structure contains the name and variation value of one variation of
// a feature.
type VariationConfig struct {
	_ struct{} `type:"structure"`

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

	// The value assigned to this variation.
	//
	// Value is a required field
	Value *VariableValue `locationName:"value" type:"structure" required:"true"`
}

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

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

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

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

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

// SetValue sets the Value field's value.
func (s *VariationConfig) SetValue(v *VariableValue) *VariationConfig {
	s.Value = v
	return s
}

const (
	// ChangeDirectionEnumIncrease is a ChangeDirectionEnum enum value
	ChangeDirectionEnumIncrease = "INCREASE"

	// ChangeDirectionEnumDecrease is a ChangeDirectionEnum enum value
	ChangeDirectionEnumDecrease = "DECREASE"
)

// ChangeDirectionEnum_Values returns all elements of the ChangeDirectionEnum enum
func ChangeDirectionEnum_Values() []string {
	return []string{
		ChangeDirectionEnumIncrease,
		ChangeDirectionEnumDecrease,
	}
}

const (
	// EventTypeAwsEvidentlyEvaluation is a EventType enum value
	EventTypeAwsEvidentlyEvaluation = "aws.evidently.evaluation"

	// EventTypeAwsEvidentlyCustom is a EventType enum value
	EventTypeAwsEvidentlyCustom = "aws.evidently.custom"
)

// EventType_Values returns all elements of the EventType enum
func EventType_Values() []string {
	return []string{
		EventTypeAwsEvidentlyEvaluation,
		EventTypeAwsEvidentlyCustom,
	}
}

const (
	// ExperimentBaseStatMean is a ExperimentBaseStat enum value
	ExperimentBaseStatMean = "Mean"
)

// ExperimentBaseStat_Values returns all elements of the ExperimentBaseStat enum
func ExperimentBaseStat_Values() []string {
	return []string{
		ExperimentBaseStatMean,
	}
}

const (
	// ExperimentReportNameBayesianInference is a ExperimentReportName enum value
	ExperimentReportNameBayesianInference = "BayesianInference"
)

// ExperimentReportName_Values returns all elements of the ExperimentReportName enum
func ExperimentReportName_Values() []string {
	return []string{
		ExperimentReportNameBayesianInference,
	}
}

const (
	// ExperimentResultRequestTypeBaseStat is a ExperimentResultRequestType enum value
	ExperimentResultRequestTypeBaseStat = "BaseStat"

	// ExperimentResultRequestTypeTreatmentEffect is a ExperimentResultRequestType enum value
	ExperimentResultRequestTypeTreatmentEffect = "TreatmentEffect"

	// ExperimentResultRequestTypeConfidenceInterval is a ExperimentResultRequestType enum value
	ExperimentResultRequestTypeConfidenceInterval = "ConfidenceInterval"

	// ExperimentResultRequestTypePvalue is a ExperimentResultRequestType enum value
	ExperimentResultRequestTypePvalue = "PValue"
)

// ExperimentResultRequestType_Values returns all elements of the ExperimentResultRequestType enum
func ExperimentResultRequestType_Values() []string {
	return []string{
		ExperimentResultRequestTypeBaseStat,
		ExperimentResultRequestTypeTreatmentEffect,
		ExperimentResultRequestTypeConfidenceInterval,
		ExperimentResultRequestTypePvalue,
	}
}

const (
	// ExperimentResultResponseTypeMean is a ExperimentResultResponseType enum value
	ExperimentResultResponseTypeMean = "Mean"

	// ExperimentResultResponseTypeTreatmentEffect is a ExperimentResultResponseType enum value
	ExperimentResultResponseTypeTreatmentEffect = "TreatmentEffect"

	// ExperimentResultResponseTypeConfidenceIntervalUpperBound is a ExperimentResultResponseType enum value
	ExperimentResultResponseTypeConfidenceIntervalUpperBound = "ConfidenceIntervalUpperBound"

	// ExperimentResultResponseTypeConfidenceIntervalLowerBound is a ExperimentResultResponseType enum value
	ExperimentResultResponseTypeConfidenceIntervalLowerBound = "ConfidenceIntervalLowerBound"

	// ExperimentResultResponseTypePvalue is a ExperimentResultResponseType enum value
	ExperimentResultResponseTypePvalue = "PValue"
)

// ExperimentResultResponseType_Values returns all elements of the ExperimentResultResponseType enum
func ExperimentResultResponseType_Values() []string {
	return []string{
		ExperimentResultResponseTypeMean,
		ExperimentResultResponseTypeTreatmentEffect,
		ExperimentResultResponseTypeConfidenceIntervalUpperBound,
		ExperimentResultResponseTypeConfidenceIntervalLowerBound,
		ExperimentResultResponseTypePvalue,
	}
}

const (
	// ExperimentStatusCreated is a ExperimentStatus enum value
	ExperimentStatusCreated = "CREATED"

	// ExperimentStatusUpdating is a ExperimentStatus enum value
	ExperimentStatusUpdating = "UPDATING"

	// ExperimentStatusRunning is a ExperimentStatus enum value
	ExperimentStatusRunning = "RUNNING"

	// ExperimentStatusCompleted is a ExperimentStatus enum value
	ExperimentStatusCompleted = "COMPLETED"

	// ExperimentStatusCancelled is a ExperimentStatus enum value
	ExperimentStatusCancelled = "CANCELLED"
)

// ExperimentStatus_Values returns all elements of the ExperimentStatus enum
func ExperimentStatus_Values() []string {
	return []string{
		ExperimentStatusCreated,
		ExperimentStatusUpdating,
		ExperimentStatusRunning,
		ExperimentStatusCompleted,
		ExperimentStatusCancelled,
	}
}

const (
	// ExperimentStopDesiredStateCompleted is a ExperimentStopDesiredState enum value
	ExperimentStopDesiredStateCompleted = "COMPLETED"

	// ExperimentStopDesiredStateCancelled is a ExperimentStopDesiredState enum value
	ExperimentStopDesiredStateCancelled = "CANCELLED"
)

// ExperimentStopDesiredState_Values returns all elements of the ExperimentStopDesiredState enum
func ExperimentStopDesiredState_Values() []string {
	return []string{
		ExperimentStopDesiredStateCompleted,
		ExperimentStopDesiredStateCancelled,
	}
}

const (
	// ExperimentTypeAwsEvidentlyOnlineab is a ExperimentType enum value
	ExperimentTypeAwsEvidentlyOnlineab = "aws.evidently.onlineab"
)

// ExperimentType_Values returns all elements of the ExperimentType enum
func ExperimentType_Values() []string {
	return []string{
		ExperimentTypeAwsEvidentlyOnlineab,
	}
}

const (
	// FeatureEvaluationStrategyAllRules is a FeatureEvaluationStrategy enum value
	FeatureEvaluationStrategyAllRules = "ALL_RULES"

	// FeatureEvaluationStrategyDefaultVariation is a FeatureEvaluationStrategy enum value
	FeatureEvaluationStrategyDefaultVariation = "DEFAULT_VARIATION"
)

// FeatureEvaluationStrategy_Values returns all elements of the FeatureEvaluationStrategy enum
func FeatureEvaluationStrategy_Values() []string {
	return []string{
		FeatureEvaluationStrategyAllRules,
		FeatureEvaluationStrategyDefaultVariation,
	}
}

const (
	// FeatureStatusAvailable is a FeatureStatus enum value
	FeatureStatusAvailable = "AVAILABLE"

	// FeatureStatusUpdating is a FeatureStatus enum value
	FeatureStatusUpdating = "UPDATING"
)

// FeatureStatus_Values returns all elements of the FeatureStatus enum
func FeatureStatus_Values() []string {
	return []string{
		FeatureStatusAvailable,
		FeatureStatusUpdating,
	}
}

const (
	// LaunchStatusCreated is a LaunchStatus enum value
	LaunchStatusCreated = "CREATED"

	// LaunchStatusUpdating is a LaunchStatus enum value
	LaunchStatusUpdating = "UPDATING"

	// LaunchStatusRunning is a LaunchStatus enum value
	LaunchStatusRunning = "RUNNING"

	// LaunchStatusCompleted is a LaunchStatus enum value
	LaunchStatusCompleted = "COMPLETED"

	// LaunchStatusCancelled is a LaunchStatus enum value
	LaunchStatusCancelled = "CANCELLED"
)

// LaunchStatus_Values returns all elements of the LaunchStatus enum
func LaunchStatus_Values() []string {
	return []string{
		LaunchStatusCreated,
		LaunchStatusUpdating,
		LaunchStatusRunning,
		LaunchStatusCompleted,
		LaunchStatusCancelled,
	}
}

const (
	// LaunchStopDesiredStateCompleted is a LaunchStopDesiredState enum value
	LaunchStopDesiredStateCompleted = "COMPLETED"

	// LaunchStopDesiredStateCancelled is a LaunchStopDesiredState enum value
	LaunchStopDesiredStateCancelled = "CANCELLED"
)

// LaunchStopDesiredState_Values returns all elements of the LaunchStopDesiredState enum
func LaunchStopDesiredState_Values() []string {
	return []string{
		LaunchStopDesiredStateCompleted,
		LaunchStopDesiredStateCancelled,
	}
}

const (
	// LaunchTypeAwsEvidentlySplits is a LaunchType enum value
	LaunchTypeAwsEvidentlySplits = "aws.evidently.splits"
)

// LaunchType_Values returns all elements of the LaunchType enum
func LaunchType_Values() []string {
	return []string{
		LaunchTypeAwsEvidentlySplits,
	}
}

const (
	// ProjectStatusAvailable is a ProjectStatus enum value
	ProjectStatusAvailable = "AVAILABLE"

	// ProjectStatusUpdating is a ProjectStatus enum value
	ProjectStatusUpdating = "UPDATING"
)

// ProjectStatus_Values returns all elements of the ProjectStatus enum
func ProjectStatus_Values() []string {
	return []string{
		ProjectStatusAvailable,
		ProjectStatusUpdating,
	}
}

const (
	// SegmentReferenceResourceTypeExperiment is a SegmentReferenceResourceType enum value
	SegmentReferenceResourceTypeExperiment = "EXPERIMENT"

	// SegmentReferenceResourceTypeLaunch is a SegmentReferenceResourceType enum value
	SegmentReferenceResourceTypeLaunch = "LAUNCH"
)

// SegmentReferenceResourceType_Values returns all elements of the SegmentReferenceResourceType enum
func SegmentReferenceResourceType_Values() []string {
	return []string{
		SegmentReferenceResourceTypeExperiment,
		SegmentReferenceResourceTypeLaunch,
	}
}

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

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

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

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

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

const (
	// VariationValueTypeString is a VariationValueType enum value
	VariationValueTypeString = "STRING"

	// VariationValueTypeLong is a VariationValueType enum value
	VariationValueTypeLong = "LONG"

	// VariationValueTypeDouble is a VariationValueType enum value
	VariationValueTypeDouble = "DOUBLE"

	// VariationValueTypeBoolean is a VariationValueType enum value
	VariationValueTypeBoolean = "BOOLEAN"
)

// VariationValueType_Values returns all elements of the VariationValueType enum
func VariationValueType_Values() []string {
	return []string{
		VariationValueTypeString,
		VariationValueTypeLong,
		VariationValueTypeDouble,
		VariationValueTypeBoolean,
	}
}
