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

package forecastservice

import (
	"fmt"
	"time"

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

const opCreateDataset = "CreateDataset"

// CreateDatasetRequest generates a "aws/request.Request" representing the
// client's request for the CreateDataset 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 CreateDataset for more information on using the CreateDataset
// 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 CreateDatasetRequest method.
//    req, resp := client.CreateDatasetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/CreateDataset
func (c *ForecastService) CreateDatasetRequest(input *CreateDatasetInput) (req *request.Request, output *CreateDatasetOutput) {
	op := &request.Operation{
		Name:       opCreateDataset,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateDatasetInput{}
	}

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

// CreateDataset API operation for Amazon Forecast Service.
//
// Creates an Amazon Forecast dataset. The information about the dataset that
// you provide helps Forecast understand how to consume the data for model training.
// This includes the following:
//
//    * DataFrequency - How frequently your historical time-series data is collected.
//    Amazon Forecast uses this information when training the model and generating
//    a forecast.
//
//    * Domain and DatasetType - Each dataset has an associated dataset domain
//    and a type within the domain. Amazon Forecast provides a list of predefined
//    domains and types within each domain. For each unique dataset domain and
//    type within the domain, Amazon Forecast requires your data to include
//    a minimum set of predefined fields.
//
//    * Schema - A schema specifies the fields of the dataset, including the
//    field name and data type.
//
// After creating a dataset, you import your training data into the dataset
// and add the dataset to a dataset group. You then use the dataset group to
// create a predictor. For more information, see howitworks-datasets-groups.
//
// To get a list of all your datasets, use the ListDatasets operation.
//
// The Status of a dataset must be ACTIVE before you can import training data.
// Use the DescribeDataset operation to get the status.
//
// 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 Forecast Service's
// API operation CreateDataset for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceAlreadyExistsException "ResourceAlreadyExistsException"
//   There is already a resource with that Amazon Resource Name (ARN). Try again
//   with a different ARN.
//
//   * ErrCodeLimitExceededException "LimitExceededException"
//   The limit on the number of requests per second has been exceeded.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/CreateDataset
func (c *ForecastService) CreateDataset(input *CreateDatasetInput) (*CreateDatasetOutput, error) {
	req, out := c.CreateDatasetRequest(input)
	return out, req.Send()
}

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

const opCreateDatasetGroup = "CreateDatasetGroup"

// CreateDatasetGroupRequest generates a "aws/request.Request" representing the
// client's request for the CreateDatasetGroup 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 CreateDatasetGroup for more information on using the CreateDatasetGroup
// 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 CreateDatasetGroupRequest method.
//    req, resp := client.CreateDatasetGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/CreateDatasetGroup
func (c *ForecastService) CreateDatasetGroupRequest(input *CreateDatasetGroupInput) (req *request.Request, output *CreateDatasetGroupOutput) {
	op := &request.Operation{
		Name:       opCreateDatasetGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateDatasetGroupInput{}
	}

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

// CreateDatasetGroup API operation for Amazon Forecast Service.
//
// Creates an Amazon Forecast dataset group, which holds a collection of related
// datasets. You can add datasets to the dataset group when you create the dataset
// group, or you can add datasets later with the UpdateDatasetGroup operation.
//
// After creating a dataset group and adding datasets, you use the dataset group
// when you create a predictor. For more information, see howitworks-datasets-groups.
//
// To get a list of all your datasets groups, use the ListDatasetGroups operation.
//
// The Status of a dataset group must be ACTIVE before you can create a predictor
// using the dataset group. Use the DescribeDatasetGroup operation to get the
// status.
//
// 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 Forecast Service's
// API operation CreateDatasetGroup for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceAlreadyExistsException "ResourceAlreadyExistsException"
//   There is already a resource with that Amazon Resource Name (ARN). Try again
//   with a different ARN.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
//   * ErrCodeResourceInUseException "ResourceInUseException"
//   The specified resource is in use.
//
//   * ErrCodeLimitExceededException "LimitExceededException"
//   The limit on the number of requests per second has been exceeded.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/CreateDatasetGroup
func (c *ForecastService) CreateDatasetGroup(input *CreateDatasetGroupInput) (*CreateDatasetGroupOutput, error) {
	req, out := c.CreateDatasetGroupRequest(input)
	return out, req.Send()
}

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

const opCreateDatasetImportJob = "CreateDatasetImportJob"

// CreateDatasetImportJobRequest generates a "aws/request.Request" representing the
// client's request for the CreateDatasetImportJob 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 CreateDatasetImportJob for more information on using the CreateDatasetImportJob
// 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 CreateDatasetImportJobRequest method.
//    req, resp := client.CreateDatasetImportJobRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/CreateDatasetImportJob
func (c *ForecastService) CreateDatasetImportJobRequest(input *CreateDatasetImportJobInput) (req *request.Request, output *CreateDatasetImportJobOutput) {
	op := &request.Operation{
		Name:       opCreateDatasetImportJob,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateDatasetImportJobInput{}
	}

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

// CreateDatasetImportJob API operation for Amazon Forecast Service.
//
// Imports your training data to an Amazon Forecast dataset. You provide the
// location of your training data in an Amazon Simple Storage Service (Amazon
// S3) bucket and the Amazon Resource Name (ARN) of the dataset that you want
// to import the data to.
//
// You must specify a DataSource object that includes an AWS Identity and Access
// Management (IAM) role that Amazon Forecast can assume to access the data.
// For more information, see aws-forecast-iam-roles.
//
// Two properties of the training data are optionally specified:
//
//    * The delimiter that separates the data fields. The default delimiter
//    is a comma (,), which is the only supported delimiter in this release.
//
//    * The format of timestamps. If the format is not specified, Amazon Forecast
//    expects the format to be "yyyy-MM-dd HH:mm:ss".
//
// When Amazon Forecast uploads your training data, it verifies that the data
// was collected at the DataFrequency specified when the target dataset was
// created. For more information, see CreateDataset and howitworks-datasets-groups.
// Amazon Forecast also verifies the delimiter and timestamp format.
//
// You can use the ListDatasetImportJobs operation to get a list of all your
// dataset import jobs, filtered by specified criteria.
//
// To get a list of all your dataset import jobs, filtered by the specified
// criteria, use the ListDatasetGroups 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 Forecast Service's
// API operation CreateDatasetImportJob for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceAlreadyExistsException "ResourceAlreadyExistsException"
//   There is already a resource with that Amazon Resource Name (ARN). Try again
//   with a different ARN.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
//   * ErrCodeResourceInUseException "ResourceInUseException"
//   The specified resource is in use.
//
//   * ErrCodeLimitExceededException "LimitExceededException"
//   The limit on the number of requests per second has been exceeded.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/CreateDatasetImportJob
func (c *ForecastService) CreateDatasetImportJob(input *CreateDatasetImportJobInput) (*CreateDatasetImportJobOutput, error) {
	req, out := c.CreateDatasetImportJobRequest(input)
	return out, req.Send()
}

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

const opCreateForecast = "CreateForecast"

// CreateForecastRequest generates a "aws/request.Request" representing the
// client's request for the CreateForecast 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 CreateForecast for more information on using the CreateForecast
// 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 CreateForecastRequest method.
//    req, resp := client.CreateForecastRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/CreateForecast
func (c *ForecastService) CreateForecastRequest(input *CreateForecastInput) (req *request.Request, output *CreateForecastOutput) {
	op := &request.Operation{
		Name:       opCreateForecast,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateForecastInput{}
	}

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

// CreateForecast API operation for Amazon Forecast Service.
//
// Creates a forecast for each item in the TARGET_TIME_SERIES dataset that was
// used to train the predictor. This is known as inference. To retrieve the
// forecast for a single item at low latency, use the operation. To export the
// complete forecast into your Amazon Simple Storage Service (Amazon S3), use
// the CreateForecastExportJob operation.
//
// The range of the forecast is determined by the ForecastHorizon, specified
// in the CreatePredictor request, multiplied by the DataFrequency, specified
// in the CreateDataset request. When you query a forecast, you can request
// a specific date range within the complete forecast.
//
// To get a list of all your forecasts, use the ListForecasts operation.
//
// The forecasts generated by Amazon Forecast are in the same timezone as the
// dataset that was used to create the predictor.
//
// For more information, see howitworks-forecast.
//
// The Status of the forecast must be ACTIVE before you can query or export
// the forecast. Use the DescribeForecast operation to get the status.
//
// 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 Forecast Service's
// API operation CreateForecast for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceAlreadyExistsException "ResourceAlreadyExistsException"
//   There is already a resource with that Amazon Resource Name (ARN). Try again
//   with a different ARN.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
//   * ErrCodeResourceInUseException "ResourceInUseException"
//   The specified resource is in use.
//
//   * ErrCodeLimitExceededException "LimitExceededException"
//   The limit on the number of requests per second has been exceeded.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/CreateForecast
func (c *ForecastService) CreateForecast(input *CreateForecastInput) (*CreateForecastOutput, error) {
	req, out := c.CreateForecastRequest(input)
	return out, req.Send()
}

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

const opCreateForecastExportJob = "CreateForecastExportJob"

// CreateForecastExportJobRequest generates a "aws/request.Request" representing the
// client's request for the CreateForecastExportJob 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 CreateForecastExportJob for more information on using the CreateForecastExportJob
// 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 CreateForecastExportJobRequest method.
//    req, resp := client.CreateForecastExportJobRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/CreateForecastExportJob
func (c *ForecastService) CreateForecastExportJobRequest(input *CreateForecastExportJobInput) (req *request.Request, output *CreateForecastExportJobOutput) {
	op := &request.Operation{
		Name:       opCreateForecastExportJob,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateForecastExportJobInput{}
	}

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

// CreateForecastExportJob API operation for Amazon Forecast Service.
//
// Exports a forecast created by the CreateForecast operation to your Amazon
// Simple Storage Service (Amazon S3) bucket.
//
// You must specify a DataDestination object that includes an AWS Identity and
// Access Management (IAM) role that Amazon Forecast can assume to access the
// Amazon S3 bucket. For more information, see aws-forecast-iam-roles.
//
// For more information, see howitworks-forecast.
//
// To get a list of all your forecast export jobs, use the ListForecastExportJobs
// operation.
//
// The Status of the forecast export job must be ACTIVE before you can access
// the forecast in your Amazon S3 bucket. Use the DescribeForecastExportJob
// operation to get the status.
//
// 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 Forecast Service's
// API operation CreateForecastExportJob for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceAlreadyExistsException "ResourceAlreadyExistsException"
//   There is already a resource with that Amazon Resource Name (ARN). Try again
//   with a different ARN.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
//   * ErrCodeResourceInUseException "ResourceInUseException"
//   The specified resource is in use.
//
//   * ErrCodeLimitExceededException "LimitExceededException"
//   The limit on the number of requests per second has been exceeded.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/CreateForecastExportJob
func (c *ForecastService) CreateForecastExportJob(input *CreateForecastExportJobInput) (*CreateForecastExportJobOutput, error) {
	req, out := c.CreateForecastExportJobRequest(input)
	return out, req.Send()
}

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

const opCreatePredictor = "CreatePredictor"

// CreatePredictorRequest generates a "aws/request.Request" representing the
// client's request for the CreatePredictor 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 CreatePredictor for more information on using the CreatePredictor
// 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 CreatePredictorRequest method.
//    req, resp := client.CreatePredictorRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/CreatePredictor
func (c *ForecastService) CreatePredictorRequest(input *CreatePredictorInput) (req *request.Request, output *CreatePredictorOutput) {
	op := &request.Operation{
		Name:       opCreatePredictor,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreatePredictorInput{}
	}

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

// CreatePredictor API operation for Amazon Forecast Service.
//
// Creates an Amazon Forecast predictor.
//
// In the request, you provide a dataset group and either specify an algorithm
// or let Amazon Forecast choose the algorithm for you using AutoML. If you
// specify an algorithm, you also can override algorithm-specific hyperparameters.
//
// Amazon Forecast uses the chosen algorithm to train a model using the latest
// version of the datasets in the specified dataset group. The result is called
// a predictor. You then generate a forecast using the CreateForecast operation.
//
// After training a model, the CreatePredictor operation also evaluates it.
// To see the evaluation metrics, use the GetAccuracyMetrics operation. Always
// review the evaluation metrics before deciding to use the predictor to generate
// a forecast.
//
// Optionally, you can specify a featurization configuration to fill and aggragate
// the data fields in the TARGET_TIME_SERIES dataset to improve model training.
// For more information, see FeaturizationConfig.
//
// AutoML
//
// If you set PerformAutoML to true, Amazon Forecast evaluates each algorithm
// and chooses the one that minimizes the objective function. The objective
// function is defined as the mean of the weighted p10, p50, and p90 quantile
// losses. For more information, see EvaluationResult.
//
// When AutoML is enabled, the following properties are disallowed:
//
//    * AlgorithmArn
//
//    * HPOConfig
//
//    * PerformHPO
//
//    * TrainingParameters
//
// To get a list of all your predictors, use the ListPredictors operation.
//
// The Status of the predictor must be ACTIVE, signifying that training has
// completed, before you can use the predictor to create a forecast. Use the
// DescribePredictor operation to get the status.
//
// 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 Forecast Service's
// API operation CreatePredictor for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceAlreadyExistsException "ResourceAlreadyExistsException"
//   There is already a resource with that Amazon Resource Name (ARN). Try again
//   with a different ARN.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
//   * ErrCodeResourceInUseException "ResourceInUseException"
//   The specified resource is in use.
//
//   * ErrCodeLimitExceededException "LimitExceededException"
//   The limit on the number of requests per second has been exceeded.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/CreatePredictor
func (c *ForecastService) CreatePredictor(input *CreatePredictorInput) (*CreatePredictorOutput, error) {
	req, out := c.CreatePredictorRequest(input)
	return out, req.Send()
}

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

const opDeleteDataset = "DeleteDataset"

// DeleteDatasetRequest generates a "aws/request.Request" representing the
// client's request for the DeleteDataset 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 DeleteDataset for more information on using the DeleteDataset
// 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 DeleteDatasetRequest method.
//    req, resp := client.DeleteDatasetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DeleteDataset
func (c *ForecastService) DeleteDatasetRequest(input *DeleteDatasetInput) (req *request.Request, output *DeleteDatasetOutput) {
	op := &request.Operation{
		Name:       opDeleteDataset,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteDatasetInput{}
	}

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

// DeleteDataset API operation for Amazon Forecast Service.
//
// Deletes an Amazon Forecast dataset created using the CreateDataset operation.
// To be deleted, the dataset must have a status of ACTIVE or CREATE_FAILED.
// Use the DescribeDataset operation to get the status.
//
// 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 Forecast Service's
// API operation DeleteDataset for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
//   * ErrCodeResourceInUseException "ResourceInUseException"
//   The specified resource is in use.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DeleteDataset
func (c *ForecastService) DeleteDataset(input *DeleteDatasetInput) (*DeleteDatasetOutput, error) {
	req, out := c.DeleteDatasetRequest(input)
	return out, req.Send()
}

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

const opDeleteDatasetGroup = "DeleteDatasetGroup"

// DeleteDatasetGroupRequest generates a "aws/request.Request" representing the
// client's request for the DeleteDatasetGroup 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 DeleteDatasetGroup for more information on using the DeleteDatasetGroup
// 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 DeleteDatasetGroupRequest method.
//    req, resp := client.DeleteDatasetGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DeleteDatasetGroup
func (c *ForecastService) DeleteDatasetGroupRequest(input *DeleteDatasetGroupInput) (req *request.Request, output *DeleteDatasetGroupOutput) {
	op := &request.Operation{
		Name:       opDeleteDatasetGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteDatasetGroupInput{}
	}

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

// DeleteDatasetGroup API operation for Amazon Forecast Service.
//
// Deletes a dataset group created using the CreateDatasetGroup operation. To
// be deleted, the dataset group must have a status of ACTIVE, CREATE_FAILED,
// or UPDATE_FAILED. Use the DescribeDatasetGroup operation to get the status.
//
// The operation deletes only the dataset group, not the datasets in the group.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Amazon Forecast Service's
// API operation DeleteDatasetGroup for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
//   * ErrCodeResourceInUseException "ResourceInUseException"
//   The specified resource is in use.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DeleteDatasetGroup
func (c *ForecastService) DeleteDatasetGroup(input *DeleteDatasetGroupInput) (*DeleteDatasetGroupOutput, error) {
	req, out := c.DeleteDatasetGroupRequest(input)
	return out, req.Send()
}

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

const opDeleteDatasetImportJob = "DeleteDatasetImportJob"

// DeleteDatasetImportJobRequest generates a "aws/request.Request" representing the
// client's request for the DeleteDatasetImportJob 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 DeleteDatasetImportJob for more information on using the DeleteDatasetImportJob
// 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 DeleteDatasetImportJobRequest method.
//    req, resp := client.DeleteDatasetImportJobRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DeleteDatasetImportJob
func (c *ForecastService) DeleteDatasetImportJobRequest(input *DeleteDatasetImportJobInput) (req *request.Request, output *DeleteDatasetImportJobOutput) {
	op := &request.Operation{
		Name:       opDeleteDatasetImportJob,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteDatasetImportJobInput{}
	}

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

// DeleteDatasetImportJob API operation for Amazon Forecast Service.
//
// Deletes a dataset import job created using the CreateDatasetImportJob operation.
// To be deleted, the import job must have a status of ACTIVE or CREATE_FAILED.
// Use the DescribeDatasetImportJob operation to get the status.
//
// 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 Forecast Service's
// API operation DeleteDatasetImportJob for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
//   * ErrCodeResourceInUseException "ResourceInUseException"
//   The specified resource is in use.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DeleteDatasetImportJob
func (c *ForecastService) DeleteDatasetImportJob(input *DeleteDatasetImportJobInput) (*DeleteDatasetImportJobOutput, error) {
	req, out := c.DeleteDatasetImportJobRequest(input)
	return out, req.Send()
}

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

const opDeleteForecast = "DeleteForecast"

// DeleteForecastRequest generates a "aws/request.Request" representing the
// client's request for the DeleteForecast 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 DeleteForecast for more information on using the DeleteForecast
// 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 DeleteForecastRequest method.
//    req, resp := client.DeleteForecastRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DeleteForecast
func (c *ForecastService) DeleteForecastRequest(input *DeleteForecastInput) (req *request.Request, output *DeleteForecastOutput) {
	op := &request.Operation{
		Name:       opDeleteForecast,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteForecastInput{}
	}

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

// DeleteForecast API operation for Amazon Forecast Service.
//
// Deletes a forecast created using the CreateForecast operation. To be deleted,
// the forecast must have a status of ACTIVE or CREATE_FAILED. Use the DescribeForecast
// operation to get the status.
//
// You can't delete a forecast while it is being exported.
//
// 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 Forecast Service's
// API operation DeleteForecast for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
//   * ErrCodeResourceInUseException "ResourceInUseException"
//   The specified resource is in use.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DeleteForecast
func (c *ForecastService) DeleteForecast(input *DeleteForecastInput) (*DeleteForecastOutput, error) {
	req, out := c.DeleteForecastRequest(input)
	return out, req.Send()
}

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

const opDeleteForecastExportJob = "DeleteForecastExportJob"

// DeleteForecastExportJobRequest generates a "aws/request.Request" representing the
// client's request for the DeleteForecastExportJob 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 DeleteForecastExportJob for more information on using the DeleteForecastExportJob
// 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 DeleteForecastExportJobRequest method.
//    req, resp := client.DeleteForecastExportJobRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DeleteForecastExportJob
func (c *ForecastService) DeleteForecastExportJobRequest(input *DeleteForecastExportJobInput) (req *request.Request, output *DeleteForecastExportJobOutput) {
	op := &request.Operation{
		Name:       opDeleteForecastExportJob,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteForecastExportJobInput{}
	}

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

// DeleteForecastExportJob API operation for Amazon Forecast Service.
//
// Deletes a forecast export job created using the CreateForecastExportJob operation.
// To be deleted, the export job must have a status of ACTIVE or CREATE_FAILED.
// Use the DescribeForecastExportJob operation to get the status.
//
// 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 Forecast Service's
// API operation DeleteForecastExportJob for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
//   * ErrCodeResourceInUseException "ResourceInUseException"
//   The specified resource is in use.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DeleteForecastExportJob
func (c *ForecastService) DeleteForecastExportJob(input *DeleteForecastExportJobInput) (*DeleteForecastExportJobOutput, error) {
	req, out := c.DeleteForecastExportJobRequest(input)
	return out, req.Send()
}

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

const opDeletePredictor = "DeletePredictor"

// DeletePredictorRequest generates a "aws/request.Request" representing the
// client's request for the DeletePredictor 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 DeletePredictor for more information on using the DeletePredictor
// 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 DeletePredictorRequest method.
//    req, resp := client.DeletePredictorRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DeletePredictor
func (c *ForecastService) DeletePredictorRequest(input *DeletePredictorInput) (req *request.Request, output *DeletePredictorOutput) {
	op := &request.Operation{
		Name:       opDeletePredictor,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeletePredictorInput{}
	}

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

// DeletePredictor API operation for Amazon Forecast Service.
//
// Deletes a predictor created using the CreatePredictor operation. To be deleted,
// the predictor must have a status of ACTIVE or CREATE_FAILED. Use the DescribePredictor
// operation to get the status.
//
// Any forecasts generated by the predictor will no longer be available.
//
// 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 Forecast Service's
// API operation DeletePredictor for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
//   * ErrCodeResourceInUseException "ResourceInUseException"
//   The specified resource is in use.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DeletePredictor
func (c *ForecastService) DeletePredictor(input *DeletePredictorInput) (*DeletePredictorOutput, error) {
	req, out := c.DeletePredictorRequest(input)
	return out, req.Send()
}

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

const opDescribeDataset = "DescribeDataset"

// DescribeDatasetRequest generates a "aws/request.Request" representing the
// client's request for the DescribeDataset 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 DescribeDataset for more information on using the DescribeDataset
// 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 DescribeDatasetRequest method.
//    req, resp := client.DescribeDatasetRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DescribeDataset
func (c *ForecastService) DescribeDatasetRequest(input *DescribeDatasetInput) (req *request.Request, output *DescribeDatasetOutput) {
	op := &request.Operation{
		Name:       opDescribeDataset,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeDatasetInput{}
	}

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

// DescribeDataset API operation for Amazon Forecast Service.
//
// Describes an Amazon Forecast dataset created using the CreateDataset operation.
//
// In addition to listing the properties provided by the user in the CreateDataset
// request, this operation includes the following properties:
//
//    * CreationTime
//
//    * LastModificationTime
//
//    * Status
//
// 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 Forecast Service's
// API operation DescribeDataset for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DescribeDataset
func (c *ForecastService) DescribeDataset(input *DescribeDatasetInput) (*DescribeDatasetOutput, error) {
	req, out := c.DescribeDatasetRequest(input)
	return out, req.Send()
}

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

const opDescribeDatasetGroup = "DescribeDatasetGroup"

// DescribeDatasetGroupRequest generates a "aws/request.Request" representing the
// client's request for the DescribeDatasetGroup 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 DescribeDatasetGroup for more information on using the DescribeDatasetGroup
// 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 DescribeDatasetGroupRequest method.
//    req, resp := client.DescribeDatasetGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DescribeDatasetGroup
func (c *ForecastService) DescribeDatasetGroupRequest(input *DescribeDatasetGroupInput) (req *request.Request, output *DescribeDatasetGroupOutput) {
	op := &request.Operation{
		Name:       opDescribeDatasetGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeDatasetGroupInput{}
	}

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

// DescribeDatasetGroup API operation for Amazon Forecast Service.
//
// Describes a dataset group created using the CreateDatasetGroup operation.
//
// In addition to listing the properties provided by the user in the CreateDatasetGroup
// request, this operation includes the following properties:
//
//    * DatasetArns - The datasets belonging to the group.
//
//    * CreationTime
//
//    * LastModificationTime
//
//    * Status
//
// 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 Forecast Service's
// API operation DescribeDatasetGroup for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DescribeDatasetGroup
func (c *ForecastService) DescribeDatasetGroup(input *DescribeDatasetGroupInput) (*DescribeDatasetGroupOutput, error) {
	req, out := c.DescribeDatasetGroupRequest(input)
	return out, req.Send()
}

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

const opDescribeDatasetImportJob = "DescribeDatasetImportJob"

// DescribeDatasetImportJobRequest generates a "aws/request.Request" representing the
// client's request for the DescribeDatasetImportJob 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 DescribeDatasetImportJob for more information on using the DescribeDatasetImportJob
// 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 DescribeDatasetImportJobRequest method.
//    req, resp := client.DescribeDatasetImportJobRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DescribeDatasetImportJob
func (c *ForecastService) DescribeDatasetImportJobRequest(input *DescribeDatasetImportJobInput) (req *request.Request, output *DescribeDatasetImportJobOutput) {
	op := &request.Operation{
		Name:       opDescribeDatasetImportJob,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeDatasetImportJobInput{}
	}

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

// DescribeDatasetImportJob API operation for Amazon Forecast Service.
//
// Describes a dataset import job created using the CreateDatasetImportJob operation.
//
// In addition to listing the properties provided by the user in the CreateDatasetImportJob
// request, this operation includes the following properties:
//
//    * CreationTime
//
//    * LastModificationTime
//
//    * DataSize
//
//    * FieldStatistics
//
//    * Status
//
//    * Message - If an error occurred, information about the error.
//
// 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 Forecast Service's
// API operation DescribeDatasetImportJob for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DescribeDatasetImportJob
func (c *ForecastService) DescribeDatasetImportJob(input *DescribeDatasetImportJobInput) (*DescribeDatasetImportJobOutput, error) {
	req, out := c.DescribeDatasetImportJobRequest(input)
	return out, req.Send()
}

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

const opDescribeForecast = "DescribeForecast"

// DescribeForecastRequest generates a "aws/request.Request" representing the
// client's request for the DescribeForecast 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 DescribeForecast for more information on using the DescribeForecast
// 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 DescribeForecastRequest method.
//    req, resp := client.DescribeForecastRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DescribeForecast
func (c *ForecastService) DescribeForecastRequest(input *DescribeForecastInput) (req *request.Request, output *DescribeForecastOutput) {
	op := &request.Operation{
		Name:       opDescribeForecast,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeForecastInput{}
	}

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

// DescribeForecast API operation for Amazon Forecast Service.
//
// Describes a forecast created using the CreateForecast operation.
//
// In addition to listing the properties provided by the user in the CreateForecast
// request, this operation includes the following properties:
//
//    * DatasetGroupArn - The dataset group that provided the training data.
//
//    * CreationTime
//
//    * LastModificationTime
//
//    * Status
//
//    * Message - If an error occurred, information about the error.
//
// 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 Forecast Service's
// API operation DescribeForecast for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DescribeForecast
func (c *ForecastService) DescribeForecast(input *DescribeForecastInput) (*DescribeForecastOutput, error) {
	req, out := c.DescribeForecastRequest(input)
	return out, req.Send()
}

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

const opDescribeForecastExportJob = "DescribeForecastExportJob"

// DescribeForecastExportJobRequest generates a "aws/request.Request" representing the
// client's request for the DescribeForecastExportJob 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 DescribeForecastExportJob for more information on using the DescribeForecastExportJob
// 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 DescribeForecastExportJobRequest method.
//    req, resp := client.DescribeForecastExportJobRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DescribeForecastExportJob
func (c *ForecastService) DescribeForecastExportJobRequest(input *DescribeForecastExportJobInput) (req *request.Request, output *DescribeForecastExportJobOutput) {
	op := &request.Operation{
		Name:       opDescribeForecastExportJob,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeForecastExportJobInput{}
	}

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

// DescribeForecastExportJob API operation for Amazon Forecast Service.
//
// Describes a forecast export job created using the CreateForecastExportJob
// operation.
//
// In addition to listing the properties provided by the user in the CreateForecastExportJob
// request, this operation includes the following properties:
//
//    * CreationTime
//
//    * LastModificationTime
//
//    * Status
//
//    * Message - If an error occurred, information about the error.
//
// 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 Forecast Service's
// API operation DescribeForecastExportJob for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DescribeForecastExportJob
func (c *ForecastService) DescribeForecastExportJob(input *DescribeForecastExportJobInput) (*DescribeForecastExportJobOutput, error) {
	req, out := c.DescribeForecastExportJobRequest(input)
	return out, req.Send()
}

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

const opDescribePredictor = "DescribePredictor"

// DescribePredictorRequest generates a "aws/request.Request" representing the
// client's request for the DescribePredictor 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 DescribePredictor for more information on using the DescribePredictor
// 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 DescribePredictorRequest method.
//    req, resp := client.DescribePredictorRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DescribePredictor
func (c *ForecastService) DescribePredictorRequest(input *DescribePredictorInput) (req *request.Request, output *DescribePredictorOutput) {
	op := &request.Operation{
		Name:       opDescribePredictor,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribePredictorInput{}
	}

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

// DescribePredictor API operation for Amazon Forecast Service.
//
// Describes a predictor created using the CreatePredictor operation.
//
// In addition to listing the properties provided by the user in the CreatePredictor
// request, this operation includes the following properties:
//
//    * DatasetImportJobArns - The dataset import jobs used to import training
//    data.
//
//    * AutoMLAlgorithmArns - If AutoML is performed, the algorithms evaluated.
//
//    * CreationTime
//
//    * LastModificationTime
//
//    * Status
//
//    * Message - If an error occurred, information about the error.
//
// 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 Forecast Service's
// API operation DescribePredictor for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/DescribePredictor
func (c *ForecastService) DescribePredictor(input *DescribePredictorInput) (*DescribePredictorOutput, error) {
	req, out := c.DescribePredictorRequest(input)
	return out, req.Send()
}

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

const opGetAccuracyMetrics = "GetAccuracyMetrics"

// GetAccuracyMetricsRequest generates a "aws/request.Request" representing the
// client's request for the GetAccuracyMetrics 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 GetAccuracyMetrics for more information on using the GetAccuracyMetrics
// 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 GetAccuracyMetricsRequest method.
//    req, resp := client.GetAccuracyMetricsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/GetAccuracyMetrics
func (c *ForecastService) GetAccuracyMetricsRequest(input *GetAccuracyMetricsInput) (req *request.Request, output *GetAccuracyMetricsOutput) {
	op := &request.Operation{
		Name:       opGetAccuracyMetrics,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetAccuracyMetricsInput{}
	}

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

// GetAccuracyMetrics API operation for Amazon Forecast Service.
//
// Provides metrics on the accuracy of the models that were trained by the CreatePredictor
// operation. Use metrics to see how well the model performed and to decide
// whether to use the predictor to generate a forecast.
//
// Metrics are generated for each backtest window evaluated. For more information,
// see EvaluationParameters.
//
// The parameters of the filling method determine which items contribute to
// the metrics. If zero is specified, all items contribute. If nan is specified,
// only those items that have complete data in the range being evaluated contribute.
// For more information, see FeaturizationMethod.
//
// For an example of how to train a model and review metrics, see getting-started.
//
// 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 Forecast Service's
// API operation GetAccuracyMetrics for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
//   * ErrCodeResourceInUseException "ResourceInUseException"
//   The specified resource is in use.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/GetAccuracyMetrics
func (c *ForecastService) GetAccuracyMetrics(input *GetAccuracyMetricsInput) (*GetAccuracyMetricsOutput, error) {
	req, out := c.GetAccuracyMetricsRequest(input)
	return out, req.Send()
}

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

const opListDatasetGroups = "ListDatasetGroups"

// ListDatasetGroupsRequest generates a "aws/request.Request" representing the
// client's request for the ListDatasetGroups 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 ListDatasetGroups for more information on using the ListDatasetGroups
// 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 ListDatasetGroupsRequest method.
//    req, resp := client.ListDatasetGroupsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/ListDatasetGroups
func (c *ForecastService) ListDatasetGroupsRequest(input *ListDatasetGroupsInput) (req *request.Request, output *ListDatasetGroupsOutput) {
	op := &request.Operation{
		Name:       opListDatasetGroups,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListDatasetGroupsInput{}
	}

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

// ListDatasetGroups API operation for Amazon Forecast Service.
//
// Returns a list of dataset groups created using the CreateDatasetGroup operation.
// For each dataset group, a summary of its properties, including its Amazon
// Resource Name (ARN), is returned. You can retrieve the complete set of properties
// by using the ARN with the DescribeDatasetGroup 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 Forecast Service's
// API operation ListDatasetGroups for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidNextTokenException "InvalidNextTokenException"
//   The token is not valid. Tokens expire after 24 hours.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/ListDatasetGroups
func (c *ForecastService) ListDatasetGroups(input *ListDatasetGroupsInput) (*ListDatasetGroupsOutput, error) {
	req, out := c.ListDatasetGroupsRequest(input)
	return out, req.Send()
}

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

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

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

	cont := true
	for p.Next() && cont {
		cont = fn(p.Page().(*ListDatasetGroupsOutput), !p.HasNextPage())
	}
	return p.Err()
}

const opListDatasetImportJobs = "ListDatasetImportJobs"

// ListDatasetImportJobsRequest generates a "aws/request.Request" representing the
// client's request for the ListDatasetImportJobs 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 ListDatasetImportJobs for more information on using the ListDatasetImportJobs
// 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 ListDatasetImportJobsRequest method.
//    req, resp := client.ListDatasetImportJobsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/ListDatasetImportJobs
func (c *ForecastService) ListDatasetImportJobsRequest(input *ListDatasetImportJobsInput) (req *request.Request, output *ListDatasetImportJobsOutput) {
	op := &request.Operation{
		Name:       opListDatasetImportJobs,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListDatasetImportJobsInput{}
	}

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

// ListDatasetImportJobs API operation for Amazon Forecast Service.
//
// Returns a list of dataset import jobs created using the CreateDatasetImportJob
// operation. For each import job, a summary of its properties, including its
// Amazon Resource Name (ARN), is returned. You can retrieve the complete set
// of properties by using the ARN with the DescribeDatasetImportJob operation.
// You can filter the list by providing an array of Filter objects.
//
// 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 Forecast Service's
// API operation ListDatasetImportJobs for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidNextTokenException "InvalidNextTokenException"
//   The token is not valid. Tokens expire after 24 hours.
//
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/ListDatasetImportJobs
func (c *ForecastService) ListDatasetImportJobs(input *ListDatasetImportJobsInput) (*ListDatasetImportJobsOutput, error) {
	req, out := c.ListDatasetImportJobsRequest(input)
	return out, req.Send()
}

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

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

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

	cont := true
	for p.Next() && cont {
		cont = fn(p.Page().(*ListDatasetImportJobsOutput), !p.HasNextPage())
	}
	return p.Err()
}

const opListDatasets = "ListDatasets"

// ListDatasetsRequest generates a "aws/request.Request" representing the
// client's request for the ListDatasets 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 ListDatasets for more information on using the ListDatasets
// 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 ListDatasetsRequest method.
//    req, resp := client.ListDatasetsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/ListDatasets
func (c *ForecastService) ListDatasetsRequest(input *ListDatasetsInput) (req *request.Request, output *ListDatasetsOutput) {
	op := &request.Operation{
		Name:       opListDatasets,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListDatasetsInput{}
	}

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

// ListDatasets API operation for Amazon Forecast Service.
//
// Returns a list of datasets created using the CreateDataset operation. For
// each dataset, a summary of its properties, including its Amazon Resource
// Name (ARN), is returned. You can retrieve the complete set of properties
// by using the ARN with the DescribeDataset 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 Forecast Service's
// API operation ListDatasets for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidNextTokenException "InvalidNextTokenException"
//   The token is not valid. Tokens expire after 24 hours.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/ListDatasets
func (c *ForecastService) ListDatasets(input *ListDatasetsInput) (*ListDatasetsOutput, error) {
	req, out := c.ListDatasetsRequest(input)
	return out, req.Send()
}

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

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

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

	cont := true
	for p.Next() && cont {
		cont = fn(p.Page().(*ListDatasetsOutput), !p.HasNextPage())
	}
	return p.Err()
}

const opListForecastExportJobs = "ListForecastExportJobs"

// ListForecastExportJobsRequest generates a "aws/request.Request" representing the
// client's request for the ListForecastExportJobs 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 ListForecastExportJobs for more information on using the ListForecastExportJobs
// 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 ListForecastExportJobsRequest method.
//    req, resp := client.ListForecastExportJobsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/ListForecastExportJobs
func (c *ForecastService) ListForecastExportJobsRequest(input *ListForecastExportJobsInput) (req *request.Request, output *ListForecastExportJobsOutput) {
	op := &request.Operation{
		Name:       opListForecastExportJobs,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListForecastExportJobsInput{}
	}

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

// ListForecastExportJobs API operation for Amazon Forecast Service.
//
// Returns a list of forecast export jobs created using the CreateForecastExportJob
// operation. For each forecast export job, a summary of its properties, including
// its Amazon Resource Name (ARN), is returned. You can retrieve the complete
// set of properties by using the ARN with the DescribeForecastExportJob operation.
// The list can be filtered using an array of Filter objects.
//
// 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 Forecast Service's
// API operation ListForecastExportJobs for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidNextTokenException "InvalidNextTokenException"
//   The token is not valid. Tokens expire after 24 hours.
//
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/ListForecastExportJobs
func (c *ForecastService) ListForecastExportJobs(input *ListForecastExportJobsInput) (*ListForecastExportJobsOutput, error) {
	req, out := c.ListForecastExportJobsRequest(input)
	return out, req.Send()
}

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

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

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

	cont := true
	for p.Next() && cont {
		cont = fn(p.Page().(*ListForecastExportJobsOutput), !p.HasNextPage())
	}
	return p.Err()
}

const opListForecasts = "ListForecasts"

// ListForecastsRequest generates a "aws/request.Request" representing the
// client's request for the ListForecasts 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 ListForecasts for more information on using the ListForecasts
// 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 ListForecastsRequest method.
//    req, resp := client.ListForecastsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/ListForecasts
func (c *ForecastService) ListForecastsRequest(input *ListForecastsInput) (req *request.Request, output *ListForecastsOutput) {
	op := &request.Operation{
		Name:       opListForecasts,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListForecastsInput{}
	}

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

// ListForecasts API operation for Amazon Forecast Service.
//
// Returns a list of forecasts created using the CreateForecast operation. For
// each forecast, a summary of its properties, including its Amazon Resource
// Name (ARN), is returned. You can retrieve the complete set of properties
// by using the ARN with the DescribeForecast operation. The list can be filtered
// using an array of Filter objects.
//
// 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 Forecast Service's
// API operation ListForecasts for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidNextTokenException "InvalidNextTokenException"
//   The token is not valid. Tokens expire after 24 hours.
//
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/ListForecasts
func (c *ForecastService) ListForecasts(input *ListForecastsInput) (*ListForecastsOutput, error) {
	req, out := c.ListForecastsRequest(input)
	return out, req.Send()
}

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

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

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

	cont := true
	for p.Next() && cont {
		cont = fn(p.Page().(*ListForecastsOutput), !p.HasNextPage())
	}
	return p.Err()
}

const opListPredictors = "ListPredictors"

// ListPredictorsRequest generates a "aws/request.Request" representing the
// client's request for the ListPredictors 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 ListPredictors for more information on using the ListPredictors
// 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 ListPredictorsRequest method.
//    req, resp := client.ListPredictorsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/ListPredictors
func (c *ForecastService) ListPredictorsRequest(input *ListPredictorsInput) (req *request.Request, output *ListPredictorsOutput) {
	op := &request.Operation{
		Name:       opListPredictors,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &ListPredictorsInput{}
	}

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

// ListPredictors API operation for Amazon Forecast Service.
//
// Returns a list of predictors created using the CreatePredictor operation.
// For each predictor, a summary of its properties, including its Amazon Resource
// Name (ARN), is returned. You can retrieve the complete set of properties
// by using the ARN with the DescribePredictor operation. The list can be filtered
// using an array of Filter objects.
//
// 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 Forecast Service's
// API operation ListPredictors for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidNextTokenException "InvalidNextTokenException"
//   The token is not valid. Tokens expire after 24 hours.
//
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/ListPredictors
func (c *ForecastService) ListPredictors(input *ListPredictorsInput) (*ListPredictorsOutput, error) {
	req, out := c.ListPredictorsRequest(input)
	return out, req.Send()
}

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

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

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

	cont := true
	for p.Next() && cont {
		cont = fn(p.Page().(*ListPredictorsOutput), !p.HasNextPage())
	}
	return p.Err()
}

const opUpdateDatasetGroup = "UpdateDatasetGroup"

// UpdateDatasetGroupRequest generates a "aws/request.Request" representing the
// client's request for the UpdateDatasetGroup 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 UpdateDatasetGroup for more information on using the UpdateDatasetGroup
// 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 UpdateDatasetGroupRequest method.
//    req, resp := client.UpdateDatasetGroupRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/UpdateDatasetGroup
func (c *ForecastService) UpdateDatasetGroupRequest(input *UpdateDatasetGroupInput) (req *request.Request, output *UpdateDatasetGroupOutput) {
	op := &request.Operation{
		Name:       opUpdateDatasetGroup,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateDatasetGroupInput{}
	}

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

// UpdateDatasetGroup API operation for Amazon Forecast Service.
//
// Replaces any existing datasets in the dataset group with the specified datasets.
//
// The Status of the dataset group must be ACTIVE before creating a predictor
// using the dataset group. Use the DescribeDatasetGroup operation to get the
// status.
//
// 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 Forecast Service's
// API operation UpdateDatasetGroup for usage and error information.
//
// Returned Error Codes:
//   * ErrCodeInvalidInputException "InvalidInputException"
//   We can't process the request because it includes an invalid value or a value
//   that exceeds the valid range.
//
//   * ErrCodeResourceNotFoundException "ResourceNotFoundException"
//   We can't find a resource with that Amazon Resource Name (ARN). Check the
//   ARN and try again.
//
//   * ErrCodeResourceInUseException "ResourceInUseException"
//   The specified resource is in use.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/forecast-2018-06-26/UpdateDatasetGroup
func (c *ForecastService) UpdateDatasetGroup(input *UpdateDatasetGroupInput) (*UpdateDatasetGroupOutput, error) {
	req, out := c.UpdateDatasetGroupRequest(input)
	return out, req.Send()
}

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

// Specifies a categorical hyperparameter and it's range of tunable values.
// This object is part of the ParameterRanges object.
type CategoricalParameterRange struct {
	_ struct{} `type:"structure"`

	// The name of the categorical hyperparameter to tune.
	//
	// Name is a required field
	Name *string `min:"1" type:"string" required:"true"`

	// A list of the tunable categories for the hyperparameter.
	//
	// Values is a required field
	Values []*string `min:"1" type:"list" required:"true"`
}

// String returns the string representation
func (s CategoricalParameterRange) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CategoricalParameterRange) GoString() string {
	return s.String()
}

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

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

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

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

// Specifies a continuous hyperparameter and it's range of tunable values. This
// object is part of the ParameterRanges object.
type ContinuousParameterRange struct {
	_ struct{} `type:"structure"`

	// The maximum tunable value of the hyperparameter.
	//
	// MaxValue is a required field
	MaxValue *float64 `type:"double" required:"true"`

	// The minimum tunable value of the hyperparameter.
	//
	// MinValue is a required field
	MinValue *float64 `type:"double" required:"true"`

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

	// The scale that hyperparameter tuning uses to search the hyperparameter range.
	// For information about choosing a hyperparameter scale, see Hyperparameter
	// Scaling (http://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html#scaling-type).
	// One of the following values:
	//
	// Auto
	//
	// Amazon Forecast hyperparameter tuning chooses the best scale for the hyperparameter.
	//
	// Linear
	//
	// Hyperparameter tuning searches the values in the hyperparameter range by
	// using a linear scale.
	//
	// Logarithmic
	//
	// Hyperparameter tuning searches the values in the hyperparameter range by
	// using a logarithmic scale.
	//
	// Logarithmic scaling works only for ranges that have only values greater than
	// 0.
	//
	// ReverseLogarithmic
	//
	// Hyperparemeter tuning searches the values in the hyperparameter range by
	// using a reverse logarithmic scale.
	//
	// Reverse logarithmic scaling works only for ranges that are entirely within
	// the range 0 <= x < 1.0.
	ScalingType *string `type:"string" enum:"ScalingType"`
}

// String returns the string representation
func (s ContinuousParameterRange) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ContinuousParameterRange) GoString() string {
	return s.String()
}

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

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

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

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

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

// SetScalingType sets the ScalingType field's value.
func (s *ContinuousParameterRange) SetScalingType(v string) *ContinuousParameterRange {
	s.ScalingType = &v
	return s
}

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

	// An array of Amazon Resource Names (ARNs) of the datasets that you want to
	// include in the dataset group.
	DatasetArns []*string `type:"list"`

	// A name for the dataset group.
	//
	// DatasetGroupName is a required field
	DatasetGroupName *string `min:"1" type:"string" required:"true"`

	// The domain associated with the dataset group. The Domain and DatasetType
	// that you choose determine the fields that must be present in the training
	// data that you import to the dataset. For example, if you choose the RETAIL
	// domain and TARGET_TIME_SERIES as the DatasetType, Amazon Forecast requires
	// item_id, timestamp, and demand fields to be present in your data. For more
	// information, see howitworks-datasets-groups.
	//
	// Domain is a required field
	Domain *string `type:"string" required:"true" enum:"Domain"`
}

// String returns the string representation
func (s CreateDatasetGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateDatasetGroupInput) GoString() string {
	return s.String()
}

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

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

// SetDatasetArns sets the DatasetArns field's value.
func (s *CreateDatasetGroupInput) SetDatasetArns(v []*string) *CreateDatasetGroupInput {
	s.DatasetArns = v
	return s
}

// SetDatasetGroupName sets the DatasetGroupName field's value.
func (s *CreateDatasetGroupInput) SetDatasetGroupName(v string) *CreateDatasetGroupInput {
	s.DatasetGroupName = &v
	return s
}

// SetDomain sets the Domain field's value.
func (s *CreateDatasetGroupInput) SetDomain(v string) *CreateDatasetGroupInput {
	s.Domain = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the dataset group.
	DatasetGroupArn *string `type:"string"`
}

// String returns the string representation
func (s CreateDatasetGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateDatasetGroupOutput) GoString() string {
	return s.String()
}

// SetDatasetGroupArn sets the DatasetGroupArn field's value.
func (s *CreateDatasetGroupOutput) SetDatasetGroupArn(v string) *CreateDatasetGroupOutput {
	s.DatasetGroupArn = &v
	return s
}

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

	// The location of the training data to import and an AWS Identity and Access
	// Management (IAM) role that Amazon Forecast can assume to access the data.
	//
	// DataSource is a required field
	DataSource *DataSource `type:"structure" required:"true"`

	// The Amazon Resource Name (ARN) of the Amazon Forecast dataset that you want
	// to import data to.
	//
	// DatasetArn is a required field
	DatasetArn *string `type:"string" required:"true"`

	// The name for the dataset import job. It is recommended to include the current
	// timestamp in the name to guard against getting a ResourceAlreadyExistsException
	// exception, for example, 20190721DatasetImport.
	//
	// DatasetImportJobName is a required field
	DatasetImportJobName *string `min:"1" type:"string" required:"true"`

	// The format of timestamps in the dataset. Two formats are supported, dependent
	// on the DataFrequency specified when the dataset was created.
	//
	//    * "yyyy-MM-dd" For data frequencies: Y, M, W, and D
	//
	//    * "yyyy-MM-dd HH:mm:ss" For data frequencies: H, 30min, 15min, and 1min;
	//    and optionally, for: Y, M, W, and D
	TimestampFormat *string `type:"string"`
}

// String returns the string representation
func (s CreateDatasetImportJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateDatasetImportJobInput) GoString() string {
	return s.String()
}

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

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

// SetDataSource sets the DataSource field's value.
func (s *CreateDatasetImportJobInput) SetDataSource(v *DataSource) *CreateDatasetImportJobInput {
	s.DataSource = v
	return s
}

// SetDatasetArn sets the DatasetArn field's value.
func (s *CreateDatasetImportJobInput) SetDatasetArn(v string) *CreateDatasetImportJobInput {
	s.DatasetArn = &v
	return s
}

// SetDatasetImportJobName sets the DatasetImportJobName field's value.
func (s *CreateDatasetImportJobInput) SetDatasetImportJobName(v string) *CreateDatasetImportJobInput {
	s.DatasetImportJobName = &v
	return s
}

// SetTimestampFormat sets the TimestampFormat field's value.
func (s *CreateDatasetImportJobInput) SetTimestampFormat(v string) *CreateDatasetImportJobInput {
	s.TimestampFormat = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the dataset import job.
	DatasetImportJobArn *string `type:"string"`
}

// String returns the string representation
func (s CreateDatasetImportJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateDatasetImportJobOutput) GoString() string {
	return s.String()
}

// SetDatasetImportJobArn sets the DatasetImportJobArn field's value.
func (s *CreateDatasetImportJobOutput) SetDatasetImportJobArn(v string) *CreateDatasetImportJobOutput {
	s.DatasetImportJobArn = &v
	return s
}

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

	// The frequency of data collection.
	//
	// Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour), 30min
	// (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5 minutes), and
	// 1min (1 minute). For example, "D" indicates every day and "15min" indicates
	// every 15 minutes.
	DataFrequency *string `type:"string"`

	// A name for the dataset.
	//
	// DatasetName is a required field
	DatasetName *string `min:"1" type:"string" required:"true"`

	// The dataset type. Valid values depend on the chosen Domain.
	//
	// DatasetType is a required field
	DatasetType *string `type:"string" required:"true" enum:"DatasetType"`

	// The domain associated with the dataset. The Domain and DatasetType that you
	// choose determine the fields that must be present in the training data that
	// you import to the dataset. For example, if you choose the RETAIL domain and
	// TARGET_TIME_SERIES as the DatasetType, Amazon Forecast requires item_id,
	// timestamp, and demand fields to be present in your data. For more information,
	// see howitworks-datasets-groups.
	//
	// Domain is a required field
	Domain *string `type:"string" required:"true" enum:"Domain"`

	// An AWS Key Management Service (KMS) key and the AWS Identity and Access Management
	// (IAM) role that Amazon Forecast can assume to access the key.
	EncryptionConfig *EncryptionConfig `type:"structure"`

	// The schema for the dataset. The schema attributes and their order must match
	// the fields in your data. The dataset Domain and DatasetType that you choose
	// determine the minimum required fields in your training data. For information
	// about the required fields for a specific dataset domain and type, see howitworks-domains-ds-types.
	//
	// Schema is a required field
	Schema *Schema `type:"structure" required:"true"`
}

// String returns the string representation
func (s CreateDatasetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateDatasetInput) GoString() string {
	return s.String()
}

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

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

// SetDataFrequency sets the DataFrequency field's value.
func (s *CreateDatasetInput) SetDataFrequency(v string) *CreateDatasetInput {
	s.DataFrequency = &v
	return s
}

// SetDatasetName sets the DatasetName field's value.
func (s *CreateDatasetInput) SetDatasetName(v string) *CreateDatasetInput {
	s.DatasetName = &v
	return s
}

// SetDatasetType sets the DatasetType field's value.
func (s *CreateDatasetInput) SetDatasetType(v string) *CreateDatasetInput {
	s.DatasetType = &v
	return s
}

// SetDomain sets the Domain field's value.
func (s *CreateDatasetInput) SetDomain(v string) *CreateDatasetInput {
	s.Domain = &v
	return s
}

// SetEncryptionConfig sets the EncryptionConfig field's value.
func (s *CreateDatasetInput) SetEncryptionConfig(v *EncryptionConfig) *CreateDatasetInput {
	s.EncryptionConfig = v
	return s
}

// SetSchema sets the Schema field's value.
func (s *CreateDatasetInput) SetSchema(v *Schema) *CreateDatasetInput {
	s.Schema = v
	return s
}

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

	// The Amazon Resource Name (ARN) of the dataset.
	DatasetArn *string `type:"string"`
}

// String returns the string representation
func (s CreateDatasetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateDatasetOutput) GoString() string {
	return s.String()
}

// SetDatasetArn sets the DatasetArn field's value.
func (s *CreateDatasetOutput) SetDatasetArn(v string) *CreateDatasetOutput {
	s.DatasetArn = &v
	return s
}

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

	// The path to the Amazon S3 bucket where you want to save the forecast and
	// an AWS Identity and Access Management (IAM) role that Amazon Forecast can
	// assume to access the bucket.
	//
	// Destination is a required field
	Destination *DataDestination `type:"structure" required:"true"`

	// The Amazon Resource Name (ARN) of the forecast that you want to export.
	//
	// ForecastArn is a required field
	ForecastArn *string `type:"string" required:"true"`

	// The name for the forecast export job.
	//
	// ForecastExportJobName is a required field
	ForecastExportJobName *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation
func (s CreateForecastExportJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateForecastExportJobInput) GoString() string {
	return s.String()
}

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

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

// SetDestination sets the Destination field's value.
func (s *CreateForecastExportJobInput) SetDestination(v *DataDestination) *CreateForecastExportJobInput {
	s.Destination = v
	return s
}

// SetForecastArn sets the ForecastArn field's value.
func (s *CreateForecastExportJobInput) SetForecastArn(v string) *CreateForecastExportJobInput {
	s.ForecastArn = &v
	return s
}

// SetForecastExportJobName sets the ForecastExportJobName field's value.
func (s *CreateForecastExportJobInput) SetForecastExportJobName(v string) *CreateForecastExportJobInput {
	s.ForecastExportJobName = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the export job.
	ForecastExportJobArn *string `type:"string"`
}

// String returns the string representation
func (s CreateForecastExportJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateForecastExportJobOutput) GoString() string {
	return s.String()
}

// SetForecastExportJobArn sets the ForecastExportJobArn field's value.
func (s *CreateForecastExportJobOutput) SetForecastExportJobArn(v string) *CreateForecastExportJobOutput {
	s.ForecastExportJobArn = &v
	return s
}

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

	// The name for the forecast.
	//
	// ForecastName is a required field
	ForecastName *string `min:"1" type:"string" required:"true"`

	// The Amazon Resource Name (ARN) of the predictor to use to generate the forecast.
	//
	// PredictorArn is a required field
	PredictorArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s CreateForecastInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateForecastInput) GoString() string {
	return s.String()
}

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

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

// SetForecastName sets the ForecastName field's value.
func (s *CreateForecastInput) SetForecastName(v string) *CreateForecastInput {
	s.ForecastName = &v
	return s
}

// SetPredictorArn sets the PredictorArn field's value.
func (s *CreateForecastInput) SetPredictorArn(v string) *CreateForecastInput {
	s.PredictorArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the forecast.
	ForecastArn *string `type:"string"`
}

// String returns the string representation
func (s CreateForecastOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateForecastOutput) GoString() string {
	return s.String()
}

// SetForecastArn sets the ForecastArn field's value.
func (s *CreateForecastOutput) SetForecastArn(v string) *CreateForecastOutput {
	s.ForecastArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the algorithm to use for model training.
	// Required if PerformAutoML is not set to true.
	//
	// Supported algorithms
	//
	//    * arn:aws:forecast:::algorithm/ARIMA
	//
	//    * arn:aws:forecast:::algorithm/Deep_AR_Plus - supports hyperparameter
	//    optimization (HPO)
	//
	//    * arn:aws:forecast:::algorithm/ETS
	//
	//    * arn:aws:forecast:::algorithm/NPTS
	//
	//    * arn:aws:forecast:::algorithm/Prophet
	AlgorithmArn *string `type:"string"`

	// An AWS Key Management Service (KMS) key and the AWS Identity and Access Management
	// (IAM) role that Amazon Forecast can assume to access the key.
	EncryptionConfig *EncryptionConfig `type:"structure"`

	// Used to override the default evaluation parameters of the specified algorithm.
	// Amazon Forecast evaluates a predictor by splitting a dataset into training
	// data and testing data. The evaluation parameters define how to perform the
	// split and the number of iterations.
	EvaluationParameters *EvaluationParameters `type:"structure"`

	// The featurization configuration.
	//
	// FeaturizationConfig is a required field
	FeaturizationConfig *FeaturizationConfig `type:"structure" required:"true"`

	// Specifies the number of time-steps that the model is trained to predict.
	// The forecast horizon is also called the prediction length.
	//
	// For example, if you configure a dataset for daily data collection (using
	// the DataFrequency parameter of the CreateDataset operation) and set the forecast
	// horizon to 10, the model returns predictions for 10 days.
	//
	// ForecastHorizon is a required field
	ForecastHorizon *int64 `type:"integer" required:"true"`

	// Provides hyperparameter override values for the algorithm. If you don't provide
	// this parameter, Amazon Forecast uses default values. The individual algorithms
	// specify which hyperparameters support hyperparameter optimization (HPO).
	// For more information, see aws-forecast-choosing-recipes.
	HPOConfig *HyperParameterTuningJobConfig `type:"structure"`

	// Describes the dataset group that contains the data to use to train the predictor.
	//
	// InputDataConfig is a required field
	InputDataConfig *InputDataConfig `type:"structure" required:"true"`

	// Whether to perform AutoML. The default value is false. In this case, you
	// are required to specify an algorithm.
	//
	// If you want Amazon Forecast to evaluate the algorithms it provides and choose
	// the best algorithm and configuration for your training dataset, set PerformAutoML
	// to true. This is a good option if you aren't sure which algorithm is suitable
	// for your application.
	PerformAutoML *bool `type:"boolean"`

	// Whether to perform hyperparameter optimization (HPO). HPO finds optimal hyperparameter
	// values for your training data. The process of performing HPO is known as
	// a hyperparameter tuning job.
	//
	// The default value is false. In this case, Amazon Forecast uses default hyperparameter
	// values from the chosen algorithm.
	//
	// To override the default values, set PerformHPO to true and supply the HyperParameterTuningJobConfig
	// object. The tuning job specifies an objective metric, the hyperparameters
	// to optimize, and the valid range for each hyperparameter.
	//
	// The following algorithms support HPO:
	//
	//    * DeepAR+
	PerformHPO *bool `type:"boolean"`

	// A name for the predictor.
	//
	// PredictorName is a required field
	PredictorName *string `min:"1" type:"string" required:"true"`

	// The training parameters to override for model training. The parameters that
	// you can override are listed in the individual algorithms in aws-forecast-choosing-recipes.
	TrainingParameters map[string]*string `type:"map"`
}

// String returns the string representation
func (s CreatePredictorInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreatePredictorInput) GoString() string {
	return s.String()
}

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

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

// SetAlgorithmArn sets the AlgorithmArn field's value.
func (s *CreatePredictorInput) SetAlgorithmArn(v string) *CreatePredictorInput {
	s.AlgorithmArn = &v
	return s
}

// SetEncryptionConfig sets the EncryptionConfig field's value.
func (s *CreatePredictorInput) SetEncryptionConfig(v *EncryptionConfig) *CreatePredictorInput {
	s.EncryptionConfig = v
	return s
}

// SetEvaluationParameters sets the EvaluationParameters field's value.
func (s *CreatePredictorInput) SetEvaluationParameters(v *EvaluationParameters) *CreatePredictorInput {
	s.EvaluationParameters = v
	return s
}

// SetFeaturizationConfig sets the FeaturizationConfig field's value.
func (s *CreatePredictorInput) SetFeaturizationConfig(v *FeaturizationConfig) *CreatePredictorInput {
	s.FeaturizationConfig = v
	return s
}

// SetForecastHorizon sets the ForecastHorizon field's value.
func (s *CreatePredictorInput) SetForecastHorizon(v int64) *CreatePredictorInput {
	s.ForecastHorizon = &v
	return s
}

// SetHPOConfig sets the HPOConfig field's value.
func (s *CreatePredictorInput) SetHPOConfig(v *HyperParameterTuningJobConfig) *CreatePredictorInput {
	s.HPOConfig = v
	return s
}

// SetInputDataConfig sets the InputDataConfig field's value.
func (s *CreatePredictorInput) SetInputDataConfig(v *InputDataConfig) *CreatePredictorInput {
	s.InputDataConfig = v
	return s
}

// SetPerformAutoML sets the PerformAutoML field's value.
func (s *CreatePredictorInput) SetPerformAutoML(v bool) *CreatePredictorInput {
	s.PerformAutoML = &v
	return s
}

// SetPerformHPO sets the PerformHPO field's value.
func (s *CreatePredictorInput) SetPerformHPO(v bool) *CreatePredictorInput {
	s.PerformHPO = &v
	return s
}

// SetPredictorName sets the PredictorName field's value.
func (s *CreatePredictorInput) SetPredictorName(v string) *CreatePredictorInput {
	s.PredictorName = &v
	return s
}

// SetTrainingParameters sets the TrainingParameters field's value.
func (s *CreatePredictorInput) SetTrainingParameters(v map[string]*string) *CreatePredictorInput {
	s.TrainingParameters = v
	return s
}

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

	// The Amazon Resource Name (ARN) of the predictor.
	PredictorArn *string `type:"string"`
}

// String returns the string representation
func (s CreatePredictorOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreatePredictorOutput) GoString() string {
	return s.String()
}

// SetPredictorArn sets the PredictorArn field's value.
func (s *CreatePredictorOutput) SetPredictorArn(v string) *CreatePredictorOutput {
	s.PredictorArn = &v
	return s
}

// The destination of an exported forecast and credentials to access the location.
// This object is submitted in the CreateForecastExportJob request.
type DataDestination struct {
	_ struct{} `type:"structure"`

	// The path to an Amazon Simple Storage Service (Amazon S3) bucket along with
	// the credentials to access the bucket.
	//
	// S3Config is a required field
	S3Config *S3Config `type:"structure" required:"true"`
}

// String returns the string representation
func (s DataDestination) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DataDestination) GoString() string {
	return s.String()
}

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

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

// SetS3Config sets the S3Config field's value.
func (s *DataDestination) SetS3Config(v *S3Config) *DataDestination {
	s.S3Config = v
	return s
}

// The source of your training data and credentials to access the data. This
// object is submitted in the CreateDatasetImportJob request.
type DataSource struct {
	_ struct{} `type:"structure"`

	// The path to the training data stored in an Amazon Simple Storage Service
	// (Amazon S3) bucket along with the credentials to access the data.
	//
	// S3Config is a required field
	S3Config *S3Config `type:"structure" required:"true"`
}

// String returns the string representation
func (s DataSource) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DataSource) GoString() string {
	return s.String()
}

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

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

// SetS3Config sets the S3Config field's value.
func (s *DataSource) SetS3Config(v *S3Config) *DataSource {
	s.S3Config = v
	return s
}

// Provides a summary of the dataset group properties used in the ListDatasetGroups
// operation. To get the complete set of properties, call the DescribeDatasetGroup
// operation, and provide the listed DatasetGroupArn.
type DatasetGroupSummary struct {
	_ struct{} `type:"structure"`

	// When the datase group was created.
	CreationTime *time.Time `type:"timestamp"`

	// The Amazon Resource Name (ARN) of the dataset group.
	DatasetGroupArn *string `type:"string"`

	// The name of the dataset group.
	DatasetGroupName *string `min:"1" type:"string"`

	// When the dataset group was created or last updated from a call to the UpdateDatasetGroup
	// operation. While the dataset group is being updated, LastModificationTime
	// is the current query time.
	LastModificationTime *time.Time `type:"timestamp"`
}

// String returns the string representation
func (s DatasetGroupSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DatasetGroupSummary) GoString() string {
	return s.String()
}

// SetCreationTime sets the CreationTime field's value.
func (s *DatasetGroupSummary) SetCreationTime(v time.Time) *DatasetGroupSummary {
	s.CreationTime = &v
	return s
}

// SetDatasetGroupArn sets the DatasetGroupArn field's value.
func (s *DatasetGroupSummary) SetDatasetGroupArn(v string) *DatasetGroupSummary {
	s.DatasetGroupArn = &v
	return s
}

// SetDatasetGroupName sets the DatasetGroupName field's value.
func (s *DatasetGroupSummary) SetDatasetGroupName(v string) *DatasetGroupSummary {
	s.DatasetGroupName = &v
	return s
}

// SetLastModificationTime sets the LastModificationTime field's value.
func (s *DatasetGroupSummary) SetLastModificationTime(v time.Time) *DatasetGroupSummary {
	s.LastModificationTime = &v
	return s
}

// Provides a summary of the dataset import job properties used in the ListDatasetImportJobs
// operation. To get the complete set of properties, call the DescribeDatasetImportJob
// operation, and provide the listed DatasetImportJobArn.
type DatasetImportJobSummary struct {
	_ struct{} `type:"structure"`

	// When the dataset import job was created.
	CreationTime *time.Time `type:"timestamp"`

	// The location of the Amazon S3 bucket that contains the training data.
	DataSource *DataSource `type:"structure"`

	// The Amazon Resource Name (ARN) of the dataset import job.
	DatasetImportJobArn *string `type:"string"`

	// The name of the dataset import job.
	DatasetImportJobName *string `min:"1" type:"string"`

	// Dependent on the status as follows:
	//
	//    * CREATE_PENDING - same as CreationTime
	//
	//    * CREATE_IN_PROGRESS - the current timestamp
	//
	//    * ACTIVE or CREATE_FAILED - when the job finished or failed
	LastModificationTime *time.Time `type:"timestamp"`

	// If an error occurred, an informational message about the error.
	Message *string `type:"string"`

	// The status of the dataset import job. The status is reflected in the status
	// of the dataset. For example, when the import job status is CREATE_IN_PROGRESS,
	// the status of the dataset is UPDATE_IN_PROGRESS. States include:
	//
	//    * ACTIVE
	//
	//    * CREATE_PENDING, CREATE_IN_PROGRESS, CREATE_FAILED
	//
	//    * DELETE_PENDING, DELETE_IN_PROGRESS, DELETE_FAILED
	Status *string `type:"string"`
}

// String returns the string representation
func (s DatasetImportJobSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DatasetImportJobSummary) GoString() string {
	return s.String()
}

// SetCreationTime sets the CreationTime field's value.
func (s *DatasetImportJobSummary) SetCreationTime(v time.Time) *DatasetImportJobSummary {
	s.CreationTime = &v
	return s
}

// SetDataSource sets the DataSource field's value.
func (s *DatasetImportJobSummary) SetDataSource(v *DataSource) *DatasetImportJobSummary {
	s.DataSource = v
	return s
}

// SetDatasetImportJobArn sets the DatasetImportJobArn field's value.
func (s *DatasetImportJobSummary) SetDatasetImportJobArn(v string) *DatasetImportJobSummary {
	s.DatasetImportJobArn = &v
	return s
}

// SetDatasetImportJobName sets the DatasetImportJobName field's value.
func (s *DatasetImportJobSummary) SetDatasetImportJobName(v string) *DatasetImportJobSummary {
	s.DatasetImportJobName = &v
	return s
}

// SetLastModificationTime sets the LastModificationTime field's value.
func (s *DatasetImportJobSummary) SetLastModificationTime(v time.Time) *DatasetImportJobSummary {
	s.LastModificationTime = &v
	return s
}

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

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

// Provides a summary of the dataset properties used in the ListDatasets operation.
// To get the complete set of properties, call the DescribeDataset operation,
// and provide the listed DatasetArn.
type DatasetSummary struct {
	_ struct{} `type:"structure"`

	// When the dataset was created.
	CreationTime *time.Time `type:"timestamp"`

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

	// The name of the dataset.
	DatasetName *string `min:"1" type:"string"`

	// The dataset type.
	DatasetType *string `type:"string" enum:"DatasetType"`

	// The domain associated with the dataset.
	Domain *string `type:"string" enum:"Domain"`

	// When the dataset is created, LastModificationTime is the same as CreationTime.
	// After a CreateDatasetImportJob operation is called, LastModificationTime
	// is when the import job finished or failed. While data is being imported to
	// the dataset, LastModificationTime is the current query time.
	LastModificationTime *time.Time `type:"timestamp"`
}

// String returns the string representation
func (s DatasetSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DatasetSummary) GoString() string {
	return s.String()
}

// SetCreationTime sets the CreationTime field's value.
func (s *DatasetSummary) SetCreationTime(v time.Time) *DatasetSummary {
	s.CreationTime = &v
	return s
}

// SetDatasetArn sets the DatasetArn field's value.
func (s *DatasetSummary) SetDatasetArn(v string) *DatasetSummary {
	s.DatasetArn = &v
	return s
}

// SetDatasetName sets the DatasetName field's value.
func (s *DatasetSummary) SetDatasetName(v string) *DatasetSummary {
	s.DatasetName = &v
	return s
}

// SetDatasetType sets the DatasetType field's value.
func (s *DatasetSummary) SetDatasetType(v string) *DatasetSummary {
	s.DatasetType = &v
	return s
}

// SetDomain sets the Domain field's value.
func (s *DatasetSummary) SetDomain(v string) *DatasetSummary {
	s.Domain = &v
	return s
}

// SetLastModificationTime sets the LastModificationTime field's value.
func (s *DatasetSummary) SetLastModificationTime(v time.Time) *DatasetSummary {
	s.LastModificationTime = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the dataset group to delete.
	//
	// DatasetGroupArn is a required field
	DatasetGroupArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteDatasetGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteDatasetGroupInput) GoString() string {
	return s.String()
}

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

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

// SetDatasetGroupArn sets the DatasetGroupArn field's value.
func (s *DeleteDatasetGroupInput) SetDatasetGroupArn(v string) *DeleteDatasetGroupInput {
	s.DatasetGroupArn = &v
	return s
}

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

// String returns the string representation
func (s DeleteDatasetGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteDatasetGroupOutput) GoString() string {
	return s.String()
}

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

	// The Amazon Resource Name (ARN) of the dataset import job to delete.
	//
	// DatasetImportJobArn is a required field
	DatasetImportJobArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteDatasetImportJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteDatasetImportJobInput) GoString() string {
	return s.String()
}

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

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

// SetDatasetImportJobArn sets the DatasetImportJobArn field's value.
func (s *DeleteDatasetImportJobInput) SetDatasetImportJobArn(v string) *DeleteDatasetImportJobInput {
	s.DatasetImportJobArn = &v
	return s
}

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

// String returns the string representation
func (s DeleteDatasetImportJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteDatasetImportJobOutput) GoString() string {
	return s.String()
}

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

	// The Amazon Resource Name (ARN) of the dataset to delete.
	//
	// DatasetArn is a required field
	DatasetArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteDatasetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteDatasetInput) GoString() string {
	return s.String()
}

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

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

// SetDatasetArn sets the DatasetArn field's value.
func (s *DeleteDatasetInput) SetDatasetArn(v string) *DeleteDatasetInput {
	s.DatasetArn = &v
	return s
}

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

// String returns the string representation
func (s DeleteDatasetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteDatasetOutput) GoString() string {
	return s.String()
}

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

	// The Amazon Resource Name (ARN) of the forecast export job to delete.
	//
	// ForecastExportJobArn is a required field
	ForecastExportJobArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteForecastExportJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteForecastExportJobInput) GoString() string {
	return s.String()
}

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

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

// SetForecastExportJobArn sets the ForecastExportJobArn field's value.
func (s *DeleteForecastExportJobInput) SetForecastExportJobArn(v string) *DeleteForecastExportJobInput {
	s.ForecastExportJobArn = &v
	return s
}

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

// String returns the string representation
func (s DeleteForecastExportJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteForecastExportJobOutput) GoString() string {
	return s.String()
}

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

	// The Amazon Resource Name (ARN) of the forecast to delete.
	//
	// ForecastArn is a required field
	ForecastArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteForecastInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteForecastInput) GoString() string {
	return s.String()
}

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

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

// SetForecastArn sets the ForecastArn field's value.
func (s *DeleteForecastInput) SetForecastArn(v string) *DeleteForecastInput {
	s.ForecastArn = &v
	return s
}

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

// String returns the string representation
func (s DeleteForecastOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteForecastOutput) GoString() string {
	return s.String()
}

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

	// The Amazon Resource Name (ARN) of the predictor to delete.
	//
	// PredictorArn is a required field
	PredictorArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeletePredictorInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeletePredictorInput) GoString() string {
	return s.String()
}

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

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

// SetPredictorArn sets the PredictorArn field's value.
func (s *DeletePredictorInput) SetPredictorArn(v string) *DeletePredictorInput {
	s.PredictorArn = &v
	return s
}

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

// String returns the string representation
func (s DeletePredictorOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeletePredictorOutput) GoString() string {
	return s.String()
}

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

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

// String returns the string representation
func (s DescribeDatasetGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeDatasetGroupInput) GoString() string {
	return s.String()
}

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

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

// SetDatasetGroupArn sets the DatasetGroupArn field's value.
func (s *DescribeDatasetGroupInput) SetDatasetGroupArn(v string) *DescribeDatasetGroupInput {
	s.DatasetGroupArn = &v
	return s
}

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

	// When the dataset group was created.
	CreationTime *time.Time `type:"timestamp"`

	// An array of Amazon Resource Names (ARNs) of the datasets contained in the
	// dataset group.
	DatasetArns []*string `type:"list"`

	// The ARN of the dataset group.
	DatasetGroupArn *string `type:"string"`

	// The name of the dataset group.
	DatasetGroupName *string `min:"1" type:"string"`

	// The domain associated with the dataset group. The Domain and DatasetType
	// that you choose determine the fields that must be present in the training
	// data that you import to the dataset. For example, if you choose the RETAIL
	// domain and TARGET_TIME_SERIES as the DatasetType, Amazon Forecast requires
	// item_id, timestamp, and demand fields to be present in your data. For more
	// information, see howitworks-datasets-groups.
	Domain *string `type:"string" enum:"Domain"`

	// When the dataset group was created or last updated from a call to the UpdateDatasetGroup
	// operation. While the dataset group is being updated, LastModificationTime
	// is the current query time.
	LastModificationTime *time.Time `type:"timestamp"`

	// The status of the dataset group. States include:
	//
	//    * ACTIVE
	//
	//    * CREATE_PENDING, CREATE_IN_PROGRESS, CREATE_FAILED
	//
	//    * DELETE_PENDING, DELETE_IN_PROGRESS, DELETE_FAILED
	//
	//    * UPDATE_PENDING, UPDATE_IN_PROGRESS, UPDATE_FAILED
	//
	// The UPDATE states apply when the UpdateDatasetGroup operation is called.
	//
	// The Status of the dataset group must be ACTIVE before creating a predictor
	// using the dataset group.
	Status *string `type:"string"`
}

// String returns the string representation
func (s DescribeDatasetGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeDatasetGroupOutput) GoString() string {
	return s.String()
}

// SetCreationTime sets the CreationTime field's value.
func (s *DescribeDatasetGroupOutput) SetCreationTime(v time.Time) *DescribeDatasetGroupOutput {
	s.CreationTime = &v
	return s
}

// SetDatasetArns sets the DatasetArns field's value.
func (s *DescribeDatasetGroupOutput) SetDatasetArns(v []*string) *DescribeDatasetGroupOutput {
	s.DatasetArns = v
	return s
}

// SetDatasetGroupArn sets the DatasetGroupArn field's value.
func (s *DescribeDatasetGroupOutput) SetDatasetGroupArn(v string) *DescribeDatasetGroupOutput {
	s.DatasetGroupArn = &v
	return s
}

// SetDatasetGroupName sets the DatasetGroupName field's value.
func (s *DescribeDatasetGroupOutput) SetDatasetGroupName(v string) *DescribeDatasetGroupOutput {
	s.DatasetGroupName = &v
	return s
}

// SetDomain sets the Domain field's value.
func (s *DescribeDatasetGroupOutput) SetDomain(v string) *DescribeDatasetGroupOutput {
	s.Domain = &v
	return s
}

// SetLastModificationTime sets the LastModificationTime field's value.
func (s *DescribeDatasetGroupOutput) SetLastModificationTime(v time.Time) *DescribeDatasetGroupOutput {
	s.LastModificationTime = &v
	return s
}

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

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

	// The Amazon Resource Name (ARN) of the dataset import job.
	//
	// DatasetImportJobArn is a required field
	DatasetImportJobArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DescribeDatasetImportJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeDatasetImportJobInput) GoString() string {
	return s.String()
}

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

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

// SetDatasetImportJobArn sets the DatasetImportJobArn field's value.
func (s *DescribeDatasetImportJobInput) SetDatasetImportJobArn(v string) *DescribeDatasetImportJobInput {
	s.DatasetImportJobArn = &v
	return s
}

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

	// When the dataset import job was created.
	CreationTime *time.Time `type:"timestamp"`

	// The size of the dataset in gigabytes (GB) after completion of the import
	// job.
	DataSize *float64 `type:"double"`

	// The location of the training data to import. The training data must be stored
	// in an Amazon S3 bucket.
	DataSource *DataSource `type:"structure"`

	// The Amazon Resource Name (ARN) of the dataset that the training data was
	// imported to.
	DatasetArn *string `type:"string"`

	// The ARN of the dataset import job.
	DatasetImportJobArn *string `type:"string"`

	// The name of the dataset import job.
	DatasetImportJobName *string `min:"1" type:"string"`

	// Statistical information about each field in the input data.
	FieldStatistics map[string]*Statistics `type:"map"`

	// Dependent on the status as follows:
	//
	//    * CREATE_PENDING - same as CreationTime
	//
	//    * CREATE_IN_PROGRESS - the current timestamp
	//
	//    * ACTIVE or CREATE_FAILED - when the job finished or failed
	LastModificationTime *time.Time `type:"timestamp"`

	// If an error occurred, an informational message about the error.
	Message *string `type:"string"`

	// The status of the dataset import job. The status is reflected in the status
	// of the dataset. For example, when the import job status is CREATE_IN_PROGRESS,
	// the status of the dataset is UPDATE_IN_PROGRESS. States include:
	//
	//    * ACTIVE
	//
	//    * CREATE_PENDING, CREATE_IN_PROGRESS, CREATE_FAILED
	//
	//    * DELETE_PENDING, DELETE_IN_PROGRESS, DELETE_FAILED
	Status *string `type:"string"`

	// The format of timestamps in the dataset. Two formats are supported dependent
	// on the DataFrequency specified when the dataset was created.
	//
	//    * "yyyy-MM-dd" For data frequencies: Y, M, W, and D
	//
	//    * "yyyy-MM-dd HH:mm:ss" For data frequencies: H, 30min, 15min, and 1min;
	//    and optionally, for: Y, M, W, and D
	TimestampFormat *string `type:"string"`
}

// String returns the string representation
func (s DescribeDatasetImportJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeDatasetImportJobOutput) GoString() string {
	return s.String()
}

// SetCreationTime sets the CreationTime field's value.
func (s *DescribeDatasetImportJobOutput) SetCreationTime(v time.Time) *DescribeDatasetImportJobOutput {
	s.CreationTime = &v
	return s
}

// SetDataSize sets the DataSize field's value.
func (s *DescribeDatasetImportJobOutput) SetDataSize(v float64) *DescribeDatasetImportJobOutput {
	s.DataSize = &v
	return s
}

// SetDataSource sets the DataSource field's value.
func (s *DescribeDatasetImportJobOutput) SetDataSource(v *DataSource) *DescribeDatasetImportJobOutput {
	s.DataSource = v
	return s
}

// SetDatasetArn sets the DatasetArn field's value.
func (s *DescribeDatasetImportJobOutput) SetDatasetArn(v string) *DescribeDatasetImportJobOutput {
	s.DatasetArn = &v
	return s
}

// SetDatasetImportJobArn sets the DatasetImportJobArn field's value.
func (s *DescribeDatasetImportJobOutput) SetDatasetImportJobArn(v string) *DescribeDatasetImportJobOutput {
	s.DatasetImportJobArn = &v
	return s
}

// SetDatasetImportJobName sets the DatasetImportJobName field's value.
func (s *DescribeDatasetImportJobOutput) SetDatasetImportJobName(v string) *DescribeDatasetImportJobOutput {
	s.DatasetImportJobName = &v
	return s
}

// SetFieldStatistics sets the FieldStatistics field's value.
func (s *DescribeDatasetImportJobOutput) SetFieldStatistics(v map[string]*Statistics) *DescribeDatasetImportJobOutput {
	s.FieldStatistics = v
	return s
}

// SetLastModificationTime sets the LastModificationTime field's value.
func (s *DescribeDatasetImportJobOutput) SetLastModificationTime(v time.Time) *DescribeDatasetImportJobOutput {
	s.LastModificationTime = &v
	return s
}

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

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

// SetTimestampFormat sets the TimestampFormat field's value.
func (s *DescribeDatasetImportJobOutput) SetTimestampFormat(v string) *DescribeDatasetImportJobOutput {
	s.TimestampFormat = &v
	return s
}

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

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

// String returns the string representation
func (s DescribeDatasetInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeDatasetInput) GoString() string {
	return s.String()
}

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

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

// SetDatasetArn sets the DatasetArn field's value.
func (s *DescribeDatasetInput) SetDatasetArn(v string) *DescribeDatasetInput {
	s.DatasetArn = &v
	return s
}

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

	// When the dataset was created.
	CreationTime *time.Time `type:"timestamp"`

	// The frequency of data collection.
	//
	// Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour), 30min
	// (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5 minutes), and
	// 1min (1 minute). For example, "M" indicates every month and "30min" indicates
	// every 30 minutes.
	DataFrequency *string `type:"string"`

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

	// The name of the dataset.
	DatasetName *string `min:"1" type:"string"`

	// The dataset type.
	DatasetType *string `type:"string" enum:"DatasetType"`

	// The dataset domain.
	Domain *string `type:"string" enum:"Domain"`

	// An AWS Key Management Service (KMS) key and the AWS Identity and Access Management
	// (IAM) role that Amazon Forecast can assume to access the key.
	EncryptionConfig *EncryptionConfig `type:"structure"`

	// When the dataset is created, LastModificationTime is the same as CreationTime.
	// After a CreateDatasetImportJob operation is called, LastModificationTime
	// is when the import job finished or failed. While data is being imported to
	// the dataset, LastModificationTime is the current query time.
	LastModificationTime *time.Time `type:"timestamp"`

	// An array of SchemaAttribute objects that specify the dataset fields. Each
	// SchemaAttribute specifies the name and data type of a field.
	Schema *Schema `type:"structure"`

	// The status of the dataset. States include:
	//
	//    * ACTIVE
	//
	//    * CREATE_PENDING, CREATE_IN_PROGRESS, CREATE_FAILED
	//
	//    * DELETE_PENDING, DELETE_IN_PROGRESS, DELETE_FAILED
	//
	//    * UPDATE_PENDING, UPDATE_IN_PROGRESS, UPDATE_FAILED
	//
	// The UPDATE states apply while data is imported to the dataset from a call
	// to the CreateDatasetImportJob operation. During this time, the status reflects
	// the status of the dataset import job. For example, when the import job status
	// is CREATE_IN_PROGRESS, the status of the dataset is UPDATE_IN_PROGRESS.
	//
	// The Status of the dataset must be ACTIVE before you can import training data.
	Status *string `type:"string"`
}

// String returns the string representation
func (s DescribeDatasetOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeDatasetOutput) GoString() string {
	return s.String()
}

// SetCreationTime sets the CreationTime field's value.
func (s *DescribeDatasetOutput) SetCreationTime(v time.Time) *DescribeDatasetOutput {
	s.CreationTime = &v
	return s
}

// SetDataFrequency sets the DataFrequency field's value.
func (s *DescribeDatasetOutput) SetDataFrequency(v string) *DescribeDatasetOutput {
	s.DataFrequency = &v
	return s
}

// SetDatasetArn sets the DatasetArn field's value.
func (s *DescribeDatasetOutput) SetDatasetArn(v string) *DescribeDatasetOutput {
	s.DatasetArn = &v
	return s
}

// SetDatasetName sets the DatasetName field's value.
func (s *DescribeDatasetOutput) SetDatasetName(v string) *DescribeDatasetOutput {
	s.DatasetName = &v
	return s
}

// SetDatasetType sets the DatasetType field's value.
func (s *DescribeDatasetOutput) SetDatasetType(v string) *DescribeDatasetOutput {
	s.DatasetType = &v
	return s
}

// SetDomain sets the Domain field's value.
func (s *DescribeDatasetOutput) SetDomain(v string) *DescribeDatasetOutput {
	s.Domain = &v
	return s
}

// SetEncryptionConfig sets the EncryptionConfig field's value.
func (s *DescribeDatasetOutput) SetEncryptionConfig(v *EncryptionConfig) *DescribeDatasetOutput {
	s.EncryptionConfig = v
	return s
}

// SetLastModificationTime sets the LastModificationTime field's value.
func (s *DescribeDatasetOutput) SetLastModificationTime(v time.Time) *DescribeDatasetOutput {
	s.LastModificationTime = &v
	return s
}

// SetSchema sets the Schema field's value.
func (s *DescribeDatasetOutput) SetSchema(v *Schema) *DescribeDatasetOutput {
	s.Schema = v
	return s
}

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

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

	// The Amazon Resource Name (ARN) of the forecast export job.
	//
	// ForecastExportJobArn is a required field
	ForecastExportJobArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DescribeForecastExportJobInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeForecastExportJobInput) GoString() string {
	return s.String()
}

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

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

// SetForecastExportJobArn sets the ForecastExportJobArn field's value.
func (s *DescribeForecastExportJobInput) SetForecastExportJobArn(v string) *DescribeForecastExportJobInput {
	s.ForecastExportJobArn = &v
	return s
}

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

	// When the forecast export job was created.
	CreationTime *time.Time `type:"timestamp"`

	// The path to the AWS S3 bucket where the forecast is exported.
	Destination *DataDestination `type:"structure"`

	// The Amazon Resource Name (ARN) of the exported forecast.
	ForecastArn *string `type:"string"`

	// The ARN of the forecast export job.
	ForecastExportJobArn *string `type:"string"`

	// The name of the forecast export job.
	ForecastExportJobName *string `min:"1" type:"string"`

	// When the last successful export job finished.
	LastModificationTime *time.Time `type:"timestamp"`

	// If an error occurred, an informational message about the error.
	Message *string `type:"string"`

	// The status of the forecast export job. One of the following states:
	//
	//    * ACTIVE
	//
	//    * CREATE_PENDING, CREATE_IN_PROGRESS, CREATE_FAILED
	//
	//    * DELETE_PENDING, DELETE_IN_PROGRESS, DELETE_FAILED
	//
	// The Status of the forecast export job must be ACTIVE before you can access
	// the forecast in your Amazon S3 bucket.
	Status *string `type:"string"`
}

// String returns the string representation
func (s DescribeForecastExportJobOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeForecastExportJobOutput) GoString() string {
	return s.String()
}

// SetCreationTime sets the CreationTime field's value.
func (s *DescribeForecastExportJobOutput) SetCreationTime(v time.Time) *DescribeForecastExportJobOutput {
	s.CreationTime = &v
	return s
}

// SetDestination sets the Destination field's value.
func (s *DescribeForecastExportJobOutput) SetDestination(v *DataDestination) *DescribeForecastExportJobOutput {
	s.Destination = v
	return s
}

// SetForecastArn sets the ForecastArn field's value.
func (s *DescribeForecastExportJobOutput) SetForecastArn(v string) *DescribeForecastExportJobOutput {
	s.ForecastArn = &v
	return s
}

// SetForecastExportJobArn sets the ForecastExportJobArn field's value.
func (s *DescribeForecastExportJobOutput) SetForecastExportJobArn(v string) *DescribeForecastExportJobOutput {
	s.ForecastExportJobArn = &v
	return s
}

// SetForecastExportJobName sets the ForecastExportJobName field's value.
func (s *DescribeForecastExportJobOutput) SetForecastExportJobName(v string) *DescribeForecastExportJobOutput {
	s.ForecastExportJobName = &v
	return s
}

// SetLastModificationTime sets the LastModificationTime field's value.
func (s *DescribeForecastExportJobOutput) SetLastModificationTime(v time.Time) *DescribeForecastExportJobOutput {
	s.LastModificationTime = &v
	return s
}

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

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

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

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

// String returns the string representation
func (s DescribeForecastInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeForecastInput) GoString() string {
	return s.String()
}

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

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

// SetForecastArn sets the ForecastArn field's value.
func (s *DescribeForecastInput) SetForecastArn(v string) *DescribeForecastInput {
	s.ForecastArn = &v
	return s
}

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

	// When the forecast creation task was created.
	CreationTime *time.Time `type:"timestamp"`

	// The ARN of the dataset group that provided the data used to train the predictor.
	DatasetGroupArn *string `type:"string"`

	// The same forecast ARN as given in the request.
	ForecastArn *string `type:"string"`

	// The name of the forecast.
	ForecastName *string `min:"1" type:"string"`

	// Initially, the same as CreationTime (status is CREATE_PENDING). Updated when
	// inference (creating the forecast) starts (status changed to CREATE_IN_PROGRESS),
	// and when inference is complete (status changed to ACTIVE) or fails (status
	// changed to CREATE_FAILED).
	LastModificationTime *time.Time `type:"timestamp"`

	// If an error occurred, an informational message about the error.
	Message *string `type:"string"`

	// The ARN of the predictor used to generate the forecast.
	PredictorArn *string `type:"string"`

	// The status of the forecast. States include:
	//
	//    * ACTIVE
	//
	//    * CREATE_PENDING, CREATE_IN_PROGRESS, CREATE_FAILED
	//
	//    * DELETE_PENDING, DELETE_IN_PROGRESS, DELETE_FAILED
	//
	// The Status of the forecast must be ACTIVE before you can query or export
	// the forecast.
	Status *string `type:"string"`
}

// String returns the string representation
func (s DescribeForecastOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeForecastOutput) GoString() string {
	return s.String()
}

// SetCreationTime sets the CreationTime field's value.
func (s *DescribeForecastOutput) SetCreationTime(v time.Time) *DescribeForecastOutput {
	s.CreationTime = &v
	return s
}

// SetDatasetGroupArn sets the DatasetGroupArn field's value.
func (s *DescribeForecastOutput) SetDatasetGroupArn(v string) *DescribeForecastOutput {
	s.DatasetGroupArn = &v
	return s
}

// SetForecastArn sets the ForecastArn field's value.
func (s *DescribeForecastOutput) SetForecastArn(v string) *DescribeForecastOutput {
	s.ForecastArn = &v
	return s
}

// SetForecastName sets the ForecastName field's value.
func (s *DescribeForecastOutput) SetForecastName(v string) *DescribeForecastOutput {
	s.ForecastName = &v
	return s
}

// SetLastModificationTime sets the LastModificationTime field's value.
func (s *DescribeForecastOutput) SetLastModificationTime(v time.Time) *DescribeForecastOutput {
	s.LastModificationTime = &v
	return s
}

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

// SetPredictorArn sets the PredictorArn field's value.
func (s *DescribeForecastOutput) SetPredictorArn(v string) *DescribeForecastOutput {
	s.PredictorArn = &v
	return s
}

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

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

	// The Amazon Resource Name (ARN) of the predictor that you want information
	// about.
	//
	// PredictorArn is a required field
	PredictorArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DescribePredictorInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribePredictorInput) GoString() string {
	return s.String()
}

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

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

// SetPredictorArn sets the PredictorArn field's value.
func (s *DescribePredictorInput) SetPredictorArn(v string) *DescribePredictorInput {
	s.PredictorArn = &v
	return s
}

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

	// The Amazon Resource Name (ARN) of the algorithm used for model training.
	AlgorithmArn *string `type:"string"`

	// When PerformAutoML is specified, the ARN of the chosen algorithm.
	AutoMLAlgorithmArns []*string `type:"list"`

	// When the model training task was created.
	CreationTime *time.Time `type:"timestamp"`

	// An array of ARNs of the dataset import jobs used to import training data
	// for the predictor.
	DatasetImportJobArns []*string `type:"list"`

	// An AWS Key Management Service (KMS) key and the AWS Identity and Access Management
	// (IAM) role that Amazon Forecast can assume to access the key.
	EncryptionConfig *EncryptionConfig `type:"structure"`

	// Used to override the default evaluation parameters of the specified algorithm.
	// Amazon Forecast evaluates a predictor by splitting a dataset into training
	// data and testing data. The evaluation parameters define how to perform the
	// split and the number of iterations.
	EvaluationParameters *EvaluationParameters `type:"structure"`

	// The featurization configuration.
	FeaturizationConfig *FeaturizationConfig `type:"structure"`

	// The number of time-steps of the forecast. The forecast horizon is also called
	// the prediction length.
	ForecastHorizon *int64 `type:"integer"`

	// The hyperparameter override values for the algorithm.
	HPOConfig *HyperParameterTuningJobConfig `type:"structure"`

	// Describes the dataset group that contains the data to use to train the predictor.
	InputDataConfig *InputDataConfig `type:"structure"`

	// Initially, the same as CreationTime (status is CREATE_PENDING). Updated when
	// training starts (status changed to CREATE_IN_PROGRESS), and when training
	// is complete (status changed to ACTIVE) or fails (status changed to CREATE_FAILED).
	LastModificationTime *time.Time `type:"timestamp"`

	// If an error occurred, an informational message about the error.
	Message *string `type:"string"`

	// Whether the predictor is set to perform AutoML.
	PerformAutoML *bool `type:"boolean"`

	// Whether the predictor is set to perform HPO.
	PerformHPO *bool `type:"boolean"`

	// The ARN of the predictor.
	PredictorArn *string `min:"1" type:"string"`

	// The name of the predictor.
	PredictorName *string `min:"1" type:"string"`

	// The status of the predictor. States include:
	//
	//    * ACTIVE
	//
	//    * CREATE_PENDING, CREATE_IN_PROGRESS, CREATE_FAILED
	//
	//    * DELETE_PENDING, DELETE_IN_PROGRESS, DELETE_FAILED
	//
	//    * UPDATE_PENDING, UPDATE_IN_PROGRESS, UPDATE_FAILED
	//
	// The Status of the predictor must be ACTIVE before using the predictor to
	// create a forecast.
	Status *string `type:"string"`

	// The training parameters to override for model training. The parameters that
	// you can override are listed in the individual algorithms in aws-forecast-choosing-recipes.
	TrainingParameters map[string]*string `type:"map"`
}

// String returns the string representation
func (s DescribePredictorOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribePredictorOutput) GoString() string {
	return s.String()
}

// SetAlgorithmArn sets the AlgorithmArn field's value.
func (s *DescribePredictorOutput) SetAlgorithmArn(v string) *DescribePredictorOutput {
	s.AlgorithmArn = &v
	return s
}

// SetAutoMLAlgorithmArns sets the AutoMLAlgorithmArns field's value.
func (s *DescribePredictorOutput) SetAutoMLAlgorithmArns(v []*string) *DescribePredictorOutput {
	s.AutoMLAlgorithmArns = v
	return s
}

// SetCreationTime sets the CreationTime field's value.
func (s *DescribePredictorOutput) SetCreationTime(v time.Time) *DescribePredictorOutput {
	s.CreationTime = &v
	return s
}

// SetDatasetImportJobArns sets the DatasetImportJobArns field's value.
func (s *DescribePredictorOutput) SetDatasetImportJobArns(v []*string) *DescribePredictorOutput {
	s.DatasetImportJobArns = v
	return s
}

// SetEncryptionConfig sets the EncryptionConfig field's value.
func (s *DescribePredictorOutput) SetEncryptionConfig(v *EncryptionConfig) *DescribePredictorOutput {
	s.EncryptionConfig = v
	return s
}

// SetEvaluationParameters sets the EvaluationParameters field's value.
func (s *DescribePredictorOutput) SetEvaluationParameters(v *EvaluationParameters) *DescribePredictorOutput {
	s.EvaluationParameters = v
	return s
}

// SetFeaturizationConfig sets the FeaturizationConfig field's value.
func (s *DescribePredictorOutput) SetFeaturizationConfig(v *FeaturizationConfig) *DescribePredictorOutput {
	s.FeaturizationConfig = v
	return s
}

// SetForecastHorizon sets the ForecastHorizon field's value.
func (s *DescribePredictorOutput) SetForecastHorizon(v int64) *DescribePredictorOutput {
	s.ForecastHorizon = &v
	return s
}

// SetHPOConfig sets the HPOConfig field's value.
func (s *DescribePredictorOutput) SetHPOConfig(v *HyperParameterTuningJobConfig) *DescribePredictorOutput {
	s.HPOConfig = v
	return s
}

// SetInputDataConfig sets the InputDataConfig field's value.
func (s *DescribePredictorOutput) SetInputDataConfig(v *InputDataConfig) *DescribePredictorOutput {
	s.InputDataConfig = v
	return s
}

// SetLastModificationTime sets the LastModificationTime field's value.
func (s *DescribePredictorOutput) SetLastModificationTime(v time.Time) *DescribePredictorOutput {
	s.LastModificationTime = &v
	return s
}

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

// SetPerformAutoML sets the PerformAutoML field's value.
func (s *DescribePredictorOutput) SetPerformAutoML(v bool) *DescribePredictorOutput {
	s.PerformAutoML = &v
	return s
}

// SetPerformHPO sets the PerformHPO field's value.
func (s *DescribePredictorOutput) SetPerformHPO(v bool) *DescribePredictorOutput {
	s.PerformHPO = &v
	return s
}

// SetPredictorArn sets the PredictorArn field's value.
func (s *DescribePredictorOutput) SetPredictorArn(v string) *DescribePredictorOutput {
	s.PredictorArn = &v
	return s
}

// SetPredictorName sets the PredictorName field's value.
func (s *DescribePredictorOutput) SetPredictorName(v string) *DescribePredictorOutput {
	s.PredictorName = &v
	return s
}

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

// SetTrainingParameters sets the TrainingParameters field's value.
func (s *DescribePredictorOutput) SetTrainingParameters(v map[string]*string) *DescribePredictorOutput {
	s.TrainingParameters = v
	return s
}

// An AWS Key Management Service (KMS) key and an AWS Identity and Access Management
// (IAM) role that Amazon Forecast can assume to access the key. This object
// is optionally submitted in the CreateDataset and CreatePredictor requests.
type EncryptionConfig struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of an AWS Key Management Service (KMS) key.
	//
	// KMSKeyArn is a required field
	KMSKeyArn *string `type:"string" required:"true"`

	// The ARN of the AWS Identity and Access Management (IAM) role that Amazon
	// Forecast can assume to access the AWS KMS key.
	//
	// Cross-account pass role is not allowed. If you pass a role that doesn't belong
	// to your account, an InvalidInputException is thrown.
	//
	// RoleArn is a required field
	RoleArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s EncryptionConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s EncryptionConfig) GoString() string {
	return s.String()
}

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

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

// SetKMSKeyArn sets the KMSKeyArn field's value.
func (s *EncryptionConfig) SetKMSKeyArn(v string) *EncryptionConfig {
	s.KMSKeyArn = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *EncryptionConfig) SetRoleArn(v string) *EncryptionConfig {
	s.RoleArn = &v
	return s
}

// Parameters that define how to split a dataset into training data and testing
// data, and the number of iterations to perform. These parameters are specified
// in the predefined algorithms and can be overridden in the CreatePredictor
// request.
//
// For example, suppose that you have a dataset with data collection frequency
// set to every day and you have 200 days worth of data (that is, 200 data points).
// Now suppose that you set the NumberOfBacktestWindows to 2 and the BackTestWindowOffset
// parameter to 20. The algorithm splits the data twice. The first time, the
// algorithm trains the model using the first 180 data points and uses the last
// 20 data points for evaluation. The second time, the algorithm trains the
// model using the first 160 data points and uses the last 40 data points for
// evaluation.
type EvaluationParameters struct {
	_ struct{} `type:"structure"`

	// The point from the end of the dataset where you want to split the data for
	// model training and evaluation. The value is specified as the number of data
	// points.
	BackTestWindowOffset *int64 `type:"integer"`

	// The number of times to split the input data. The default is 1. The range
	// is 1 through 5.
	NumberOfBacktestWindows *int64 `type:"integer"`
}

// String returns the string representation
func (s EvaluationParameters) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s EvaluationParameters) GoString() string {
	return s.String()
}

// SetBackTestWindowOffset sets the BackTestWindowOffset field's value.
func (s *EvaluationParameters) SetBackTestWindowOffset(v int64) *EvaluationParameters {
	s.BackTestWindowOffset = &v
	return s
}

// SetNumberOfBacktestWindows sets the NumberOfBacktestWindows field's value.
func (s *EvaluationParameters) SetNumberOfBacktestWindows(v int64) *EvaluationParameters {
	s.NumberOfBacktestWindows = &v
	return s
}

// The results of evaluating an algorithm. Returned as part of the GetAccuracyMetrics
// response.
type EvaluationResult struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the algorithm that was evaluated.
	AlgorithmArn *string `type:"string"`

	// The array of test windows used for evaluating the algorithm. The NumberOfBacktestWindows
	// from the EvaluationParameters object determines the number of windows in
	// the array.
	TestWindows []*WindowSummary `type:"list"`
}

// String returns the string representation
func (s EvaluationResult) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s EvaluationResult) GoString() string {
	return s.String()
}

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

// SetTestWindows sets the TestWindows field's value.
func (s *EvaluationResult) SetTestWindows(v []*WindowSummary) *EvaluationResult {
	s.TestWindows = v
	return s
}

// Provides featurization (transformation) information for a dataset field.
// This object is part of the FeaturizationConfig object.
//
// For example:
//
// {
//
// "AttributeName": "demand",
//
// FeaturizationPipeline [ {
//
// "FeaturizationMethodName": "filling",
//
// "FeaturizationMethodParameters": {"aggregation": "avg", "backfill": "nan"}
//
// } ]
//
// }
type Featurization struct {
	_ struct{} `type:"structure"`

	// The name of the schema attribute specifying the data field to be featurized.
	// In this release, only the target field of the TARGET_TIME_SERIES dataset
	// type is supported. For example, for the RETAIL domain, the target is demand,
	// and for the CUSTOM domain, the target is target_value.
	//
	// AttributeName is a required field
	AttributeName *string `min:"1" type:"string" required:"true"`

	// An array FeaturizationMethod objects that specifies the feature transformation
	// methods. For this release, the number of methods is limited to one.
	FeaturizationPipeline []*FeaturizationMethod `min:"1" type:"list"`
}

// String returns the string representation
func (s Featurization) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Featurization) GoString() string {
	return s.String()
}

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

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

// SetAttributeName sets the AttributeName field's value.
func (s *Featurization) SetAttributeName(v string) *Featurization {
	s.AttributeName = &v
	return s
}

// SetFeaturizationPipeline sets the FeaturizationPipeline field's value.
func (s *Featurization) SetFeaturizationPipeline(v []*FeaturizationMethod) *Featurization {
	s.FeaturizationPipeline = v
	return s
}

// In a CreatePredictor operation, the specified algorithm trains a model using
// the specified dataset group. You can optionally tell the operation to modify
// data fields prior to training a model. These modifications are referred to
// as featurization.
//
// You define featurization using the FeaturizationConfig object. You specify
// an array of transformations, one for each field that you want to featurize.
// You then include the FeaturizationConfig in your CreatePredictor request.
// Amazon Forecast applies the featurization to the TARGET_TIME_SERIES dataset
// before model training.
//
// You can create multiple featurization configurations. For example, you might
// call the CreatePredictor operation twice by specifying different featurization
// configurations.
type FeaturizationConfig struct {
	_ struct{} `type:"structure"`

	// An array of featurization (transformation) information for the fields of
	// a dataset. In this release, only a single featurization is supported.
	Featurizations []*Featurization `min:"1" type:"list"`

	// An array of dimension (field) names that specify how to group the generated
	// forecast.
	//
	// For example, suppose that you are generating a forecast for item sales across
	// all of your stores, and your dataset contains a store_id field. If you want
	// the sales forecast for each item by store, you would specify store_id as
	// the dimension.
	ForecastDimensions []*string `min:"1" type:"list"`

	// The frequency of predictions in a forecast.
	//
	// Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour), 30min
	// (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5 minutes), and
	// 1min (1 minute). For example, "Y" indicates every year and "5min" indicates
	// every five minutes.
	//
	// ForecastFrequency is a required field
	ForecastFrequency *string `type:"string" required:"true"`
}

// String returns the string representation
func (s FeaturizationConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s FeaturizationConfig) GoString() string {
	return s.String()
}

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

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

// SetFeaturizations sets the Featurizations field's value.
func (s *FeaturizationConfig) SetFeaturizations(v []*Featurization) *FeaturizationConfig {
	s.Featurizations = v
	return s
}

// SetForecastDimensions sets the ForecastDimensions field's value.
func (s *FeaturizationConfig) SetForecastDimensions(v []*string) *FeaturizationConfig {
	s.ForecastDimensions = v
	return s
}

// SetForecastFrequency sets the ForecastFrequency field's value.
func (s *FeaturizationConfig) SetForecastFrequency(v string) *FeaturizationConfig {
	s.ForecastFrequency = &v
	return s
}

// Provides information about a method that featurizes (transforms) a dataset
// field. The method is part of the FeaturizationPipeline of the Featurization
// object. If FeaturizationMethodParameters isn't specified, Amazon Forecast
// uses default parameters.
//
// For example:
//
// {
//
// "FeaturizationMethodName": "filling",
//
// "FeaturizationMethodParameters": {"aggregation": "avg", "backfill": "nan"}
//
// }
type FeaturizationMethod struct {
	_ struct{} `type:"structure"`

	// The name of the method. In this release, "filling" is the only supported
	// method.
	//
	// FeaturizationMethodName is a required field
	FeaturizationMethodName *string `type:"string" required:"true" enum:"FeaturizationMethodName"`

	// The method parameters (key-value pairs). Specify these to override the default
	// values. The following list shows the parameters and their valid values. Bold
	// signifies the default value.
	//
	//    * aggregation: sum, avg, first, min, max
	//
	//    * frontfill: none
	//
	//    * middlefill: zero, nan (not a number)
	//
	//    * backfill: zero, nan
	FeaturizationMethodParameters map[string]*string `min:"1" type:"map"`
}

// String returns the string representation
func (s FeaturizationMethod) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s FeaturizationMethod) GoString() string {
	return s.String()
}

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

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

// SetFeaturizationMethodName sets the FeaturizationMethodName field's value.
func (s *FeaturizationMethod) SetFeaturizationMethodName(v string) *FeaturizationMethod {
	s.FeaturizationMethodName = &v
	return s
}

// SetFeaturizationMethodParameters sets the FeaturizationMethodParameters field's value.
func (s *FeaturizationMethod) SetFeaturizationMethodParameters(v map[string]*string) *FeaturizationMethod {
	s.FeaturizationMethodParameters = v
	return s
}

// Describes a filter for choosing a subset of objects. Each filter consists
// of a condition and a match statement. The condition is either IS or IS_NOT,
// which specifies whether to include or exclude, respectively, the objects
// that match the statement. The match statement consists of a key and a value.
type Filter struct {
	_ struct{} `type:"structure"`

	// The condition to apply.
	//
	// Condition is a required field
	Condition *string `type:"string" required:"true" enum:"FilterConditionString"`

	// The name of the parameter to filter on.
	//
	// Key is a required field
	Key *string `type:"string" required:"true"`

	// A valid value for Key.
	//
	// Value is a required field
	Value *string `type:"string" required:"true"`
}

// String returns the string representation
func (s Filter) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Filter) GoString() string {
	return s.String()
}

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

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

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

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

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

// Provides a summary of the forecast export job properties used in the ListForecastExportJobs
// operation. To get the complete set of properties, call the DescribeForecastExportJob
// operation, and provide the listed ForecastExportJobArn.
type ForecastExportJobSummary struct {
	_ struct{} `type:"structure"`

	// When the forecast export job was created.
	CreationTime *time.Time `type:"timestamp"`

	// The path to the S3 bucket where the forecast is stored.
	Destination *DataDestination `type:"structure"`

	// The Amazon Resource Name (ARN) of the forecast export job.
	ForecastExportJobArn *string `type:"string"`

	// The name of the forecast export job.
	ForecastExportJobName *string `min:"1" type:"string"`

	// When the last successful export job finished.
	LastModificationTime *time.Time `type:"timestamp"`

	// If an error occurred, an informational message about the error.
	Message *string `type:"string"`

	// The status of the forecast export job. One of the following states:
	//
	//    * ACTIVE
	//
	//    * CREATE_PENDING, CREATE_IN_PROGRESS, CREATE_FAILED
	//
	//    * DELETE_PENDING, DELETE_IN_PROGRESS, DELETE_FAILED
	//
	// The Status of the forecast export job must be ACTIVE before you can access
	// the forecast in your Amazon S3 bucket.
	Status *string `type:"string"`
}

// String returns the string representation
func (s ForecastExportJobSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ForecastExportJobSummary) GoString() string {
	return s.String()
}

// SetCreationTime sets the CreationTime field's value.
func (s *ForecastExportJobSummary) SetCreationTime(v time.Time) *ForecastExportJobSummary {
	s.CreationTime = &v
	return s
}

// SetDestination sets the Destination field's value.
func (s *ForecastExportJobSummary) SetDestination(v *DataDestination) *ForecastExportJobSummary {
	s.Destination = v
	return s
}

// SetForecastExportJobArn sets the ForecastExportJobArn field's value.
func (s *ForecastExportJobSummary) SetForecastExportJobArn(v string) *ForecastExportJobSummary {
	s.ForecastExportJobArn = &v
	return s
}

// SetForecastExportJobName sets the ForecastExportJobName field's value.
func (s *ForecastExportJobSummary) SetForecastExportJobName(v string) *ForecastExportJobSummary {
	s.ForecastExportJobName = &v
	return s
}

// SetLastModificationTime sets the LastModificationTime field's value.
func (s *ForecastExportJobSummary) SetLastModificationTime(v time.Time) *ForecastExportJobSummary {
	s.LastModificationTime = &v
	return s
}

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

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

// Provides a summary of the forecast properties used in the ListForecasts operation.
// To get the complete set of properties, call the DescribeForecast operation,
// and provide the listed ForecastArn.
type ForecastSummary struct {
	_ struct{} `type:"structure"`

	// When the forecast creation task was created.
	CreationTime *time.Time `type:"timestamp"`

	// The Amazon Resource Name (ARN) of the dataset group that provided the data
	// used to train the predictor.
	DatasetGroupArn *string `type:"string"`

	// The ARN of the forecast.
	ForecastArn *string `type:"string"`

	// The name of the forecast.
	ForecastName *string `min:"1" type:"string"`

	// Initially, the same as CreationTime (status is CREATE_PENDING). Updated when
	// inference (creating the forecast) starts (status changed to CREATE_IN_PROGRESS),
	// and when inference is complete (status changed to ACTIVE) or fails (status
	// changed to CREATE_FAILED).
	LastModificationTime *time.Time `type:"timestamp"`

	// If an error occurred, an informational message about the error.
	Message *string `type:"string"`

	// The ARN of the predictor used to generate the forecast.
	PredictorArn *string `type:"string"`

	// The status of the forecast. States include:
	//
	//    * ACTIVE
	//
	//    * CREATE_PENDING, CREATE_IN_PROGRESS, CREATE_FAILED
	//
	//    * DELETE_PENDING, DELETE_IN_PROGRESS, DELETE_FAILED
	//
	// The Status of the forecast must be ACTIVE before you can query or export
	// the forecast.
	Status *string `type:"string"`
}

// String returns the string representation
func (s ForecastSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ForecastSummary) GoString() string {
	return s.String()
}

// SetCreationTime sets the CreationTime field's value.
func (s *ForecastSummary) SetCreationTime(v time.Time) *ForecastSummary {
	s.CreationTime = &v
	return s
}

// SetDatasetGroupArn sets the DatasetGroupArn field's value.
func (s *ForecastSummary) SetDatasetGroupArn(v string) *ForecastSummary {
	s.DatasetGroupArn = &v
	return s
}

// SetForecastArn sets the ForecastArn field's value.
func (s *ForecastSummary) SetForecastArn(v string) *ForecastSummary {
	s.ForecastArn = &v
	return s
}

// SetForecastName sets the ForecastName field's value.
func (s *ForecastSummary) SetForecastName(v string) *ForecastSummary {
	s.ForecastName = &v
	return s
}

// SetLastModificationTime sets the LastModificationTime field's value.
func (s *ForecastSummary) SetLastModificationTime(v time.Time) *ForecastSummary {
	s.LastModificationTime = &v
	return s
}

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

// SetPredictorArn sets the PredictorArn field's value.
func (s *ForecastSummary) SetPredictorArn(v string) *ForecastSummary {
	s.PredictorArn = &v
	return s
}

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

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

	// The Amazon Resource Name (ARN) of the predictor to get metrics for.
	//
	// PredictorArn is a required field
	PredictorArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s GetAccuracyMetricsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetAccuracyMetricsInput) GoString() string {
	return s.String()
}

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

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

// SetPredictorArn sets the PredictorArn field's value.
func (s *GetAccuracyMetricsInput) SetPredictorArn(v string) *GetAccuracyMetricsInput {
	s.PredictorArn = &v
	return s
}

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

	// An array of results from evaluating the predictor.
	PredictorEvaluationResults []*EvaluationResult `type:"list"`
}

// String returns the string representation
func (s GetAccuracyMetricsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetAccuracyMetricsOutput) GoString() string {
	return s.String()
}

// SetPredictorEvaluationResults sets the PredictorEvaluationResults field's value.
func (s *GetAccuracyMetricsOutput) SetPredictorEvaluationResults(v []*EvaluationResult) *GetAccuracyMetricsOutput {
	s.PredictorEvaluationResults = v
	return s
}

// Configuration information for a hyperparameter tuning job. This object is
// specified in the CreatePredictor request.
//
// A hyperparameter is a parameter that governs the model training process and
// is set before training starts. This is as opposed to a model parameter that
// is determined during training. The values of the hyperparameters have an
// effect on the chosen model parameters.
//
// A hyperparameter tuning job is the process of choosing the optimum set of
// hyperparameter values that optimize a specified metric. This is accomplished
// by running many training jobs over a range of hyperparameter values. The
// optimum set of values is dependent on the algorithm, the training data, and
// the given metric objective.
type HyperParameterTuningJobConfig struct {
	_ struct{} `type:"structure"`

	// Specifies the ranges of valid values for the hyperparameters.
	ParameterRanges *ParameterRanges `type:"structure"`
}

// String returns the string representation
func (s HyperParameterTuningJobConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s HyperParameterTuningJobConfig) GoString() string {
	return s.String()
}

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

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

// SetParameterRanges sets the ParameterRanges field's value.
func (s *HyperParameterTuningJobConfig) SetParameterRanges(v *ParameterRanges) *HyperParameterTuningJobConfig {
	s.ParameterRanges = v
	return s
}

// The data used to train a predictor. The data includes a dataset group and
// any supplementary features. This object is specified in the CreatePredictor
// request.
type InputDataConfig struct {
	_ struct{} `type:"structure"`

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

	// An array of supplementary features. For this release, the only supported
	// feature is a holiday calendar.
	SupplementaryFeatures []*SupplementaryFeature `min:"1" type:"list"`
}

// String returns the string representation
func (s InputDataConfig) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s InputDataConfig) GoString() string {
	return s.String()
}

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

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

// SetDatasetGroupArn sets the DatasetGroupArn field's value.
func (s *InputDataConfig) SetDatasetGroupArn(v string) *InputDataConfig {
	s.DatasetGroupArn = &v
	return s
}

// SetSupplementaryFeatures sets the SupplementaryFeatures field's value.
func (s *InputDataConfig) SetSupplementaryFeatures(v []*SupplementaryFeature) *InputDataConfig {
	s.SupplementaryFeatures = v
	return s
}

// Specifies an integer hyperparameter and it's range of tunable values. This
// object is part of the ParameterRanges object.
type IntegerParameterRange struct {
	_ struct{} `type:"structure"`

	// The maximum tunable value of the hyperparameter.
	//
	// MaxValue is a required field
	MaxValue *int64 `type:"integer" required:"true"`

	// The minimum tunable value of the hyperparameter.
	//
	// MinValue is a required field
	MinValue *int64 `type:"integer" required:"true"`

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

	// The scale that hyperparameter tuning uses to search the hyperparameter range.
	// For information about choosing a hyperparameter scale, see Hyperparameter
	// Scaling (http://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html#scaling-type).
	// One of the following values:
	//
	// Auto
	//
	// Amazon Forecast hyperparameter tuning chooses the best scale for the hyperparameter.
	//
	// Linear
	//
	// Hyperparameter tuning searches the values in the hyperparameter range by
	// using a linear scale.
	//
	// Logarithmic
	//
	// Hyperparameter tuning searches the values in the hyperparameter range by
	// using a logarithmic scale.
	//
	// Logarithmic scaling works only for ranges that have only values greater than
	// 0.
	//
	// ReverseLogarithmic
	//
	// Not supported for IntegerParameterRange.
	//
	// Reverse logarithmic scaling works only for ranges that are entirely within
	// the range 0 <= x < 1.0.
	ScalingType *string `type:"string" enum:"ScalingType"`
}

// String returns the string representation
func (s IntegerParameterRange) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s IntegerParameterRange) GoString() string {
	return s.String()
}

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

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

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

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

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

// SetScalingType sets the ScalingType field's value.
func (s *IntegerParameterRange) SetScalingType(v string) *IntegerParameterRange {
	s.ScalingType = &v
	return s
}

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

	// The number of items to return in the response.
	MaxResults *int64 `min:"1" type:"integer"`

	// If the result of the previous request was truncated, the response includes
	// a NextToken. To retrieve the next set of results, use the token in the next
	// request. Tokens expire after 24 hours.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListDatasetGroupsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListDatasetGroupsInput) GoString() string {
	return s.String()
}

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

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

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

	// An array of objects that summarize each dataset group's properties.
	DatasetGroups []*DatasetGroupSummary `type:"list"`

	// If the response is truncated, Amazon Forecast returns this token. To retrieve
	// the next set of results, use the token in the next request.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListDatasetGroupsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListDatasetGroupsOutput) GoString() string {
	return s.String()
}

// SetDatasetGroups sets the DatasetGroups field's value.
func (s *ListDatasetGroupsOutput) SetDatasetGroups(v []*DatasetGroupSummary) *ListDatasetGroupsOutput {
	s.DatasetGroups = v
	return s
}

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

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

	// An array of filters. For each filter, you provide a condition and a match
	// statement. The condition is either IS or IS_NOT, which specifies whether
	// to include or exclude, respectively, from the list, the predictors that match
	// the statement. The match statement consists of a key and a value. In this
	// release, Name is the only valid key, which filters on the DatasetImportJobName
	// property.
	//
	//    * Condition - IS or IS_NOT
	//
	//    * Key - Name
	//
	//    * Value - the value to match
	//
	// For example, to list all dataset import jobs named my_dataset_import_job,
	// you would specify:
	//
	// "Filters": [ { "Condition": "IS", "Key": "Name", "Value": "my_dataset_import_job"
	// } ]
	Filters []*Filter `type:"list"`

	// The number of items to return in the response.
	MaxResults *int64 `min:"1" type:"integer"`

	// If the result of the previous request was truncated, the response includes
	// a NextToken. To retrieve the next set of results, use the token in the next
	// request. Tokens expire after 24 hours.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListDatasetImportJobsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListDatasetImportJobsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListDatasetImportJobsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListDatasetImportJobsInput"}
	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.Filters != nil {
		for i, v := range s.Filters {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Filters", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

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

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

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

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

	// An array of objects that summarize each dataset import job's properties.
	DatasetImportJobs []*DatasetImportJobSummary `type:"list"`

	// If the response is truncated, Amazon Forecast returns this token. To retrieve
	// the next set of results, use the token in the next request.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListDatasetImportJobsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListDatasetImportJobsOutput) GoString() string {
	return s.String()
}

// SetDatasetImportJobs sets the DatasetImportJobs field's value.
func (s *ListDatasetImportJobsOutput) SetDatasetImportJobs(v []*DatasetImportJobSummary) *ListDatasetImportJobsOutput {
	s.DatasetImportJobs = v
	return s
}

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

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

	// The number of items to return in the response.
	MaxResults *int64 `min:"1" type:"integer"`

	// If the result of the previous request was truncated, the response includes
	// a NextToken. To retrieve the next set of results, use the token in the next
	// request. Tokens expire after 24 hours.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListDatasetsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListDatasetsInput) GoString() string {
	return s.String()
}

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

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

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

	// An array of objects that summarize each dataset's properties.
	Datasets []*DatasetSummary `type:"list"`

	// If the response is truncated, Amazon Forecast returns this token. To retrieve
	// the next set of results, use the token in the next request.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListDatasetsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListDatasetsOutput) GoString() string {
	return s.String()
}

// SetDatasets sets the Datasets field's value.
func (s *ListDatasetsOutput) SetDatasets(v []*DatasetSummary) *ListDatasetsOutput {
	s.Datasets = v
	return s
}

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

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

	// An array of filters. For each filter, you provide a condition and a match
	// statement. The condition is either IS or IS_NOT, which specifies whether
	// to include or exclude, respectively, from the list, the predictors that match
	// the statement. The match statement consists of a key and a value. In this
	// release, Name is the only valid key, which filters on the ForecastExportJobName
	// property.
	//
	//    * Condition - IS or IS_NOT
	//
	//    * Key - Name
	//
	//    * Value - the value to match
	//
	// For example, to list all forecast export jobs named my_forecast_export_job,
	// you would specify:
	//
	// "Filters": [ { "Condition": "IS", "Key": "Name", "Value": "my_forecast_export_job"
	// } ]
	Filters []*Filter `type:"list"`

	// The number of items to return in the response.
	MaxResults *int64 `min:"1" type:"integer"`

	// If the result of the previous request was truncated, the response includes
	// a NextToken. To retrieve the next set of results, use the token in the next
	// request. Tokens expire after 24 hours.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListForecastExportJobsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListForecastExportJobsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListForecastExportJobsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListForecastExportJobsInput"}
	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.Filters != nil {
		for i, v := range s.Filters {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Filters", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

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

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

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

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

	// An array of objects that summarize each export job's properties.
	ForecastExportJobs []*ForecastExportJobSummary `type:"list"`

	// If the response is truncated, Amazon Forecast returns this token. To retrieve
	// the next set of results, use the token in the next request.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListForecastExportJobsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListForecastExportJobsOutput) GoString() string {
	return s.String()
}

// SetForecastExportJobs sets the ForecastExportJobs field's value.
func (s *ListForecastExportJobsOutput) SetForecastExportJobs(v []*ForecastExportJobSummary) *ListForecastExportJobsOutput {
	s.ForecastExportJobs = v
	return s
}

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

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

	// An array of filters. For each filter, you provide a condition and a match
	// statement. The condition is either IS or IS_NOT, which specifies whether
	// to include or exclude, respectively, from the list, the predictors that match
	// the statement. The match statement consists of a key and a value. In this
	// release, Name is the only valid key, which filters on the ForecastName property.
	//
	//    * Condition - IS or IS_NOT
	//
	//    * Key - Name
	//
	//    * Value - the value to match
	//
	// For example, to list all forecasts named my_forecast, you would specify:
	//
	// "Filters": [ { "Condition": "IS", "Key": "Name", "Value": "my_forecast" }
	// ]
	Filters []*Filter `type:"list"`

	// The number of items to return in the response.
	MaxResults *int64 `min:"1" type:"integer"`

	// If the result of the previous request was truncated, the response includes
	// a NextToken. To retrieve the next set of results, use the token in the next
	// request. Tokens expire after 24 hours.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListForecastsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListForecastsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListForecastsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListForecastsInput"}
	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.Filters != nil {
		for i, v := range s.Filters {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Filters", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

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

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

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

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

	// An array of objects that summarize each forecast's properties.
	Forecasts []*ForecastSummary `type:"list"`

	// If the response is truncated, Amazon Forecast returns this token. To retrieve
	// the next set of results, use the token in the next request.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListForecastsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListForecastsOutput) GoString() string {
	return s.String()
}

// SetForecasts sets the Forecasts field's value.
func (s *ListForecastsOutput) SetForecasts(v []*ForecastSummary) *ListForecastsOutput {
	s.Forecasts = v
	return s
}

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

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

	// An array of filters. For each filter, you provide a condition and a match
	// statement. The condition is either IS or IS_NOT, which specifies whether
	// to include or exclude, respectively, from the list, the predictors that match
	// the statement. The match statement consists of a key and a value. In this
	// release, Name is the only valid key, which filters on the PredictorName property.
	//
	//    * Condition - IS or IS_NOT
	//
	//    * Key - Name
	//
	//    * Value - the value to match
	//
	// For example, to list all predictors named my_predictor, you would specify:
	//
	// "Filters": [ { "Condition": "IS", "Key": "Name", "Value": "my_predictor"
	// } ]
	Filters []*Filter `type:"list"`

	// The number of items to return in the response.
	MaxResults *int64 `min:"1" type:"integer"`

	// If the result of the previous request was truncated, the response includes
	// a NextToken. To retrieve the next set of results, use the token in the next
	// request. Tokens expire after 24 hours.
	NextToken *string `min:"1" type:"string"`
}

// String returns the string representation
func (s ListPredictorsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListPredictorsInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ListPredictorsInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ListPredictorsInput"}
	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.Filters != nil {
		for i, v := range s.Filters {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Filters", i), err.(request.ErrInvalidParams))
			}
		}
	}

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

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

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

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

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

	// If the response is truncated, Amazon Forecast returns this token. To retrieve
	// the next set of results, use the token in the next request.
	NextToken *string `min:"1" type:"string"`

	// An array of objects that summarize each predictor's properties.
	Predictors []*PredictorSummary `type:"list"`
}

// String returns the string representation
func (s ListPredictorsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ListPredictorsOutput) GoString() string {
	return s.String()
}

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

// SetPredictors sets the Predictors field's value.
func (s *ListPredictorsOutput) SetPredictors(v []*PredictorSummary) *ListPredictorsOutput {
	s.Predictors = v
	return s
}

// Provides metrics used to evaluate the performance of a predictor. This object
// is part of the WindowSummary object.
type Metrics struct {
	_ struct{} `type:"structure"`

	// The root mean square error (RMSE).
	RMSE *float64 `type:"double"`

	// An array of weighted quantile losses. Quantiles divide a probability distribution
	// into regions of equal probability. The distribution in this case is the loss
	// function.
	WeightedQuantileLosses []*WeightedQuantileLoss `type:"list"`
}

// String returns the string representation
func (s Metrics) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Metrics) GoString() string {
	return s.String()
}

// SetRMSE sets the RMSE field's value.
func (s *Metrics) SetRMSE(v float64) *Metrics {
	s.RMSE = &v
	return s
}

// SetWeightedQuantileLosses sets the WeightedQuantileLosses field's value.
func (s *Metrics) SetWeightedQuantileLosses(v []*WeightedQuantileLoss) *Metrics {
	s.WeightedQuantileLosses = v
	return s
}

// Specifies the categorical, continuous, and integer hyperparameters, and their
// ranges of tunable values. The range of tunable values determines which values
// that a hyperparameter tuning job can choose for the specified hyperparameter.
// This object is part of the HyperParameterTuningJobConfig object.
type ParameterRanges struct {
	_ struct{} `type:"structure"`

	// Specifies the tunable range for each categorical hyperparameter.
	CategoricalParameterRanges []*CategoricalParameterRange `min:"1" type:"list"`

	// Specifies the tunable range for each continuous hyperparameter.
	ContinuousParameterRanges []*ContinuousParameterRange `min:"1" type:"list"`

	// Specifies the tunable range for each integer hyperparameter.
	IntegerParameterRanges []*IntegerParameterRange `min:"1" type:"list"`
}

// String returns the string representation
func (s ParameterRanges) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ParameterRanges) GoString() string {
	return s.String()
}

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

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

// SetCategoricalParameterRanges sets the CategoricalParameterRanges field's value.
func (s *ParameterRanges) SetCategoricalParameterRanges(v []*CategoricalParameterRange) *ParameterRanges {
	s.CategoricalParameterRanges = v
	return s
}

// SetContinuousParameterRanges sets the ContinuousParameterRanges field's value.
func (s *ParameterRanges) SetContinuousParameterRanges(v []*ContinuousParameterRange) *ParameterRanges {
	s.ContinuousParameterRanges = v
	return s
}

// SetIntegerParameterRanges sets the IntegerParameterRanges field's value.
func (s *ParameterRanges) SetIntegerParameterRanges(v []*IntegerParameterRange) *ParameterRanges {
	s.IntegerParameterRanges = v
	return s
}

// Provides a summary of the predictor properties used in the ListPredictors
// operation. To get the complete set of properties, call the DescribePredictor
// operation, and provide the listed PredictorArn.
type PredictorSummary struct {
	_ struct{} `type:"structure"`

	// When the model training task was created.
	CreationTime *time.Time `type:"timestamp"`

	// The Amazon Resource Name (ARN) of the dataset group that contains the data
	// used to train the predictor.
	DatasetGroupArn *string `type:"string"`

	// Initially, the same as CreationTime (status is CREATE_PENDING). Updated when
	// training starts (status changed to CREATE_IN_PROGRESS), and when training
	// is complete (status changed to ACTIVE) or fails (status changed to CREATE_FAILED).
	LastModificationTime *time.Time `type:"timestamp"`

	// If an error occurred, an informational message about the error.
	Message *string `type:"string"`

	// The ARN of the predictor.
	PredictorArn *string `type:"string"`

	// The name of the predictor.
	PredictorName *string `min:"1" type:"string"`

	// The status of the predictor. States include:
	//
	//    * ACTIVE
	//
	//    * CREATE_PENDING, CREATE_IN_PROGRESS, CREATE_FAILED
	//
	//    * DELETE_PENDING, DELETE_IN_PROGRESS, DELETE_FAILED
	//
	//    * UPDATE_PENDING, UPDATE_IN_PROGRESS, UPDATE_FAILED
	//
	// The Status of the predictor must be ACTIVE before using the predictor to
	// create a forecast.
	Status *string `type:"string"`
}

// String returns the string representation
func (s PredictorSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s PredictorSummary) GoString() string {
	return s.String()
}

// SetCreationTime sets the CreationTime field's value.
func (s *PredictorSummary) SetCreationTime(v time.Time) *PredictorSummary {
	s.CreationTime = &v
	return s
}

// SetDatasetGroupArn sets the DatasetGroupArn field's value.
func (s *PredictorSummary) SetDatasetGroupArn(v string) *PredictorSummary {
	s.DatasetGroupArn = &v
	return s
}

// SetLastModificationTime sets the LastModificationTime field's value.
func (s *PredictorSummary) SetLastModificationTime(v time.Time) *PredictorSummary {
	s.LastModificationTime = &v
	return s
}

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

// SetPredictorArn sets the PredictorArn field's value.
func (s *PredictorSummary) SetPredictorArn(v string) *PredictorSummary {
	s.PredictorArn = &v
	return s
}

// SetPredictorName sets the PredictorName field's value.
func (s *PredictorSummary) SetPredictorName(v string) *PredictorSummary {
	s.PredictorName = &v
	return s
}

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

// The path to the file(s) in an Amazon Simple Storage Service (Amazon S3) bucket,
// and an AWS Identity and Access Management (IAM) role that Amazon Forecast
// can assume to access the file(s). Optionally, includes an AWS Key Management
// Service (KMS) key. This object is submitted in the CreateDatasetImportJob
// and CreateForecastExportJob requests.
type S3Config struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of an AWS Key Management Service (KMS) key.
	KMSKeyArn *string `type:"string"`

	// The path to an Amazon Simple Storage Service (Amazon S3) bucket or file(s)
	// in an Amazon S3 bucket.
	//
	// Path is a required field
	Path *string `type:"string" required:"true"`

	// The ARN of the AWS Identity and Access Management (IAM) role that Amazon
	// Forecast can assume to access the Amazon S3 bucket or file(s).
	//
	// Cross-account pass role is not allowed. If you pass a role that doesn't belong
	// to your account, an InvalidInputException is thrown.
	//
	// RoleArn is a required field
	RoleArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s S3Config) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s S3Config) GoString() string {
	return s.String()
}

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

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

// SetKMSKeyArn sets the KMSKeyArn field's value.
func (s *S3Config) SetKMSKeyArn(v string) *S3Config {
	s.KMSKeyArn = &v
	return s
}

// SetPath sets the Path field's value.
func (s *S3Config) SetPath(v string) *S3Config {
	s.Path = &v
	return s
}

// SetRoleArn sets the RoleArn field's value.
func (s *S3Config) SetRoleArn(v string) *S3Config {
	s.RoleArn = &v
	return s
}

// Defines the fields of a dataset. This object is specified in the CreateDataset
// request.
type Schema struct {
	_ struct{} `type:"structure"`

	// An array of attributes specifying the name and type of each field in a dataset.
	Attributes []*SchemaAttribute `type:"list"`
}

// String returns the string representation
func (s Schema) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Schema) GoString() string {
	return s.String()
}

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

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

// SetAttributes sets the Attributes field's value.
func (s *Schema) SetAttributes(v []*SchemaAttribute) *Schema {
	s.Attributes = v
	return s
}

// An attribute of a schema, which defines a field of a dataset. A schema attribute
// is required for every field in a dataset. The Schema object contains an array
// of SchemaAttribute objects.
type SchemaAttribute struct {
	_ struct{} `type:"structure"`

	// The name of the dataset field.
	AttributeName *string `min:"1" type:"string"`

	// The data type of the field.
	AttributeType *string `type:"string" enum:"AttributeType"`
}

// String returns the string representation
func (s SchemaAttribute) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SchemaAttribute) GoString() string {
	return s.String()
}

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

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

// SetAttributeName sets the AttributeName field's value.
func (s *SchemaAttribute) SetAttributeName(v string) *SchemaAttribute {
	s.AttributeName = &v
	return s
}

// SetAttributeType sets the AttributeType field's value.
func (s *SchemaAttribute) SetAttributeType(v string) *SchemaAttribute {
	s.AttributeType = &v
	return s
}

// Provides statistics for each data field imported to an Amazon Forecast dataset
// with the CreateDatasetImportJob operation.
type Statistics struct {
	_ struct{} `type:"structure"`

	// For a numeric field, the average value in the field.
	Avg *float64 `type:"double"`

	// The number of values in the field.
	Count *int64 `type:"integer"`

	// The number of distinct values in the field.
	CountDistinct *int64 `type:"integer"`

	// The number of NAN (not a number) values in the field.
	CountNan *int64 `type:"integer"`

	// The number of null values in the field.
	CountNull *int64 `type:"integer"`

	// For a numeric field, the maximum value in the field.
	Max *string `type:"string"`

	// For a numeric field, the minimum value in the field.
	Min *string `type:"string"`

	// For a numeric field, the standard deviation.
	Stddev *float64 `type:"double"`
}

// String returns the string representation
func (s Statistics) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Statistics) GoString() string {
	return s.String()
}

// SetAvg sets the Avg field's value.
func (s *Statistics) SetAvg(v float64) *Statistics {
	s.Avg = &v
	return s
}

// SetCount sets the Count field's value.
func (s *Statistics) SetCount(v int64) *Statistics {
	s.Count = &v
	return s
}

// SetCountDistinct sets the CountDistinct field's value.
func (s *Statistics) SetCountDistinct(v int64) *Statistics {
	s.CountDistinct = &v
	return s
}

// SetCountNan sets the CountNan field's value.
func (s *Statistics) SetCountNan(v int64) *Statistics {
	s.CountNan = &v
	return s
}

// SetCountNull sets the CountNull field's value.
func (s *Statistics) SetCountNull(v int64) *Statistics {
	s.CountNull = &v
	return s
}

// SetMax sets the Max field's value.
func (s *Statistics) SetMax(v string) *Statistics {
	s.Max = &v
	return s
}

// SetMin sets the Min field's value.
func (s *Statistics) SetMin(v string) *Statistics {
	s.Min = &v
	return s
}

// SetStddev sets the Stddev field's value.
func (s *Statistics) SetStddev(v float64) *Statistics {
	s.Stddev = &v
	return s
}

// Describes a supplementary feature of a dataset group. This object is part
// of the InputDataConfig object.
//
// For this release, the only supported feature is a holiday calendar. If the
// calendar is used, all data should belong to the same country as the calendar.
// For the calendar data, see http://jollyday.sourceforge.net/data.html (http://jollyday.sourceforge.net/data.html).
type SupplementaryFeature struct {
	_ struct{} `type:"structure"`

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

	// One of the following 2 letter country codes:
	//
	//    * "AU" - AUSTRALIA
	//
	//    * "DE" - GERMANY
	//
	//    * "JP" - JAPAN
	//
	//    * "US" - UNITED_STATES
	//
	//    * "UK" - UNITED_KINGDOM
	//
	// Value is a required field
	Value *string `type:"string" required:"true"`
}

// String returns the string representation
func (s SupplementaryFeature) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SupplementaryFeature) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SupplementaryFeature) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SupplementaryFeature"}
	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 invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

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

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

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

	// An array of Amazon Resource Names (ARNs) of the datasets to add to the dataset
	// group.
	//
	// DatasetArns is a required field
	DatasetArns []*string `type:"list" required:"true"`

	// The ARN of the dataset group.
	//
	// DatasetGroupArn is a required field
	DatasetGroupArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s UpdateDatasetGroupInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateDatasetGroupInput) GoString() string {
	return s.String()
}

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

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

// SetDatasetArns sets the DatasetArns field's value.
func (s *UpdateDatasetGroupInput) SetDatasetArns(v []*string) *UpdateDatasetGroupInput {
	s.DatasetArns = v
	return s
}

// SetDatasetGroupArn sets the DatasetGroupArn field's value.
func (s *UpdateDatasetGroupInput) SetDatasetGroupArn(v string) *UpdateDatasetGroupInput {
	s.DatasetGroupArn = &v
	return s
}

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

// String returns the string representation
func (s UpdateDatasetGroupOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateDatasetGroupOutput) GoString() string {
	return s.String()
}

// The weighted loss value for a quantile. This object is part of the Metrics
// object.
type WeightedQuantileLoss struct {
	_ struct{} `type:"structure"`

	// The difference between the predicted value and actual value over the quantile,
	// weighted (normalized) by dividing by the sum over all quantiles.
	LossValue *float64 `type:"double"`

	// The quantile. Quantiles divide a probability distribution into regions of
	// equal probability. For example, if the distribution was divided into 5 regions
	// of equal probability, the quantiles would be 0.2, 0.4, 0.6, and 0.8.
	Quantile *float64 `type:"double"`
}

// String returns the string representation
func (s WeightedQuantileLoss) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s WeightedQuantileLoss) GoString() string {
	return s.String()
}

// SetLossValue sets the LossValue field's value.
func (s *WeightedQuantileLoss) SetLossValue(v float64) *WeightedQuantileLoss {
	s.LossValue = &v
	return s
}

// SetQuantile sets the Quantile field's value.
func (s *WeightedQuantileLoss) SetQuantile(v float64) *WeightedQuantileLoss {
	s.Quantile = &v
	return s
}

// The metrics for a time range within the evaluation portion of a dataset.
// This object is part of the EvaluationResult object.
//
// The TestWindowStart and TestWindowEnd parameters are determined by the BackTestWindowOffset
// parameter of the EvaluationParameters object.
type WindowSummary struct {
	_ struct{} `type:"structure"`

	// The type of evaluation.
	//
	//    * SUMMARY - The average metrics across all windows.
	//
	//    * COMPUTED - The metrics for the specified window.
	EvaluationType *string `type:"string" enum:"EvaluationType"`

	// The number of data points within the window.
	ItemCount *int64 `type:"integer"`

	// Provides metrics used to evaluate the performance of a predictor. This object
	// is part of the WindowSummary object.
	Metrics *Metrics `type:"structure"`

	// The timestamp that defines the end of the window.
	TestWindowEnd *time.Time `type:"timestamp"`

	// The timestamp that defines the start of the window.
	TestWindowStart *time.Time `type:"timestamp"`
}

// String returns the string representation
func (s WindowSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s WindowSummary) GoString() string {
	return s.String()
}

// SetEvaluationType sets the EvaluationType field's value.
func (s *WindowSummary) SetEvaluationType(v string) *WindowSummary {
	s.EvaluationType = &v
	return s
}

// SetItemCount sets the ItemCount field's value.
func (s *WindowSummary) SetItemCount(v int64) *WindowSummary {
	s.ItemCount = &v
	return s
}

// SetMetrics sets the Metrics field's value.
func (s *WindowSummary) SetMetrics(v *Metrics) *WindowSummary {
	s.Metrics = v
	return s
}

// SetTestWindowEnd sets the TestWindowEnd field's value.
func (s *WindowSummary) SetTestWindowEnd(v time.Time) *WindowSummary {
	s.TestWindowEnd = &v
	return s
}

// SetTestWindowStart sets the TestWindowStart field's value.
func (s *WindowSummary) SetTestWindowStart(v time.Time) *WindowSummary {
	s.TestWindowStart = &v
	return s
}

const (
	// AttributeTypeString is a AttributeType enum value
	AttributeTypeString = "string"

	// AttributeTypeInteger is a AttributeType enum value
	AttributeTypeInteger = "integer"

	// AttributeTypeFloat is a AttributeType enum value
	AttributeTypeFloat = "float"

	// AttributeTypeTimestamp is a AttributeType enum value
	AttributeTypeTimestamp = "timestamp"
)

const (
	// DatasetTypeTargetTimeSeries is a DatasetType enum value
	DatasetTypeTargetTimeSeries = "TARGET_TIME_SERIES"

	// DatasetTypeRelatedTimeSeries is a DatasetType enum value
	DatasetTypeRelatedTimeSeries = "RELATED_TIME_SERIES"

	// DatasetTypeItemMetadata is a DatasetType enum value
	DatasetTypeItemMetadata = "ITEM_METADATA"
)

const (
	// DomainRetail is a Domain enum value
	DomainRetail = "RETAIL"

	// DomainCustom is a Domain enum value
	DomainCustom = "CUSTOM"

	// DomainInventoryPlanning is a Domain enum value
	DomainInventoryPlanning = "INVENTORY_PLANNING"

	// DomainEc2Capacity is a Domain enum value
	DomainEc2Capacity = "EC2_CAPACITY"

	// DomainWorkForce is a Domain enum value
	DomainWorkForce = "WORK_FORCE"

	// DomainWebTraffic is a Domain enum value
	DomainWebTraffic = "WEB_TRAFFIC"

	// DomainMetrics is a Domain enum value
	DomainMetrics = "METRICS"
)

const (
	// EvaluationTypeSummary is a EvaluationType enum value
	EvaluationTypeSummary = "SUMMARY"

	// EvaluationTypeComputed is a EvaluationType enum value
	EvaluationTypeComputed = "COMPUTED"
)

const (
	// FeaturizationMethodNameFilling is a FeaturizationMethodName enum value
	FeaturizationMethodNameFilling = "filling"
)

const (
	// FilterConditionStringIs is a FilterConditionString enum value
	FilterConditionStringIs = "IS"

	// FilterConditionStringIsNot is a FilterConditionString enum value
	FilterConditionStringIsNot = "IS_NOT"
)

const (
	// ScalingTypeAuto is a ScalingType enum value
	ScalingTypeAuto = "Auto"

	// ScalingTypeLinear is a ScalingType enum value
	ScalingTypeLinear = "Linear"

	// ScalingTypeLogarithmic is a ScalingType enum value
	ScalingTypeLogarithmic = "Logarithmic"

	// ScalingTypeReverseLogarithmic is a ScalingType enum value
	ScalingTypeReverseLogarithmic = "ReverseLogarithmic"
)
