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

package types

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

// The address that you want the Snow device(s) associated with a specific job to
// be shipped to. Addresses are validated at the time of creation. The address you
// provide must be located within the serviceable area of your region. Although no
// individual elements of the Address are required, if the address is invalid or
// unsupported, then an exception is thrown.
type Address struct {

	// The unique ID for an address.
	AddressId *string

	// The city in an address that a Snow device is to be delivered to.
	City *string

	// The name of the company to receive a Snow device at an address.
	Company *string

	// The country in an address that a Snow device is to be delivered to.
	Country *string

	// If the address you are creating is a primary address, then set this option to
	// true. This field is not supported in most regions.
	IsRestricted bool

	// This field is no longer used and the value is ignored.
	Landmark *string

	// The name of a person to receive a Snow device at an address.
	Name *string

	// The phone number associated with an address that a Snow device is to be
	// delivered to.
	PhoneNumber *string

	// The postal code in an address that a Snow device is to be delivered to.
	PostalCode *string

	// This field is no longer used and the value is ignored.
	PrefectureOrDistrict *string

	// The state or province in an address that a Snow device is to be delivered to.
	StateOrProvince *string

	// The first line in a street address that a Snow device is to be delivered to.
	Street1 *string

	// The second line in a street address that a Snow device is to be delivered to.
	Street2 *string

	// The third line in a street address that a Snow device is to be delivered to.
	Street3 *string

	// Differentiates between delivery address and pickup address in the customer
	// account. Provided at job creation.
	Type AddressType

	noSmithyDocumentSerde
}

// Contains a cluster's state, a cluster's ID, and other important information.
type ClusterListEntry struct {

	// The 39-character ID for the cluster that you want to list, for example
	// CID123e4567-e89b-12d3-a456-426655440000 .
	ClusterId *string

	// The current state of this cluster. For information about the state of a
	// specific node, see JobListEntry$JobState .
	ClusterState ClusterState

	// The creation date for this cluster.
	CreationDate *time.Time

	// Defines an optional description of the cluster, for example Environmental Data
	// Cluster-01 .
	Description *string

	noSmithyDocumentSerde
}

// Contains metadata about a specific cluster.
type ClusterMetadata struct {

	// The automatically generated ID for a specific address.
	AddressId *string

	// The automatically generated ID for a cluster.
	ClusterId *string

	// The current status of the cluster.
	ClusterState ClusterState

	// The creation date for this cluster.
	CreationDate *time.Time

	// The optional description of the cluster.
	Description *string

	// The ID of the address that you want a cluster shipped to, after it will be
	// shipped to its primary address. This field is not supported in most regions.
	ForwardingAddressId *string

	// The type of job for this cluster. Currently, the only job type supported for
	// clusters is LOCAL_USE .
	JobType JobType

	// The KmsKeyARN Amazon Resource Name (ARN) associated with this cluster. This ARN
	// was created using the CreateKey (https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)
	// API action in Key Management Service (KMS.
	KmsKeyARN *string

	// The Amazon Simple Notification Service (Amazon SNS) notification settings for
	// this cluster.
	Notification *Notification

	// Represents metadata and configuration settings for services on an Amazon Web
	// Services Snow Family device.
	OnDeviceServiceConfiguration *OnDeviceServiceConfiguration

	// The arrays of JobResource objects that can include updated S3Resource objects
	// or LambdaResource objects.
	Resources *JobResource

	// The role ARN associated with this cluster. This ARN was created using the
	// CreateRole (https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html)
	// API action in Identity and Access Management (IAM).
	RoleARN *string

	// The shipping speed for each node in this cluster. This speed doesn't dictate
	// how soon you'll get each device, rather it represents how quickly each device
	// moves to its destination while in transit. Regional shipping speeds are as
	// follows:
	//   - In Australia, you have access to express shipping. Typically, devices
	//   shipped express are delivered in about a day.
	//   - In the European Union (EU), you have access to express shipping. Typically,
	//   Snow devices shipped express are delivered in about a day. In addition, most
	//   countries in the EU have access to standard shipping, which typically takes less
	//   than a week, one way.
	//   - In India, Snow devices are delivered in one to seven days.
	//   - In the US, you have access to one-day shipping and two-day shipping.
	ShippingOption ShippingOption

	// The type of Snowcone device to use for this cluster. For cluster jobs, Amazon
	// Web Services Snow Family currently supports only the EDGE device type.
	SnowballType SnowballType

	// The tax documents required in your Amazon Web Services Region.
	TaxDocuments *TaxDocuments

	noSmithyDocumentSerde
}

// A JSON-formatted object that describes a compatible Amazon Machine Image (AMI),
// including the ID and name for a Snow device AMI. This AMI is compatible with the
// device's physical hardware requirements, and it should be able to be run in an
// SBE1 instance on the device.
type CompatibleImage struct {

	// The unique identifier for an individual Snow device AMI.
	AmiId *string

	// The optional name of a compatible image.
	Name *string

	noSmithyDocumentSerde
}

// Defines the real-time status of a Snow device's data transfer while the device
// is at Amazon Web Services. This data is only available while a job has a
// JobState value of InProgress , for both import and export jobs.
type DataTransfer struct {

	// The number of bytes transferred between a Snow device and Amazon S3.
	BytesTransferred int64

	// The number of objects transferred between a Snow device and Amazon S3.
	ObjectsTransferred int64

	// The total bytes of data for a transfer between a Snow device and Amazon S3.
	// This value is set to 0 (zero) until all the keys that will be transferred have
	// been listed.
	TotalBytes int64

	// The total number of objects for a transfer between a Snow device and Amazon S3.
	// This value is set to 0 (zero) until all the keys that will be transferred have
	// been listed.
	TotalObjects int64

	noSmithyDocumentSerde
}

// The name and version of the service dependant on the requested service.
type DependentService struct {

	// The name of the dependent service.
	ServiceName ServiceName

	// The version of the dependent service.
	ServiceVersion *ServiceVersion

	noSmithyDocumentSerde
}

// The container for SnowconeDeviceConfiguration .
type DeviceConfiguration struct {

	// Returns information about the device configuration for an Snowcone job.
	SnowconeDeviceConfiguration *SnowconeDeviceConfiguration

	noSmithyDocumentSerde
}

// A JSON-formatted object that contains the IDs for an Amazon Machine Image
// (AMI), including the Amazon EC2-compatible AMI ID and the Snow device AMI ID.
// Each AMI has these two IDs to simplify identifying the AMI in both the Amazon
// Web Services Cloud and on the device.
type Ec2AmiResource struct {

	// The ID of the AMI in Amazon EC2.
	//
	// This member is required.
	AmiId *string

	// The ID of the AMI on the Snow device.
	SnowballAmiId *string

	noSmithyDocumentSerde
}

// An object representing the metadata and configuration settings of EKS Anywhere
// on the Snow Family device.
type EKSOnDeviceServiceConfiguration struct {

	// The version of EKS Anywhere on the Snow Family device.
	EKSAnywhereVersion *string

	// The Kubernetes version for EKS Anywhere on the Snow Family device.
	KubernetesVersion *string

	noSmithyDocumentSerde
}

// The container for the EventTriggerDefinition$EventResourceARN .
type EventTriggerDefinition struct {

	// The Amazon Resource Name (ARN) for any local Amazon S3 resource that is an
	// Lambda function's event trigger associated with this job.
	EventResourceARN *string

	noSmithyDocumentSerde
}

// The tax documents required in Amazon Web Services Region in India.
type INDTaxDocuments struct {

	// The Goods and Services Tax (GST) documents required in Amazon Web Services
	// Region in India.
	GSTIN *string

	noSmithyDocumentSerde
}

// Each JobListEntry object contains a job's state, a job's ID, and a value that
// indicates whether the job is a job part, in the case of an export job.
type JobListEntry struct {

	// The creation date for this job.
	CreationDate *time.Time

	// The optional description of this specific job, for example Important Photos
	// 2016-08-11 .
	Description *string

	// A value that indicates that this job is a main job. A main job represents a
	// successful request to create an export job. Main jobs aren't associated with any
	// Snowballs. Instead, each main job will have at least one job part, and each job
	// part is associated with a Snowball. It might take some time before the job parts
	// associated with a particular main job are listed, because they are created after
	// the main job is created.
	IsMaster bool

	// The automatically generated ID for a job, for example
	// JID123e4567-e89b-12d3-a456-426655440000 .
	JobId *string

	// The current state of this job.
	JobState JobState

	// The type of job.
	JobType JobType

	// The type of device used with this job.
	SnowballType SnowballType

	noSmithyDocumentSerde
}

// Contains job logs. Whenever a Snow device is used to import data into or export
// data out of Amazon S3, you'll have the option of downloading a PDF job report.
// Job logs are returned as a part of the response syntax of the DescribeJob
// action in the JobMetadata data type. The job logs can be accessed for up to 60
// minutes after this request has been made. To access any of the job logs after 60
// minutes have passed, you'll have to make another call to the DescribeJob
// action. For import jobs, the PDF job report becomes available at the end of the
// import process. For export jobs, your job report typically becomes available
// while the Snow device for your job part is being delivered to you. The job
// report provides you insight into the state of your Amazon S3 data transfer. The
// report includes details about your job or job part for your records. For deeper
// visibility into the status of your transferred objects, you can look at the two
// associated logs: a success log and a failure log. The logs are saved in
// comma-separated value (CSV) format, and the name of each log includes the ID of
// the job or job part that the log describes.
type JobLogs struct {

	// A link to an Amazon S3 presigned URL where the job completion report is located.
	JobCompletionReportURI *string

	// A link to an Amazon S3 presigned URL where the job failure log is located.
	JobFailureLogURI *string

	// A link to an Amazon S3 presigned URL where the job success log is located.
	JobSuccessLogURI *string

	noSmithyDocumentSerde
}

// Contains information about a specific job including shipping information, job
// status, and other important metadata. This information is returned as a part of
// the response syntax of the DescribeJob action.
type JobMetadata struct {

	// The ID for the address that you want the Snow device shipped to.
	AddressId *string

	// The 39-character ID for the cluster, for example
	// CID123e4567-e89b-12d3-a456-426655440000 .
	ClusterId *string

	// The creation date for this job.
	CreationDate *time.Time

	// A value that defines the real-time status of a Snow device's data transfer
	// while the device is at Amazon Web Services. This data is only available while a
	// job has a JobState value of InProgress , for both import and export jobs.
	DataTransferProgress *DataTransfer

	// The description of the job, provided at job creation.
	Description *string

	// The container for SnowconeDeviceConfiguration .
	DeviceConfiguration *DeviceConfiguration

	// The ID of the address that you want a job shipped to, after it will be shipped
	// to its primary address. This field is not supported in most regions.
	ForwardingAddressId *string

	// The highest impact level of data that will be stored or processed on the
	// device, provided at job creation.
	ImpactLevel ImpactLevel

	// The automatically generated ID for a job, for example
	// JID123e4567-e89b-12d3-a456-426655440000 .
	JobId *string

	// Links to Amazon S3 presigned URLs for the job report and logs. For import jobs,
	// the PDF job report becomes available at the end of the import process. For
	// export jobs, your job report typically becomes available while the Snow device
	// for your job part is being delivered to you.
	JobLogInfo *JobLogs

	// The current status of the jobs.
	JobState JobState

	// The type of job.
	JobType JobType

	// The Amazon Resource Name (ARN) for the Key Management Service (KMS) key
	// associated with this job. This ARN was created using the CreateKey (https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)
	// API action in KMS.
	KmsKeyARN *string

	// The ID of the long-term pricing type for the device.
	LongTermPricingId *string

	// The Amazon Simple Notification Service (Amazon SNS) notification settings
	// associated with a specific job. The Notification object is returned as a part
	// of the response syntax of the DescribeJob action in the JobMetadata data type.
	Notification *Notification

	// Represents metadata and configuration settings for services on an Amazon Web
	// Services Snow Family device.
	OnDeviceServiceConfiguration *OnDeviceServiceConfiguration

	// Information identifying the person picking up the device.
	PickupDetails *PickupDetails

	// Allows you to securely operate and manage Snowcone devices remotely from
	// outside of your internal network. When set to INSTALLED_AUTOSTART , remote
	// management will automatically be available when the device arrives at your
	// location. Otherwise, you need to use the Snowball Client to manage the device.
	RemoteManagement RemoteManagement

	// An array of S3Resource objects. Each S3Resource object represents an Amazon S3
	// bucket that your transferred data will be exported from or imported into.
	Resources *JobResource

	// The role ARN associated with this job. This ARN was created using the CreateRole (https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html)
	// API action in Identity and Access Management.
	RoleARN *string

	// A job's shipping information, including inbound and outbound tracking numbers
	// and shipping speed options.
	ShippingDetails *ShippingDetails

	// The Snow device capacity preference for this job, specified at job creation. In
	// US regions, you can choose between 50 TB and 80 TB Snowballs. All other regions
	// use 80 TB capacity Snowballs. For more information, see
	// "https://docs.aws.amazon.com/snowball/latest/snowcone-guide/snow-device-types.html"
	// (Snow Family Devices and Capacity) in the Snowcone User Guide or
	// "https://docs.aws.amazon.com/snowball/latest/developer-guide/snow-device-types.html"
	// (Snow Family Devices and Capacity) in the Snowcone User Guide.
	SnowballCapacityPreference SnowballCapacity

	// Unique ID associated with a device.
	SnowballId *string

	// The type of device used with this job.
	SnowballType SnowballType

	// The metadata associated with the tax documents required in your Amazon Web
	// Services Region.
	TaxDocuments *TaxDocuments

	noSmithyDocumentSerde
}

// Contains an array of Amazon Web Services resource objects. Each object
// represents an Amazon S3 bucket, an Lambda function, or an Amazon Machine Image
// (AMI) based on Amazon EC2 that is associated with a particular job.
type JobResource struct {

	// The Amazon Machine Images (AMIs) associated with this job.
	Ec2AmiResources []Ec2AmiResource

	// The Python-language Lambda functions for this job.
	LambdaResources []LambdaResource

	// An array of S3Resource objects.
	S3Resources []S3Resource

	noSmithyDocumentSerde
}

// Contains a key range. For export jobs, a S3Resource object can have an optional
// KeyRange value. The length of the range is defined at job creation, and has
// either an inclusive BeginMarker , an inclusive EndMarker , or both. Ranges are
// UTF-8 binary sorted.
type KeyRange struct {

	// The key that starts an optional key range for an export job. Ranges are
	// inclusive and UTF-8 binary sorted.
	BeginMarker *string

	// The key that ends an optional key range for an export job. Ranges are inclusive
	// and UTF-8 binary sorted.
	EndMarker *string

	noSmithyDocumentSerde
}

// Identifies
type LambdaResource struct {

	// The array of ARNs for S3Resource objects to trigger the LambdaResource objects
	// associated with this job.
	EventTriggers []EventTriggerDefinition

	// An Amazon Resource Name (ARN) that represents an Lambda function to be
	// triggered by PUT object actions on the associated local Amazon S3 resource.
	LambdaArn *string

	noSmithyDocumentSerde
}

// Each LongTermPricingListEntry object contains information about a long-term
// pricing type.
type LongTermPricingListEntry struct {

	// The current active jobs on the device the long-term pricing type.
	CurrentActiveJob *string

	// If set to true , specifies that the current long-term pricing type for the
	// device should be automatically renewed before the long-term pricing contract
	// expires.
	IsLongTermPricingAutoRenew *bool

	// The IDs of the jobs that are associated with a long-term pricing type.
	JobIds []string

	// The end date the long-term pricing contract.
	LongTermPricingEndDate *time.Time

	// The ID of the long-term pricing type for the device.
	LongTermPricingId *string

	// The start date of the long-term pricing contract.
	LongTermPricingStartDate *time.Time

	// The status of the long-term pricing type.
	LongTermPricingStatus *string

	// The type of long-term pricing that was selected for the device.
	LongTermPricingType LongTermPricingType

	// A new device that replaces a device that is ordered with long-term pricing.
	ReplacementJob *string

	// The type of Snow Family devices associated with this long-term pricing job.
	SnowballType SnowballType

	noSmithyDocumentSerde
}

// An object that represents the metadata and configuration settings for the NFS
// (Network File System) service on an Amazon Web Services Snow Family device.
type NFSOnDeviceServiceConfiguration struct {

	// The maximum NFS storage for one Snow Family device.
	StorageLimit int32

	// The scale unit of the NFS storage on the device. Valid values: TB.
	StorageUnit StorageUnit

	noSmithyDocumentSerde
}

// The Amazon Simple Notification Service (Amazon SNS) notification settings
// associated with a specific job. The Notification object is returned as a part
// of the response syntax of the DescribeJob action in the JobMetadata data type.
// When the notification settings are defined during job creation, you can choose
// to notify based on a specific set of job states using the JobStatesToNotify
// array of strings, or you can specify that you want to have Amazon SNS
// notifications sent out for all job states with NotifyAll set to true.
type Notification struct {

	// Used to send SNS notifications for the person picking up the device (identified
	// during job creation).
	DevicePickupSnsTopicARN *string

	// The list of job states that will trigger a notification for this job.
	JobStatesToNotify []JobState

	// Any change in job state will trigger a notification for this job.
	NotifyAll bool

	// The new SNS TopicArn that you want to associate with this job. You can create
	// Amazon Resource Names (ARNs) for topics by using the CreateTopic (https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)
	// Amazon SNS API action. You can subscribe email addresses to an Amazon SNS topic
	// through the Amazon Web Services Management Console, or by using the Subscribe (https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html)
	// Amazon Simple Notification Service (Amazon SNS) API action.
	SnsTopicARN *string

	noSmithyDocumentSerde
}

// An object that represents the metadata and configuration settings for services
// on an Amazon Web Services Snow Family device.
type OnDeviceServiceConfiguration struct {

	// The configuration of EKS Anywhere on the Snow Family device.
	EKSOnDeviceService *EKSOnDeviceServiceConfiguration

	// Represents the NFS (Network File System) service on a Snow Family device.
	NFSOnDeviceService *NFSOnDeviceServiceConfiguration

	// Configuration for Amazon S3 compatible storage on Snow family devices.
	S3OnDeviceService *S3OnDeviceServiceConfiguration

	// Represents the Storage Gateway service Tape Gateway type on a Snow Family
	// device.
	TGWOnDeviceService *TGWOnDeviceServiceConfiguration

	noSmithyDocumentSerde
}

// Information identifying the person picking up the device.
type PickupDetails struct {

	// The unique ID for a device that will be picked up.
	DevicePickupId *string

	// The email address of the person picking up the device.
	Email *string

	// Expiration date of the credential identifying the person picking up the device.
	IdentificationExpirationDate *time.Time

	// Organization that issued the credential identifying the person picking up the
	// device.
	IdentificationIssuingOrg *string

	// The number on the credential identifying the person picking up the device.
	IdentificationNumber *string

	// The name of the person picking up the device.
	Name *string

	// The phone number of the person picking up the device.
	PhoneNumber *string

	noSmithyDocumentSerde
}

// Amazon S3 compatible storage on Snow family devices configuration items.
type S3OnDeviceServiceConfiguration struct {

	// >Fault tolerance level of the cluster. This indicates the number of nodes that
	// can go down without degrading the performance of the cluster. This additional
	// input helps when the specified StorageLimit matches more than one Amazon S3
	// compatible storage on Snow family devices service configuration.
	FaultTolerance *int32

	// Applicable when creating a cluster. Specifies how many nodes are needed for
	// Amazon S3 compatible storage on Snow family devices. If specified, the other
	// input can be omitted.
	ServiceSize *int32

	// If the specified storage limit value matches storage limit of one of the
	// defined configurations, that configuration will be used. If the specified
	// storage limit value does not match any defined configuration, the request will
	// fail. If more than one configuration has the same storage limit as specified,
	// the other input need to be provided.
	StorageLimit *float64

	// Storage unit. Currently the only supported unit is TB.
	StorageUnit StorageUnit

	noSmithyDocumentSerde
}

// Each S3Resource object represents an Amazon S3 bucket that your transferred
// data will be exported from or imported into. For export jobs, this object can
// have an optional KeyRange value. The length of the range is defined at job
// creation, and has either an inclusive BeginMarker , an inclusive EndMarker , or
// both. Ranges are UTF-8 binary sorted.
type S3Resource struct {

	// The Amazon Resource Name (ARN) of an Amazon S3 bucket.
	BucketArn *string

	// For export jobs, you can provide an optional KeyRange within a specific Amazon
	// S3 bucket. The length of the range is defined at job creation, and has either an
	// inclusive BeginMarker , an inclusive EndMarker , or both. Ranges are UTF-8
	// binary sorted.
	KeyRange *KeyRange

	// Specifies the service or services on the Snow Family device that your
	// transferred data will be exported from or imported into. Amazon Web Services
	// Snow Family supports Amazon S3 and NFS (Network File System).
	TargetOnDeviceServices []TargetOnDeviceService

	noSmithyDocumentSerde
}

// The version of the requested service.
type ServiceVersion struct {

	// The version number of the requested service.
	Version *string

	noSmithyDocumentSerde
}

// The Status and TrackingNumber information for an inbound or outbound shipment.
type Shipment struct {

	// Status information for a shipment.
	Status *string

	// The tracking number for this job. Using this tracking number with your region's
	// carrier's website, you can track a Snow device as the carrier transports it. For
	// India, the carrier is Amazon Logistics. For all other regions, UPS is the
	// carrier.
	TrackingNumber *string

	noSmithyDocumentSerde
}

// A job's shipping information, including inbound and outbound tracking numbers
// and shipping speed options.
type ShippingDetails struct {

	// The Status and TrackingNumber values for a Snow device being returned to Amazon
	// Web Services for a particular job.
	InboundShipment *Shipment

	// The Status and TrackingNumber values for a Snow device being delivered to the
	// address that you specified for a particular job.
	OutboundShipment *Shipment

	// The shipping speed for a particular job. This speed doesn't dictate how soon
	// you'll get the Snow device from the job's creation date. This speed represents
	// how quickly it moves to its destination while in transit. Regional shipping
	// speeds are as follows:
	//   - In Australia, you have access to express shipping. Typically, Snow devices
	//   shipped express are delivered in about a day.
	//   - In the European Union (EU), you have access to express shipping. Typically,
	//   Snow devices shipped express are delivered in about a day. In addition, most
	//   countries in the EU have access to standard shipping, which typically takes less
	//   than a week, one way.
	//   - In India, Snow devices are delivered in one to seven days.
	//   - In the United States of America (US), you have access to one-day shipping
	//   and two-day shipping.
	ShippingOption ShippingOption

	noSmithyDocumentSerde
}

// Specifies the device configuration for an Snowcone job.
type SnowconeDeviceConfiguration struct {

	// Configures the wireless connection for the Snowcone device.
	WirelessConnection *WirelessConnection

	noSmithyDocumentSerde
}

// An object that represents the service or services on the Snow Family device
// that your transferred data will be exported from or imported into. Amazon Web
// Services Snow Family supports Amazon S3 and NFS (Network File System).
type TargetOnDeviceService struct {

	// Specifies the name of the service on the Snow Family device that your
	// transferred data will be exported from or imported into.
	ServiceName DeviceServiceName

	// Specifies whether the data is being imported or exported. You can import or
	// export the data, or use it locally on the device.
	TransferOption TransferOption

	noSmithyDocumentSerde
}

// The tax documents required in your Amazon Web Services Region.
type TaxDocuments struct {

	// The tax documents required in Amazon Web Services Region in India.
	IND *INDTaxDocuments

	noSmithyDocumentSerde
}

// An object that represents the metadata and configuration settings for the
// Storage Gateway service Tape Gateway type on an Amazon Web Services Snow Family
// device.
type TGWOnDeviceServiceConfiguration struct {

	// The maximum number of virtual tapes to store on one Snow Family device. Due to
	// physical resource limitations, this value must be set to 80 for Snowball Edge.
	StorageLimit int32

	// The scale unit of the virtual tapes on the device.
	StorageUnit StorageUnit

	noSmithyDocumentSerde
}

// Configures the wireless connection on an Snowcone device.
type WirelessConnection struct {

	// Enables the Wi-Fi adapter on an Snowcone device.
	IsWifiEnabled bool

	noSmithyDocumentSerde
}

type noSmithyDocumentSerde = smithydocument.NoSerde