// Code generated by smithy-go-codegen DO NOT EDIT.

package types

import (
	smithydocument "github.com/aws/smithy-go/document"
	"time"
)

// Contains all of the attributes of a specific DAX cluster.
type Cluster struct {

	// The number of nodes in the cluster that are active (i.e., capable of serving
	// requests).
	ActiveNodes *int32

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

	// The endpoint for this DAX cluster, consisting of a DNS name, a port number, and
	// a URL. Applications should use the URL to configure the DAX client to find their
	// cluster.
	ClusterDiscoveryEndpoint *Endpoint

	// The type of encryption supported by the cluster's endpoint. Values are:
	//
	//   - NONE for no encryption
	//
	// TLS for Transport Layer Security
	ClusterEndpointEncryptionType ClusterEndpointEncryptionType

	// The name of the DAX cluster.
	ClusterName *string

	// The description of the cluster.
	Description *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

	// The IP address type of the cluster. Values are:
	//
	//   - ipv4 - IPv4 addresses only
	//
	//   - ipv6 - IPv6 addresses only
	//
	//   - dual_stack - Both IPv4 and IPv6 addresses
	NetworkType NetworkType

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

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

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

	// 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

	// The parameter group being used by nodes in the cluster.
	ParameterGroup *ParameterGroupStatus

	// 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

	// The description of the server-side encryption status on the specified DAX
	// cluster.
	SSEDescription *SSEDescription

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

	// The current status of the cluster.
	Status *string

	// The subnet group where the DAX cluster is running.
	SubnetGroup *string

	// The total number of nodes in the cluster.
	TotalNodes *int32

	noSmithyDocumentSerde
}

// Represents the information required for client programs to connect to the
// endpoint for a DAX cluster.
type Endpoint struct {

	// The DNS hostname of the endpoint.
	Address *string

	// The port number that applications should use to connect to the endpoint.
	Port int32

	// The URL that applications should use to connect to the endpoint. The default
	// ports are 8111 for the "dax" protocol and 9111 for the "daxs" protocol.
	URL *string

	noSmithyDocumentSerde
}

// 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 {

	// The date and time when the event occurred.
	Date *time.Time

	// A user-defined message associated with the event.
	Message *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

	// Specifies the origin of this event - a cluster, a parameter group, a node ID,
	// etc.
	SourceType SourceType

	noSmithyDocumentSerde
}

// Represents an individual node within a DAX cluster.
type Node struct {

	// The Availability Zone (AZ) in which the node has been deployed.
	AvailabilityZone *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

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

	// A system-generated identifier for the node.
	NodeId *string

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

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

	noSmithyDocumentSerde
}

// Represents a parameter value that is applicable to a particular node type.
type NodeTypeSpecificValue struct {

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

	// The parameter value for this node type.
	Value *string

	noSmithyDocumentSerde
}

// 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 {

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

	// The current state of the topic. A value of “active” means that notifications
	// will be sent to the topic. A value of “inactive” means that notifications will
	// not be sent to the topic.
	TopicStatus *string

	noSmithyDocumentSerde
}

// Describes an individual setting that controls some aspect of DAX behavior.
type Parameter struct {

	// A range of values within which the parameter can be set.
	AllowedValues *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

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

	// A description of the parameter
	Description *string

	// Whether the customer is allowed to modify the parameter.
	IsModifiable IsModifiable

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

	// The name of the parameter.
	ParameterName *string

	// Determines whether the parameter can be applied to any nodes, or only nodes of
	// a particular type.
	ParameterType ParameterType

	// The value for the parameter.
	ParameterValue *string

	// How the parameter is defined. For example, system denotes a system-defined
	// parameter.
	Source *string

	noSmithyDocumentSerde
}

// A named set of parameters that are applied to all of the nodes in a DAX cluster.
type ParameterGroup struct {

	// A description of the parameter group.
	Description *string

	// The name of the parameter group.
	ParameterGroupName *string

	noSmithyDocumentSerde
}

// The status of a parameter group.
type ParameterGroupStatus struct {

	// The node IDs of one or more nodes to be rebooted.
	NodeIdsToReboot []string

	// The status of parameter updates.
	ParameterApplyStatus *string

	// The name of the parameter group.
	ParameterGroupName *string

	noSmithyDocumentSerde
}

// An individual DAX parameter.
type ParameterNameValue struct {

	// The name of the parameter.
	ParameterName *string

	// The value of the parameter.
	ParameterValue *string

	noSmithyDocumentSerde
}

// An individual VPC security group and its status.
type SecurityGroupMembership struct {

	// The unique ID for this security group.
	SecurityGroupIdentifier *string

	// The status of this security group.
	Status *string

	noSmithyDocumentSerde
}

// The description of the server-side encryption status on the specified DAX
// cluster.
type SSEDescription struct {

	// 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

	noSmithyDocumentSerde
}

// Represents the settings used to enable server-side encryption.
type SSESpecification struct {

	// Indicates whether server-side encryption is enabled (true) or disabled (false)
	// on the cluster.
	//
	// This member is required.
	Enabled *bool

	noSmithyDocumentSerde
}

// 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 {

	// The Availability Zone (AZ) for the subnet.
	SubnetAvailabilityZone *string

	// The system-assigned identifier for the subnet.
	SubnetIdentifier *string

	// The network types supported by this subnet. Returns an array of strings that
	// can include ipv4 , ipv6 , or both, indicating whether the subnet supports IPv4
	// only, IPv6 only, or dual-stack deployments.
	SupportedNetworkTypes []NetworkType

	noSmithyDocumentSerde
}

// Represents the output of one of the following actions:
//
//   - CreateSubnetGroup
//
//   - ModifySubnetGroup
type SubnetGroup struct {

	// The description of the subnet group.
	Description *string

	// The name of the subnet group.
	SubnetGroupName *string

	// A list of subnets associated with the subnet group.
	Subnets []Subnet

	// The network types supported by this subnet. Returns an array of strings that
	// can include ipv4 , ipv6 , or both, indicating whether the subnet group supports
	// IPv4 only, IPv6 only, or dual-stack deployments.
	SupportedNetworkTypes []NetworkType

	// The Amazon Virtual Private Cloud identifier (VPC ID) of the subnet group.
	VpcId *string

	noSmithyDocumentSerde
}

// A description of a tag. Every tag is a key-value pair. You can add up to 50
// tags to a single DAX cluster.
//
// Amazon Web Services-assigned tag names and values are automatically assigned
// the aws: prefix, which the user cannot assign. Amazon Web Services-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 {

	// 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

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

	noSmithyDocumentSerde
}

type noSmithyDocumentSerde = smithydocument.NoSerde
