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

package devicefarm

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

// A container for account-level settings within AWS Device Farm.
type AccountSettings struct {
	_ struct{} `type:"structure"`

	// The AWS account number specified in the AccountSettings container.
	AwsAccountNumber *string `locationName:"awsAccountNumber" min:"2" type:"string"`

	// The default number of minutes (at the account level) a test run will execute
	// before it times out. The default value is 150 minutes.
	DefaultJobTimeoutMinutes *int64 `locationName:"defaultJobTimeoutMinutes" type:"integer"`

	// The maximum number of minutes a test run will execute before it times out.
	MaxJobTimeoutMinutes *int64 `locationName:"maxJobTimeoutMinutes" type:"integer"`

	// The maximum number of device slots that the AWS account can purchase. Each
	// maximum is expressed as an offering-id:number pair, where the offering-id
	// represents one of the IDs returned by the ListOfferings command.
	MaxSlots map[string]int64 `locationName:"maxSlots" type:"map"`

	// When set to true, for private devices, Device Farm will not sign your app
	// again. For public devices, Device Farm always signs your apps again and this
	// parameter has no effect.
	//
	// For more information about how Device Farm re-signs your app(s), see Do you
	// modify my app? (https://aws.amazon.com/device-farm/faq/) in the AWS Device
	// Farm FAQs.
	SkipAppResign *bool `locationName:"skipAppResign" type:"boolean"`

	// Information about an AWS account's usage of free trial device minutes.
	TrialMinutes *TrialMinutes `locationName:"trialMinutes" type:"structure"`

	// Returns the unmetered devices you have purchased or want to purchase.
	UnmeteredDevices map[string]int64 `locationName:"unmeteredDevices" type:"map"`

	// Returns the unmetered remote access devices you have purchased or want to
	// purchase.
	UnmeteredRemoteAccessDevices map[string]int64 `locationName:"unmeteredRemoteAccessDevices" type:"map"`
}

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

// Represents the output of a test. Examples of artifacts include logs and screenshots.
type Artifact struct {
	_ struct{} `type:"structure"`

	// The artifact's ARN.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// The artifact's file extension.
	Extension *string `locationName:"extension" type:"string"`

	// The artifact's name.
	Name *string `locationName:"name" type:"string"`

	// The artifact's type.
	//
	// Allowed values include the following:
	//
	//    * UNKNOWN: An unknown type.
	//
	//    * SCREENSHOT: The screenshot type.
	//
	//    * DEVICE_LOG: The device log type.
	//
	//    * MESSAGE_LOG: The message log type.
	//
	//    * VIDEO_LOG: The video log type.
	//
	//    * RESULT_LOG: The result log type.
	//
	//    * SERVICE_LOG: The service log type.
	//
	//    * WEBKIT_LOG: The web kit log type.
	//
	//    * INSTRUMENTATION_OUTPUT: The instrumentation type.
	//
	//    * EXERCISER_MONKEY_OUTPUT: For Android, the artifact (log) generated by
	//    an Android fuzz test.
	//
	//    * CALABASH_JSON_OUTPUT: The Calabash JSON output type.
	//
	//    * CALABASH_PRETTY_OUTPUT: The Calabash pretty output type.
	//
	//    * CALABASH_STANDARD_OUTPUT: The Calabash standard output type.
	//
	//    * CALABASH_JAVA_XML_OUTPUT: The Calabash Java XML output type.
	//
	//    * AUTOMATION_OUTPUT: The automation output type.
	//
	//    * APPIUM_SERVER_OUTPUT: The Appium server output type.
	//
	//    * APPIUM_JAVA_OUTPUT: The Appium Java output type.
	//
	//    * APPIUM_JAVA_XML_OUTPUT: The Appium Java XML output type.
	//
	//    * APPIUM_PYTHON_OUTPUT: The Appium Python output type.
	//
	//    * APPIUM_PYTHON_XML_OUTPUT: The Appium Python XML output type.
	//
	//    * EXPLORER_EVENT_LOG: The Explorer event log output type.
	//
	//    * EXPLORER_SUMMARY_LOG: The Explorer summary log output type.
	//
	//    * APPLICATION_CRASH_REPORT: The application crash report output type.
	//
	//    * XCTEST_LOG: The Xcode test output type.
	//
	//    * VIDEO: The Video output type.
	//
	//    * CUSTOMER_ARTIFACT:The Customer Artifact output type.
	//
	//    * CUSTOMER_ARTIFACT_LOG: The Customer Artifact Log output type.
	//
	//    * TESTSPEC_OUTPUT: The Test Spec Output type.
	Type ArtifactType `locationName:"type" type:"string" enum:"true"`

	// The pre-signed Amazon S3 URL that can be used with a corresponding GET request
	// to download the artifact's file.
	Url *string `locationName:"url" type:"string"`
}

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

// Represents the amount of CPU that an app is using on a physical device.
//
// Note that this does not represent system-wide CPU usage.
type CPU struct {
	_ struct{} `type:"structure"`

	// The CPU's architecture, for example x86 or ARM.
	Architecture *string `locationName:"architecture" type:"string"`

	// The clock speed of the device's CPU, expressed in hertz (Hz). For example,
	// a 1.2 GHz CPU is expressed as 1200000000.
	Clock *float64 `locationName:"clock" type:"double"`

	// The CPU's frequency.
	Frequency *string `locationName:"frequency" type:"string"`
}

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

// Represents entity counters.
type Counters struct {
	_ struct{} `type:"structure"`

	// The number of errored entities.
	Errored *int64 `locationName:"errored" type:"integer"`

	// The number of failed entities.
	Failed *int64 `locationName:"failed" type:"integer"`

	// The number of passed entities.
	Passed *int64 `locationName:"passed" type:"integer"`

	// The number of skipped entities.
	Skipped *int64 `locationName:"skipped" type:"integer"`

	// The number of stopped entities.
	Stopped *int64 `locationName:"stopped" type:"integer"`

	// The total number of entities.
	Total *int64 `locationName:"total" type:"integer"`

	// The number of warned entities.
	Warned *int64 `locationName:"warned" type:"integer"`
}

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

// Configuration settings for a remote access session, including billing method.
type CreateRemoteAccessSessionConfiguration struct {
	_ struct{} `type:"structure"`

	// The billing method for the remote access session.
	BillingMethod BillingMethod `locationName:"billingMethod" type:"string" enum:"true"`

	// An array of Amazon Resource Names (ARNs) included in the VPC endpoint configuration.
	VpceConfigurationArns []string `locationName:"vpceConfigurationArns" type:"list"`
}

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

// A JSON object specifying the paths where the artifacts generated by the customer's
// tests, on the device or in the test environment, will be pulled from.
//
// Specify deviceHostPaths and optionally specify either iosPaths or androidPaths.
//
// For web app tests, you can specify both iosPaths and androidPaths.
type CustomerArtifactPaths struct {
	_ struct{} `type:"structure"`

	// Comma-separated list of paths on the Android device where the artifacts generated
	// by the customer's tests will be pulled from.
	AndroidPaths []string `locationName:"androidPaths" type:"list"`

	// Comma-separated list of paths in the test execution environment where the
	// artifacts generated by the customer's tests will be pulled from.
	DeviceHostPaths []string `locationName:"deviceHostPaths" type:"list"`

	// Comma-separated list of paths on the iOS device where the artifacts generated
	// by the customer's tests will be pulled from.
	IosPaths []string `locationName:"iosPaths" type:"list"`
}

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

// Represents a device type that an app is tested against.
type Device struct {
	_ struct{} `type:"structure"`

	// The device's ARN.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// Reflects how likely a device will be available for a test run. It is currently
	// available in the ListDevices and GetDevice API methods.
	Availability DeviceAvailability `locationName:"availability" type:"string" enum:"true"`

	// The device's carrier.
	Carrier *string `locationName:"carrier" type:"string"`

	// Information about the device's CPU.
	Cpu *CPU `locationName:"cpu" type:"structure"`

	// The name of the fleet to which this device belongs.
	FleetName *string `locationName:"fleetName" type:"string"`

	// The type of fleet to which this device belongs. Possible values for fleet
	// type are PRIVATE and PUBLIC.
	FleetType *string `locationName:"fleetType" type:"string"`

	// The device's form factor.
	//
	// Allowed values include:
	//
	//    * PHONE: The phone form factor.
	//
	//    * TABLET: The tablet form factor.
	FormFactor DeviceFormFactor `locationName:"formFactor" type:"string" enum:"true"`

	// The device's heap size, expressed in bytes.
	HeapSize *int64 `locationName:"heapSize" type:"long"`

	// The device's image name.
	Image *string `locationName:"image" type:"string"`

	// The instances belonging to this device.
	Instances []DeviceInstance `locationName:"instances" type:"list"`

	// The device's manufacturer name.
	Manufacturer *string `locationName:"manufacturer" type:"string"`

	// The device's total memory size, expressed in bytes.
	Memory *int64 `locationName:"memory" type:"long"`

	// The device's model name.
	Model *string `locationName:"model" type:"string"`

	// The device's model ID.
	ModelId *string `locationName:"modelId" type:"string"`

	// The device's display name.
	Name *string `locationName:"name" type:"string"`

	// The device's operating system type.
	Os *string `locationName:"os" type:"string"`

	// The device's platform.
	//
	// Allowed values include:
	//
	//    * ANDROID: The Android platform.
	//
	//    * IOS: The iOS platform.
	Platform DevicePlatform `locationName:"platform" type:"string" enum:"true"`

	// The device's radio.
	Radio *string `locationName:"radio" type:"string"`

	// Specifies whether remote access has been enabled for the specified device.
	RemoteAccessEnabled *bool `locationName:"remoteAccessEnabled" type:"boolean"`

	// This flag is set to true if remote debugging is enabled for the device.
	//
	// Remote debugging is no longer supported (https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html).
	RemoteDebugEnabled *bool `locationName:"remoteDebugEnabled" type:"boolean"`

	// The resolution of the device.
	Resolution *Resolution `locationName:"resolution" type:"structure"`
}

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

// Represents a device filter used to select a set of devices to be included
// in a test run. This data structure is passed in as the deviceSelectionConfiguration
// parameter to ScheduleRun. For an example of the JSON request syntax, see
// ScheduleRun.
//
// It is also passed in as the filters parameter to ListDevices. For an example
// of the JSON request syntax, see ListDevices.
type DeviceFilter struct {
	_ struct{} `type:"structure"`

	// The aspect of a device such as platform or model used as the selection criteria
	// in a device filter.
	//
	// The supported operators for each attribute are provided in the following
	// list.
	//
	// ARN
	//
	// The Amazon Resource Name (ARN) of the device. For example, "arn:aws:devicefarm:us-west-2::device:12345Example".
	//
	// Supported operators: EQUALS, IN, NOT_IN
	//
	// PLATFORM
	//
	// The device platform. Valid values are "ANDROID" or "IOS".
	//
	// Supported operators: EQUALS
	//
	// OS_VERSION
	//
	// The operating system version. For example, "10.3.2".
	//
	// Supported operators: EQUALS, GREATER_THAN, GREATER_THAN_OR_EQUALS, IN, LESS_THAN,
	// LESS_THAN_OR_EQUALS, NOT_IN
	//
	// MODEL
	//
	// The device model. For example, "iPad 5th Gen".
	//
	// Supported operators: CONTAINS, EQUALS, IN, NOT_IN
	//
	// AVAILABILITY
	//
	// The current availability of the device. Valid values are "AVAILABLE", "HIGHLY_AVAILABLE",
	// "BUSY", or "TEMPORARY_NOT_AVAILABLE".
	//
	// Supported operators: EQUALS
	//
	// FORM_FACTOR
	//
	// The device form factor. Valid values are "PHONE" or "TABLET".
	//
	// Supported operators: EQUALS
	//
	// MANUFACTURER
	//
	// The device manufacturer. For example, "Apple".
	//
	// Supported operators: EQUALS, IN, NOT_IN
	//
	// REMOTE_ACCESS_ENABLED
	//
	// Whether the device is enabled for remote access. Valid values are "TRUE"
	// or "FALSE".
	//
	// Supported operators: EQUALS
	//
	// REMOTE_DEBUG_ENABLED
	//
	// Ignored.Whether the device is enabled for remote debugging. Valid values
	// are "TRUE" or "FALSE".
	//
	// Supported operators: EQUALS
	//
	// This filter will be ignored, as remote debugging is no longer supported (https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html).
	//
	// INSTANCE_ARN
	//
	// The Amazon Resource Name (ARN) of the device instance.
	//
	// Supported operators: EQUALS, IN, NOT_IN
	//
	// INSTANCE_LABELS
	//
	// The label of the device instance.
	//
	// Supported operators: CONTAINS
	//
	// FLEET_TYPE
	//
	// The fleet type. Valid values are "PUBLIC" or "PRIVATE".
	//
	// Supported operators: EQUALS
	Attribute DeviceFilterAttribute `locationName:"attribute" type:"string" enum:"true"`

	// Specifies how Device Farm compares the filter's attribute to the value. For
	// the operators that are supported by each attribute, see the attribute descriptions.
	Operator RuleOperator `locationName:"operator" type:"string" enum:"true"`

	// An array of one or more filter values used in a device filter.
	//
	// Operator Values
	//
	//    * The IN and NOT_IN operators can take a values array that has more than
	//    one element.
	//
	//    * The other operators require an array with a single element.
	//
	// Attribute Values
	//
	//    * The PLATFORM attribute can be set to "ANDROID" or "IOS".
	//
	//    * The AVAILABILITY attribute can be set to "AVAILABLE", "HIGHLY_AVAILABLE",
	//    "BUSY", or "TEMPORARY_NOT_AVAILABLE".
	//
	//    * The FORM_FACTOR attribute can be set to "PHONE" or "TABLET".
	//
	//    * The FLEET_TYPE attribute can be set to "PUBLIC" or "PRIVATE".
	Values []string `locationName:"values" type:"list"`
}

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

// Represents the device instance.
type DeviceInstance struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the device instance.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// The Amazon Resource Name (ARN) of the device.
	DeviceArn *string `locationName:"deviceArn" min:"32" type:"string"`

	// A object containing information about the instance profile.
	InstanceProfile *InstanceProfile `locationName:"instanceProfile" type:"structure"`

	// An array of strings describing the device instance.
	Labels []string `locationName:"labels" type:"list"`

	// The status of the device instance. Valid values are listed below.
	Status InstanceStatus `locationName:"status" type:"string" enum:"true"`

	// Unique device identifier for the device instance.
	Udid *string `locationName:"udid" type:"string"`
}

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

// Represents the total (metered or unmetered) minutes used by the resource
// to run tests. Contains the sum of minutes consumed by all children.
type DeviceMinutes struct {
	_ struct{} `type:"structure"`

	// When specified, represents only the sum of metered minutes used by the resource
	// to run tests.
	Metered *float64 `locationName:"metered" type:"double"`

	// When specified, represents the total minutes used by the resource to run
	// tests.
	Total *float64 `locationName:"total" type:"double"`

	// When specified, represents only the sum of unmetered minutes used by the
	// resource to run tests.
	Unmetered *float64 `locationName:"unmetered" type:"double"`
}

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

// Represents a collection of device types.
type DevicePool struct {
	_ struct{} `type:"structure"`

	// The device pool's ARN.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// The device pool's description.
	Description *string `locationName:"description" type:"string"`

	// The number of devices that Device Farm can add to your device pool. Device
	// Farm adds devices that are available and that meet the criteria that you
	// assign for the rules parameter. Depending on how many devices meet these
	// constraints, your device pool might contain fewer devices than the value
	// for this parameter.
	//
	// By specifying the maximum number of devices, you can control the costs that
	// you incur by running tests.
	MaxDevices *int64 `locationName:"maxDevices" type:"integer"`

	// The device pool's name.
	Name *string `locationName:"name" type:"string"`

	// Information about the device pool's rules.
	Rules []Rule `locationName:"rules" type:"list"`

	// The device pool's type.
	//
	// Allowed values include:
	//
	//    * CURATED: A device pool that is created and managed by AWS Device Farm.
	//
	//    * PRIVATE: A device pool that is created and managed by the device pool
	//    developer.
	Type DevicePoolType `locationName:"type" type:"string" enum:"true"`
}

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

// Represents a device pool compatibility result.
type DevicePoolCompatibilityResult struct {
	_ struct{} `type:"structure"`

	// Whether the result was compatible with the device pool.
	Compatible *bool `locationName:"compatible" type:"boolean"`

	// The device (phone or tablet) that you wish to return information about.
	Device *Device `locationName:"device" type:"structure"`

	// Information about the compatibility.
	IncompatibilityMessages []IncompatibilityMessage `locationName:"incompatibilityMessages" type:"list"`
}

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

// Represents the device filters used in a test run as well as the maximum number
// of devices to be included in the run. It is passed in as the deviceSelectionConfiguration
// request parameter in ScheduleRun.
type DeviceSelectionConfiguration struct {
	_ struct{} `type:"structure"`

	// Used to dynamically select a set of devices for a test run. A filter is made
	// up of an attribute, an operator, and one or more values.
	//
	//    * Attribute The aspect of a device such as platform or model used as the
	//    selection criteria in a device filter. Allowed values include: ARN: The
	//    Amazon Resource Name (ARN) of the device. For example, "arn:aws:devicefarm:us-west-2::device:12345Example".
	//    PLATFORM: The device platform. Valid values are "ANDROID" or "IOS". OS_VERSION:
	//    The operating system version. For example, "10.3.2". MODEL: The device
	//    model. For example, "iPad 5th Gen". AVAILABILITY: The current availability
	//    of the device. Valid values are "AVAILABLE", "HIGHLY_AVAILABLE", "BUSY",
	//    or "TEMPORARY_NOT_AVAILABLE". FORM_FACTOR: The device form factor. Valid
	//    values are "PHONE" or "TABLET". MANUFACTURER: The device manufacturer.
	//    For example, "Apple". REMOTE_ACCESS_ENABLED: Whether the device is enabled
	//    for remote access. Valid values are "TRUE" or "FALSE". REMOTE_DEBUG_ENABLED:
	//    Whether the device is enabled for remote debugging. Valid values are "TRUE"
	//    or "FALSE". This filter will be ignored, as remote debugging is no longer
	//    supported (https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html).
	//    INSTANCE_ARN: The Amazon Resource Name (ARN) of the device instance. INSTANCE_LABELS:
	//    The label of the device instance. FLEET_TYPE: The fleet type. Valid values
	//    are "PUBLIC" or "PRIVATE".
	//
	//    * Operator The filter operator. The EQUALS operator is available for every
	//    attribute except INSTANCE_LABELS. The CONTAINS operator is available for
	//    the INSTANCE_LABELS and MODEL attributes. The IN and NOT_IN operators
	//    are available for the ARN, OS_VERSION, MODEL, MANUFACTURER, and INSTANCE_ARN
	//    attributes. The LESS_THAN, GREATER_THAN, LESS_THAN_OR_EQUALS, and GREATER_THAN_OR_EQUALS
	//    operators are also available for the OS_VERSION attribute.
	//
	//    * Values An array of one or more filter values. Operator Values The IN
	//    and NOT_IN operators can take a values array that has more than one element.
	//    The other operators require an array with a single element. Attribute
	//    Values The PLATFORM attribute can be set to "ANDROID" or "IOS". The AVAILABILITY
	//    attribute can be set to "AVAILABLE", "HIGHLY_AVAILABLE", "BUSY", or "TEMPORARY_NOT_AVAILABLE".
	//    The FORM_FACTOR attribute can be set to "PHONE" or "TABLET". The FLEET_TYPE
	//    attribute can be set to "PUBLIC" or "PRIVATE".
	//
	// Filters is a required field
	Filters []DeviceFilter `locationName:"filters" type:"list" required:"true"`

	// The maximum number of devices to be included in a test run.
	//
	// MaxDevices is a required field
	MaxDevices *int64 `locationName:"maxDevices" type:"integer" required:"true"`
}

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

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

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

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

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

// Contains the run results requested by the device selection configuration
// as well as how many devices were returned. For an example of the JSON response
// syntax, see ScheduleRun.
type DeviceSelectionResult struct {
	_ struct{} `type:"structure"`

	// The filters in a device selection result.
	Filters []DeviceFilter `locationName:"filters" type:"list"`

	// The number of devices that matched the device filter selection criteria.
	MatchedDevicesCount *int64 `locationName:"matchedDevicesCount" type:"integer"`

	// The maximum number of devices to be selected by a device filter and included
	// in a test run.
	MaxDevices *int64 `locationName:"maxDevices" type:"integer"`
}

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

// Represents configuration information about a test run, such as the execution
// timeout (in minutes).
type ExecutionConfiguration struct {
	_ struct{} `type:"structure"`

	// True if account cleanup is enabled at the beginning of the test; otherwise,
	// false.
	AccountsCleanup *bool `locationName:"accountsCleanup" type:"boolean"`

	// True if app package cleanup is enabled at the beginning of the test; otherwise,
	// false.
	AppPackagesCleanup *bool `locationName:"appPackagesCleanup" type:"boolean"`

	// The number of minutes a test run will execute before it times out.
	JobTimeoutMinutes *int64 `locationName:"jobTimeoutMinutes" type:"integer"`

	// When set to true, for private devices, Device Farm will not sign your app
	// again. For public devices, Device Farm always signs your apps again and this
	// parameter has no effect.
	//
	// For more information about how Device Farm re-signs your app(s), see Do you
	// modify my app? (https://aws.amazon.com/device-farm/faq/) in the AWS Device
	// Farm FAQs.
	SkipAppResign *bool `locationName:"skipAppResign" type:"boolean"`

	// Set to true to enable video capture; otherwise, set to false. The default
	// is true.
	VideoCapture *bool `locationName:"videoCapture" type:"boolean"`
}

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

// Represents information about incompatibility.
type IncompatibilityMessage struct {
	_ struct{} `type:"structure"`

	// A message about the incompatibility.
	Message *string `locationName:"message" type:"string"`

	// The type of incompatibility.
	//
	// Allowed values include:
	//
	//    * ARN: The ARN.
	//
	//    * FORM_FACTOR: The form factor (for example, phone or tablet).
	//
	//    * MANUFACTURER: The manufacturer.
	//
	//    * PLATFORM: The platform (for example, Android or iOS).
	//
	//    * REMOTE_ACCESS_ENABLED: Whether the device is enabled for remote access.
	//
	//    * APPIUM_VERSION: The Appium version for the test.
	Type DeviceAttribute `locationName:"type" type:"string" enum:"true"`
}

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

// Represents the instance profile.
type InstanceProfile struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the instance profile.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// The description of the instance profile.
	Description *string `locationName:"description" type:"string"`

	// An array of strings specifying the list of app packages that should not be
	// cleaned up from the device after a test run is over.
	//
	// The list of packages is only considered if you set packageCleanup to true.
	ExcludeAppPackagesFromCleanup []string `locationName:"excludeAppPackagesFromCleanup" type:"list"`

	// The name of the instance profile.
	Name *string `locationName:"name" type:"string"`

	// When set to true, Device Farm will remove app packages after a test run.
	// The default value is false for private devices.
	PackageCleanup *bool `locationName:"packageCleanup" type:"boolean"`

	// When set to true, Device Farm will reboot the instance after a test run.
	// The default value is true.
	RebootAfterUse *bool `locationName:"rebootAfterUse" type:"boolean"`
}

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

// Represents a device.
type Job struct {
	_ struct{} `type:"structure"`

	// The job's ARN.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// The job's result counters.
	Counters *Counters `locationName:"counters" type:"structure"`

	// When the job was created.
	Created *time.Time `locationName:"created" type:"timestamp"`

	// The device (phone or tablet).
	Device *Device `locationName:"device" type:"structure"`

	// Represents the total (metered or unmetered) minutes used by the job.
	DeviceMinutes *DeviceMinutes `locationName:"deviceMinutes" type:"structure"`

	// The Amazon Resource Name (ARN) of the instance.
	InstanceArn *string `locationName:"instanceArn" min:"32" type:"string"`

	// A message about the job's result.
	Message *string `locationName:"message" type:"string"`

	// The job's name.
	Name *string `locationName:"name" type:"string"`

	// The job's result.
	//
	// Allowed values include:
	//
	//    * PENDING: A pending condition.
	//
	//    * PASSED: A passing condition.
	//
	//    * WARNED: A warning condition.
	//
	//    * FAILED: A failed condition.
	//
	//    * SKIPPED: A skipped condition.
	//
	//    * ERRORED: An error condition.
	//
	//    * STOPPED: A stopped condition.
	Result ExecutionResult `locationName:"result" type:"string" enum:"true"`

	// The job's start time.
	Started *time.Time `locationName:"started" type:"timestamp"`

	// The job's status.
	//
	// Allowed values include:
	//
	//    * PENDING: A pending status.
	//
	//    * PENDING_CONCURRENCY: A pending concurrency status.
	//
	//    * PENDING_DEVICE: A pending device status.
	//
	//    * PROCESSING: A processing status.
	//
	//    * SCHEDULING: A scheduling status.
	//
	//    * PREPARING: A preparing status.
	//
	//    * RUNNING: A running status.
	//
	//    * COMPLETED: A completed status.
	//
	//    * STOPPING: A stopping status.
	Status ExecutionStatus `locationName:"status" type:"string" enum:"true"`

	// The job's stop time.
	Stopped *time.Time `locationName:"stopped" type:"timestamp"`

	// The job's type.
	//
	// Allowed values include the following:
	//
	//    * BUILTIN_FUZZ: The built-in fuzz type.
	//
	//    * BUILTIN_EXPLORER: For Android, an app explorer that will traverse an
	//    Android app, interacting with it and capturing screenshots at the same
	//    time.
	//
	//    * APPIUM_JAVA_JUNIT: The Appium Java JUnit type.
	//
	//    * APPIUM_JAVA_TESTNG: The Appium Java TestNG type.
	//
	//    * APPIUM_PYTHON: The Appium Python type.
	//
	//    * APPIUM_NODE: The Appium Node.js type.
	//
	//    * APPIUM_RUBY: The Appium Ruby type.
	//
	//    * APPIUM_WEB_JAVA_JUNIT: The Appium Java JUnit type for web apps.
	//
	//    * APPIUM_WEB_JAVA_TESTNG: The Appium Java TestNG type for web apps.
	//
	//    * APPIUM_WEB_PYTHON: The Appium Python type for web apps.
	//
	//    * APPIUM_WEB_NODE: The Appium Node.js type for web apps.
	//
	//    * APPIUM_WEB_RUBY: The Appium Ruby test type for web apps.
	//
	//    * CALABASH: The Calabash type.
	//
	//    * INSTRUMENTATION: The Instrumentation type.
	//
	//    * UIAUTOMATION: The uiautomation type.
	//
	//    * UIAUTOMATOR: The uiautomator type.
	//
	//    * XCTEST: The Xcode test type.
	//
	//    * XCTEST_UI: The Xcode UI test type.
	Type TestType `locationName:"type" type:"string" enum:"true"`

	// This value is set to true if video capture is enabled; otherwise, it is set
	// to false.
	VideoCapture *bool `locationName:"videoCapture" type:"boolean"`

	// The endpoint for streaming device video.
	VideoEndpoint *string `locationName:"videoEndpoint" type:"string"`
}

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

// Represents a latitude and longitude pair, expressed in geographic coordinate
// system degrees (for example 47.6204, -122.3491).
//
// Elevation is currently not supported.
type Location struct {
	_ struct{} `type:"structure"`

	// The latitude.
	//
	// Latitude is a required field
	Latitude *float64 `locationName:"latitude" type:"double" required:"true"`

	// The longitude.
	//
	// Longitude is a required field
	Longitude *float64 `locationName:"longitude" type:"double" required:"true"`
}

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

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

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

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

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

// A number representing the monetary amount for an offering or transaction.
type MonetaryAmount struct {
	_ struct{} `type:"structure"`

	// The numerical amount of an offering or transaction.
	Amount *float64 `locationName:"amount" type:"double"`

	// The currency code of a monetary amount. For example, USD means "U.S. dollars."
	CurrencyCode CurrencyCode `locationName:"currencyCode" type:"string" enum:"true"`
}

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

// An array of settings that describes characteristics of a network profile.
type NetworkProfile struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the network profile.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// The description of the network profile.
	Description *string `locationName:"description" type:"string"`

	// The data throughput rate in bits per second, as an integer from 0 to 104857600.
	DownlinkBandwidthBits *int64 `locationName:"downlinkBandwidthBits" type:"long"`

	// Delay time for all packets to destination in milliseconds as an integer from
	// 0 to 2000.
	DownlinkDelayMs *int64 `locationName:"downlinkDelayMs" type:"long"`

	// Time variation in the delay of received packets in milliseconds as an integer
	// from 0 to 2000.
	DownlinkJitterMs *int64 `locationName:"downlinkJitterMs" type:"long"`

	// Proportion of received packets that fail to arrive from 0 to 100 percent.
	DownlinkLossPercent *int64 `locationName:"downlinkLossPercent" type:"integer"`

	// The name of the network profile.
	Name *string `locationName:"name" type:"string"`

	// The type of network profile. Valid values are listed below.
	Type NetworkProfileType `locationName:"type" type:"string" enum:"true"`

	// The data throughput rate in bits per second, as an integer from 0 to 104857600.
	UplinkBandwidthBits *int64 `locationName:"uplinkBandwidthBits" type:"long"`

	// Delay time for all packets to destination in milliseconds as an integer from
	// 0 to 2000.
	UplinkDelayMs *int64 `locationName:"uplinkDelayMs" type:"long"`

	// Time variation in the delay of received packets in milliseconds as an integer
	// from 0 to 2000.
	UplinkJitterMs *int64 `locationName:"uplinkJitterMs" type:"long"`

	// Proportion of transmitted packets that fail to arrive from 0 to 100 percent.
	UplinkLossPercent *int64 `locationName:"uplinkLossPercent" type:"integer"`
}

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

// Represents the metadata of a device offering.
type Offering struct {
	_ struct{} `type:"structure"`

	// A string describing the offering.
	Description *string `locationName:"description" type:"string"`

	// The ID that corresponds to a device offering.
	Id *string `locationName:"id" min:"32" type:"string"`

	// The platform of the device (e.g., ANDROID or IOS).
	Platform DevicePlatform `locationName:"platform" type:"string" enum:"true"`

	// Specifies whether there are recurring charges for the offering.
	RecurringCharges []RecurringCharge `locationName:"recurringCharges" type:"list"`

	// The type of offering (e.g., "RECURRING") for a device.
	Type OfferingType `locationName:"type" type:"string" enum:"true"`
}

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

// Represents information about an offering promotion.
type OfferingPromotion struct {
	_ struct{} `type:"structure"`

	// A string describing the offering promotion.
	Description *string `locationName:"description" type:"string"`

	// The ID of the offering promotion.
	Id *string `locationName:"id" min:"4" type:"string"`
}

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

// The status of the offering.
type OfferingStatus struct {
	_ struct{} `type:"structure"`

	// The date on which the offering is effective.
	EffectiveOn *time.Time `locationName:"effectiveOn" type:"timestamp"`

	// Represents the metadata of an offering status.
	Offering *Offering `locationName:"offering" type:"structure"`

	// The number of available devices in the offering.
	Quantity *int64 `locationName:"quantity" type:"integer"`

	// The type specified for the offering status.
	Type OfferingTransactionType `locationName:"type" type:"string" enum:"true"`
}

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

// Represents the metadata of an offering transaction.
type OfferingTransaction struct {
	_ struct{} `type:"structure"`

	// The cost of an offering transaction.
	Cost *MonetaryAmount `locationName:"cost" type:"structure"`

	// The date on which an offering transaction was created.
	CreatedOn *time.Time `locationName:"createdOn" type:"timestamp"`

	// The ID that corresponds to a device offering promotion.
	OfferingPromotionId *string `locationName:"offeringPromotionId" min:"4" type:"string"`

	// The status of an offering transaction.
	OfferingStatus *OfferingStatus `locationName:"offeringStatus" type:"structure"`

	// The transaction ID of the offering transaction.
	TransactionId *string `locationName:"transactionId" min:"32" type:"string"`
}

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

// Represents a specific warning or failure.
type Problem struct {
	_ struct{} `type:"structure"`

	// Information about the associated device.
	Device *Device `locationName:"device" type:"structure"`

	// Information about the associated job.
	Job *ProblemDetail `locationName:"job" type:"structure"`

	// A message about the problem's result.
	Message *string `locationName:"message" type:"string"`

	// The problem's result.
	//
	// Allowed values include:
	//
	//    * PENDING: A pending condition.
	//
	//    * PASSED: A passing condition.
	//
	//    * WARNED: A warning condition.
	//
	//    * FAILED: A failed condition.
	//
	//    * SKIPPED: A skipped condition.
	//
	//    * ERRORED: An error condition.
	//
	//    * STOPPED: A stopped condition.
	Result ExecutionResult `locationName:"result" type:"string" enum:"true"`

	// Information about the associated run.
	Run *ProblemDetail `locationName:"run" type:"structure"`

	// Information about the associated suite.
	Suite *ProblemDetail `locationName:"suite" type:"structure"`

	// Information about the associated test.
	Test *ProblemDetail `locationName:"test" type:"structure"`
}

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

// Information about a problem detail.
type ProblemDetail struct {
	_ struct{} `type:"structure"`

	// The problem detail's ARN.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// The problem detail's name.
	Name *string `locationName:"name" type:"string"`
}

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

// Represents an operating-system neutral workspace for running and managing
// tests.
type Project struct {
	_ struct{} `type:"structure"`

	// The project's ARN.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// When the project was created.
	Created *time.Time `locationName:"created" type:"timestamp"`

	// The default number of minutes (at the project level) a test run will execute
	// before it times out. The default value is 150 minutes.
	DefaultJobTimeoutMinutes *int64 `locationName:"defaultJobTimeoutMinutes" type:"integer"`

	// The project's name.
	Name *string `locationName:"name" type:"string"`
}

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

// Represents the set of radios and their states on a device. Examples of radios
// include Wi-Fi, GPS, Bluetooth, and NFC.
type Radios struct {
	_ struct{} `type:"structure"`

	// True if Bluetooth is enabled at the beginning of the test; otherwise, false.
	Bluetooth *bool `locationName:"bluetooth" type:"boolean"`

	// True if GPS is enabled at the beginning of the test; otherwise, false.
	Gps *bool `locationName:"gps" type:"boolean"`

	// True if NFC is enabled at the beginning of the test; otherwise, false.
	Nfc *bool `locationName:"nfc" type:"boolean"`

	// True if Wi-Fi is enabled at the beginning of the test; otherwise, false.
	Wifi *bool `locationName:"wifi" type:"boolean"`
}

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

// Specifies whether charges for devices will be recurring.
type RecurringCharge struct {
	_ struct{} `type:"structure"`

	// The cost of the recurring charge.
	Cost *MonetaryAmount `locationName:"cost" type:"structure"`

	// The frequency in which charges will recur.
	Frequency RecurringChargeFrequency `locationName:"frequency" type:"string" enum:"true"`
}

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

// Represents information about the remote access session.
type RemoteAccessSession struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the remote access session.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// The billing method of the remote access session. Possible values include
	// METERED or UNMETERED. For more information about metered devices, see AWS
	// Device Farm terminology (https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html#welcome-terminology)."
	BillingMethod BillingMethod `locationName:"billingMethod" type:"string" enum:"true"`

	// Unique identifier of your client for the remote access session. Only returned
	// if remote debugging is enabled for the remote access session.
	//
	// Remote debugging is no longer supported (https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html).
	ClientId *string `locationName:"clientId" type:"string"`

	// The date and time the remote access session was created.
	Created *time.Time `locationName:"created" type:"timestamp"`

	// The device (phone or tablet) used in the remote access session.
	Device *Device `locationName:"device" type:"structure"`

	// The number of minutes a device is used in a remote access session (including
	// setup and teardown minutes).
	DeviceMinutes *DeviceMinutes `locationName:"deviceMinutes" type:"structure"`

	// Unique device identifier for the remote device. Only returned if remote debugging
	// is enabled for the remote access session.
	//
	// Remote debugging is no longer supported (https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html).
	DeviceUdid *string `locationName:"deviceUdid" type:"string"`

	// The endpoint for the remote access sesssion.
	Endpoint *string `locationName:"endpoint" type:"string"`

	// IP address of the EC2 host where you need to connect to remotely debug devices.
	// Only returned if remote debugging is enabled for the remote access session.
	//
	// Remote debugging is no longer supported (https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html).
	HostAddress *string `locationName:"hostAddress" type:"string"`

	// The Amazon Resource Name (ARN) of the instance.
	InstanceArn *string `locationName:"instanceArn" min:"32" type:"string"`

	// The interaction mode of the remote access session. Valid values are:
	//
	//    * INTERACTIVE: You can interact with the iOS device by viewing, touching,
	//    and rotating the screen. You cannot run XCUITest framework-based tests
	//    in this mode.
	//
	//    * NO_VIDEO: You are connected to the device but cannot interact with it
	//    or view the screen. This mode has the fastest test execution speed. You
	//    can run XCUITest framework-based tests in this mode.
	//
	//    * VIDEO_ONLY: You can view the screen but cannot touch or rotate it. You
	//    can run XCUITest framework-based tests and watch the screen in this mode.
	InteractionMode InteractionMode `locationName:"interactionMode" type:"string" enum:"true"`

	// A message about the remote access session.
	Message *string `locationName:"message" type:"string"`

	// The name of the remote access session.
	Name *string `locationName:"name" type:"string"`

	// This flag is set to true if remote debugging is enabled for the remote access
	// session.
	//
	// Remote debugging is no longer supported (https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html).
	RemoteDebugEnabled *bool `locationName:"remoteDebugEnabled" type:"boolean"`

	// The Amazon Resource Name (ARN) for the app to be recorded in the remote access
	// session.
	RemoteRecordAppArn *string `locationName:"remoteRecordAppArn" min:"32" type:"string"`

	// This flag is set to true if remote recording is enabled for the remote access
	// session.
	RemoteRecordEnabled *bool `locationName:"remoteRecordEnabled" type:"boolean"`

	// The result of the remote access session. Can be any of the following:
	//
	//    * PENDING: A pending condition.
	//
	//    * PASSED: A passing condition.
	//
	//    * WARNED: A warning condition.
	//
	//    * FAILED: A failed condition.
	//
	//    * SKIPPED: A skipped condition.
	//
	//    * ERRORED: An error condition.
	//
	//    * STOPPED: A stopped condition.
	Result ExecutionResult `locationName:"result" type:"string" enum:"true"`

	// When set to true, for private devices, Device Farm will not sign your app
	// again. For public devices, Device Farm always signs your apps again and this
	// parameter has no effect.
	//
	// For more information about how Device Farm re-signs your app(s), see Do you
	// modify my app? (https://aws.amazon.com/device-farm/faq/) in the AWS Device
	// Farm FAQs.
	SkipAppResign *bool `locationName:"skipAppResign" type:"boolean"`

	// The date and time the remote access session was started.
	Started *time.Time `locationName:"started" type:"timestamp"`

	// The status of the remote access session. Can be any of the following:
	//
	//    * PENDING: A pending status.
	//
	//    * PENDING_CONCURRENCY: A pending concurrency status.
	//
	//    * PENDING_DEVICE: A pending device status.
	//
	//    * PROCESSING: A processing status.
	//
	//    * SCHEDULING: A scheduling status.
	//
	//    * PREPARING: A preparing status.
	//
	//    * RUNNING: A running status.
	//
	//    * COMPLETED: A completed status.
	//
	//    * STOPPING: A stopping status.
	Status ExecutionStatus `locationName:"status" type:"string" enum:"true"`

	// The date and time the remote access session was stopped.
	Stopped *time.Time `locationName:"stopped" type:"timestamp"`
}

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

// Represents the screen resolution of a device in height and width, expressed
// in pixels.
type Resolution struct {
	_ struct{} `type:"structure"`

	// The screen resolution's height, expressed in pixels.
	Height *int64 `locationName:"height" type:"integer"`

	// The screen resolution's width, expressed in pixels.
	Width *int64 `locationName:"width" type:"integer"`
}

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

// Represents a condition for a device pool.
type Rule struct {
	_ struct{} `type:"structure"`

	// The rule's stringified attribute. For example, specify the value as "\"abc\"".
	//
	// The supported operators for each attribute are provided in the following
	// list.
	//
	// APPIUM_VERSION
	//
	// The Appium version for the test.
	//
	// Supported operators: CONTAINS
	//
	// ARN
	//
	// The Amazon Resource Name (ARN) of the device. For example, "arn:aws:devicefarm:us-west-2::device:12345Example".
	//
	// Supported operators: EQUALS, IN, NOT_IN
	//
	// AVAILABILITY
	//
	// The current availability of the device. Valid values are "AVAILABLE", "HIGHLY_AVAILABLE",
	// "BUSY", or "TEMPORARY_NOT_AVAILABLE".
	//
	// Supported operators: EQUALS
	//
	// FLEET_TYPE
	//
	// The fleet type. Valid values are "PUBLIC" or "PRIVATE".
	//
	// Supported operators: EQUALS
	//
	// FORM_FACTOR
	//
	// The device form factor. Valid values are "PHONE" or "TABLET".
	//
	// Supported operators: EQUALS, IN, NOT_IN
	//
	// INSTANCE_ARN
	//
	// The Amazon Resource Name (ARN) of the device instance.
	//
	// Supported operators: IN, NOT_IN
	//
	// INSTANCE_LABELS
	//
	// The label of the device instance.
	//
	// Supported operators: CONTAINS
	//
	// MANUFACTURER
	//
	// The device manufacturer. For example, "Apple".
	//
	// Supported operators: EQUALS, IN, NOT_IN
	//
	// MODEL
	//
	// The device model, such as "Apple iPad Air 2" or "Google Pixel".
	//
	// Supported operators: CONTAINS, EQUALS, IN, NOT_IN
	//
	// OS_VERSION
	//
	// The operating system version. For example, "10.3.2".
	//
	// Supported operators: EQUALS, GREATER_THAN, GREATER_THAN_OR_EQUALS, IN, LESS_THAN,
	// LESS_THAN_OR_EQUALS, NOT_IN
	//
	// PLATFORM
	//
	// The device platform. Valid values are "ANDROID" or "IOS".
	//
	// Supported operators: EQUALS, IN, NOT_IN
	//
	// REMOTE_ACCESS_ENABLED
	//
	// Whether the device is enabled for remote access. Valid values are "TRUE"
	// or "FALSE".
	//
	// Supported operators: EQUALS
	//
	// REMOTE_DEBUG_ENABLED
	//
	// Whether the device is enabled for remote debugging. Valid values are "TRUE"
	// or "FALSE".
	//
	// Supported operators: EQUALS
	//
	// This filter will be ignored, as remote debugging is no longer supported (https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html).
	Attribute DeviceAttribute `locationName:"attribute" type:"string" enum:"true"`

	// Specifies how Device Farm compares the rule's attribute to the value. For
	// the operators that are supported by each attribute, see the attribute descriptions.
	Operator RuleOperator `locationName:"operator" type:"string" enum:"true"`

	// The rule's value.
	Value *string `locationName:"value" type:"string"`
}

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

// Represents a test run on a set of devices with a given app package, test
// parameters, etc.
type Run struct {
	_ struct{} `type:"structure"`

	// An app to upload or that has been uploaded.
	AppUpload *string `locationName:"appUpload" min:"32" type:"string"`

	// The run's ARN.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// Specifies the billing method for a test run: metered or unmetered. If the
	// parameter is not specified, the default value is metered.
	BillingMethod BillingMethod `locationName:"billingMethod" type:"string" enum:"true"`

	// The total number of completed jobs.
	CompletedJobs *int64 `locationName:"completedJobs" type:"integer"`

	// The run's result counters.
	Counters *Counters `locationName:"counters" type:"structure"`

	// When the run was created.
	Created *time.Time `locationName:"created" type:"timestamp"`

	// Output CustomerArtifactPaths object for the test run.
	CustomerArtifactPaths *CustomerArtifactPaths `locationName:"customerArtifactPaths" type:"structure"`

	// Represents the total (metered or unmetered) minutes used by the test run.
	DeviceMinutes *DeviceMinutes `locationName:"deviceMinutes" type:"structure"`

	// The ARN of the device pool for the run.
	DevicePoolArn *string `locationName:"devicePoolArn" min:"32" type:"string"`

	// The results of a device filter used to select the devices for a test run.
	DeviceSelectionResult *DeviceSelectionResult `locationName:"deviceSelectionResult" type:"structure"`

	// For fuzz tests, this is the number of events, between 1 and 10000, that the
	// UI fuzz test should perform.
	EventCount *int64 `locationName:"eventCount" type:"integer"`

	// The number of minutes the job will execute before it times out.
	JobTimeoutMinutes *int64 `locationName:"jobTimeoutMinutes" type:"integer"`

	// Information about the locale that is used for the run.
	Locale *string `locationName:"locale" type:"string"`

	// Information about the location that is used for the run.
	Location *Location `locationName:"location" type:"structure"`

	// A message about the run's result.
	Message *string `locationName:"message" type:"string"`

	// The run's name.
	Name *string `locationName:"name" type:"string"`

	// The network profile being used for a test run.
	NetworkProfile *NetworkProfile `locationName:"networkProfile" type:"structure"`

	// Read-only URL for an object in S3 bucket where you can get the parsing results
	// of the test package. If the test package doesn't parse, the reason why it
	// doesn't parse appears in the file that this URL points to.
	ParsingResultUrl *string `locationName:"parsingResultUrl" type:"string"`

	// The run's platform.
	//
	// Allowed values include:
	//
	//    * ANDROID: The Android platform.
	//
	//    * IOS: The iOS platform.
	Platform DevicePlatform `locationName:"platform" type:"string" enum:"true"`

	// Information about the radio states for the run.
	Radios *Radios `locationName:"radios" type:"structure"`

	// The run's result.
	//
	// Allowed values include:
	//
	//    * PENDING: A pending condition.
	//
	//    * PASSED: A passing condition.
	//
	//    * WARNED: A warning condition.
	//
	//    * FAILED: A failed condition.
	//
	//    * SKIPPED: A skipped condition.
	//
	//    * ERRORED: An error condition.
	//
	//    * STOPPED: A stopped condition.
	Result ExecutionResult `locationName:"result" type:"string" enum:"true"`

	// Supporting field for the result field. Set only if result is SKIPPED. PARSING_FAILED
	// if the result is skipped because of test package parsing failure.
	ResultCode ExecutionResultCode `locationName:"resultCode" type:"string" enum:"true"`

	// For fuzz tests, this is a seed to use for randomizing the UI fuzz test. Using
	// the same seed value between tests ensures identical event sequences.
	Seed *int64 `locationName:"seed" type:"integer"`

	// When set to true, for private devices, Device Farm will not sign your app
	// again. For public devices, Device Farm always signs your apps again and this
	// parameter has no effect.
	//
	// For more information about how Device Farm re-signs your app(s), see Do you
	// modify my app? (https://aws.amazon.com/device-farm/faq/) in the AWS Device
	// Farm FAQs.
	SkipAppResign *bool `locationName:"skipAppResign" type:"boolean"`

	// The run's start time.
	Started *time.Time `locationName:"started" type:"timestamp"`

	// The run's status.
	//
	// Allowed values include:
	//
	//    * PENDING: A pending status.
	//
	//    * PENDING_CONCURRENCY: A pending concurrency status.
	//
	//    * PENDING_DEVICE: A pending device status.
	//
	//    * PROCESSING: A processing status.
	//
	//    * SCHEDULING: A scheduling status.
	//
	//    * PREPARING: A preparing status.
	//
	//    * RUNNING: A running status.
	//
	//    * COMPLETED: A completed status.
	//
	//    * STOPPING: A stopping status.
	Status ExecutionStatus `locationName:"status" type:"string" enum:"true"`

	// The run's stop time.
	Stopped *time.Time `locationName:"stopped" type:"timestamp"`

	// The ARN of the YAML-formatted test specification for the run.
	TestSpecArn *string `locationName:"testSpecArn" min:"32" type:"string"`

	// The total number of jobs for the run.
	TotalJobs *int64 `locationName:"totalJobs" type:"integer"`

	// The run's type.
	//
	// Must be one of the following values:
	//
	//    * BUILTIN_FUZZ: The built-in fuzz type.
	//
	//    * BUILTIN_EXPLORER: For Android, an app explorer that will traverse an
	//    Android app, interacting with it and capturing screenshots at the same
	//    time.
	//
	//    * APPIUM_JAVA_JUNIT: The Appium Java JUnit type.
	//
	//    * APPIUM_JAVA_TESTNG: The Appium Java TestNG type.
	//
	//    * APPIUM_PYTHON: The Appium Python type.
	//
	//    * APPIUM_NODE: The Appium Node.js type.
	//
	//    * APPIUM_RUBY: The Appium Ruby type.
	//
	//    * APPIUM_WEB_JAVA_JUNIT: The Appium Java JUnit type for web apps.
	//
	//    * APPIUM_WEB_JAVA_TESTNG: The Appium Java TestNG type for web apps.
	//
	//    * APPIUM_WEB_PYTHON: The Appium Python type for web apps.
	//
	//    * APPIUM_WEB_NODE: The Appium Node.js type for web apps.
	//
	//    * APPIUM_WEB_RUBY: The Appium Ruby type for web apps.
	//
	//    * CALABASH: The Calabash type.
	//
	//    * INSTRUMENTATION: The Instrumentation type.
	//
	//    * UIAUTOMATION: The uiautomation type.
	//
	//    * UIAUTOMATOR: The uiautomator type.
	//
	//    * XCTEST: The Xcode test type.
	//
	//    * XCTEST_UI: The Xcode UI test type.
	Type TestType `locationName:"type" type:"string" enum:"true"`

	// The Device Farm console URL for the recording of the run.
	WebUrl *string `locationName:"webUrl" type:"string"`
}

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

// Represents a sample of performance data.
type Sample struct {
	_ struct{} `type:"structure"`

	// The sample's ARN.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// The sample's type.
	//
	// Must be one of the following values:
	//
	//    * CPU: A CPU sample type. This is expressed as the app processing CPU
	//    time (including child processes) as reported by process, as a percentage.
	//
	//    * MEMORY: A memory usage sample type. This is expressed as the total proportional
	//    set size of an app process, in kilobytes.
	//
	//    * NATIVE_AVG_DRAWTIME
	//
	//    * NATIVE_FPS
	//
	//    * NATIVE_FRAMES
	//
	//    * NATIVE_MAX_DRAWTIME
	//
	//    * NATIVE_MIN_DRAWTIME
	//
	//    * OPENGL_AVG_DRAWTIME
	//
	//    * OPENGL_FPS
	//
	//    * OPENGL_FRAMES
	//
	//    * OPENGL_MAX_DRAWTIME
	//
	//    * OPENGL_MIN_DRAWTIME
	//
	//    * RX
	//
	//    * RX_RATE: The total number of bytes per second (TCP and UDP) that are
	//    sent, by app process.
	//
	//    * THREADS: A threads sample type. This is expressed as the total number
	//    of threads per app process.
	//
	//    * TX
	//
	//    * TX_RATE: The total number of bytes per second (TCP and UDP) that are
	//    received, by app process.
	Type SampleType `locationName:"type" type:"string" enum:"true"`

	// The pre-signed Amazon S3 URL that can be used with a corresponding GET request
	// to download the sample's file.
	Url *string `locationName:"url" type:"string"`
}

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

// Represents the settings for a run. Includes things like location, radio states,
// auxiliary apps, and network profiles.
type ScheduleRunConfiguration struct {
	_ struct{} `type:"structure"`

	// A list of Upload ARNs for app packages that will be installed alongside your
	// app.
	AuxiliaryApps []string `locationName:"auxiliaryApps" type:"list"`

	// Specifies the billing method for a test run: metered or unmetered. If the
	// parameter is not specified, the default value is metered.
	BillingMethod BillingMethod `locationName:"billingMethod" type:"string" enum:"true"`

	// Input CustomerArtifactPaths object for the scheduled run configuration.
	CustomerArtifactPaths *CustomerArtifactPaths `locationName:"customerArtifactPaths" type:"structure"`

	// The ARN of the extra data for the run. The extra data is a .zip file that
	// AWS Device Farm will extract to external data for Android or the app's sandbox
	// for iOS.
	ExtraDataPackageArn *string `locationName:"extraDataPackageArn" min:"32" type:"string"`

	// Information about the locale that is used for the run.
	Locale *string `locationName:"locale" type:"string"`

	// Information about the location that is used for the run.
	Location *Location `locationName:"location" type:"structure"`

	// Reserved for internal use.
	NetworkProfileArn *string `locationName:"networkProfileArn" min:"32" type:"string"`

	// Information about the radio states for the run.
	Radios *Radios `locationName:"radios" type:"structure"`

	// An array of Amazon Resource Names (ARNs) for your VPC endpoint configurations.
	VpceConfigurationArns []string `locationName:"vpceConfigurationArns" type:"list"`
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ScheduleRunConfiguration) Validate() error {
	invalidParams := aws.ErrInvalidParams{Context: "ScheduleRunConfiguration"}
	if s.ExtraDataPackageArn != nil && len(*s.ExtraDataPackageArn) < 32 {
		invalidParams.Add(aws.NewErrParamMinLen("ExtraDataPackageArn", 32))
	}
	if s.NetworkProfileArn != nil && len(*s.NetworkProfileArn) < 32 {
		invalidParams.Add(aws.NewErrParamMinLen("NetworkProfileArn", 32))
	}
	if s.Location != nil {
		if err := s.Location.Validate(); err != nil {
			invalidParams.AddNested("Location", err.(aws.ErrInvalidParams))
		}
	}

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

// Represents test settings. This data structure is passed in as the "test"
// parameter to ScheduleRun. For an example of the JSON request syntax, see
// ScheduleRun.
type ScheduleRunTest struct {
	_ struct{} `type:"structure"`

	// The test's filter.
	Filter *string `locationName:"filter" type:"string"`

	// The test's parameters, such as test framework parameters and fixture settings.
	// Parameters are represented by name-value pairs of strings.
	//
	// For all tests:
	//
	//    * app_performance_monitoring: Performance monitoring is enabled by default.
	//    Set this parameter to "false" to disable it.
	//
	// For Calabash tests:
	//
	//    * profile: A cucumber profile, for example, "my_profile_name".
	//
	//    * tags: You can limit execution to features or scenarios that have (or
	//    don't have) certain tags, for example, "@smoke" or "@smoke,~@wip".
	//
	// For Appium tests (all types):
	//
	//    * appium_version: The Appium version. Currently supported values are "1.6.5"
	//    (and higher), "latest", and "default". “latest” will run the latest
	//    Appium version supported by Device Farm (1.9.1). For “default”, Device
	//    Farm will choose a compatible version of Appium for the device. The current
	//    behavior is to run 1.7.2 on Android devices and iOS 9 and earlier, 1.7.2
	//    for iOS 10 and later. This behavior is subject to change.
	//
	// For Fuzz tests (Android only):
	//
	//    * event_count: The number of events, between 1 and 10000, that the UI
	//    fuzz test should perform.
	//
	//    * throttle: The time, in ms, between 0 and 1000, that the UI fuzz test
	//    should wait between events.
	//
	//    * seed: A seed to use for randomizing the UI fuzz test. Using the same
	//    seed value between tests ensures identical event sequences.
	//
	// For Explorer tests:
	//
	//    * username: A username to use if the Explorer encounters a login form.
	//    If not supplied, no username will be inserted.
	//
	//    * password: A password to use if the Explorer encounters a login form.
	//    If not supplied, no password will be inserted.
	//
	// For Instrumentation:
	//
	//    * filter: A test filter string. Examples: Running a single test case:
	//    "com.android.abc.Test1" Running a single test: "com.android.abc.Test1#smoke"
	//    Running multiple tests: "com.android.abc.Test1,com.android.abc.Test2"
	//
	// For XCTest and XCTestUI:
	//
	//    * filter: A test filter string. Examples: Running a single test class:
	//    "LoginTests" Running a multiple test classes: "LoginTests,SmokeTests"
	//    Running a single test: "LoginTests/testValid" Running multiple tests:
	//    "LoginTests/testValid,LoginTests/testInvalid"
	//
	// For UIAutomator:
	//
	//    * filter: A test filter string. Examples: Running a single test case:
	//    "com.android.abc.Test1" Running a single test: "com.android.abc.Test1#smoke"
	//    Running multiple tests: "com.android.abc.Test1,com.android.abc.Test2"
	Parameters map[string]string `locationName:"parameters" type:"map"`

	// The ARN of the uploaded test that will be run.
	TestPackageArn *string `locationName:"testPackageArn" min:"32" type:"string"`

	// The ARN of the YAML-formatted test specification.
	TestSpecArn *string `locationName:"testSpecArn" min:"32" type:"string"`

	// The test's type.
	//
	// Must be one of the following values:
	//
	//    * BUILTIN_FUZZ: The built-in fuzz type.
	//
	//    * BUILTIN_EXPLORER: For Android, an app explorer that will traverse an
	//    Android app, interacting with it and capturing screenshots at the same
	//    time.
	//
	//    * APPIUM_JAVA_JUNIT: The Appium Java JUnit type.
	//
	//    * APPIUM_JAVA_TESTNG: The Appium Java TestNG type.
	//
	//    * APPIUM_PYTHON: The Appium Python type.
	//
	//    * APPIUM_NODE: The Appium Node.js type.
	//
	//    * APPIUM_RUBY: The Appium Ruby type.
	//
	//    * APPIUM_WEB_JAVA_JUNIT: The Appium Java JUnit type for web apps.
	//
	//    * APPIUM_WEB_JAVA_TESTNG: The Appium Java TestNG type for web apps.
	//
	//    * APPIUM_WEB_PYTHON: The Appium Python type for web apps.
	//
	//    * APPIUM_WEB_NODE: The Appium Node.js type for web apps.
	//
	//    * APPIUM_WEB_RUBY: The Appium Ruby type for web apps.
	//
	//    * CALABASH: The Calabash type.
	//
	//    * INSTRUMENTATION: The Instrumentation type.
	//
	//    * UIAUTOMATION: The uiautomation type.
	//
	//    * UIAUTOMATOR: The uiautomator type.
	//
	//    * XCTEST: The Xcode test type.
	//
	//    * XCTEST_UI: The Xcode UI test type.
	//
	// Type is a required field
	Type TestType `locationName:"type" type:"string" required:"true" enum:"true"`
}

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

// Validate inspects the fields of the type to determine if they are valid.
func (s *ScheduleRunTest) Validate() error {
	invalidParams := aws.ErrInvalidParams{Context: "ScheduleRunTest"}
	if s.TestPackageArn != nil && len(*s.TestPackageArn) < 32 {
		invalidParams.Add(aws.NewErrParamMinLen("TestPackageArn", 32))
	}
	if s.TestSpecArn != nil && len(*s.TestSpecArn) < 32 {
		invalidParams.Add(aws.NewErrParamMinLen("TestSpecArn", 32))
	}
	if len(s.Type) == 0 {
		invalidParams.Add(aws.NewErrParamRequired("Type"))
	}

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

// Represents a collection of one or more tests.
type Suite struct {
	_ struct{} `type:"structure"`

	// The suite's ARN.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// The suite's result counters.
	Counters *Counters `locationName:"counters" type:"structure"`

	// When the suite was created.
	Created *time.Time `locationName:"created" type:"timestamp"`

	// Represents the total (metered or unmetered) minutes used by the test suite.
	DeviceMinutes *DeviceMinutes `locationName:"deviceMinutes" type:"structure"`

	// A message about the suite's result.
	Message *string `locationName:"message" type:"string"`

	// The suite's name.
	Name *string `locationName:"name" type:"string"`

	// The suite's result.
	//
	// Allowed values include:
	//
	//    * PENDING: A pending condition.
	//
	//    * PASSED: A passing condition.
	//
	//    * WARNED: A warning condition.
	//
	//    * FAILED: A failed condition.
	//
	//    * SKIPPED: A skipped condition.
	//
	//    * ERRORED: An error condition.
	//
	//    * STOPPED: A stopped condition.
	Result ExecutionResult `locationName:"result" type:"string" enum:"true"`

	// The suite's start time.
	Started *time.Time `locationName:"started" type:"timestamp"`

	// The suite's status.
	//
	// Allowed values include:
	//
	//    * PENDING: A pending status.
	//
	//    * PENDING_CONCURRENCY: A pending concurrency status.
	//
	//    * PENDING_DEVICE: A pending device status.
	//
	//    * PROCESSING: A processing status.
	//
	//    * SCHEDULING: A scheduling status.
	//
	//    * PREPARING: A preparing status.
	//
	//    * RUNNING: A running status.
	//
	//    * COMPLETED: A completed status.
	//
	//    * STOPPING: A stopping status.
	Status ExecutionStatus `locationName:"status" type:"string" enum:"true"`

	// The suite's stop time.
	Stopped *time.Time `locationName:"stopped" type:"timestamp"`

	// The suite's type.
	//
	// Must be one of the following values:
	//
	//    * BUILTIN_FUZZ: The built-in fuzz type.
	//
	//    * BUILTIN_EXPLORER: For Android, an app explorer that will traverse an
	//    Android app, interacting with it and capturing screenshots at the same
	//    time.
	//
	//    * APPIUM_JAVA_JUNIT: The Appium Java JUnit type.
	//
	//    * APPIUM_JAVA_TESTNG: The Appium Java TestNG type.
	//
	//    * APPIUM_PYTHON: The Appium Python type.
	//
	//    * APPIUM_NODE: The Appium Node.js type.
	//
	//    * APPIUM_RUBY: The Appium Ruby type.
	//
	//    * APPIUM_WEB_JAVA_JUNIT: The Appium Java JUnit type for web apps.
	//
	//    * APPIUM_WEB_JAVA_TESTNG: The Appium Java TestNG type for web apps.
	//
	//    * APPIUM_WEB_PYTHON: The Appium Python type for web apps.
	//
	//    * APPIUM_WEB_NODE: The Appium Node.js type for web apps.
	//
	//    * APPIUM_WEB_RUBY: The Appium Ruby type for web apps.
	//
	//    * CALABASH: The Calabash type.
	//
	//    * INSTRUMENTATION: The Instrumentation type.
	//
	//    * UIAUTOMATION: The uiautomation type.
	//
	//    * UIAUTOMATOR: The uiautomator type.
	//
	//    * XCTEST: The Xcode test type.
	//
	//    * XCTEST_UI: The Xcode UI test type.
	Type TestType `locationName:"type" type:"string" enum:"true"`
}

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

// The metadata that you apply to a resource to help you categorize and organize
// it. Each tag consists of a key and an optional value, both of which you define.
// Tag keys can have a maximum character length of 128 characters, and tag values
// can have a maximum length of 256 characters.
type Tag struct {
	_ struct{} `type:"structure"`

	// One part of a key-value pair that make up a tag. A key is a general label
	// that acts like a category for more specific tag values.
	//
	// Key is a required field
	Key *string `min:"1" type:"string" required:"true"`

	// The optional part of a key-value pair that make up a tag. A value acts as
	// a descriptor within a tag category (key).
	//
	// 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
}

// Represents a condition that is evaluated.
type Test struct {
	_ struct{} `type:"structure"`

	// The test's ARN.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// The test's result counters.
	Counters *Counters `locationName:"counters" type:"structure"`

	// When the test was created.
	Created *time.Time `locationName:"created" type:"timestamp"`

	// Represents the total (metered or unmetered) minutes used by the test.
	DeviceMinutes *DeviceMinutes `locationName:"deviceMinutes" type:"structure"`

	// A message about the test's result.
	Message *string `locationName:"message" type:"string"`

	// The test's name.
	Name *string `locationName:"name" type:"string"`

	// The test's result.
	//
	// Allowed values include:
	//
	//    * PENDING: A pending condition.
	//
	//    * PASSED: A passing condition.
	//
	//    * WARNED: A warning condition.
	//
	//    * FAILED: A failed condition.
	//
	//    * SKIPPED: A skipped condition.
	//
	//    * ERRORED: An error condition.
	//
	//    * STOPPED: A stopped condition.
	Result ExecutionResult `locationName:"result" type:"string" enum:"true"`

	// The test's start time.
	Started *time.Time `locationName:"started" type:"timestamp"`

	// The test's status.
	//
	// Allowed values include:
	//
	//    * PENDING: A pending status.
	//
	//    * PENDING_CONCURRENCY: A pending concurrency status.
	//
	//    * PENDING_DEVICE: A pending device status.
	//
	//    * PROCESSING: A processing status.
	//
	//    * SCHEDULING: A scheduling status.
	//
	//    * PREPARING: A preparing status.
	//
	//    * RUNNING: A running status.
	//
	//    * COMPLETED: A completed status.
	//
	//    * STOPPING: A stopping status.
	Status ExecutionStatus `locationName:"status" type:"string" enum:"true"`

	// The test's stop time.
	Stopped *time.Time `locationName:"stopped" type:"timestamp"`

	// The test's type.
	//
	// Must be one of the following values:
	//
	//    * BUILTIN_FUZZ: The built-in fuzz type.
	//
	//    * BUILTIN_EXPLORER: For Android, an app explorer that will traverse an
	//    Android app, interacting with it and capturing screenshots at the same
	//    time.
	//
	//    * APPIUM_JAVA_JUNIT: The Appium Java JUnit type.
	//
	//    * APPIUM_JAVA_TESTNG: The Appium Java TestNG type.
	//
	//    * APPIUM_PYTHON: The Appium Python type.
	//
	//    * APPIUM_NODE: The Appium Node.js type.
	//
	//    * APPIUM_RUBY: The Appium Ruby type.
	//
	//    * APPIUM_WEB_JAVA_JUNIT: The Appium Java JUnit type for web apps.
	//
	//    * APPIUM_WEB_JAVA_TESTNG: The Appium Java TestNG type for web apps.
	//
	//    * APPIUM_WEB_PYTHON: The Appium Python type for web apps.
	//
	//    * APPIUM_WEB_NODE: The Appium Node.js type for web apps.
	//
	//    * APPIUM_WEB_RUBY: The Appium Ruby type for web apps.
	//
	//    * CALABASH: The Calabash type.
	//
	//    * INSTRUMENTATION: The Instrumentation type.
	//
	//    * UIAUTOMATION: The uiautomation type.
	//
	//    * UIAUTOMATOR: The uiautomator type.
	//
	//    * XCTEST: The Xcode test type.
	//
	//    * XCTEST_UI: The Xcode UI test type.
	Type TestType `locationName:"type" type:"string" enum:"true"`
}

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

// Represents information about free trial device minutes for an AWS account.
type TrialMinutes struct {
	_ struct{} `type:"structure"`

	// The number of free trial minutes remaining in the account.
	Remaining *float64 `locationName:"remaining" type:"double"`

	// The total number of free trial minutes that the account started with.
	Total *float64 `locationName:"total" type:"double"`
}

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

// A collection of one or more problems, grouped by their result.
type UniqueProblem struct {
	_ struct{} `type:"structure"`

	// A message about the unique problems' result.
	Message *string `locationName:"message" type:"string"`

	// Information about the problems.
	Problems []Problem `locationName:"problems" type:"list"`
}

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

// An app or a set of one or more tests to upload or that have been uploaded.
type Upload struct {
	_ struct{} `type:"structure"`

	// The upload's ARN.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// The upload's category. Allowed values include:
	//
	//    * CURATED: An upload managed by AWS Device Farm.
	//
	//    * PRIVATE: An upload managed by the AWS Device Farm customer.
	Category UploadCategory `locationName:"category" type:"string" enum:"true"`

	// The upload's content type (for example, "application/octet-stream").
	ContentType *string `locationName:"contentType" type:"string"`

	// When the upload was created.
	Created *time.Time `locationName:"created" type:"timestamp"`

	// A message about the upload's result.
	Message *string `locationName:"message" type:"string"`

	// The upload's metadata. For example, for Android, this contains information
	// that is parsed from the manifest and is displayed in the AWS Device Farm
	// console after the associated app is uploaded.
	Metadata *string `locationName:"metadata" type:"string"`

	// The upload's file name.
	Name *string `locationName:"name" type:"string"`

	// The upload's status.
	//
	// Must be one of the following values:
	//
	//    * FAILED: A failed status.
	//
	//    * INITIALIZED: An initialized status.
	//
	//    * PROCESSING: A processing status.
	//
	//    * SUCCEEDED: A succeeded status.
	Status UploadStatus `locationName:"status" type:"string" enum:"true"`

	// The upload's type.
	//
	// Must be one of the following values:
	//
	//    * ANDROID_APP: An Android upload.
	//
	//    * IOS_APP: An iOS upload.
	//
	//    * WEB_APP: A web application upload.
	//
	//    * EXTERNAL_DATA: An external data upload.
	//
	//    * APPIUM_JAVA_JUNIT_TEST_PACKAGE: An Appium Java JUnit test package upload.
	//
	//    * APPIUM_JAVA_TESTNG_TEST_PACKAGE: An Appium Java TestNG test package
	//    upload.
	//
	//    * APPIUM_PYTHON_TEST_PACKAGE: An Appium Python test package upload.
	//
	//    * APPIUM_NODE_TEST_PACKAGE: An Appium Node.js test package upload.
	//
	//    * APPIUM_RUBY_TEST_PACKAGE: An Appium Ruby test package upload.
	//
	//    * APPIUM_WEB_JAVA_JUNIT_TEST_PACKAGE: An Appium Java JUnit test package
	//    upload for web apps.
	//
	//    * APPIUM_WEB_JAVA_TESTNG_TEST_PACKAGE: An Appium Java TestNG test package
	//    upload for web apps.
	//
	//    * APPIUM_WEB_PYTHON_TEST_PACKAGE: An Appium Python test package upload
	//    for web apps.
	//
	//    * APPIUM_WEB_NODE_TEST_PACKAGE: An Appium Node.js test package upload
	//    for web apps.
	//
	//    * APPIUM_WEB_RUBY_TEST_PACKAGE: An Appium Ruby test package upload for
	//    web apps.
	//
	//    * CALABASH_TEST_PACKAGE: A Calabash test package upload.
	//
	//    * INSTRUMENTATION_TEST_PACKAGE: An instrumentation upload.
	//
	//    * UIAUTOMATION_TEST_PACKAGE: A uiautomation test package upload.
	//
	//    * UIAUTOMATOR_TEST_PACKAGE: A uiautomator test package upload.
	//
	//    * XCTEST_TEST_PACKAGE: An Xcode test package upload.
	//
	//    * XCTEST_UI_TEST_PACKAGE: An Xcode UI test package upload.
	//
	//    * APPIUM_JAVA_JUNIT_TEST_SPEC: An Appium Java JUnit test spec upload.
	//
	//    * APPIUM_JAVA_TESTNG_TEST_SPEC: An Appium Java TestNG test spec upload.
	//
	//    * APPIUM_PYTHON_TEST_SPEC: An Appium Python test spec upload.
	//
	//    * APPIUM_NODE_TEST_SPEC: An Appium Node.js test spec upload.
	//
	//    * APPIUM_RUBY_TEST_SPEC: An Appium Ruby test spec upload.
	//
	//    * APPIUM_WEB_JAVA_JUNIT_TEST_SPEC: An Appium Java JUnit test spec upload
	//    for a web app.
	//
	//    * APPIUM_WEB_JAVA_TESTNG_TEST_SPEC: An Appium Java TestNG test spec upload
	//    for a web app.
	//
	//    * APPIUM_WEB_PYTHON_TEST_SPEC: An Appium Python test spec upload for a
	//    web app.
	//
	//    * APPIUM_WEB_NODE_TEST_SPEC: An Appium Node.js test spec upload for a
	//    web app.
	//
	//    * APPIUM_WEB_RUBY_TEST_SPEC: An Appium Ruby test spec upload for a web
	//    app.
	//
	//    * INSTRUMENTATION_TEST_SPEC: An instrumentation test spec upload.
	//
	//    * XCTEST_UI_TEST_SPEC: An Xcode UI test spec upload.
	Type UploadType `locationName:"type" type:"string" enum:"true"`

	// The pre-signed Amazon S3 URL that was used to store a file through a corresponding
	// PUT request.
	Url *string `locationName:"url" type:"string"`
}

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

// Represents an Amazon Virtual Private Cloud (VPC) endpoint configuration.
type VPCEConfiguration struct {
	_ struct{} `type:"structure"`

	// The Amazon Resource Name (ARN) of the VPC endpoint configuration.
	Arn *string `locationName:"arn" min:"32" type:"string"`

	// The DNS name that maps to the private IP address of the service you want
	// to access.
	ServiceDnsName *string `locationName:"serviceDnsName" type:"string"`

	// An optional description, providing more details about your VPC endpoint configuration.
	VpceConfigurationDescription *string `locationName:"vpceConfigurationDescription" type:"string"`

	// The friendly name you give to your VPC endpoint configuration, to manage
	// your configurations more easily.
	VpceConfigurationName *string `locationName:"vpceConfigurationName" type:"string"`

	// The name of the VPC endpoint service running inside your AWS account that
	// you want Device Farm to test.
	VpceServiceName *string `locationName:"vpceServiceName" type:"string"`
}

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