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

package dax

import (
	"time"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/internal/awsutil"
)

var _ aws.Config
var _ = awsutil.Prettify

// Contains all of the attributes of a specific DAX cluster.
type Cluster struct {
	_ struct{} `type:"structure"`

	// The number of nodes in the cluster that are active (i.e., capable of serving
	// requests).
	ActiveNodes *int64 `type:"integer"`

	// The Amazon Resource Name (ARN) that uniquely identifies the cluster.
	ClusterArn *string `type:"string"`

	// The configuration endpoint for this DAX cluster, consisting of a DNS name
	// and a port number. Client applications can specify this endpoint, rather
	// than an individual node endpoint, and allow the DAX client software to intelligently
	// route requests and responses to nodes in the DAX cluster.
	ClusterDiscoveryEndpoint *Endpoint `type:"structure"`

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

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

	// A valid Amazon Resource Name (ARN) that identifies an IAM role. At runtime,
	// DAX will assume this role and use the role's permissions to access DynamoDB
	// on your behalf.
	IamRoleArn *string `type:"string"`

	// A list of nodes to be removed from the cluster.
	NodeIdsToRemove []string `type:"list"`

	// The node type for the nodes in the cluster. (All nodes in a DAX cluster are
	// of the same type.)
	NodeType *string `type:"string"`

	// A list of nodes that are currently in the cluster.
	Nodes []Node `type:"list"`

	// Describes a notification topic and its status. Notification topics are used
	// for publishing DAX events to subscribers using Amazon Simple Notification
	// Service (SNS).
	NotificationConfiguration *NotificationConfiguration `type:"structure"`

	// The parameter group being used by nodes in the cluster.
	ParameterGroup *ParameterGroupStatus `type:"structure"`

	// A range of time when maintenance of DAX cluster software will be performed.
	// For example: sun:01:00-sun:09:00. Cluster maintenance normally takes less
	// than 30 minutes, and is performed automatically within the maintenance window.
	PreferredMaintenanceWindow *string `type:"string"`

	// The description of the server-side encryption status on the specified DAX
	// cluster.
	SSEDescription *SSEDescription `type:"structure"`

	// A list of security groups, and the status of each, for the nodes in the cluster.
	SecurityGroups []SecurityGroupMembership `type:"list"`

	// The current status of the cluster.
	Status *string `type:"string"`

	// The subnet group where the DAX cluster is running.
	SubnetGroup *string `type:"string"`

	// The total number of nodes in the cluster.
	TotalNodes *int64 `type:"integer"`
}

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

// Represents the information required for client programs to connect to the
// configuration endpoint for a DAX cluster, or to an individual node within
// the cluster.
type Endpoint struct {
	_ struct{} `type:"structure"`

	// The DNS hostname of the endpoint.
	Address *string `type:"string"`

	// The port number that applications should use to connect to the endpoint.
	Port *int64 `type:"integer"`
}

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

// Represents a single occurrence of something interesting within the system.
// Some examples of events are creating a DAX cluster, adding or removing a
// node, or rebooting a node.
type Event struct {
	_ struct{} `type:"structure"`

	// The date and time when the event occurred.
	Date *time.Time `type:"timestamp"`

	// A user-defined message associated with the event.
	Message *string `type:"string"`

	// The source of the event. For example, if the event occurred at the node level,
	// the source would be the node ID.
	SourceName *string `type:"string"`

	// Specifies the origin of this event - a cluster, a parameter group, a node
	// ID, etc.
	SourceType SourceType `type:"string" enum:"true"`
}

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

// Represents an individual node within a DAX cluster.
type Node struct {
	_ struct{} `type:"structure"`

	// The Availability Zone (AZ) in which the node has been deployed.
	AvailabilityZone *string `type:"string"`

	// The endpoint for the node, consisting of a DNS name and a port number. Client
	// applications can connect directly to a node endpoint, if desired (as an alternative
	// to allowing DAX client software to intelligently route requests and responses
	// to nodes in the DAX cluster.
	Endpoint *Endpoint `type:"structure"`

	// The date and time (in UNIX epoch format) when the node was launched.
	NodeCreateTime *time.Time `type:"timestamp"`

	// A system-generated identifier for the node.
	NodeId *string `type:"string"`

	// The current status of the node. For example: available.
	NodeStatus *string `type:"string"`

	// The status of the parameter group associated with this node. For example,
	// in-sync.
	ParameterGroupStatus *string `type:"string"`
}

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

// Represents a parameter value that is applicable to a particular node type.
type NodeTypeSpecificValue struct {
	_ struct{} `type:"structure"`

	// A node type to which the parameter value applies.
	NodeType *string `type:"string"`

	// The parameter value for this node type.
	Value *string `type:"string"`
}

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

// Describes a notification topic and its status. Notification topics are used
// for publishing DAX events to subscribers using Amazon Simple Notification
// Service (SNS).
type NotificationConfiguration struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) that identifies the topic.
	TopicArn *string `type:"string"`

	// The current state of the topic.
	TopicStatus *string `type:"string"`
}

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

// Describes an individual setting that controls some aspect of DAX behavior.
type Parameter struct {
	_ struct{} `type:"structure"`

	// A range of values within which the parameter can be set.
	AllowedValues *string `type:"string"`

	// The conditions under which changes to this parameter can be applied. For
	// example, requires-reboot indicates that a new value for this parameter will
	// only take effect if a node is rebooted.
	ChangeType ChangeType `type:"string" enum:"true"`

	// The data type of the parameter. For example, integer:
	DataType *string `type:"string"`

	// A description of the parameter
	Description *string `type:"string"`

	// Whether the customer is allowed to modify the parameter.
	IsModifiable IsModifiable `type:"string" enum:"true"`

	// A list of node types, and specific parameter values for each node.
	NodeTypeSpecificValues []NodeTypeSpecificValue `type:"list"`

	// The name of the parameter.
	ParameterName *string `type:"string"`

	// Determines whether the parameter can be applied to any nodes, or only nodes
	// of a particular type.
	ParameterType ParameterType `type:"string" enum:"true"`

	// The value for the parameter.
	ParameterValue *string `type:"string"`

	// How the parameter is defined. For example, system denotes a system-defined
	// parameter.
	Source *string `type:"string"`
}

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

// A named set of parameters that are applied to all of the nodes in a DAX cluster.
type ParameterGroup struct {
	_ struct{} `type:"structure"`

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

	// The name of the parameter group.
	ParameterGroupName *string `type:"string"`
}

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

// The status of a parameter group.
type ParameterGroupStatus struct {
	_ struct{} `type:"structure"`

	// The node IDs of one or more nodes to be rebooted.
	NodeIdsToReboot []string `type:"list"`

	// The status of parameter updates.
	ParameterApplyStatus *string `type:"string"`

	// The name of the parameter group.
	ParameterGroupName *string `type:"string"`
}

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

// An individual DAX parameter.
type ParameterNameValue struct {
	_ struct{} `type:"structure"`

	// The name of the parameter.
	ParameterName *string `type:"string"`

	// The value of the parameter.
	ParameterValue *string `type:"string"`
}

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

// The description of the server-side encryption status on the specified DAX
// cluster.
type SSEDescription struct {
	_ struct{} `type:"structure"`

	// The current state of server-side encryption:
	//
	//    * ENABLING - Server-side encryption is being enabled.
	//
	//    * ENABLED - Server-side encryption is enabled.
	//
	//    * DISABLING - Server-side encryption is being disabled.
	//
	//    * DISABLED - Server-side encryption is disabled.
	Status SSEStatus `type:"string" enum:"true"`
}

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

// Represents the settings used to enable server-side encryption.
type SSESpecification struct {
	_ struct{} `type:"structure"`

	// Indicates whether server-side encryption is enabled (true) or disabled (false)
	// on the cluster.
	//
	// Enabled is a required field
	Enabled *bool `type:"boolean" required:"true"`
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *SSESpecification) Validate() error {
	invalidParams := aws.ErrInvalidParams{Context: "SSESpecification"}

	if s.Enabled == nil {
		invalidParams.Add(aws.NewErrParamRequired("Enabled"))
	}

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

// An individual VPC security group and its status.
type SecurityGroupMembership struct {
	_ struct{} `type:"structure"`

	// The unique ID for this security group.
	SecurityGroupIdentifier *string `type:"string"`

	// The status of this security group.
	Status *string `type:"string"`
}

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

// Represents the subnet associated with a DAX cluster. This parameter refers
// to subnets defined in Amazon Virtual Private Cloud (Amazon VPC) and used
// with DAX.
type Subnet struct {
	_ struct{} `type:"structure"`

	// The Availability Zone (AZ) for the subnet.
	SubnetAvailabilityZone *string `type:"string"`

	// The system-assigned identifier for the subnet.
	SubnetIdentifier *string `type:"string"`
}

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

// Represents the output of one of the following actions:
//
//    * CreateSubnetGroup
//
//    * ModifySubnetGroup
type SubnetGroup struct {
	_ struct{} `type:"structure"`

	// The description of the subnet group.
	Description *string `type:"string"`

	// The name of the subnet group.
	SubnetGroupName *string `type:"string"`

	// A list of subnets associated with the subnet group.
	Subnets []Subnet `type:"list"`

	// The Amazon Virtual Private Cloud identifier (VPC ID) of the subnet group.
	VpcId *string `type:"string"`
}

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

// A description of a tag. Every tag is a key-value pair. You can add up to
// 50 tags to a single DAX cluster.
//
// AWS-assigned tag names and values are automatically assigned the aws: prefix,
// which the user cannot assign. AWS-assigned tag names do not count towards
// the tag limit of 50. User-assigned tag names have the prefix user:.
//
// You cannot backdate the application of a tag.
type Tag struct {
	_ struct{} `type:"structure"`

	// The key for the tag. Tag keys are case sensitive. Every DAX cluster can only
	// have one tag with the same key. If you try to add an existing tag (same key),
	// the existing tag value will be updated to the new value.
	Key *string `type:"string"`

	// The value of the tag. Tag values are case-sensitive and can be null.
	Value *string `type:"string"`
}

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