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

package cloudhsmv2

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 information about a backup of an AWS CloudHSM cluster.
type Backup struct {
	_ struct{} `type:"structure"`

	// The identifier (ID) of the backup.
	//
	// BackupId is a required field
	BackupId *string `type:"string" required:"true"`

	// The state of the backup.
	BackupState BackupState `type:"string" enum:"true"`

	// The identifier (ID) of the cluster that was backed up.
	ClusterId *string `type:"string"`

	CopyTimestamp *time.Time `type:"timestamp"`

	// The date and time when the backup was created.
	CreateTimestamp *time.Time `type:"timestamp"`

	// The date and time when the backup will be permanently deleted.
	DeleteTimestamp *time.Time `type:"timestamp"`

	SourceBackup *string `type:"string"`

	SourceCluster *string `type:"string"`

	SourceRegion *string `type:"string"`
}

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

// Contains one or more certificates or a certificate signing request (CSR).
type Certificates struct {
	_ struct{} `type:"structure"`

	// The HSM hardware certificate issued (signed) by AWS CloudHSM.
	AwsHardwareCertificate *string `type:"string"`

	// The cluster certificate issued (signed) by the issuing certificate authority
	// (CA) of the cluster's owner.
	ClusterCertificate *string `type:"string"`

	// The cluster's certificate signing request (CSR). The CSR exists only when
	// the cluster's state is UNINITIALIZED.
	ClusterCsr *string `type:"string"`

	// The HSM certificate issued (signed) by the HSM hardware.
	HsmCertificate *string `type:"string"`

	// The HSM hardware certificate issued (signed) by the hardware manufacturer.
	ManufacturerHardwareCertificate *string `type:"string"`
}

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

// Contains information about an AWS CloudHSM cluster.
type Cluster struct {
	_ struct{} `type:"structure"`

	// The cluster's backup policy.
	BackupPolicy BackupPolicy `type:"string" enum:"true"`

	// Contains one or more certificates or a certificate signing request (CSR).
	Certificates *Certificates `type:"structure"`

	// The cluster's identifier (ID).
	ClusterId *string `type:"string"`

	// The date and time when the cluster was created.
	CreateTimestamp *time.Time `type:"timestamp"`

	// The type of HSM that the cluster contains.
	HsmType *string `type:"string"`

	// Contains information about the HSMs in the cluster.
	Hsms []Hsm `type:"list"`

	// The default password for the cluster's Pre-Crypto Officer (PRECO) user.
	PreCoPassword *string `min:"7" type:"string"`

	// The identifier (ID) of the cluster's security group.
	SecurityGroup *string `type:"string"`

	// The identifier (ID) of the backup used to create the cluster. This value
	// exists only when the cluster was created from a backup.
	SourceBackupId *string `type:"string"`

	// The cluster's state.
	State ClusterState `type:"string" enum:"true"`

	// A description of the cluster's state.
	StateMessage *string `type:"string"`

	// A map of the cluster's subnets and their corresponding Availability Zones.
	SubnetMapping map[string]string `type:"map"`

	// The identifier (ID) of the virtual private cloud (VPC) that contains the
	// cluster.
	VpcId *string `type:"string"`
}

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

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

	CreateTimestamp *time.Time `type:"timestamp"`

	SourceBackup *string `type:"string"`

	SourceCluster *string `type:"string"`

	SourceRegion *string `type:"string"`
}

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

// Contains information about a hardware security module (HSM) in an AWS CloudHSM
// cluster.
type Hsm struct {
	_ struct{} `type:"structure"`

	// The Availability Zone that contains the HSM.
	AvailabilityZone *string `type:"string"`

	// The identifier (ID) of the cluster that contains the HSM.
	ClusterId *string `type:"string"`

	// The identifier (ID) of the HSM's elastic network interface (ENI).
	EniId *string `type:"string"`

	// The IP address of the HSM's elastic network interface (ENI).
	EniIp *string `type:"string"`

	// The HSM's identifier (ID).
	//
	// HsmId is a required field
	HsmId *string `type:"string" required:"true"`

	// The HSM's state.
	State HsmState `type:"string" enum:"true"`

	// A description of the HSM's state.
	StateMessage *string `type:"string"`

	// The subnet that contains the HSM's elastic network interface (ENI).
	SubnetId *string `type:"string"`
}

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

// Contains a tag. A tag is a key-value pair.
type Tag struct {
	_ struct{} `type:"structure"`

	// The key of the tag.
	//
	// Key is a required field
	Key *string `min:"1" type:"string" required:"true"`

	// The value of the tag.
	//
	// Value is a required field
	Value *string `type:"string" required:"true"`
}

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

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

	if s.Key == nil {
		invalidParams.Add(aws.NewErrParamRequired("Key"))
	}
	if s.Key != nil && len(*s.Key) < 1 {
		invalidParams.Add(aws.NewErrParamMinLen("Key", 1))
	}

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

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