// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may
// not use this file except in compliance with the License. A copy of the
// License is located at
//
//     http://aws.amazon.com/apache2.0/
//
// or in the "license" file accompanying this file. This file is distributed
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
// express or implied. See the License for the specific language governing
// permissions and limitations under the License.
//
// Code generated by [agent/gogenerate/awssdk.go] DO NOT EDIT.

package ecstcs

import (
	"fmt"

	"github.com/aws/amazon-ecs-agent/ecs-agent/utils"
	"github.com/aws/aws-sdk-go/aws/awsutil"
	"github.com/aws/aws-sdk-go/aws/request"
	"github.com/aws/aws-sdk-go/private/protocol"
)

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

	Message *string `json:"message,omitempty" type:"string"`
}

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

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

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

	Message *string `json:"message,omitempty" type:"string"`
}

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

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

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

	Message *string `json:"message,omitempty" type:"string"`
}

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

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

type BadRequestException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `json:"message,omitempty" type:"string"`
}

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

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

func newErrorBadRequestException(v protocol.ResponseMetadata) error {
	return &BadRequestException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

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

	Max *float64 `json:"max,omitempty" type:"double"`

	Min *float64 `json:"min,omitempty" type:"double"`

	SampleCount *int64 `json:"sampleCount,omitempty" type:"integer"`

	Sum *float64 `json:"sum,omitempty" type:"double"`
}

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

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

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

	ContainerName *string `json:"containerName,omitempty" type:"string"`

	HealthStatus *string `json:"healthStatus,omitempty" type:"string" enum:"HealthStatus"`

	StatusMessage *string `json:"statusMessage,omitempty" type:"string"`

	StatusSince *utils.Timestamp `json:"statusSince,omitempty" type:"timestamp"`
}

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

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

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

	ContainerArn *string `json:"containerArn,omitempty" type:"string"`

	ContainerName *string `json:"containerName,omitempty" type:"string"`

	CpuStatsSet *CWStatsSet `json:"cpuStatsSet,omitempty" type:"structure"`

	MemoryStatsSet *CWStatsSet `json:"memoryStatsSet,omitempty" type:"structure"`

	NetworkStatsSet *NetworkStatsSet `json:"networkStatsSet,omitempty" type:"structure"`

	RestartStatsSet *RestartStatsSet `json:"restartStatsSet,omitempty" type:"structure"`

	StorageStatsSet *StorageStatsSet `json:"storageStatsSet,omitempty" type:"structure"`
}

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

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

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

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

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

	Key *string `json:"key,omitempty" type:"string"`

	Value *string `json:"value,omitempty" type:"string"`
}

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

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

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

	BytesUtilized *ULongStatsSet `json:"bytesUtilized,omitempty" type:"structure"`
}

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

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

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

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

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

	MetricCounts []*int64 `json:"metricCounts,omitempty" type:"list"`

	MetricName *string `json:"metricName,omitempty" type:"string"`

	MetricValues []*float64 `json:"metricValues,omitempty" type:"list"`
}

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

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

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

	Dimensions []*Dimension `json:"dimensions,omitempty" type:"list"`

	GeneralMetrics []*GeneralMetric `json:"generalMetrics,omitempty" type:"list"`

	MetricType *string `json:"metricType,omitempty" type:"string" enum:"MetricType"`
}

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

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

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

	Cluster *string `json:"cluster,omitempty" type:"string"`

	ContainerInstance *string `json:"containerInstance,omitempty" type:"string"`

	Fin *bool `json:"fin,omitempty" type:"boolean"`

	MessageId *string `json:"messageId,omitempty" type:"string"`
}

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

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

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

	Healthy *bool `json:"healthy,omitempty" type:"boolean"`
}

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

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

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

	Healthy *bool `json:"healthy,omitempty" type:"boolean"`
}

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

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

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

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

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

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

	Storage *InstanceStorageMetrics `json:"storage,omitempty" type:"structure"`
}

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

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

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

	LastStatusChange *utils.Timestamp `json:"lastStatusChange,omitempty" type:"timestamp"`

	LastUpdated *utils.Timestamp `json:"lastUpdated,omitempty" type:"timestamp"`

	Status *string `json:"status,omitempty" type:"string" enum:"InstanceHealthcheckStatus"`

	Type *string `json:"type,omitempty" type:"string"`
}

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

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

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

	Cluster *string `json:"cluster,omitempty" type:"string"`

	ContainerInstance *string `json:"containerInstance,omitempty" type:"string"`

	RequestId *string `json:"requestId,omitempty" type:"string"`
}

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

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

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

	DataFilesystem *float64 `json:"dataFilesystem,omitempty" type:"double"`

	RootFilesystem *float64 `json:"rootFilesystem,omitempty" type:"double"`
}

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

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

type InvalidParameterException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `json:"message,omitempty" type:"string"`
}

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

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

func newErrorInvalidParameterException(v protocol.ResponseMetadata) error {
	return &InvalidParameterException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

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

	Cluster *string `json:"cluster,omitempty" type:"string"`

	ContainerInstance *string `json:"containerInstance,omitempty" type:"string"`

	Fin *bool `json:"fin,omitempty" type:"boolean"`

	Idle *bool `json:"idle,omitempty" type:"boolean"`

	MessageId *string `json:"messageId,omitempty" type:"string"`
}

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

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

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

	RxBytes *ULongStatsSet `json:"rxBytes,omitempty" type:"structure"`

	RxBytesPerSecond *UDoubleCWStatsSet `json:"rxBytesPerSecond,omitempty" type:"structure"`

	RxDropped *ULongStatsSet `json:"rxDropped,omitempty" type:"structure"`

	RxErrors *ULongStatsSet `json:"rxErrors,omitempty" type:"structure"`

	RxPackets *ULongStatsSet `json:"rxPackets,omitempty" type:"structure"`

	TxBytes *ULongStatsSet `json:"txBytes,omitempty" type:"structure"`

	TxBytesPerSecond *UDoubleCWStatsSet `json:"txBytesPerSecond,omitempty" type:"structure"`

	TxDropped *ULongStatsSet `json:"txDropped,omitempty" type:"structure"`

	TxErrors *ULongStatsSet `json:"txErrors,omitempty" type:"structure"`

	TxPackets *ULongStatsSet `json:"txPackets,omitempty" type:"structure"`
}

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

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *NetworkStatsSet) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "NetworkStatsSet"}
	if s.RxBytes != nil {
		if err := s.RxBytes.Validate(); err != nil {
			invalidParams.AddNested("RxBytes", err.(request.ErrInvalidParams))
		}
	}
	if s.RxBytesPerSecond != nil {
		if err := s.RxBytesPerSecond.Validate(); err != nil {
			invalidParams.AddNested("RxBytesPerSecond", err.(request.ErrInvalidParams))
		}
	}
	if s.RxDropped != nil {
		if err := s.RxDropped.Validate(); err != nil {
			invalidParams.AddNested("RxDropped", err.(request.ErrInvalidParams))
		}
	}
	if s.RxErrors != nil {
		if err := s.RxErrors.Validate(); err != nil {
			invalidParams.AddNested("RxErrors", err.(request.ErrInvalidParams))
		}
	}
	if s.RxPackets != nil {
		if err := s.RxPackets.Validate(); err != nil {
			invalidParams.AddNested("RxPackets", err.(request.ErrInvalidParams))
		}
	}
	if s.TxBytes != nil {
		if err := s.TxBytes.Validate(); err != nil {
			invalidParams.AddNested("TxBytes", err.(request.ErrInvalidParams))
		}
	}
	if s.TxBytesPerSecond != nil {
		if err := s.TxBytesPerSecond.Validate(); err != nil {
			invalidParams.AddNested("TxBytesPerSecond", err.(request.ErrInvalidParams))
		}
	}
	if s.TxDropped != nil {
		if err := s.TxDropped.Validate(); err != nil {
			invalidParams.AddNested("TxDropped", err.(request.ErrInvalidParams))
		}
	}
	if s.TxErrors != nil {
		if err := s.TxErrors.Validate(); err != nil {
			invalidParams.AddNested("TxErrors", err.(request.ErrInvalidParams))
		}
	}
	if s.TxPackets != nil {
		if err := s.TxPackets.Validate(); err != nil {
			invalidParams.AddNested("TxPackets", err.(request.ErrInvalidParams))
		}
	}

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

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

	Metadata *HealthMetadata `json:"metadata,omitempty" type:"structure"`

	Tasks []*TaskHealth `json:"tasks,omitempty" type:"list"`

	Timestamp *utils.Timestamp `json:"timestamp,omitempty" type:"timestamp"`
}

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

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

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

	Message *string `json:"message,omitempty" type:"string"`
}

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

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

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

	Metadata *HealthMetadata `json:"metadata,omitempty" type:"structure"`

	Tasks []*TaskHealth `json:"tasks,omitempty" type:"list"`

	Timestamp *utils.Timestamp `json:"timestamp,omitempty" type:"timestamp"`
}

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

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

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

	Metadata *InstanceStatusMetadata `json:"metadata,omitempty" type:"structure"`

	Statuses []*InstanceStatus `json:"statuses,omitempty" type:"list"`

	Timestamp *utils.Timestamp `json:"timestamp,omitempty" type:"timestamp"`
}

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

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

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

	Message *string `json:"message,omitempty" type:"string"`
}

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

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

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

	Metadata *InstanceStatusMetadata `json:"metadata,omitempty" type:"structure"`

	Statuses []*InstanceStatus `json:"statuses,omitempty" type:"list"`

	Timestamp *utils.Timestamp `json:"timestamp,omitempty" type:"timestamp"`
}

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

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

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

	InstanceMetrics *InstanceMetrics `json:"instanceMetrics,omitempty" type:"structure"`

	Metadata *MetricsMetadata `json:"metadata,omitempty" type:"structure"`

	TaskMetrics []*TaskMetric `json:"taskMetrics,omitempty" type:"list"`

	Timestamp *utils.Timestamp `json:"timestamp,omitempty" type:"timestamp"`
}

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

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

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

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

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

	Message *string `json:"message,omitempty" type:"string"`
}

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

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

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

	InstanceMetrics *InstanceMetrics `json:"instanceMetrics,omitempty" type:"structure"`

	Metadata *MetricsMetadata `json:"metadata,omitempty" type:"structure"`

	TaskMetrics []*TaskMetric `json:"taskMetrics,omitempty" type:"list"`

	Timestamp *utils.Timestamp `json:"timestamp,omitempty" type:"timestamp"`
}

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

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

type ResourceValidationException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `json:"message,omitempty" type:"string"`
}

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

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

func newErrorResourceValidationException(v protocol.ResponseMetadata) error {
	return &ResourceValidationException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

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

	RestartCount *int64 `json:"restartCount,omitempty" type:"integer"`
}

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

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

type ServerException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `json:"message,omitempty" type:"string"`
}

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

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

func newErrorServerException(v protocol.ResponseMetadata) error {
	return &ServerException{
		RespMetadata: v,
	}
}

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

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

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

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

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

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

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

	Cluster *string `json:"cluster,omitempty" type:"string"`

	ContainerInstance *string `json:"containerInstance,omitempty" type:"string"`
}

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

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

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

	Message *string `json:"message,omitempty" type:"string"`
}

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

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

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

	Cluster *string `json:"cluster,omitempty" type:"string"`

	ContainerInstance *string `json:"containerInstance,omitempty" type:"string"`
}

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

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

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

	Message *string `json:"message,omitempty" type:"string"`
}

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

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

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

	ReadSizeBytes *ULongStatsSet `json:"readSizeBytes,omitempty" type:"structure"`

	WriteSizeBytes *ULongStatsSet `json:"writeSizeBytes,omitempty" type:"structure"`
}

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

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

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

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

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

	ClusterArn *string `json:"clusterArn,omitempty" type:"string"`

	Containers []*ContainerHealth `json:"containers,omitempty" type:"list"`

	TaskArn *string `json:"taskArn,omitempty" type:"string"`

	TaskDefinitionFamily *string `json:"taskDefinitionFamily,omitempty" type:"string"`

	TaskDefinitionVersion *string `json:"taskDefinitionVersion,omitempty" type:"string"`
}

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

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

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

	ClusterArn *string `json:"clusterArn,omitempty" type:"string"`

	ContainerMetrics []*ContainerMetric `json:"containerMetrics,omitempty" type:"list"`

	EphemeralStorageMetrics *EphemeralStorageMetrics `json:"ephemeralStorageMetrics,omitempty" type:"structure"`

	ServiceConnectMetricsWrapper []*GeneralMetricsWrapper `json:"serviceConnectMetricsWrapper,omitempty" type:"list"`

	TaskArn *string `json:"taskArn,omitempty" type:"string"`

	TaskDefinitionFamily *string `json:"taskDefinitionFamily,omitempty" type:"string"`

	TaskDefinitionVersion *string `json:"taskDefinitionVersion,omitempty" type:"string"`

	VolumeMetrics []*VolumeMetric `json:"volumeMetrics,omitempty" type:"list"`
}

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

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

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

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

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

	// Max is a required field
	Max *float64 `json:"max" type:"double" required:"true"`

	// Min is a required field
	Min *float64 `json:"min" type:"double" required:"true"`

	// SampleCount is a required field
	SampleCount *int64 `json:"sampleCount" type:"integer" required:"true"`

	// Sum is a required field
	Sum *float64 `json:"sum" type:"double" required:"true"`
}

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

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

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

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

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

	// Max is a required field
	Max *int64 `json:"max" type:"long" required:"true"`

	// Min is a required field
	Min *int64 `json:"min" type:"long" required:"true"`

	OverflowMax *int64 `json:"overflowMax,omitempty" type:"long"`

	OverflowMin *int64 `json:"overflowMin,omitempty" type:"long"`

	OverflowSum *int64 `json:"overflowSum,omitempty" type:"long"`

	// SampleCount is a required field
	SampleCount *int64 `json:"sampleCount" type:"long" required:"true"`

	// Sum is a required field
	Sum *int64 `json:"sum" type:"long" required:"true"`
}

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

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

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

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

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

	Size *UDoubleCWStatsSet `json:"size,omitempty" type:"structure"`

	Utilized *UDoubleCWStatsSet `json:"utilized,omitempty" type:"structure"`

	VolumeId *string `json:"volumeId,omitempty" type:"string"`

	VolumeName *string `json:"volumeName,omitempty" type:"string"`
}

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

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

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

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