# frozen_string_literal: true

# WARNING ABOUT GENERATED CODE
#
# This file is generated. See the contributing guide for more information:
# https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
#
# WARNING ABOUT GENERATED CODE

module Aws::DeviceFarm
  module Types

    # A container for account-level settings in AWS Device Farm.
    #
    # @!attribute [rw] aws_account_number
    #   The AWS account number specified in the `AccountSettings` container.
    #   @return [String]
    #
    # @!attribute [rw] unmetered_devices
    #   Returns the unmetered devices you have purchased or want to
    #   purchase.
    #   @return [Hash<String,Integer>]
    #
    # @!attribute [rw] unmetered_remote_access_devices
    #   Returns the unmetered remote access devices you have purchased or
    #   want to purchase.
    #   @return [Hash<String,Integer>]
    #
    # @!attribute [rw] max_job_timeout_minutes
    #   The maximum number of minutes a test run executes before it times
    #   out.
    #   @return [Integer]
    #
    # @!attribute [rw] trial_minutes
    #   Information about an AWS account's usage of free trial device
    #   minutes.
    #   @return [Types::TrialMinutes]
    #
    # @!attribute [rw] max_slots
    #   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.
    #   @return [Hash<String,Integer>]
    #
    # @!attribute [rw] default_job_timeout_minutes
    #   The default number of minutes (at the account level) a test run
    #   executes before it times out. The default value is 150 minutes.
    #   @return [Integer]
    #
    # @!attribute [rw] skip_app_resign
    #   When set to `true`, for private devices, Device Farm does not sign
    #   your app again. For public devices, Device Farm always signs your
    #   apps again.
    #
    #   For more information about how Device Farm re-signs your apps, see
    #   [Do you modify my app?][1] in the *AWS Device Farm FAQs*.
    #
    #
    #
    #   [1]: http://aws.amazon.com/device-farm/faqs/
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/AccountSettings AWS API Documentation
    #
    class AccountSettings < Struct.new(
      :aws_account_number,
      :unmetered_devices,
      :unmetered_remote_access_devices,
      :max_job_timeout_minutes,
      :trial_minutes,
      :max_slots,
      :default_job_timeout_minutes,
      :skip_app_resign)
      SENSITIVE = []
      include Aws::Structure
    end

    # An invalid argument was specified.
    #
    # @!attribute [rw] message
    #   Any additional information about the exception.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ArgumentException AWS API Documentation
    #
    class ArgumentException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the output of a test. Examples of artifacts include logs
    # and screenshots.
    #
    # @!attribute [rw] arn
    #   The artifact's ARN.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The artifact's name.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The artifact's type.
    #
    #   Allowed values include the following:
    #
    #   * UNKNOWN
    #
    #   * SCREENSHOT
    #
    #   * DEVICE\_LOG
    #
    #   * MESSAGE\_LOG
    #
    #   * VIDEO\_LOG
    #
    #   * RESULT\_LOG
    #
    #   * SERVICE\_LOG
    #
    #   * WEBKIT\_LOG
    #
    #   * INSTRUMENTATION\_OUTPUT
    #
    #   * EXERCISER\_MONKEY\_OUTPUT: the artifact (log) generated by an
    #     Android fuzz test.
    #
    #   * APPIUM\_SERVER\_OUTPUT
    #
    #   * APPIUM\_JAVA\_OUTPUT
    #
    #   * APPIUM\_JAVA\_XML\_OUTPUT
    #
    #   * APPIUM\_PYTHON\_OUTPUT
    #
    #   * APPIUM\_PYTHON\_XML\_OUTPUT
    #
    #   * APPLICATION\_CRASH\_REPORT
    #
    #   * XCTEST\_LOG
    #
    #   * VIDEO
    #
    #   * CUSTOMER\_ARTIFACT
    #
    #   * CUSTOMER\_ARTIFACT\_LOG
    #
    #   * TESTSPEC\_OUTPUT
    #   @return [String]
    #
    # @!attribute [rw] extension
    #   The artifact's file extension.
    #   @return [String]
    #
    # @!attribute [rw] url
    #   The presigned Amazon S3 URL that can be used with a GET request to
    #   download the artifact's file.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Artifact AWS API Documentation
    #
    class Artifact < Struct.new(
      :arn,
      :name,
      :type,
      :extension,
      :url)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the amount of CPU that an app is using on a physical
    # device. Does not represent system-wide CPU usage.
    #
    # @!attribute [rw] frequency
    #   The CPU's frequency.
    #   @return [String]
    #
    # @!attribute [rw] architecture
    #   The CPU's architecture (for example, x86 or ARM).
    #   @return [String]
    #
    # @!attribute [rw] clock
    #   The clock speed of the device's CPU, expressed in hertz (Hz). For
    #   example, a 1.2 GHz CPU is expressed as 1200000000.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CPU AWS API Documentation
    #
    class CPU < Struct.new(
      :frequency,
      :architecture,
      :clock)
      SENSITIVE = []
      include Aws::Structure
    end

    # The requested object could not be deleted.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CannotDeleteException AWS API Documentation
    #
    class CannotDeleteException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents entity counters.
    #
    # @!attribute [rw] total
    #   The total number of entities.
    #   @return [Integer]
    #
    # @!attribute [rw] passed
    #   The number of passed entities.
    #   @return [Integer]
    #
    # @!attribute [rw] failed
    #   The number of failed entities.
    #   @return [Integer]
    #
    # @!attribute [rw] warned
    #   The number of warned entities.
    #   @return [Integer]
    #
    # @!attribute [rw] errored
    #   The number of errored entities.
    #   @return [Integer]
    #
    # @!attribute [rw] stopped
    #   The number of stopped entities.
    #   @return [Integer]
    #
    # @!attribute [rw] skipped
    #   The number of skipped entities.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Counters AWS API Documentation
    #
    class Counters < Struct.new(
      :total,
      :passed,
      :failed,
      :warned,
      :errored,
      :stopped,
      :skipped)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the create device pool operation.
    #
    # @!attribute [rw] project_arn
    #   The ARN of the project for the device pool.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The device pool's name.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The device pool's description.
    #   @return [String]
    #
    # @!attribute [rw] rules
    #   The device pool's rules.
    #   @return [Array<Types::Rule>]
    #
    # @!attribute [rw] max_devices
    #   The number of devices that Device Farm can add to your device pool.
    #   Device Farm adds devices that are available and 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.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateDevicePoolRequest AWS API Documentation
    #
    class CreateDevicePoolRequest < Struct.new(
      :project_arn,
      :name,
      :description,
      :rules,
      :max_devices)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a create device pool request.
    #
    # @!attribute [rw] device_pool
    #   The newly created device pool.
    #   @return [Types::DevicePool]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateDevicePoolResult AWS API Documentation
    #
    class CreateDevicePoolResult < Struct.new(
      :device_pool)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] name
    #   The name of your instance profile.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of your instance profile.
    #   @return [String]
    #
    # @!attribute [rw] package_cleanup
    #   When set to `true`, Device Farm removes app packages after a test
    #   run. The default value is `false` for private devices.
    #   @return [Boolean]
    #
    # @!attribute [rw] exclude_app_packages_from_cleanup
    #   An array of strings that specifies the list of app packages that
    #   should not be cleaned up from the device after a test run.
    #
    #   The list of packages is considered only if you set `packageCleanup`
    #   to `true`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] reboot_after_use
    #   When set to `true`, Device Farm reboots the instance after a test
    #   run. The default value is `true`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateInstanceProfileRequest AWS API Documentation
    #
    class CreateInstanceProfileRequest < Struct.new(
      :name,
      :description,
      :package_cleanup,
      :exclude_app_packages_from_cleanup,
      :reboot_after_use)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_profile
    #   An object that contains information about your instance profile.
    #   @return [Types::InstanceProfile]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateInstanceProfileResult AWS API Documentation
    #
    class CreateInstanceProfileResult < Struct.new(
      :instance_profile)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] project_arn
    #   The Amazon Resource Name (ARN) of the project for which you want to
    #   create a network profile.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name for the new network profile.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the network profile.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of network profile to create. Valid values are listed here.
    #   @return [String]
    #
    # @!attribute [rw] uplink_bandwidth_bits
    #   The data throughput rate in bits per second, as an integer from 0 to
    #   104857600.
    #   @return [Integer]
    #
    # @!attribute [rw] downlink_bandwidth_bits
    #   The data throughput rate in bits per second, as an integer from 0 to
    #   104857600.
    #   @return [Integer]
    #
    # @!attribute [rw] uplink_delay_ms
    #   Delay time for all packets to destination in milliseconds as an
    #   integer from 0 to 2000.
    #   @return [Integer]
    #
    # @!attribute [rw] downlink_delay_ms
    #   Delay time for all packets to destination in milliseconds as an
    #   integer from 0 to 2000.
    #   @return [Integer]
    #
    # @!attribute [rw] uplink_jitter_ms
    #   Time variation in the delay of received packets in milliseconds as
    #   an integer from 0 to 2000.
    #   @return [Integer]
    #
    # @!attribute [rw] downlink_jitter_ms
    #   Time variation in the delay of received packets in milliseconds as
    #   an integer from 0 to 2000.
    #   @return [Integer]
    #
    # @!attribute [rw] uplink_loss_percent
    #   Proportion of transmitted packets that fail to arrive from 0 to 100
    #   percent.
    #   @return [Integer]
    #
    # @!attribute [rw] downlink_loss_percent
    #   Proportion of received packets that fail to arrive from 0 to 100
    #   percent.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateNetworkProfileRequest AWS API Documentation
    #
    class CreateNetworkProfileRequest < Struct.new(
      :project_arn,
      :name,
      :description,
      :type,
      :uplink_bandwidth_bits,
      :downlink_bandwidth_bits,
      :uplink_delay_ms,
      :downlink_delay_ms,
      :uplink_jitter_ms,
      :downlink_jitter_ms,
      :uplink_loss_percent,
      :downlink_loss_percent)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_profile
    #   The network profile that is returned by the create network profile
    #   request.
    #   @return [Types::NetworkProfile]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateNetworkProfileResult AWS API Documentation
    #
    class CreateNetworkProfileResult < Struct.new(
      :network_profile)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the create project operation.
    #
    # @!attribute [rw] name
    #   The project's name.
    #   @return [String]
    #
    # @!attribute [rw] default_job_timeout_minutes
    #   Sets the execution timeout value (in minutes) for a project. All
    #   test runs in this project use the specified execution timeout value
    #   unless overridden when scheduling a run.
    #   @return [Integer]
    #
    # @!attribute [rw] vpc_config
    #   The VPC security groups and subnets that are attached to a project.
    #   @return [Types::VpcConfig]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateProjectRequest AWS API Documentation
    #
    class CreateProjectRequest < Struct.new(
      :name,
      :default_job_timeout_minutes,
      :vpc_config)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a create project request.
    #
    # @!attribute [rw] project
    #   The newly created project.
    #   @return [Types::Project]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateProjectResult AWS API Documentation
    #
    class CreateProjectResult < Struct.new(
      :project)
      SENSITIVE = []
      include Aws::Structure
    end

    # Configuration settings for a remote access session, including billing
    # method.
    #
    # @!attribute [rw] billing_method
    #   The billing method for the remote access session.
    #   @return [String]
    #
    # @!attribute [rw] vpce_configuration_arns
    #   An array of ARNs included in the VPC endpoint configuration.
    #   @return [Array<String>]
    #
    # @!attribute [rw] device_proxy
    #   The device proxy to be configured on the device for the remote
    #   access session.
    #   @return [Types::DeviceProxy]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateRemoteAccessSessionConfiguration AWS API Documentation
    #
    class CreateRemoteAccessSessionConfiguration < Struct.new(
      :billing_method,
      :vpce_configuration_arns,
      :device_proxy)
      SENSITIVE = []
      include Aws::Structure
    end

    # Creates and submits a request to start a remote access session.
    #
    # @!attribute [rw] project_arn
    #   The Amazon Resource Name (ARN) of the project for which you want to
    #   create a remote access session.
    #   @return [String]
    #
    # @!attribute [rw] device_arn
    #   The ARN of the device for which you want to create a remote access
    #   session.
    #   @return [String]
    #
    # @!attribute [rw] instance_arn
    #   The Amazon Resource Name (ARN) of the device instance for which you
    #   want to create a remote access session.
    #   @return [String]
    #
    # @!attribute [rw] ssh_public_key
    #   Ignored. The public key of the `ssh` key pair you want to use for
    #   connecting to remote devices in your remote debugging session. This
    #   key is required only if `remoteDebugEnabled` is set to `true`.
    #
    #   Remote debugging is [no longer supported][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html
    #   @return [String]
    #
    # @!attribute [rw] remote_debug_enabled
    #   Set to `true` if you want to access devices remotely for debugging
    #   in your remote access session.
    #
    #   Remote debugging is [no longer supported][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html
    #   @return [Boolean]
    #
    # @!attribute [rw] remote_record_enabled
    #   Set to `true` to enable remote recording for the remote access
    #   session.
    #   @return [Boolean]
    #
    # @!attribute [rw] remote_record_app_arn
    #   The Amazon Resource Name (ARN) for the app to be recorded in the
    #   remote access session.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the remote access session to create.
    #   @return [String]
    #
    # @!attribute [rw] client_id
    #   Unique identifier for the client. If you want access to multiple
    #   devices on the same client, you should pass the same `clientId`
    #   value in each call to `CreateRemoteAccessSession`. This identifier
    #   is required only if `remoteDebugEnabled` is set to `true`.
    #
    #   Remote debugging is [no longer supported][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html
    #   @return [String]
    #
    # @!attribute [rw] configuration
    #   The configuration information for the remote access session request.
    #   @return [Types::CreateRemoteAccessSessionConfiguration]
    #
    # @!attribute [rw] interaction_mode
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] skip_app_resign
    #   When set to `true`, for private devices, Device Farm does not sign
    #   your app again. For public devices, Device Farm always signs your
    #   apps again.
    #
    #   For more information on how Device Farm modifies your uploads during
    #   tests, see [Do you modify my app?][1]
    #
    #
    #
    #   [1]: http://aws.amazon.com/device-farm/faqs/
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateRemoteAccessSessionRequest AWS API Documentation
    #
    class CreateRemoteAccessSessionRequest < Struct.new(
      :project_arn,
      :device_arn,
      :instance_arn,
      :ssh_public_key,
      :remote_debug_enabled,
      :remote_record_enabled,
      :remote_record_app_arn,
      :name,
      :client_id,
      :configuration,
      :interaction_mode,
      :skip_app_resign)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the server response from a request to create a remote
    # access session.
    #
    # @!attribute [rw] remote_access_session
    #   A container that describes the remote access session when the
    #   request to create a remote access session is sent.
    #   @return [Types::RemoteAccessSession]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateRemoteAccessSessionResult AWS API Documentation
    #
    class CreateRemoteAccessSessionResult < Struct.new(
      :remote_access_session)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] name
    #   Human-readable name of the Selenium testing project.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   Human-readable description of the project.
    #   @return [String]
    #
    # @!attribute [rw] vpc_config
    #   The VPC security groups and subnets that are attached to a project.
    #   @return [Types::TestGridVpcConfig]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateTestGridProjectRequest AWS API Documentation
    #
    class CreateTestGridProjectRequest < Struct.new(
      :name,
      :description,
      :vpc_config)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] test_grid_project
    #   ARN of the Selenium testing project that was created.
    #   @return [Types::TestGridProject]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateTestGridProjectResult AWS API Documentation
    #
    class CreateTestGridProjectResult < Struct.new(
      :test_grid_project)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] project_arn
    #   ARN (from CreateTestGridProject or ListTestGridProjects) to
    #   associate with the short-term URL.
    #   @return [String]
    #
    # @!attribute [rw] expires_in_seconds
    #   Lifetime, in seconds, of the URL.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateTestGridUrlRequest AWS API Documentation
    #
    class CreateTestGridUrlRequest < Struct.new(
      :project_arn,
      :expires_in_seconds)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] url
    #   A signed URL, expiring in CreateTestGridUrlRequest$expiresInSeconds
    #   seconds, to be passed to a `RemoteWebDriver`.
    #   @return [String]
    #
    # @!attribute [rw] expires
    #   The number of seconds the URL from CreateTestGridUrlResult$url stays
    #   active.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateTestGridUrlResult AWS API Documentation
    #
    class CreateTestGridUrlResult < Struct.new(
      :url,
      :expires)
      SENSITIVE = [:url]
      include Aws::Structure
    end

    # Represents a request to the create upload operation.
    #
    # @!attribute [rw] project_arn
    #   The ARN of the project for the upload.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The upload's file name. The name should not contain any forward
    #   slashes (`/`). If you are uploading an iOS app, the file name must
    #   end with the `.ipa` extension. If you are uploading an Android app,
    #   the file name must end with the `.apk` extension. For all others,
    #   the file name must end with the `.zip` file extension.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The upload's upload type.
    #
    #   Must be one of the following values:
    #
    #   * ANDROID\_APP
    #
    #   * IOS\_APP
    #
    #   * WEB\_APP
    #
    #   * EXTERNAL\_DATA
    #
    #   * APPIUM\_JAVA\_JUNIT\_TEST\_PACKAGE
    #
    #   * APPIUM\_JAVA\_TESTNG\_TEST\_PACKAGE
    #
    #   * APPIUM\_PYTHON\_TEST\_PACKAGE
    #
    #   * APPIUM\_NODE\_TEST\_PACKAGE
    #
    #   * APPIUM\_RUBY\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_JAVA\_JUNIT\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_JAVA\_TESTNG\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_PYTHON\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_NODE\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_RUBY\_TEST\_PACKAGE
    #
    #   * INSTRUMENTATION\_TEST\_PACKAGE
    #
    #   * XCTEST\_TEST\_PACKAGE
    #
    #   * XCTEST\_UI\_TEST\_PACKAGE
    #
    #   * APPIUM\_JAVA\_JUNIT\_TEST\_SPEC
    #
    #   * APPIUM\_JAVA\_TESTNG\_TEST\_SPEC
    #
    #   * APPIUM\_PYTHON\_TEST\_SPEC
    #
    #   * APPIUM\_NODE\_TEST\_SPEC
    #
    #   * APPIUM\_RUBY\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_JAVA\_JUNIT\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_JAVA\_TESTNG\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_PYTHON\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_NODE\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_RUBY\_TEST\_SPEC
    #
    #   * INSTRUMENTATION\_TEST\_SPEC
    #
    #   * XCTEST\_UI\_TEST\_SPEC
    #
    #   If you call `CreateUpload` with `WEB_APP` specified, AWS Device Farm
    #   throws an `ArgumentException` error.
    #   @return [String]
    #
    # @!attribute [rw] content_type
    #   The upload's content type (for example,
    #   `application/octet-stream`).
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateUploadRequest AWS API Documentation
    #
    class CreateUploadRequest < Struct.new(
      :project_arn,
      :name,
      :type,
      :content_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a create upload request.
    #
    # @!attribute [rw] upload
    #   The newly created upload.
    #   @return [Types::Upload]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateUploadResult AWS API Documentation
    #
    class CreateUploadResult < Struct.new(
      :upload)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpce_configuration_name
    #   The friendly name you give to your VPC endpoint configuration, to
    #   manage your configurations more easily.
    #   @return [String]
    #
    # @!attribute [rw] vpce_service_name
    #   The name of the VPC endpoint service running in your AWS account
    #   that you want Device Farm to test.
    #   @return [String]
    #
    # @!attribute [rw] service_dns_name
    #   The DNS name of the service running in your VPC that you want Device
    #   Farm to test.
    #   @return [String]
    #
    # @!attribute [rw] vpce_configuration_description
    #   An optional description that provides details about your VPC
    #   endpoint configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateVPCEConfigurationRequest AWS API Documentation
    #
    class CreateVPCEConfigurationRequest < Struct.new(
      :vpce_configuration_name,
      :vpce_service_name,
      :service_dns_name,
      :vpce_configuration_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpce_configuration
    #   An object that contains information about your VPC endpoint
    #   configuration.
    #   @return [Types::VPCEConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CreateVPCEConfigurationResult AWS API Documentation
    #
    class CreateVPCEConfigurationResult < Struct.new(
      :vpce_configuration)
      SENSITIVE = []
      include Aws::Structure
    end

    # A JSON object that specifies the paths where the artifacts generated
    # by the customer's tests, on the device or in the test environment,
    # are pulled from.
    #
    # Specify `deviceHostPaths` and optionally specify either `iosPaths` or
    # `androidPaths`.
    #
    # For web app tests, you can specify both `iosPaths` and `androidPaths`.
    #
    # @!attribute [rw] ios_paths
    #   Comma-separated list of paths on the iOS device where the artifacts
    #   generated by the customer's tests are pulled from.
    #   @return [Array<String>]
    #
    # @!attribute [rw] android_paths
    #   Comma-separated list of paths on the Android device where the
    #   artifacts generated by the customer's tests are pulled from.
    #   @return [Array<String>]
    #
    # @!attribute [rw] device_host_paths
    #   Comma-separated list of paths in the test execution environment
    #   where the artifacts generated by the customer's tests are pulled
    #   from.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/CustomerArtifactPaths AWS API Documentation
    #
    class CustomerArtifactPaths < Struct.new(
      :ios_paths,
      :android_paths,
      :device_host_paths)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the delete device pool operation.
    #
    # @!attribute [rw] arn
    #   Represents the Amazon Resource Name (ARN) of the Device Farm device
    #   pool to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteDevicePoolRequest AWS API Documentation
    #
    class DeleteDevicePoolRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a delete device pool request.
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteDevicePoolResult AWS API Documentation
    #
    class DeleteDevicePoolResult < Aws::EmptyStructure; end

    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the instance profile you are
    #   requesting to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteInstanceProfileRequest AWS API Documentation
    #
    class DeleteInstanceProfileRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteInstanceProfileResult AWS API Documentation
    #
    class DeleteInstanceProfileResult < Aws::EmptyStructure; end

    # @!attribute [rw] arn
    #   The ARN of the network profile to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteNetworkProfileRequest AWS API Documentation
    #
    class DeleteNetworkProfileRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteNetworkProfileResult AWS API Documentation
    #
    class DeleteNetworkProfileResult < Aws::EmptyStructure; end

    # Represents a request to the delete project operation.
    #
    # @!attribute [rw] arn
    #   Represents the Amazon Resource Name (ARN) of the Device Farm project
    #   to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteProjectRequest AWS API Documentation
    #
    class DeleteProjectRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a delete project request.
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteProjectResult AWS API Documentation
    #
    class DeleteProjectResult < Aws::EmptyStructure; end

    # Represents the request to delete the specified remote access session.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the session for which you want to
    #   delete remote access.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteRemoteAccessSessionRequest AWS API Documentation
    #
    class DeleteRemoteAccessSessionRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # The response from the server when a request is made to delete the
    # remote access session.
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteRemoteAccessSessionResult AWS API Documentation
    #
    class DeleteRemoteAccessSessionResult < Aws::EmptyStructure; end

    # Represents a request to the delete run operation.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) for the run to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteRunRequest AWS API Documentation
    #
    class DeleteRunRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a delete run request.
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteRunResult AWS API Documentation
    #
    class DeleteRunResult < Aws::EmptyStructure; end

    # @!attribute [rw] project_arn
    #   The ARN of the project to delete, from CreateTestGridProject or
    #   ListTestGridProjects.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteTestGridProjectRequest AWS API Documentation
    #
    class DeleteTestGridProjectRequest < Struct.new(
      :project_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteTestGridProjectResult AWS API Documentation
    #
    class DeleteTestGridProjectResult < Aws::EmptyStructure; end

    # Represents a request to the delete upload operation.
    #
    # @!attribute [rw] arn
    #   Represents the Amazon Resource Name (ARN) of the Device Farm upload
    #   to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteUploadRequest AWS API Documentation
    #
    class DeleteUploadRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a delete upload request.
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteUploadResult AWS API Documentation
    #
    class DeleteUploadResult < Aws::EmptyStructure; end

    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the VPC endpoint configuration you
    #   want to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteVPCEConfigurationRequest AWS API Documentation
    #
    class DeleteVPCEConfigurationRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeleteVPCEConfigurationResult AWS API Documentation
    #
    class DeleteVPCEConfigurationResult < Aws::EmptyStructure; end

    # Represents a device type that an app is tested against.
    #
    # @!attribute [rw] arn
    #   The device's ARN.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The device's display name.
    #   @return [String]
    #
    # @!attribute [rw] manufacturer
    #   The device's manufacturer name.
    #   @return [String]
    #
    # @!attribute [rw] model
    #   The device's model name.
    #   @return [String]
    #
    # @!attribute [rw] model_id
    #   The device's model ID.
    #   @return [String]
    #
    # @!attribute [rw] form_factor
    #   The device's form factor.
    #
    #   Allowed values include:
    #
    #   * PHONE
    #
    #   * TABLET
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   The device's platform.
    #
    #   Allowed values include:
    #
    #   * ANDROID
    #
    #   * IOS
    #   @return [String]
    #
    # @!attribute [rw] os
    #   The device's operating system type.
    #   @return [String]
    #
    # @!attribute [rw] cpu
    #   Information about the device's CPU.
    #   @return [Types::CPU]
    #
    # @!attribute [rw] resolution
    #   The resolution of the device.
    #   @return [Types::Resolution]
    #
    # @!attribute [rw] heap_size
    #   The device's heap size, expressed in bytes.
    #   @return [Integer]
    #
    # @!attribute [rw] memory
    #   The device's total memory size, expressed in bytes.
    #   @return [Integer]
    #
    # @!attribute [rw] image
    #   The device's image name.
    #   @return [String]
    #
    # @!attribute [rw] carrier
    #   The device's carrier.
    #   @return [String]
    #
    # @!attribute [rw] radio
    #   The device's radio.
    #   @return [String]
    #
    # @!attribute [rw] remote_access_enabled
    #   Specifies whether remote access has been enabled for the specified
    #   device.
    #   @return [Boolean]
    #
    # @!attribute [rw] remote_debug_enabled
    #   This flag is set to `true` if remote debugging is enabled for the
    #   device.
    #
    #   Remote debugging is [no longer supported][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html
    #   @return [Boolean]
    #
    # @!attribute [rw] fleet_type
    #   The type of fleet to which this device belongs. Possible values are
    #   PRIVATE and PUBLIC.
    #   @return [String]
    #
    # @!attribute [rw] fleet_name
    #   The name of the fleet to which this device belongs.
    #   @return [String]
    #
    # @!attribute [rw] instances
    #   The instances that belong to this device.
    #   @return [Array<Types::DeviceInstance>]
    #
    # @!attribute [rw] availability
    #   Indicates how likely a device is available for a test run. Currently
    #   available in the ListDevices and GetDevice API methods.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Device AWS API Documentation
    #
    class Device < Struct.new(
      :arn,
      :name,
      :manufacturer,
      :model,
      :model_id,
      :form_factor,
      :platform,
      :os,
      :cpu,
      :resolution,
      :heap_size,
      :memory,
      :image,
      :carrier,
      :radio,
      :remote_access_enabled,
      :remote_debug_enabled,
      :fleet_type,
      :fleet_name,
      :instances,
      :availability)
      SENSITIVE = []
      include Aws::Structure
    end

    # 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.
    #
    # @!attribute [rw] attribute
    #   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
    #
    #   : Whether the device is enabled for remote debugging. Valid values
    #     are TRUE or FALSE.
    #
    #     Supported operators: `EQUALS`
    #
    #     Because remote debugging is [no longer supported][1], this filter
    #     is ignored.
    #
    #   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`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html
    #   @return [String]
    #
    # @!attribute [rw] operator
    #   Specifies how Device Farm compares the filter's attribute to the
    #   value. See the attribute descriptions.
    #   @return [String]
    #
    # @!attribute [rw] values
    #   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.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeviceFilter AWS API Documentation
    #
    class DeviceFilter < Struct.new(
      :attribute,
      :operator,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the device instance.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the device instance.
    #   @return [String]
    #
    # @!attribute [rw] device_arn
    #   The ARN of the device.
    #   @return [String]
    #
    # @!attribute [rw] labels
    #   An array of strings that describe the device instance.
    #   @return [Array<String>]
    #
    # @!attribute [rw] status
    #   The status of the device instance. Valid values are listed here.
    #   @return [String]
    #
    # @!attribute [rw] udid
    #   Unique device identifier for the device instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_profile
    #   A object that contains information about the instance profile.
    #   @return [Types::InstanceProfile]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeviceInstance AWS API Documentation
    #
    class DeviceInstance < Struct.new(
      :arn,
      :device_arn,
      :labels,
      :status,
      :udid,
      :instance_profile)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the total (metered or unmetered) minutes used by the
    # resource to run tests. Contains the sum of minutes consumed by all
    # children.
    #
    # @!attribute [rw] total
    #   When specified, represents the total minutes used by the resource to
    #   run tests.
    #   @return [Float]
    #
    # @!attribute [rw] metered
    #   When specified, represents only the sum of metered minutes used by
    #   the resource to run tests.
    #   @return [Float]
    #
    # @!attribute [rw] unmetered
    #   When specified, represents only the sum of unmetered minutes used by
    #   the resource to run tests.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeviceMinutes AWS API Documentation
    #
    class DeviceMinutes < Struct.new(
      :total,
      :metered,
      :unmetered)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a collection of device types.
    #
    # @!attribute [rw] arn
    #   The device pool's ARN.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The device pool's name.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The device pool's description.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] rules
    #   Information about the device pool's rules.
    #   @return [Array<Types::Rule>]
    #
    # @!attribute [rw] max_devices
    #   The number of devices that Device Farm can add to your device pool.
    #   Device Farm adds devices that are available and 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.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DevicePool AWS API Documentation
    #
    class DevicePool < Struct.new(
      :arn,
      :name,
      :description,
      :type,
      :rules,
      :max_devices)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a device pool compatibility result.
    #
    # @!attribute [rw] device
    #   The device (phone or tablet) to return information about.
    #   @return [Types::Device]
    #
    # @!attribute [rw] compatible
    #   Whether the result was compatible with the device pool.
    #   @return [Boolean]
    #
    # @!attribute [rw] incompatibility_messages
    #   Information about the compatibility.
    #   @return [Array<Types::IncompatibilityMessage>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DevicePoolCompatibilityResult AWS API Documentation
    #
    class DevicePoolCompatibilityResult < Struct.new(
      :device,
      :compatible,
      :incompatibility_messages)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the http/s proxy configuration that will be applied to a
    # device during a run.
    #
    # @!attribute [rw] host
    #   Hostname or IPv4 address of the proxy.
    #   @return [String]
    #
    # @!attribute [rw] port
    #   The port number on which the http/s proxy is listening.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeviceProxy AWS API Documentation
    #
    class DeviceProxy < Struct.new(
      :host,
      :port)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the device filters used in a test run and the maximum
    # number of devices to be included in the run. It is passed in as the
    # `deviceSelectionConfiguration` request parameter in ScheduleRun.
    #
    # @!attribute [rw] filters
    #   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. Because remote
    #       debugging is [no longer supported][1], this filter is ignored.
    #
    #     * 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.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html
    #   @return [Array<Types::DeviceFilter>]
    #
    # @!attribute [rw] max_devices
    #   The maximum number of devices to be included in a test run.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeviceSelectionConfiguration AWS API Documentation
    #
    class DeviceSelectionConfiguration < Struct.new(
      :filters,
      :max_devices)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the run results requested by the device selection
    # configuration and how many devices were returned. For an example of
    # the JSON response syntax, see ScheduleRun.
    #
    # @!attribute [rw] filters
    #   The filters in a device selection result.
    #   @return [Array<Types::DeviceFilter>]
    #
    # @!attribute [rw] matched_devices_count
    #   The number of devices that matched the device filter selection
    #   criteria.
    #   @return [Integer]
    #
    # @!attribute [rw] max_devices
    #   The maximum number of devices to be selected by a device filter and
    #   included in a test run.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/DeviceSelectionResult AWS API Documentation
    #
    class DeviceSelectionResult < Struct.new(
      :filters,
      :matched_devices_count,
      :max_devices)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents configuration information about a test run, such as the
    # execution timeout (in minutes).
    #
    # @!attribute [rw] job_timeout_minutes
    #   The number of minutes a test run executes before it times out.
    #   @return [Integer]
    #
    # @!attribute [rw] accounts_cleanup
    #   True if account cleanup is enabled at the beginning of the test.
    #   Otherwise, false.
    #   @return [Boolean]
    #
    # @!attribute [rw] app_packages_cleanup
    #   True if app package cleanup is enabled at the beginning of the test.
    #   Otherwise, false.
    #   @return [Boolean]
    #
    # @!attribute [rw] video_capture
    #   Set to true to enable video capture. Otherwise, set to false. The
    #   default is true.
    #   @return [Boolean]
    #
    # @!attribute [rw] skip_app_resign
    #   When set to `true`, for private devices, Device Farm does not sign
    #   your app again. For public devices, Device Farm always signs your
    #   apps again.
    #
    #   For more information about how Device Farm re-signs your apps, see
    #   [Do you modify my app?][1] in the *AWS Device Farm FAQs*.
    #
    #
    #
    #   [1]: http://aws.amazon.com/device-farm/faqs/
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ExecutionConfiguration AWS API Documentation
    #
    class ExecutionConfiguration < Struct.new(
      :job_timeout_minutes,
      :accounts_cleanup,
      :app_packages_cleanup,
      :video_capture,
      :skip_app_resign)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the request sent to retrieve the account settings.
    #
    # @api private
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetAccountSettingsRequest AWS API Documentation
    #
    class GetAccountSettingsRequest < Aws::EmptyStructure; end

    # Represents the account settings return values from the
    # `GetAccountSettings` request.
    #
    # @!attribute [rw] account_settings
    #   The account settings.
    #   @return [Types::AccountSettings]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetAccountSettingsResult AWS API Documentation
    #
    class GetAccountSettingsResult < Struct.new(
      :account_settings)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the instance you're requesting
    #   information about.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetDeviceInstanceRequest AWS API Documentation
    #
    class GetDeviceInstanceRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] device_instance
    #   An object that contains information about your device instance.
    #   @return [Types::DeviceInstance]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetDeviceInstanceResult AWS API Documentation
    #
    class GetDeviceInstanceResult < Struct.new(
      :device_instance)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the get device pool compatibility operation.
    #
    # @!attribute [rw] device_pool_arn
    #   The device pool's ARN.
    #   @return [String]
    #
    # @!attribute [rw] app_arn
    #   The ARN of the app that is associated with the specified device
    #   pool.
    #   @return [String]
    #
    # @!attribute [rw] test_type
    #   The test type for the specified device pool.
    #
    #   Allowed values include the following:
    #
    #   * BUILTIN\_FUZZ.
    #
    #   * APPIUM\_JAVA\_JUNIT.
    #
    #   * APPIUM\_JAVA\_TESTNG.
    #
    #   * APPIUM\_PYTHON.
    #
    #   * APPIUM\_NODE.
    #
    #   * APPIUM\_RUBY.
    #
    #   * APPIUM\_WEB\_JAVA\_JUNIT.
    #
    #   * APPIUM\_WEB\_JAVA\_TESTNG.
    #
    #   * APPIUM\_WEB\_PYTHON.
    #
    #   * APPIUM\_WEB\_NODE.
    #
    #   * APPIUM\_WEB\_RUBY.
    #
    #   * INSTRUMENTATION.
    #
    #   * XCTEST.
    #
    #   * XCTEST\_UI.
    #   @return [String]
    #
    # @!attribute [rw] test
    #   Information about the uploaded test to be run against the device
    #   pool.
    #   @return [Types::ScheduleRunTest]
    #
    # @!attribute [rw] configuration
    #   An object that contains information about the settings for a run.
    #   @return [Types::ScheduleRunConfiguration]
    #
    # @!attribute [rw] project_arn
    #   The ARN of the project for which you want to check device pool
    #   compatibility.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetDevicePoolCompatibilityRequest AWS API Documentation
    #
    class GetDevicePoolCompatibilityRequest < Struct.new(
      :device_pool_arn,
      :app_arn,
      :test_type,
      :test,
      :configuration,
      :project_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of describe device pool compatibility request.
    #
    # @!attribute [rw] compatible_devices
    #   Information about compatible devices.
    #   @return [Array<Types::DevicePoolCompatibilityResult>]
    #
    # @!attribute [rw] incompatible_devices
    #   Information about incompatible devices.
    #   @return [Array<Types::DevicePoolCompatibilityResult>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetDevicePoolCompatibilityResult AWS API Documentation
    #
    class GetDevicePoolCompatibilityResult < Struct.new(
      :compatible_devices,
      :incompatible_devices)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the get device pool operation.
    #
    # @!attribute [rw] arn
    #   The device pool's ARN.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetDevicePoolRequest AWS API Documentation
    #
    class GetDevicePoolRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a get device pool request.
    #
    # @!attribute [rw] device_pool
    #   An object that contains information about the requested device pool.
    #   @return [Types::DevicePool]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetDevicePoolResult AWS API Documentation
    #
    class GetDevicePoolResult < Struct.new(
      :device_pool)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the get device request.
    #
    # @!attribute [rw] arn
    #   The device type's ARN.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetDeviceRequest AWS API Documentation
    #
    class GetDeviceRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a get device request.
    #
    # @!attribute [rw] device
    #   An object that contains information about the requested device.
    #   @return [Types::Device]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetDeviceResult AWS API Documentation
    #
    class GetDeviceResult < Struct.new(
      :device)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of an instance profile.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetInstanceProfileRequest AWS API Documentation
    #
    class GetInstanceProfileRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_profile
    #   An object that contains information about an instance profile.
    #   @return [Types::InstanceProfile]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetInstanceProfileResult AWS API Documentation
    #
    class GetInstanceProfileResult < Struct.new(
      :instance_profile)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the get job operation.
    #
    # @!attribute [rw] arn
    #   The job's ARN.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetJobRequest AWS API Documentation
    #
    class GetJobRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a get job request.
    #
    # @!attribute [rw] job
    #   An object that contains information about the requested job.
    #   @return [Types::Job]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetJobResult AWS API Documentation
    #
    class GetJobResult < Struct.new(
      :job)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] arn
    #   The ARN of the network profile to return information about.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetNetworkProfileRequest AWS API Documentation
    #
    class GetNetworkProfileRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_profile
    #   The network profile.
    #   @return [Types::NetworkProfile]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetNetworkProfileResult AWS API Documentation
    #
    class GetNetworkProfileResult < Struct.new(
      :network_profile)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the request to retrieve the offering status for the
    # specified customer or account.
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetOfferingStatusRequest AWS API Documentation
    #
    class GetOfferingStatusRequest < Struct.new(
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Returns the status result for a device offering.
    #
    # @!attribute [rw] current
    #   When specified, gets the offering status for the current period.
    #   @return [Hash<String,Types::OfferingStatus>]
    #
    # @!attribute [rw] next_period
    #   When specified, gets the offering status for the next period.
    #   @return [Hash<String,Types::OfferingStatus>]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetOfferingStatusResult AWS API Documentation
    #
    class GetOfferingStatusResult < Struct.new(
      :current,
      :next_period,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the get project operation.
    #
    # @!attribute [rw] arn
    #   The project's ARN.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetProjectRequest AWS API Documentation
    #
    class GetProjectRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a get project request.
    #
    # @!attribute [rw] project
    #   The project to get information about.
    #   @return [Types::Project]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetProjectResult AWS API Documentation
    #
    class GetProjectResult < Struct.new(
      :project)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the request to get information about the specified remote
    # access session.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the remote access session about
    #   which you want to get session information.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetRemoteAccessSessionRequest AWS API Documentation
    #
    class GetRemoteAccessSessionRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the response from the server that lists detailed
    # information about the remote access session.
    #
    # @!attribute [rw] remote_access_session
    #   A container that lists detailed information about the remote access
    #   session.
    #   @return [Types::RemoteAccessSession]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetRemoteAccessSessionResult AWS API Documentation
    #
    class GetRemoteAccessSessionResult < Struct.new(
      :remote_access_session)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the get run operation.
    #
    # @!attribute [rw] arn
    #   The run's ARN.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetRunRequest AWS API Documentation
    #
    class GetRunRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a get run request.
    #
    # @!attribute [rw] run
    #   The run to get results from.
    #   @return [Types::Run]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetRunResult AWS API Documentation
    #
    class GetRunResult < Struct.new(
      :run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the get suite operation.
    #
    # @!attribute [rw] arn
    #   The suite's ARN.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetSuiteRequest AWS API Documentation
    #
    class GetSuiteRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a get suite request.
    #
    # @!attribute [rw] suite
    #   A collection of one or more tests.
    #   @return [Types::Suite]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetSuiteResult AWS API Documentation
    #
    class GetSuiteResult < Struct.new(
      :suite)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] project_arn
    #   The ARN of the Selenium testing project, from either
    #   CreateTestGridProject or ListTestGridProjects.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetTestGridProjectRequest AWS API Documentation
    #
    class GetTestGridProjectRequest < Struct.new(
      :project_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] test_grid_project
    #   A TestGridProject.
    #   @return [Types::TestGridProject]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetTestGridProjectResult AWS API Documentation
    #
    class GetTestGridProjectResult < Struct.new(
      :test_grid_project)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] project_arn
    #   The ARN for the project that this session belongs to. See
    #   CreateTestGridProject and ListTestGridProjects.
    #   @return [String]
    #
    # @!attribute [rw] session_id
    #   An ID associated with this session.
    #   @return [String]
    #
    # @!attribute [rw] session_arn
    #   An ARN that uniquely identifies a TestGridSession.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetTestGridSessionRequest AWS API Documentation
    #
    class GetTestGridSessionRequest < Struct.new(
      :project_arn,
      :session_id,
      :session_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] test_grid_session
    #   The TestGridSession that was requested.
    #   @return [Types::TestGridSession]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetTestGridSessionResult AWS API Documentation
    #
    class GetTestGridSessionResult < Struct.new(
      :test_grid_session)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the get test operation.
    #
    # @!attribute [rw] arn
    #   The test's ARN.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetTestRequest AWS API Documentation
    #
    class GetTestRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a get test request.
    #
    # @!attribute [rw] test
    #   A test condition that is evaluated.
    #   @return [Types::Test]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetTestResult AWS API Documentation
    #
    class GetTestResult < Struct.new(
      :test)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the get upload operation.
    #
    # @!attribute [rw] arn
    #   The upload's ARN.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetUploadRequest AWS API Documentation
    #
    class GetUploadRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a get upload request.
    #
    # @!attribute [rw] upload
    #   An app or a set of one or more tests to upload or that have been
    #   uploaded.
    #   @return [Types::Upload]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetUploadResult AWS API Documentation
    #
    class GetUploadResult < Struct.new(
      :upload)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the VPC endpoint configuration you
    #   want to describe.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetVPCEConfigurationRequest AWS API Documentation
    #
    class GetVPCEConfigurationRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpce_configuration
    #   An object that contains information about your VPC endpoint
    #   configuration.
    #   @return [Types::VPCEConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/GetVPCEConfigurationResult AWS API Documentation
    #
    class GetVPCEConfigurationResult < Struct.new(
      :vpce_configuration)
      SENSITIVE = []
      include Aws::Structure
    end

    # An entity with the same name already exists.
    #
    # @!attribute [rw] message
    #   Any additional information about the exception.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/IdempotencyException AWS API Documentation
    #
    class IdempotencyException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents information about incompatibility.
    #
    # @!attribute [rw] message
    #   A message about the incompatibility.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of incompatibility.
    #
    #   Allowed values include:
    #
    #   * ARN
    #
    #   * FORM\_FACTOR (for example, phone or tablet)
    #
    #   * MANUFACTURER
    #
    #   * PLATFORM (for example, Android or iOS)
    #
    #   * REMOTE\_ACCESS\_ENABLED
    #
    #   * APPIUM\_VERSION
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/IncompatibilityMessage AWS API Documentation
    #
    class IncompatibilityMessage < Struct.new(
      :message,
      :type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the request to install an Android application (in .apk
    # format) or an iOS application (in .ipa format) as part of a remote
    # access session.
    #
    # @!attribute [rw] remote_access_session_arn
    #   The Amazon Resource Name (ARN) of the remote access session about
    #   which you are requesting information.
    #   @return [String]
    #
    # @!attribute [rw] app_arn
    #   The ARN of the app about which you are requesting information.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/InstallToRemoteAccessSessionRequest AWS API Documentation
    #
    class InstallToRemoteAccessSessionRequest < Struct.new(
      :remote_access_session_arn,
      :app_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the response from the server after AWS Device Farm makes a
    # request to install to a remote access session.
    #
    # @!attribute [rw] app_upload
    #   An app to upload or that has been uploaded.
    #   @return [Types::Upload]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/InstallToRemoteAccessSessionResult AWS API Documentation
    #
    class InstallToRemoteAccessSessionResult < Struct.new(
      :app_upload)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the instance profile.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the instance profile.
    #   @return [String]
    #
    # @!attribute [rw] package_cleanup
    #   When set to `true`, Device Farm removes app packages after a test
    #   run. The default value is `false` for private devices.
    #   @return [Boolean]
    #
    # @!attribute [rw] exclude_app_packages_from_cleanup
    #   An array of strings containing the list of app packages that should
    #   not be cleaned up from the device after a test run completes.
    #
    #   The list of packages is considered only if you set `packageCleanup`
    #   to `true`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] reboot_after_use
    #   When set to `true`, Device Farm reboots the instance after a test
    #   run. The default value is `true`.
    #   @return [Boolean]
    #
    # @!attribute [rw] name
    #   The name of the instance profile.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the instance profile.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/InstanceProfile AWS API Documentation
    #
    class InstanceProfile < Struct.new(
      :arn,
      :package_cleanup,
      :exclude_app_packages_from_cleanup,
      :reboot_after_use,
      :name,
      :description)
      SENSITIVE = []
      include Aws::Structure
    end

    # An internal exception was raised in the service. Contact
    # [aws-devicefarm-support@amazon.com](mailto:aws-devicefarm-support@amazon.com)
    # if you see this error.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/InternalServiceException AWS API Documentation
    #
    class InternalServiceException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # There was an error with the update request, or you do not have
    # sufficient permissions to update this VPC endpoint configuration.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/InvalidOperationException AWS API Documentation
    #
    class InvalidOperationException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a device.
    #
    # @!attribute [rw] arn
    #   The job's ARN.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The job's name.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The job's type.
    #
    #   Allowed values include the following:
    #
    #   * BUILTIN\_FUZZ
    #
    #   * APPIUM\_JAVA\_JUNIT
    #
    #   * APPIUM\_JAVA\_TESTNG
    #
    #   * APPIUM\_PYTHON
    #
    #   * APPIUM\_NODE
    #
    #   * APPIUM\_RUBY
    #
    #   * APPIUM\_WEB\_JAVA\_JUNIT
    #
    #   * APPIUM\_WEB\_JAVA\_TESTNG
    #
    #   * APPIUM\_WEB\_PYTHON
    #
    #   * APPIUM\_WEB\_NODE
    #
    #   * APPIUM\_WEB\_RUBY
    #
    #   * INSTRUMENTATION
    #
    #   * XCTEST
    #
    #   * XCTEST\_UI
    #   @return [String]
    #
    # @!attribute [rw] created
    #   When the job was created.
    #   @return [Time]
    #
    # @!attribute [rw] status
    #   The job's status.
    #
    #   Allowed values include:
    #
    #   * PENDING
    #
    #   * PENDING\_CONCURRENCY
    #
    #   * PENDING\_DEVICE
    #
    #   * PROCESSING
    #
    #   * SCHEDULING
    #
    #   * PREPARING
    #
    #   * RUNNING
    #
    #   * COMPLETED
    #
    #   * STOPPING
    #   @return [String]
    #
    # @!attribute [rw] result
    #   The job's result.
    #
    #   Allowed values include:
    #
    #   * PENDING
    #
    #   * PASSED
    #
    #   * WARNED
    #
    #   * FAILED
    #
    #   * SKIPPED
    #
    #   * ERRORED
    #
    #   * STOPPED
    #   @return [String]
    #
    # @!attribute [rw] started
    #   The job's start time.
    #   @return [Time]
    #
    # @!attribute [rw] stopped
    #   The job's stop time.
    #   @return [Time]
    #
    # @!attribute [rw] counters
    #   The job's result counters.
    #   @return [Types::Counters]
    #
    # @!attribute [rw] message
    #   A message about the job's result.
    #   @return [String]
    #
    # @!attribute [rw] device
    #   The device (phone or tablet).
    #   @return [Types::Device]
    #
    # @!attribute [rw] instance_arn
    #   The ARN of the instance.
    #   @return [String]
    #
    # @!attribute [rw] device_minutes
    #   Represents the total (metered or unmetered) minutes used by the job.
    #   @return [Types::DeviceMinutes]
    #
    # @!attribute [rw] video_endpoint
    #   The endpoint for streaming device video.
    #   @return [String]
    #
    # @!attribute [rw] video_capture
    #   This value is set to true if video capture is enabled. Otherwise, it
    #   is set to false.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Job AWS API Documentation
    #
    class Job < Struct.new(
      :arn,
      :name,
      :type,
      :created,
      :status,
      :result,
      :started,
      :stopped,
      :counters,
      :message,
      :device,
      :instance_arn,
      :device_minutes,
      :video_endpoint,
      :video_capture)
      SENSITIVE = []
      include Aws::Structure
    end

    # A limit was exceeded.
    #
    # @!attribute [rw] message
    #   Any additional information about the exception.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/LimitExceededException AWS API Documentation
    #
    class LimitExceededException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the list artifacts operation.
    #
    # @!attribute [rw] arn
    #   The run, job, suite, or test ARN.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The artifacts' type.
    #
    #   Allowed values include:
    #
    #   * FILE
    #
    #   * LOG
    #
    #   * SCREENSHOT
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListArtifactsRequest AWS API Documentation
    #
    class ListArtifactsRequest < Struct.new(
      :arn,
      :type,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a list artifacts operation.
    #
    # @!attribute [rw] artifacts
    #   Information about the artifacts.
    #   @return [Array<Types::Artifact>]
    #
    # @!attribute [rw] next_token
    #   If the number of items that are returned is significantly large,
    #   this is an identifier that is also returned. It can be used in a
    #   subsequent call to this operation to return the next set of items in
    #   the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListArtifactsResult AWS API Documentation
    #
    class ListArtifactsResult < Struct.new(
      :artifacts,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] max_results
    #   An integer that specifies the maximum number of items you want to
    #   return in the API response.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListDeviceInstancesRequest AWS API Documentation
    #
    class ListDeviceInstancesRequest < Struct.new(
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] device_instances
    #   An object that contains information about your device instances.
    #   @return [Array<Types::DeviceInstance>]
    #
    # @!attribute [rw] next_token
    #   An identifier that can be used in the next call to this operation to
    #   return the next set of items in the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListDeviceInstancesResult AWS API Documentation
    #
    class ListDeviceInstancesResult < Struct.new(
      :device_instances,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a list device pools request.
    #
    # @!attribute [rw] arn
    #   The project ARN.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The device pools' 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.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListDevicePoolsRequest AWS API Documentation
    #
    class ListDevicePoolsRequest < Struct.new(
      :arn,
      :type,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a list device pools request.
    #
    # @!attribute [rw] device_pools
    #   Information about the device pools.
    #   @return [Array<Types::DevicePool>]
    #
    # @!attribute [rw] next_token
    #   If the number of items that are returned is significantly large,
    #   this is an identifier that is also returned. It can be used in a
    #   subsequent call to this operation to return the next set of items in
    #   the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListDevicePoolsResult AWS API Documentation
    #
    class ListDevicePoolsResult < Struct.new(
      :device_pools,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a list devices request.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the project.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   Used to select a set of devices. 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. Because remote
    #       debugging is [no longer supported][1], this attribute is
    #       ignored.
    #
    #     * 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.
    #
    #     * The IN and NOT\_IN operators take a values array that has one or
    #       more elements.
    #
    #     * The other operators require an array with a single element.
    #
    #     * In a request, the AVAILABILITY attribute takes the following
    #       values: AVAILABLE, HIGHLY\_AVAILABLE, BUSY, or
    #       TEMPORARY\_NOT\_AVAILABLE.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html
    #   @return [Array<Types::DeviceFilter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListDevicesRequest AWS API Documentation
    #
    class ListDevicesRequest < Struct.new(
      :arn,
      :next_token,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a list devices operation.
    #
    # @!attribute [rw] devices
    #   Information about the devices.
    #   @return [Array<Types::Device>]
    #
    # @!attribute [rw] next_token
    #   If the number of items that are returned is significantly large,
    #   this is an identifier that is also returned. It can be used in a
    #   subsequent call to this operation to return the next set of items in
    #   the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListDevicesResult AWS API Documentation
    #
    class ListDevicesResult < Struct.new(
      :devices,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] max_results
    #   An integer that specifies the maximum number of items you want to
    #   return in the API response.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListInstanceProfilesRequest AWS API Documentation
    #
    class ListInstanceProfilesRequest < Struct.new(
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_profiles
    #   An object that contains information about your instance profiles.
    #   @return [Array<Types::InstanceProfile>]
    #
    # @!attribute [rw] next_token
    #   An identifier that can be used in the next call to this operation to
    #   return the next set of items in the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListInstanceProfilesResult AWS API Documentation
    #
    class ListInstanceProfilesResult < Struct.new(
      :instance_profiles,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the list jobs operation.
    #
    # @!attribute [rw] arn
    #   The run's Amazon Resource Name (ARN).
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListJobsRequest AWS API Documentation
    #
    class ListJobsRequest < Struct.new(
      :arn,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a list jobs request.
    #
    # @!attribute [rw] jobs
    #   Information about the jobs.
    #   @return [Array<Types::Job>]
    #
    # @!attribute [rw] next_token
    #   If the number of items that are returned is significantly large,
    #   this is an identifier that is also returned. It can be used in a
    #   subsequent call to this operation to return the next set of items in
    #   the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListJobsResult AWS API Documentation
    #
    class ListJobsResult < Struct.new(
      :jobs,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the project for which you want to
    #   list network profiles.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of network profile to return information about. Valid
    #   values are listed here.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListNetworkProfilesRequest AWS API Documentation
    #
    class ListNetworkProfilesRequest < Struct.new(
      :arn,
      :type,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_profiles
    #   A list of the available network profiles.
    #   @return [Array<Types::NetworkProfile>]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListNetworkProfilesResult AWS API Documentation
    #
    class ListNetworkProfilesResult < Struct.new(
      :network_profiles,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListOfferingPromotionsRequest AWS API Documentation
    #
    class ListOfferingPromotionsRequest < Struct.new(
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] offering_promotions
    #   Information about the offering promotions.
    #   @return [Array<Types::OfferingPromotion>]
    #
    # @!attribute [rw] next_token
    #   An identifier to be used in the next call to this operation, to
    #   return the next set of items in the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListOfferingPromotionsResult AWS API Documentation
    #
    class ListOfferingPromotionsResult < Struct.new(
      :offering_promotions,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the request to list the offering transaction history.
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListOfferingTransactionsRequest AWS API Documentation
    #
    class ListOfferingTransactionsRequest < Struct.new(
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Returns the transaction log of the specified offerings.
    #
    # @!attribute [rw] offering_transactions
    #   The audit log of subscriptions you have purchased and modified
    #   through AWS Device Farm.
    #   @return [Array<Types::OfferingTransaction>]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListOfferingTransactionsResult AWS API Documentation
    #
    class ListOfferingTransactionsResult < Struct.new(
      :offering_transactions,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the request to list all offerings.
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListOfferingsRequest AWS API Documentation
    #
    class ListOfferingsRequest < Struct.new(
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the return values of the list of offerings.
    #
    # @!attribute [rw] offerings
    #   A value that represents the list offering results.
    #   @return [Array<Types::Offering>]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListOfferingsResult AWS API Documentation
    #
    class ListOfferingsResult < Struct.new(
      :offerings,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the list projects operation.
    #
    # @!attribute [rw] arn
    #   Optional. If no Amazon Resource Name (ARN) is specified, then AWS
    #   Device Farm returns a list of all projects for the AWS account. You
    #   can also specify a project ARN.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListProjectsRequest AWS API Documentation
    #
    class ListProjectsRequest < Struct.new(
      :arn,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a list projects request.
    #
    # @!attribute [rw] projects
    #   Information about the projects.
    #   @return [Array<Types::Project>]
    #
    # @!attribute [rw] next_token
    #   If the number of items that are returned is significantly large,
    #   this is an identifier that is also returned. It can be used in a
    #   subsequent call to this operation to return the next set of items in
    #   the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListProjectsResult AWS API Documentation
    #
    class ListProjectsResult < Struct.new(
      :projects,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the request to return information about the remote access
    # session.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the project about which you are
    #   requesting information.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListRemoteAccessSessionsRequest AWS API Documentation
    #
    class ListRemoteAccessSessionsRequest < Struct.new(
      :arn,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the response from the server after AWS Device Farm makes a
    # request to return information about the remote access session.
    #
    # @!attribute [rw] remote_access_sessions
    #   A container that represents the metadata from the service about each
    #   remote access session you are requesting.
    #   @return [Array<Types::RemoteAccessSession>]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListRemoteAccessSessionsResult AWS API Documentation
    #
    class ListRemoteAccessSessionsResult < Struct.new(
      :remote_access_sessions,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the list runs operation.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the project for which you want to
    #   list runs.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListRunsRequest AWS API Documentation
    #
    class ListRunsRequest < Struct.new(
      :arn,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a list runs request.
    #
    # @!attribute [rw] runs
    #   Information about the runs.
    #   @return [Array<Types::Run>]
    #
    # @!attribute [rw] next_token
    #   If the number of items that are returned is significantly large,
    #   this is an identifier that is also returned. It can be used in a
    #   subsequent call to this operation to return the next set of items in
    #   the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListRunsResult AWS API Documentation
    #
    class ListRunsResult < Struct.new(
      :runs,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the list samples operation.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the job used to list samples.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListSamplesRequest AWS API Documentation
    #
    class ListSamplesRequest < Struct.new(
      :arn,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a list samples request.
    #
    # @!attribute [rw] samples
    #   Information about the samples.
    #   @return [Array<Types::Sample>]
    #
    # @!attribute [rw] next_token
    #   If the number of items that are returned is significantly large,
    #   this is an identifier that is also returned. It can be used in a
    #   subsequent call to this operation to return the next set of items in
    #   the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListSamplesResult AWS API Documentation
    #
    class ListSamplesResult < Struct.new(
      :samples,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the list suites operation.
    #
    # @!attribute [rw] arn
    #   The job's Amazon Resource Name (ARN).
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListSuitesRequest AWS API Documentation
    #
    class ListSuitesRequest < Struct.new(
      :arn,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a list suites request.
    #
    # @!attribute [rw] suites
    #   Information about the suites.
    #   @return [Array<Types::Suite>]
    #
    # @!attribute [rw] next_token
    #   If the number of items that are returned is significantly large,
    #   this is an identifier that is also returned. It can be used in a
    #   subsequent call to this operation to return the next set of items in
    #   the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListSuitesResult AWS API Documentation
    #
    class ListSuitesResult < Struct.new(
      :suites,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource_arn
    #   The Amazon Resource Name (ARN) of the resource or resources for
    #   which to list tags. You can associate tags with the following Device
    #   Farm resources: `PROJECT`, `RUN`, `NETWORK_PROFILE`,
    #   `INSTANCE_PROFILE`, `DEVICE_INSTANCE`, `SESSION`, `DEVICE_POOL`,
    #   `DEVICE`, and `VPCE_CONFIGURATION`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListTagsForResourceRequest AWS API Documentation
    #
    class ListTagsForResourceRequest < Struct.new(
      :resource_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] tags
    #   The tags to add to the resource. A tag is an array of key-value
    #   pairs. Tag keys can have a maximum character length of 128
    #   characters. Tag values can have a maximum length of 256 characters.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListTagsForResourceResponse AWS API Documentation
    #
    class ListTagsForResourceResponse < Struct.new(
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] max_result
    #   Return no more than this number of results.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   From a response, used to continue a paginated listing.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListTestGridProjectsRequest AWS API Documentation
    #
    class ListTestGridProjectsRequest < Struct.new(
      :max_result,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] test_grid_projects
    #   The list of TestGridProjects, based on a
    #   ListTestGridProjectsRequest.
    #   @return [Array<Types::TestGridProject>]
    #
    # @!attribute [rw] next_token
    #   Used for pagination. Pass into ListTestGridProjects to get more
    #   results in a paginated request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListTestGridProjectsResult AWS API Documentation
    #
    class ListTestGridProjectsResult < Struct.new(
      :test_grid_projects,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] session_arn
    #   The ARN of the session to retrieve.
    #   @return [String]
    #
    # @!attribute [rw] max_result
    #   The maximum number of sessions to return per response.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   Pagination token.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListTestGridSessionActionsRequest AWS API Documentation
    #
    class ListTestGridSessionActionsRequest < Struct.new(
      :session_arn,
      :max_result,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] actions
    #   The action taken by the session.
    #   @return [Array<Types::TestGridSessionAction>]
    #
    # @!attribute [rw] next_token
    #   Pagination token.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListTestGridSessionActionsResult AWS API Documentation
    #
    class ListTestGridSessionActionsResult < Struct.new(
      :actions,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] session_arn
    #   The ARN of a TestGridSession.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   Limit results to a specified type of artifact.
    #   @return [String]
    #
    # @!attribute [rw] max_result
    #   The maximum number of results to be returned by a request.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   Pagination token.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListTestGridSessionArtifactsRequest AWS API Documentation
    #
    class ListTestGridSessionArtifactsRequest < Struct.new(
      :session_arn,
      :type,
      :max_result,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] artifacts
    #   A list of test grid session artifacts for a TestGridSession.
    #   @return [Array<Types::TestGridSessionArtifact>]
    #
    # @!attribute [rw] next_token
    #   Pagination token.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListTestGridSessionArtifactsResult AWS API Documentation
    #
    class ListTestGridSessionArtifactsResult < Struct.new(
      :artifacts,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] project_arn
    #   ARN of a TestGridProject.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   Return only sessions in this state.
    #   @return [String]
    #
    # @!attribute [rw] creation_time_after
    #   Return only sessions created after this time.
    #   @return [Time]
    #
    # @!attribute [rw] creation_time_before
    #   Return only sessions created before this time.
    #   @return [Time]
    #
    # @!attribute [rw] end_time_after
    #   Return only sessions that ended after this time.
    #   @return [Time]
    #
    # @!attribute [rw] end_time_before
    #   Return only sessions that ended before this time.
    #   @return [Time]
    #
    # @!attribute [rw] max_result
    #   Return only this many results at a time.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   Pagination token.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListTestGridSessionsRequest AWS API Documentation
    #
    class ListTestGridSessionsRequest < Struct.new(
      :project_arn,
      :status,
      :creation_time_after,
      :creation_time_before,
      :end_time_after,
      :end_time_before,
      :max_result,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] test_grid_sessions
    #   The sessions that match the criteria in a
    #   ListTestGridSessionsRequest.
    #   @return [Array<Types::TestGridSession>]
    #
    # @!attribute [rw] next_token
    #   Pagination token.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListTestGridSessionsResult AWS API Documentation
    #
    class ListTestGridSessionsResult < Struct.new(
      :test_grid_sessions,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the list tests operation.
    #
    # @!attribute [rw] arn
    #   The test suite's Amazon Resource Name (ARN).
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListTestsRequest AWS API Documentation
    #
    class ListTestsRequest < Struct.new(
      :arn,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a list tests request.
    #
    # @!attribute [rw] tests
    #   Information about the tests.
    #   @return [Array<Types::Test>]
    #
    # @!attribute [rw] next_token
    #   If the number of items that are returned is significantly large,
    #   this is an identifier that is also returned. It can be used in a
    #   subsequent call to this operation to return the next set of items in
    #   the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListTestsResult AWS API Documentation
    #
    class ListTestsResult < Struct.new(
      :tests,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the list unique problems operation.
    #
    # @!attribute [rw] arn
    #   The unique problems' ARNs.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListUniqueProblemsRequest AWS API Documentation
    #
    class ListUniqueProblemsRequest < Struct.new(
      :arn,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a list unique problems request.
    #
    # @!attribute [rw] unique_problems
    #   Information about the unique problems.
    #
    #   Allowed values include:
    #
    #   * PENDING
    #
    #   * PASSED
    #
    #   * WARNED
    #
    #   * FAILED
    #
    #   * SKIPPED
    #
    #   * ERRORED
    #
    #   * STOPPED
    #   @return [Hash<String,Array<Types::UniqueProblem>>]
    #
    # @!attribute [rw] next_token
    #   If the number of items that are returned is significantly large,
    #   this is an identifier that is also returned. It can be used in a
    #   subsequent call to this operation to return the next set of items in
    #   the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListUniqueProblemsResult AWS API Documentation
    #
    class ListUniqueProblemsResult < Struct.new(
      :unique_problems,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the list uploads operation.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the project for which you want to
    #   list uploads.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of upload.
    #
    #   Must be one of the following values:
    #
    #   * ANDROID\_APP
    #
    #   * IOS\_APP
    #
    #   * WEB\_APP
    #
    #   * EXTERNAL\_DATA
    #
    #   * APPIUM\_JAVA\_JUNIT\_TEST\_PACKAGE
    #
    #   * APPIUM\_JAVA\_TESTNG\_TEST\_PACKAGE
    #
    #   * APPIUM\_PYTHON\_TEST\_PACKAGE
    #
    #   * APPIUM\_NODE\_TEST\_PACKAGE
    #
    #   * APPIUM\_RUBY\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_JAVA\_JUNIT\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_JAVA\_TESTNG\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_PYTHON\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_NODE\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_RUBY\_TEST\_PACKAGE
    #
    #   * INSTRUMENTATION\_TEST\_PACKAGE
    #
    #   * XCTEST\_TEST\_PACKAGE
    #
    #   * XCTEST\_UI\_TEST\_PACKAGE
    #
    #   * APPIUM\_JAVA\_JUNIT\_TEST\_SPEC
    #
    #   * APPIUM\_JAVA\_TESTNG\_TEST\_SPEC
    #
    #   * APPIUM\_PYTHON\_TEST\_SPEC
    #
    #   * APPIUM\_NODE\_TEST\_SPEC
    #
    #   * APPIUM\_RUBY\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_JAVA\_JUNIT\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_JAVA\_TESTNG\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_PYTHON\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_NODE\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_RUBY\_TEST\_SPEC
    #
    #   * INSTRUMENTATION\_TEST\_SPEC
    #
    #   * XCTEST\_UI\_TEST\_SPEC
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListUploadsRequest AWS API Documentation
    #
    class ListUploadsRequest < Struct.new(
      :arn,
      :type,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a list uploads request.
    #
    # @!attribute [rw] uploads
    #   Information about the uploads.
    #   @return [Array<Types::Upload>]
    #
    # @!attribute [rw] next_token
    #   If the number of items that are returned is significantly large,
    #   this is an identifier that is also returned. It can be used in a
    #   subsequent call to this operation to return the next set of items in
    #   the list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListUploadsResult AWS API Documentation
    #
    class ListUploadsResult < Struct.new(
      :uploads,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] max_results
    #   An integer that specifies the maximum number of items you want to
    #   return in the API response.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListVPCEConfigurationsRequest AWS API Documentation
    #
    class ListVPCEConfigurationsRequest < Struct.new(
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpce_configurations
    #   An array of `VPCEConfiguration` objects that contain information
    #   about your VPC endpoint configuration.
    #   @return [Array<Types::VPCEConfiguration>]
    #
    # @!attribute [rw] next_token
    #   An identifier that was returned from the previous call to this
    #   operation, which can be used to return the next set of items in the
    #   list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ListVPCEConfigurationsResult AWS API Documentation
    #
    class ListVPCEConfigurationsResult < Struct.new(
      :vpce_configurations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a latitude and longitude pair, expressed in geographic
    # coordinate system degrees (for example, 47.6204, -122.3491).
    #
    # Elevation is currently not supported.
    #
    # @!attribute [rw] latitude
    #   The latitude.
    #   @return [Float]
    #
    # @!attribute [rw] longitude
    #   The longitude.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Location AWS API Documentation
    #
    class Location < Struct.new(
      :latitude,
      :longitude)
      SENSITIVE = []
      include Aws::Structure
    end

    # A number that represents the monetary amount for an offering or
    # transaction.
    #
    # @!attribute [rw] amount
    #   The numerical amount of an offering or transaction.
    #   @return [Float]
    #
    # @!attribute [rw] currency_code
    #   The currency code of a monetary amount. For example, `USD` means
    #   U.S. dollars.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/MonetaryAmount AWS API Documentation
    #
    class MonetaryAmount < Struct.new(
      :amount,
      :currency_code)
      SENSITIVE = []
      include Aws::Structure
    end

    # An array of settings that describes characteristics of a network
    # profile.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the network profile.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the network profile.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the network profile.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of network profile. Valid values are listed here.
    #   @return [String]
    #
    # @!attribute [rw] uplink_bandwidth_bits
    #   The data throughput rate in bits per second, as an integer from 0 to
    #   104857600.
    #   @return [Integer]
    #
    # @!attribute [rw] downlink_bandwidth_bits
    #   The data throughput rate in bits per second, as an integer from 0 to
    #   104857600.
    #   @return [Integer]
    #
    # @!attribute [rw] uplink_delay_ms
    #   Delay time for all packets to destination in milliseconds as an
    #   integer from 0 to 2000.
    #   @return [Integer]
    #
    # @!attribute [rw] downlink_delay_ms
    #   Delay time for all packets to destination in milliseconds as an
    #   integer from 0 to 2000.
    #   @return [Integer]
    #
    # @!attribute [rw] uplink_jitter_ms
    #   Time variation in the delay of received packets in milliseconds as
    #   an integer from 0 to 2000.
    #   @return [Integer]
    #
    # @!attribute [rw] downlink_jitter_ms
    #   Time variation in the delay of received packets in milliseconds as
    #   an integer from 0 to 2000.
    #   @return [Integer]
    #
    # @!attribute [rw] uplink_loss_percent
    #   Proportion of transmitted packets that fail to arrive from 0 to 100
    #   percent.
    #   @return [Integer]
    #
    # @!attribute [rw] downlink_loss_percent
    #   Proportion of received packets that fail to arrive from 0 to 100
    #   percent.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/NetworkProfile AWS API Documentation
    #
    class NetworkProfile < Struct.new(
      :arn,
      :name,
      :description,
      :type,
      :uplink_bandwidth_bits,
      :downlink_bandwidth_bits,
      :uplink_delay_ms,
      :downlink_delay_ms,
      :uplink_jitter_ms,
      :downlink_jitter_ms,
      :uplink_loss_percent,
      :downlink_loss_percent)
      SENSITIVE = []
      include Aws::Structure
    end

    # Exception gets thrown when a user is not eligible to perform the
    # specified transaction.
    #
    # @!attribute [rw] message
    #   The HTTP response code of a Not Eligible exception.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/NotEligibleException AWS API Documentation
    #
    class NotEligibleException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The specified entity was not found.
    #
    # @!attribute [rw] message
    #   Any additional information about the exception.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/NotFoundException AWS API Documentation
    #
    class NotFoundException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the metadata of a device offering.
    #
    # @!attribute [rw] id
    #   The ID that corresponds to a device offering.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A string that describes the offering.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of offering (for example, `RECURRING`) for a device.
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   The platform of the device (for example, `ANDROID` or `IOS`).
    #   @return [String]
    #
    # @!attribute [rw] recurring_charges
    #   Specifies whether there are recurring charges for the offering.
    #   @return [Array<Types::RecurringCharge>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Offering AWS API Documentation
    #
    class Offering < Struct.new(
      :id,
      :description,
      :type,
      :platform,
      :recurring_charges)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents information about an offering promotion.
    #
    # @!attribute [rw] id
    #   The ID of the offering promotion.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A string that describes the offering promotion.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/OfferingPromotion AWS API Documentation
    #
    class OfferingPromotion < Struct.new(
      :id,
      :description)
      SENSITIVE = []
      include Aws::Structure
    end

    # The status of the offering.
    #
    # @!attribute [rw] type
    #   The type specified for the offering status.
    #   @return [String]
    #
    # @!attribute [rw] offering
    #   Represents the metadata of an offering status.
    #   @return [Types::Offering]
    #
    # @!attribute [rw] quantity
    #   The number of available devices in the offering.
    #   @return [Integer]
    #
    # @!attribute [rw] effective_on
    #   The date on which the offering is effective.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/OfferingStatus AWS API Documentation
    #
    class OfferingStatus < Struct.new(
      :type,
      :offering,
      :quantity,
      :effective_on)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the metadata of an offering transaction.
    #
    # @!attribute [rw] offering_status
    #   The status of an offering transaction.
    #   @return [Types::OfferingStatus]
    #
    # @!attribute [rw] transaction_id
    #   The transaction ID of the offering transaction.
    #   @return [String]
    #
    # @!attribute [rw] offering_promotion_id
    #   The ID that corresponds to a device offering promotion.
    #   @return [String]
    #
    # @!attribute [rw] created_on
    #   The date on which an offering transaction was created.
    #   @return [Time]
    #
    # @!attribute [rw] cost
    #   The cost of an offering transaction.
    #   @return [Types::MonetaryAmount]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/OfferingTransaction AWS API Documentation
    #
    class OfferingTransaction < Struct.new(
      :offering_status,
      :transaction_id,
      :offering_promotion_id,
      :created_on,
      :cost)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a specific warning or failure.
    #
    # @!attribute [rw] run
    #   Information about the associated run.
    #   @return [Types::ProblemDetail]
    #
    # @!attribute [rw] job
    #   Information about the associated job.
    #   @return [Types::ProblemDetail]
    #
    # @!attribute [rw] suite
    #   Information about the associated suite.
    #   @return [Types::ProblemDetail]
    #
    # @!attribute [rw] test
    #   Information about the associated test.
    #   @return [Types::ProblemDetail]
    #
    # @!attribute [rw] device
    #   Information about the associated device.
    #   @return [Types::Device]
    #
    # @!attribute [rw] result
    #   The problem's result.
    #
    #   Allowed values include:
    #
    #   * PENDING
    #
    #   * PASSED
    #
    #   * WARNED
    #
    #   * FAILED
    #
    #   * SKIPPED
    #
    #   * ERRORED
    #
    #   * STOPPED
    #   @return [String]
    #
    # @!attribute [rw] message
    #   A message about the problem's result.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Problem AWS API Documentation
    #
    class Problem < Struct.new(
      :run,
      :job,
      :suite,
      :test,
      :device,
      :result,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about a problem detail.
    #
    # @!attribute [rw] arn
    #   The problem detail's ARN.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The problem detail's name.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ProblemDetail AWS API Documentation
    #
    class ProblemDetail < Struct.new(
      :arn,
      :name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents an operating-system neutral workspace for running and
    # managing tests.
    #
    # @!attribute [rw] arn
    #   The project's ARN.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The project's name.
    #   @return [String]
    #
    # @!attribute [rw] default_job_timeout_minutes
    #   The default number of minutes (at the project level) a test run
    #   executes before it times out. The default value is 150 minutes.
    #   @return [Integer]
    #
    # @!attribute [rw] created
    #   When the project was created.
    #   @return [Time]
    #
    # @!attribute [rw] vpc_config
    #   The VPC security groups and subnets that are attached to a project.
    #   @return [Types::VpcConfig]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Project AWS API Documentation
    #
    class Project < Struct.new(
      :arn,
      :name,
      :default_job_timeout_minutes,
      :created,
      :vpc_config)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request for a purchase offering.
    #
    # @!attribute [rw] offering_id
    #   The ID of the offering.
    #   @return [String]
    #
    # @!attribute [rw] quantity
    #   The number of device slots to purchase in an offering request.
    #   @return [Integer]
    #
    # @!attribute [rw] offering_promotion_id
    #   The ID of the offering promotion to be applied to the purchase.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/PurchaseOfferingRequest AWS API Documentation
    #
    class PurchaseOfferingRequest < Struct.new(
      :offering_id,
      :quantity,
      :offering_promotion_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # The result of the purchase offering (for example, success or failure).
    #
    # @!attribute [rw] offering_transaction
    #   Represents the offering transaction for the purchase result.
    #   @return [Types::OfferingTransaction]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/PurchaseOfferingResult AWS API Documentation
    #
    class PurchaseOfferingResult < Struct.new(
      :offering_transaction)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the set of radios and their states on a device. Examples of
    # radios include Wi-Fi, GPS, Bluetooth, and NFC.
    #
    # @!attribute [rw] wifi
    #   True if Wi-Fi is enabled at the beginning of the test. Otherwise,
    #   false.
    #   @return [Boolean]
    #
    # @!attribute [rw] bluetooth
    #   True if Bluetooth is enabled at the beginning of the test.
    #   Otherwise, false.
    #   @return [Boolean]
    #
    # @!attribute [rw] nfc
    #   True if NFC is enabled at the beginning of the test. Otherwise,
    #   false.
    #   @return [Boolean]
    #
    # @!attribute [rw] gps
    #   True if GPS is enabled at the beginning of the test. Otherwise,
    #   false.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Radios AWS API Documentation
    #
    class Radios < Struct.new(
      :wifi,
      :bluetooth,
      :nfc,
      :gps)
      SENSITIVE = []
      include Aws::Structure
    end

    # Specifies whether charges for devices are recurring.
    #
    # @!attribute [rw] cost
    #   The cost of the recurring charge.
    #   @return [Types::MonetaryAmount]
    #
    # @!attribute [rw] frequency
    #   The frequency in which charges recur.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/RecurringCharge AWS API Documentation
    #
    class RecurringCharge < Struct.new(
      :cost,
      :frequency)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents information about the remote access session.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the remote access session.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the remote access session.
    #   @return [String]
    #
    # @!attribute [rw] created
    #   The date and time the remote access session was created.
    #   @return [Time]
    #
    # @!attribute [rw] status
    #   The status of the remote access session. Can be any of the
    #   following:
    #
    #   * PENDING.
    #
    #   * PENDING\_CONCURRENCY.
    #
    #   * PENDING\_DEVICE.
    #
    #   * PROCESSING.
    #
    #   * SCHEDULING.
    #
    #   * PREPARING.
    #
    #   * RUNNING.
    #
    #   * COMPLETED.
    #
    #   * STOPPING.
    #   @return [String]
    #
    # @!attribute [rw] result
    #   The result of the remote access session. Can be any of the
    #   following:
    #
    #   * PENDING.
    #
    #   * PASSED.
    #
    #   * WARNED.
    #
    #   * FAILED.
    #
    #   * SKIPPED.
    #
    #   * ERRORED.
    #
    #   * STOPPED.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   A message about the remote access session.
    #   @return [String]
    #
    # @!attribute [rw] started
    #   The date and time the remote access session was started.
    #   @return [Time]
    #
    # @!attribute [rw] stopped
    #   The date and time the remote access session was stopped.
    #   @return [Time]
    #
    # @!attribute [rw] device
    #   The device (phone or tablet) used in the remote access session.
    #   @return [Types::Device]
    #
    # @!attribute [rw] instance_arn
    #   The ARN of the instance.
    #   @return [String]
    #
    # @!attribute [rw] remote_debug_enabled
    #   This flag is set to `true` if remote debugging is enabled for the
    #   remote access session.
    #
    #   Remote debugging is [no longer supported][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html
    #   @return [Boolean]
    #
    # @!attribute [rw] remote_record_enabled
    #   This flag is set to `true` if remote recording is enabled for the
    #   remote access session.
    #   @return [Boolean]
    #
    # @!attribute [rw] remote_record_app_arn
    #   The ARN for the app to be recorded in the remote access session.
    #   @return [String]
    #
    # @!attribute [rw] host_address
    #   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][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html
    #   @return [String]
    #
    # @!attribute [rw] client_id
    #   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][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html
    #   @return [String]
    #
    # @!attribute [rw] billing_method
    #   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][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html#welcome-terminology
    #   @return [String]
    #
    # @!attribute [rw] device_minutes
    #   The number of minutes a device is used in a remote access session
    #   (including setup and teardown minutes).
    #   @return [Types::DeviceMinutes]
    #
    # @!attribute [rw] endpoint
    #   The endpoint for the remote access sesssion.
    #   @return [String]
    #
    # @!attribute [rw] device_udid
    #   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][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html
    #   @return [String]
    #
    # @!attribute [rw] interaction_mode
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] skip_app_resign
    #   When set to `true`, for private devices, Device Farm does not sign
    #   your app again. For public devices, Device Farm always signs your
    #   apps again.
    #
    #   For more information about how Device Farm re-signs your apps, see
    #   [Do you modify my app?][1] in the *AWS Device Farm FAQs*.
    #
    #
    #
    #   [1]: http://aws.amazon.com/device-farm/faqs/
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_config
    #   The VPC security groups and subnets that are attached to a project.
    #   @return [Types::VpcConfig]
    #
    # @!attribute [rw] device_proxy
    #   The device proxy configured for the remote access session.
    #   @return [Types::DeviceProxy]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/RemoteAccessSession AWS API Documentation
    #
    class RemoteAccessSession < Struct.new(
      :arn,
      :name,
      :created,
      :status,
      :result,
      :message,
      :started,
      :stopped,
      :device,
      :instance_arn,
      :remote_debug_enabled,
      :remote_record_enabled,
      :remote_record_app_arn,
      :host_address,
      :client_id,
      :billing_method,
      :device_minutes,
      :endpoint,
      :device_udid,
      :interaction_mode,
      :skip_app_resign,
      :vpc_config,
      :device_proxy)
      SENSITIVE = []
      include Aws::Structure
    end

    # A request that represents an offering renewal.
    #
    # @!attribute [rw] offering_id
    #   The ID of a request to renew an offering.
    #   @return [String]
    #
    # @!attribute [rw] quantity
    #   The quantity requested in an offering renewal.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/RenewOfferingRequest AWS API Documentation
    #
    class RenewOfferingRequest < Struct.new(
      :offering_id,
      :quantity)
      SENSITIVE = []
      include Aws::Structure
    end

    # The result of a renewal offering.
    #
    # @!attribute [rw] offering_transaction
    #   Represents the status of the offering transaction for the renewal.
    #   @return [Types::OfferingTransaction]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/RenewOfferingResult AWS API Documentation
    #
    class RenewOfferingResult < Struct.new(
      :offering_transaction)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the screen resolution of a device in height and width,
    # expressed in pixels.
    #
    # @!attribute [rw] width
    #   The screen resolution's width, expressed in pixels.
    #   @return [Integer]
    #
    # @!attribute [rw] height
    #   The screen resolution's height, expressed in pixels.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Resolution AWS API Documentation
    #
    class Resolution < Struct.new(
      :width,
      :height)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a condition for a device pool.
    #
    # @!attribute [rw] attribute
    #   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`
    #
    #     Because remote debugging is [no longer supported][1], this filter
    #     is ignored.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html
    #   @return [String]
    #
    # @!attribute [rw] operator
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The rule's value.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Rule AWS API Documentation
    #
    class Rule < Struct.new(
      :attribute,
      :operator,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a test run on a set of devices with a given app package,
    # test parameters, and so on.
    #
    # @!attribute [rw] arn
    #   The run's ARN.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The run's name.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The run's type.
    #
    #   Must be one of the following values:
    #
    #   * BUILTIN\_FUZZ
    #
    #   * APPIUM\_JAVA\_JUNIT
    #
    #   * APPIUM\_JAVA\_TESTNG
    #
    #   * APPIUM\_PYTHON
    #
    #   * APPIUM\_NODE
    #
    #   * APPIUM\_RUBY
    #
    #   * APPIUM\_WEB\_JAVA\_JUNIT
    #
    #   * APPIUM\_WEB\_JAVA\_TESTNG
    #
    #   * APPIUM\_WEB\_PYTHON
    #
    #   * APPIUM\_WEB\_NODE
    #
    #   * APPIUM\_WEB\_RUBY
    #
    #   * INSTRUMENTATION
    #
    #   * XCTEST
    #
    #   * XCTEST\_UI
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   The run's platform.
    #
    #   Allowed values include:
    #
    #   * ANDROID
    #
    #   * IOS
    #   @return [String]
    #
    # @!attribute [rw] created
    #   When the run was created.
    #   @return [Time]
    #
    # @!attribute [rw] status
    #   The run's status.
    #
    #   Allowed values include:
    #
    #   * PENDING
    #
    #   * PENDING\_CONCURRENCY
    #
    #   * PENDING\_DEVICE
    #
    #   * PROCESSING
    #
    #   * SCHEDULING
    #
    #   * PREPARING
    #
    #   * RUNNING
    #
    #   * COMPLETED
    #
    #   * STOPPING
    #   @return [String]
    #
    # @!attribute [rw] result
    #   The run's result.
    #
    #   Allowed values include:
    #
    #   * PENDING
    #
    #   * PASSED
    #
    #   * WARNED
    #
    #   * FAILED
    #
    #   * SKIPPED
    #
    #   * ERRORED
    #
    #   * STOPPED
    #   @return [String]
    #
    # @!attribute [rw] started
    #   The run's start time.
    #   @return [Time]
    #
    # @!attribute [rw] stopped
    #   The run's stop time.
    #   @return [Time]
    #
    # @!attribute [rw] counters
    #   The run's result counters.
    #   @return [Types::Counters]
    #
    # @!attribute [rw] message
    #   A message about the run's result.
    #   @return [String]
    #
    # @!attribute [rw] total_jobs
    #   The total number of jobs for the run.
    #   @return [Integer]
    #
    # @!attribute [rw] completed_jobs
    #   The total number of completed jobs.
    #   @return [Integer]
    #
    # @!attribute [rw] billing_method
    #   Specifies the billing method for a test run: `metered` or
    #   `unmetered`. If the parameter is not specified, the default value is
    #   `metered`.
    #
    #   <note markdown="1"> If you have unmetered device slots, you must set this to `unmetered`
    #   to use them. Otherwise, the run is counted toward metered device
    #   minutes.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] device_minutes
    #   Represents the total (metered or unmetered) minutes used by the test
    #   run.
    #   @return [Types::DeviceMinutes]
    #
    # @!attribute [rw] network_profile
    #   The network profile being used for a test run.
    #   @return [Types::NetworkProfile]
    #
    # @!attribute [rw] device_proxy
    #   The device proxy configured for the devices in the run.
    #   @return [Types::DeviceProxy]
    #
    # @!attribute [rw] parsing_result_url
    #   Read-only URL for an object in an 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.
    #   @return [String]
    #
    # @!attribute [rw] result_code
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] seed
    #   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.
    #   @return [Integer]
    #
    # @!attribute [rw] app_upload
    #   An app to upload or that has been uploaded.
    #   @return [String]
    #
    # @!attribute [rw] event_count
    #   For fuzz tests, this is the number of events, between 1 and 10000,
    #   that the UI fuzz test should perform.
    #   @return [Integer]
    #
    # @!attribute [rw] job_timeout_minutes
    #   The number of minutes the job executes before it times out.
    #   @return [Integer]
    #
    # @!attribute [rw] device_pool_arn
    #   The ARN of the device pool for the run.
    #   @return [String]
    #
    # @!attribute [rw] locale
    #   Information about the locale that is used for the run.
    #   @return [String]
    #
    # @!attribute [rw] radios
    #   Information about the radio states for the run.
    #   @return [Types::Radios]
    #
    # @!attribute [rw] location
    #   Information about the location that is used for the run.
    #   @return [Types::Location]
    #
    # @!attribute [rw] customer_artifact_paths
    #   Output `CustomerArtifactPaths` object for the test run.
    #   @return [Types::CustomerArtifactPaths]
    #
    # @!attribute [rw] web_url
    #   The Device Farm console URL for the recording of the run.
    #   @return [String]
    #
    # @!attribute [rw] skip_app_resign
    #   When set to `true`, for private devices, Device Farm does not sign
    #   your app again. For public devices, Device Farm always signs your
    #   apps again.
    #
    #   For more information about how Device Farm re-signs your apps, see
    #   [Do you modify my app?][1] in the *AWS Device Farm FAQs*.
    #
    #
    #
    #   [1]: http://aws.amazon.com/device-farm/faqs/
    #   @return [Boolean]
    #
    # @!attribute [rw] test_spec_arn
    #   The ARN of the YAML-formatted test specification for the run.
    #   @return [String]
    #
    # @!attribute [rw] device_selection_result
    #   The results of a device filter used to select the devices for a test
    #   run.
    #   @return [Types::DeviceSelectionResult]
    #
    # @!attribute [rw] vpc_config
    #   The VPC security groups and subnets that are attached to a project.
    #   @return [Types::VpcConfig]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Run AWS API Documentation
    #
    class Run < Struct.new(
      :arn,
      :name,
      :type,
      :platform,
      :created,
      :status,
      :result,
      :started,
      :stopped,
      :counters,
      :message,
      :total_jobs,
      :completed_jobs,
      :billing_method,
      :device_minutes,
      :network_profile,
      :device_proxy,
      :parsing_result_url,
      :result_code,
      :seed,
      :app_upload,
      :event_count,
      :job_timeout_minutes,
      :device_pool_arn,
      :locale,
      :radios,
      :location,
      :customer_artifact_paths,
      :web_url,
      :skip_app_resign,
      :test_spec_arn,
      :device_selection_result,
      :vpc_config)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a sample of performance data.
    #
    # @!attribute [rw] arn
    #   The sample's ARN.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] url
    #   The presigned Amazon S3 URL that can be used with a GET request to
    #   download the sample's file.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Sample AWS API Documentation
    #
    class Sample < Struct.new(
      :arn,
      :type,
      :url)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the settings for a run. Includes things like location,
    # radio states, auxiliary apps, and network profiles.
    #
    # @!attribute [rw] extra_data_package_arn
    #   The ARN of the extra data for the run. The extra data is a .zip file
    #   that AWS Device Farm extracts to external data for Android or the
    #   app's sandbox for iOS.
    #   @return [String]
    #
    # @!attribute [rw] network_profile_arn
    #   Reserved for internal use.
    #   @return [String]
    #
    # @!attribute [rw] locale
    #   Information about the locale that is used for the run.
    #   @return [String]
    #
    # @!attribute [rw] location
    #   Information about the location that is used for the run.
    #   @return [Types::Location]
    #
    # @!attribute [rw] vpce_configuration_arns
    #   An array of ARNs for your VPC endpoint configurations.
    #   @return [Array<String>]
    #
    # @!attribute [rw] device_proxy
    #   The device proxy to be configured on the device for the run.
    #   @return [Types::DeviceProxy]
    #
    # @!attribute [rw] customer_artifact_paths
    #   Input `CustomerArtifactPaths` object for the scheduled run
    #   configuration.
    #   @return [Types::CustomerArtifactPaths]
    #
    # @!attribute [rw] radios
    #   Information about the radio states for the run.
    #   @return [Types::Radios]
    #
    # @!attribute [rw] auxiliary_apps
    #   A list of upload ARNs for app packages to be installed with your
    #   app.
    #   @return [Array<String>]
    #
    # @!attribute [rw] billing_method
    #   Specifies the billing method for a test run: `metered` or
    #   `unmetered`. If the parameter is not specified, the default value is
    #   `metered`.
    #
    #   <note markdown="1"> If you have purchased unmetered device slots, you must set this
    #   parameter to `unmetered` to make use of them. Otherwise, your run
    #   counts against your metered time.
    #
    #    </note>
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ScheduleRunConfiguration AWS API Documentation
    #
    class ScheduleRunConfiguration < Struct.new(
      :extra_data_package_arn,
      :network_profile_arn,
      :locale,
      :location,
      :vpce_configuration_arns,
      :device_proxy,
      :customer_artifact_paths,
      :radios,
      :auxiliary_apps,
      :billing_method)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the schedule run operation.
    #
    # @!attribute [rw] project_arn
    #   The ARN of the project for the run to be scheduled.
    #   @return [String]
    #
    # @!attribute [rw] app_arn
    #   The ARN of an application package to run tests against, created with
    #   CreateUpload. See ListUploads.
    #   @return [String]
    #
    # @!attribute [rw] device_pool_arn
    #   The ARN of the device pool for the run to be scheduled.
    #   @return [String]
    #
    # @!attribute [rw] device_selection_configuration
    #   The filter criteria used to dynamically select a set of devices for
    #   a test run and the maximum number of devices to be included in the
    #   run.
    #
    #   Either <b> <code>devicePoolArn</code> </b> or <b>
    #   <code>deviceSelectionConfiguration</code> </b> is required in a
    #   request.
    #   @return [Types::DeviceSelectionConfiguration]
    #
    # @!attribute [rw] name
    #   The name for the run to be scheduled.
    #   @return [String]
    #
    # @!attribute [rw] test
    #   Information about the test for the run to be scheduled.
    #   @return [Types::ScheduleRunTest]
    #
    # @!attribute [rw] configuration
    #   Information about the settings for the run to be scheduled.
    #   @return [Types::ScheduleRunConfiguration]
    #
    # @!attribute [rw] execution_configuration
    #   Specifies configuration information about a test run, such as the
    #   execution timeout (in minutes).
    #   @return [Types::ExecutionConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ScheduleRunRequest AWS API Documentation
    #
    class ScheduleRunRequest < Struct.new(
      :project_arn,
      :app_arn,
      :device_pool_arn,
      :device_selection_configuration,
      :name,
      :test,
      :configuration,
      :execution_configuration)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of a schedule run request.
    #
    # @!attribute [rw] run
    #   Information about the scheduled run.
    #   @return [Types::Run]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ScheduleRunResult AWS API Documentation
    #
    class ScheduleRunResult < Struct.new(
      :run)
      SENSITIVE = []
      include Aws::Structure
    end

    # 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.
    #
    # @!attribute [rw] type
    #   The test's type.
    #
    #   Must be one of the following values:
    #
    #   * BUILTIN\_FUZZ
    #
    #   * APPIUM\_JAVA\_JUNIT
    #
    #   * APPIUM\_JAVA\_TESTNG
    #
    #   * APPIUM\_PYTHON
    #
    #   * APPIUM\_NODE
    #
    #   * APPIUM\_RUBY
    #
    #   * APPIUM\_WEB\_JAVA\_JUNIT
    #
    #   * APPIUM\_WEB\_JAVA\_TESTNG
    #
    #   * APPIUM\_WEB\_PYTHON
    #
    #   * APPIUM\_WEB\_NODE
    #
    #   * APPIUM\_WEB\_RUBY
    #
    #   * INSTRUMENTATION
    #
    #   * XCTEST
    #
    #   * XCTEST\_UI
    #   @return [String]
    #
    # @!attribute [rw] test_package_arn
    #   The ARN of the uploaded test to be run.
    #   @return [String]
    #
    # @!attribute [rw] test_spec_arn
    #   The ARN of the YAML-formatted test specification.
    #   @return [String]
    #
    # @!attribute [rw] filter
    #   The test's filter.
    #   @return [String]
    #
    # @!attribute [rw] parameters
    #   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 Appium tests (all types):
    #
    #   * appium\_version: The Appium version. Currently supported values
    #     are 1.6.5 (and later), latest, and default.
    #
    #     * latest runs the latest Appium version supported by Device Farm
    #       (1.9.1).
    #
    #     * For default, Device Farm selects 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 and 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 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`
    #   @return [Hash<String,String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ScheduleRunTest AWS API Documentation
    #
    class ScheduleRunTest < Struct.new(
      :type,
      :test_package_arn,
      :test_spec_arn,
      :filter,
      :parameters)
      SENSITIVE = []
      include Aws::Structure
    end

    # There was a problem with the service account.
    #
    # @!attribute [rw] message
    #   Any additional information about the exception.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/ServiceAccountException AWS API Documentation
    #
    class ServiceAccountException < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] arn
    #   Represents the Amazon Resource Name (ARN) of the Device Farm job to
    #   stop.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/StopJobRequest AWS API Documentation
    #
    class StopJobRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] job
    #   The job that was stopped.
    #   @return [Types::Job]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/StopJobResult AWS API Documentation
    #
    class StopJobResult < Struct.new(
      :job)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the request to stop the remote access session.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the remote access session to stop.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/StopRemoteAccessSessionRequest AWS API Documentation
    #
    class StopRemoteAccessSessionRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the response from the server that describes the remote
    # access session when AWS Device Farm stops the session.
    #
    # @!attribute [rw] remote_access_session
    #   A container that represents the metadata from the service about the
    #   remote access session you are stopping.
    #   @return [Types::RemoteAccessSession]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/StopRemoteAccessSessionResult AWS API Documentation
    #
    class StopRemoteAccessSessionResult < Struct.new(
      :remote_access_session)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the request to stop a specific run.
    #
    # @!attribute [rw] arn
    #   Represents the Amazon Resource Name (ARN) of the Device Farm run to
    #   stop.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/StopRunRequest AWS API Documentation
    #
    class StopRunRequest < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the results of your stop run attempt.
    #
    # @!attribute [rw] run
    #   The run that was stopped.
    #   @return [Types::Run]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/StopRunResult AWS API Documentation
    #
    class StopRunResult < Struct.new(
      :run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a collection of one or more tests.
    #
    # @!attribute [rw] arn
    #   The suite's ARN.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The suite's name.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The suite's type.
    #
    #   Must be one of the following values:
    #
    #   * BUILTIN\_FUZZ
    #
    #   * APPIUM\_JAVA\_JUNIT
    #
    #   * APPIUM\_JAVA\_TESTNG
    #
    #   * APPIUM\_PYTHON
    #
    #   * APPIUM\_NODE
    #
    #   * APPIUM\_RUBY
    #
    #   * APPIUM\_WEB\_JAVA\_JUNIT
    #
    #   * APPIUM\_WEB\_JAVA\_TESTNG
    #
    #   * APPIUM\_WEB\_PYTHON
    #
    #   * APPIUM\_WEB\_NODE
    #
    #   * APPIUM\_WEB\_RUBY
    #
    #   * INSTRUMENTATION
    #
    #   * XCTEST
    #
    #   * XCTEST\_UI
    #   @return [String]
    #
    # @!attribute [rw] created
    #   When the suite was created.
    #   @return [Time]
    #
    # @!attribute [rw] status
    #   The suite's status.
    #
    #   Allowed values include:
    #
    #   * PENDING
    #
    #   * PENDING\_CONCURRENCY
    #
    #   * PENDING\_DEVICE
    #
    #   * PROCESSING
    #
    #   * SCHEDULING
    #
    #   * PREPARING
    #
    #   * RUNNING
    #
    #   * COMPLETED
    #
    #   * STOPPING
    #   @return [String]
    #
    # @!attribute [rw] result
    #   The suite's result.
    #
    #   Allowed values include:
    #
    #   * PENDING
    #
    #   * PASSED
    #
    #   * WARNED
    #
    #   * FAILED
    #
    #   * SKIPPED
    #
    #   * ERRORED
    #
    #   * STOPPED
    #   @return [String]
    #
    # @!attribute [rw] started
    #   The suite's start time.
    #   @return [Time]
    #
    # @!attribute [rw] stopped
    #   The suite's stop time.
    #   @return [Time]
    #
    # @!attribute [rw] counters
    #   The suite's result counters.
    #   @return [Types::Counters]
    #
    # @!attribute [rw] message
    #   A message about the suite's result.
    #   @return [String]
    #
    # @!attribute [rw] device_minutes
    #   Represents the total (metered or unmetered) minutes used by the test
    #   suite.
    #   @return [Types::DeviceMinutes]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Suite AWS API Documentation
    #
    class Suite < Struct.new(
      :arn,
      :name,
      :type,
      :created,
      :status,
      :result,
      :started,
      :stopped,
      :counters,
      :message,
      :device_minutes)
      SENSITIVE = []
      include Aws::Structure
    end

    # 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. Tag values can have a maximum length of 256 characters.
    #
    # @!attribute [rw] key
    #   One part of a key-value pair that makes up a tag. A `key` is a
    #   general label that acts like a category for more specific tag
    #   values.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The optional part of a key-value pair that makes up a tag. A `value`
    #   acts as a descriptor in a tag category (key).
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Tag AWS API Documentation
    #
    class Tag < Struct.new(
      :key,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # The operation was not successful. Try again.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @!attribute [rw] resource_name
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/TagOperationException AWS API Documentation
    #
    class TagOperationException < Struct.new(
      :message,
      :resource_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # The request doesn't comply with the AWS Identity and Access
    # Management (IAM) tag policy. Correct your request and then retry it.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @!attribute [rw] resource_name
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/TagPolicyException AWS API Documentation
    #
    class TagPolicyException < Struct.new(
      :message,
      :resource_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource_arn
    #   The Amazon Resource Name (ARN) of the resource or resources to which
    #   to add tags. You can associate tags with the following Device Farm
    #   resources: `PROJECT`, `RUN`, `NETWORK_PROFILE`, `INSTANCE_PROFILE`,
    #   `DEVICE_INSTANCE`, `SESSION`, `DEVICE_POOL`, `DEVICE`, and
    #   `VPCE_CONFIGURATION`.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags to add to the resource. A tag is an array of key-value
    #   pairs. Tag keys can have a maximum character length of 128
    #   characters. Tag values can have a maximum length of 256 characters.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/TagResourceRequest AWS API Documentation
    #
    class TagResourceRequest < Struct.new(
      :resource_arn,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/TagResourceResponse AWS API Documentation
    #
    class TagResourceResponse < Aws::EmptyStructure; end

    # Represents a condition that is evaluated.
    #
    # @!attribute [rw] arn
    #   The test's ARN.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The test's name.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The test's type.
    #
    #   Must be one of the following values:
    #
    #   * BUILTIN\_FUZZ
    #
    #   * APPIUM\_JAVA\_JUNIT
    #
    #   * APPIUM\_JAVA\_TESTNG
    #
    #   * APPIUM\_PYTHON
    #
    #   * APPIUM\_NODE
    #
    #   * APPIUM\_RUBY
    #
    #   * APPIUM\_WEB\_JAVA\_JUNIT
    #
    #   * APPIUM\_WEB\_JAVA\_TESTNG
    #
    #   * APPIUM\_WEB\_PYTHON
    #
    #   * APPIUM\_WEB\_NODE
    #
    #   * APPIUM\_WEB\_RUBY
    #
    #   * INSTRUMENTATION
    #
    #   * XCTEST
    #
    #   * XCTEST\_UI
    #   @return [String]
    #
    # @!attribute [rw] created
    #   When the test was created.
    #   @return [Time]
    #
    # @!attribute [rw] status
    #   The test's status.
    #
    #   Allowed values include:
    #
    #   * PENDING
    #
    #   * PENDING\_CONCURRENCY
    #
    #   * PENDING\_DEVICE
    #
    #   * PROCESSING
    #
    #   * SCHEDULING
    #
    #   * PREPARING
    #
    #   * RUNNING
    #
    #   * COMPLETED
    #
    #   * STOPPING
    #   @return [String]
    #
    # @!attribute [rw] result
    #   The test's result.
    #
    #   Allowed values include:
    #
    #   * PENDING
    #
    #   * PASSED
    #
    #   * WARNED
    #
    #   * FAILED
    #
    #   * SKIPPED
    #
    #   * ERRORED
    #
    #   * STOPPED
    #   @return [String]
    #
    # @!attribute [rw] started
    #   The test's start time.
    #   @return [Time]
    #
    # @!attribute [rw] stopped
    #   The test's stop time.
    #   @return [Time]
    #
    # @!attribute [rw] counters
    #   The test's result counters.
    #   @return [Types::Counters]
    #
    # @!attribute [rw] message
    #   A message about the test's result.
    #   @return [String]
    #
    # @!attribute [rw] device_minutes
    #   Represents the total (metered or unmetered) minutes used by the
    #   test.
    #   @return [Types::DeviceMinutes]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Test AWS API Documentation
    #
    class Test < Struct.new(
      :arn,
      :name,
      :type,
      :created,
      :status,
      :result,
      :started,
      :stopped,
      :counters,
      :message,
      :device_minutes)
      SENSITIVE = []
      include Aws::Structure
    end

    # A Selenium testing project. Projects are used to collect and collate
    # sessions.
    #
    # @!attribute [rw] arn
    #   The ARN for the project.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   A human-readable name for the project.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A human-readable description for the project.
    #   @return [String]
    #
    # @!attribute [rw] vpc_config
    #   The VPC security groups and subnets that are attached to a project.
    #   @return [Types::TestGridVpcConfig]
    #
    # @!attribute [rw] created
    #   When the project was created.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/TestGridProject AWS API Documentation
    #
    class TestGridProject < Struct.new(
      :arn,
      :name,
      :description,
      :vpc_config,
      :created)
      SENSITIVE = []
      include Aws::Structure
    end

    # A TestGridSession is a single instance of a browser launched from the
    # URL provided by a call to CreateTestGridUrl.
    #
    # @!attribute [rw] arn
    #   The ARN of the session.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The state of the session.
    #   @return [String]
    #
    # @!attribute [rw] created
    #   The time that the session was started.
    #   @return [Time]
    #
    # @!attribute [rw] ended
    #   The time the session ended.
    #   @return [Time]
    #
    # @!attribute [rw] billing_minutes
    #   The number of billed minutes that were used for this session.
    #   @return [Float]
    #
    # @!attribute [rw] selenium_properties
    #   A JSON object of options and parameters passed to the Selenium
    #   WebDriver.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/TestGridSession AWS API Documentation
    #
    class TestGridSession < Struct.new(
      :arn,
      :status,
      :created,
      :ended,
      :billing_minutes,
      :selenium_properties)
      SENSITIVE = []
      include Aws::Structure
    end

    # An action taken by a TestGridSession browser instance.
    #
    # @!attribute [rw] action
    #   The action taken by the session.
    #   @return [String]
    #
    # @!attribute [rw] started
    #   The time that the session invoked the action.
    #   @return [Time]
    #
    # @!attribute [rw] duration
    #   The time, in milliseconds, that the action took to complete in the
    #   browser.
    #   @return [Integer]
    #
    # @!attribute [rw] status_code
    #   HTTP status code returned to the browser when the action was taken.
    #   @return [String]
    #
    # @!attribute [rw] request_method
    #   HTTP method that the browser used to make the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/TestGridSessionAction AWS API Documentation
    #
    class TestGridSessionAction < Struct.new(
      :action,
      :started,
      :duration,
      :status_code,
      :request_method)
      SENSITIVE = []
      include Aws::Structure
    end

    # Artifacts are video and other files that are produced in the process
    # of running a browser in an automated context.
    #
    # <note markdown="1"> Video elements might be broken up into multiple artifacts as they grow
    # in size during creation.
    #
    #  </note>
    #
    # @!attribute [rw] filename
    #   The file name of the artifact.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The kind of artifact.
    #   @return [String]
    #
    # @!attribute [rw] url
    #   A semi-stable URL to the content of the object.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/TestGridSessionArtifact AWS API Documentation
    #
    class TestGridSessionArtifact < Struct.new(
      :filename,
      :type,
      :url)
      SENSITIVE = [:url]
      include Aws::Structure
    end

    # The VPC security groups and subnets that are attached to a project.
    #
    # @!attribute [rw] security_group_ids
    #   A list of VPC security group IDs in your Amazon VPC.
    #   @return [Array<String>]
    #
    # @!attribute [rw] subnet_ids
    #   A list of VPC subnet IDs in your Amazon VPC.
    #   @return [Array<String>]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the Amazon VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/TestGridVpcConfig AWS API Documentation
    #
    class TestGridVpcConfig < Struct.new(
      :security_group_ids,
      :subnet_ids,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # The list of tags on the repository is over the limit. The maximum
    # number of tags that can be applied to a repository is 50.
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @!attribute [rw] resource_name
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/TooManyTagsException AWS API Documentation
    #
    class TooManyTagsException < Struct.new(
      :message,
      :resource_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents information about free trial device minutes for an AWS
    # account.
    #
    # @!attribute [rw] total
    #   The total number of free trial minutes that the account started
    #   with.
    #   @return [Float]
    #
    # @!attribute [rw] remaining
    #   The number of free trial minutes remaining in the account.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/TrialMinutes AWS API Documentation
    #
    class TrialMinutes < Struct.new(
      :total,
      :remaining)
      SENSITIVE = []
      include Aws::Structure
    end

    # A collection of one or more problems, grouped by their result.
    #
    # @!attribute [rw] message
    #   A message about the unique problems' result.
    #   @return [String]
    #
    # @!attribute [rw] problems
    #   Information about the problems.
    #   @return [Array<Types::Problem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UniqueProblem AWS API Documentation
    #
    class UniqueProblem < Struct.new(
      :message,
      :problems)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource_arn
    #   The Amazon Resource Name (ARN) of the resource or resources from
    #   which to delete tags. You can associate tags with the following
    #   Device Farm resources: `PROJECT`, `RUN`, `NETWORK_PROFILE`,
    #   `INSTANCE_PROFILE`, `DEVICE_INSTANCE`, `SESSION`, `DEVICE_POOL`,
    #   `DEVICE`, and `VPCE_CONFIGURATION`.
    #   @return [String]
    #
    # @!attribute [rw] tag_keys
    #   The keys of the tags to be removed.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UntagResourceRequest AWS API Documentation
    #
    class UntagResourceRequest < Struct.new(
      :resource_arn,
      :tag_keys)
      SENSITIVE = []
      include Aws::Structure
    end

    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UntagResourceResponse AWS API Documentation
    #
    class UntagResourceResponse < Aws::EmptyStructure; end

    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the device instance.
    #   @return [String]
    #
    # @!attribute [rw] profile_arn
    #   The ARN of the profile that you want to associate with the device
    #   instance.
    #   @return [String]
    #
    # @!attribute [rw] labels
    #   An array of strings that you want to associate with the device
    #   instance.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateDeviceInstanceRequest AWS API Documentation
    #
    class UpdateDeviceInstanceRequest < Struct.new(
      :arn,
      :profile_arn,
      :labels)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] device_instance
    #   An object that contains information about your device instance.
    #   @return [Types::DeviceInstance]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateDeviceInstanceResult AWS API Documentation
    #
    class UpdateDeviceInstanceResult < Struct.new(
      :device_instance)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the update device pool operation.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the Device Farm device pool to
    #   update.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   A string that represents the name of the device pool to update.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description of the device pool to update.
    #   @return [String]
    #
    # @!attribute [rw] rules
    #   Represents the rules to modify for the device pool. Updating rules
    #   is optional. If you update rules for your request, the update
    #   replaces the existing rules.
    #   @return [Array<Types::Rule>]
    #
    # @!attribute [rw] max_devices
    #   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.
    #
    #   If you use this parameter in your request, you cannot use the
    #   `clearMaxDevices` parameter in the same request.
    #   @return [Integer]
    #
    # @!attribute [rw] clear_max_devices
    #   Sets whether the `maxDevices` parameter applies to your device pool.
    #   If you set this parameter to `true`, the `maxDevices` parameter does
    #   not apply, and Device Farm does not limit the number of devices that
    #   it adds to your device pool. In this case, Device Farm adds all
    #   available devices that meet the criteria specified in the `rules`
    #   parameter.
    #
    #   If you use this parameter in your request, you cannot use the
    #   `maxDevices` parameter in the same request.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateDevicePoolRequest AWS API Documentation
    #
    class UpdateDevicePoolRequest < Struct.new(
      :arn,
      :name,
      :description,
      :rules,
      :max_devices,
      :clear_max_devices)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of an update device pool request.
    #
    # @!attribute [rw] device_pool
    #   The device pool you just updated.
    #   @return [Types::DevicePool]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateDevicePoolResult AWS API Documentation
    #
    class UpdateDevicePoolResult < Struct.new(
      :device_pool)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the instance profile.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The updated name for your instance profile.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The updated description for your instance profile.
    #   @return [String]
    #
    # @!attribute [rw] package_cleanup
    #   The updated choice for whether you want to specify package cleanup.
    #   The default value is `false` for private devices.
    #   @return [Boolean]
    #
    # @!attribute [rw] exclude_app_packages_from_cleanup
    #   An array of strings that specifies 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`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] reboot_after_use
    #   The updated choice for whether you want to reboot the device after
    #   use. The default value is `true`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateInstanceProfileRequest AWS API Documentation
    #
    class UpdateInstanceProfileRequest < Struct.new(
      :arn,
      :name,
      :description,
      :package_cleanup,
      :exclude_app_packages_from_cleanup,
      :reboot_after_use)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_profile
    #   An object that contains information about your instance profile.
    #   @return [Types::InstanceProfile]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateInstanceProfileResult AWS API Documentation
    #
    class UpdateInstanceProfileResult < Struct.new(
      :instance_profile)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the project for which you want to
    #   update network profile settings.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the network profile about which you are returning
    #   information.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the network profile about which you are returning
    #   information.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of network profile to return information about. Valid
    #   values are listed here.
    #   @return [String]
    #
    # @!attribute [rw] uplink_bandwidth_bits
    #   The data throughput rate in bits per second, as an integer from 0 to
    #   104857600.
    #   @return [Integer]
    #
    # @!attribute [rw] downlink_bandwidth_bits
    #   The data throughput rate in bits per second, as an integer from 0 to
    #   104857600.
    #   @return [Integer]
    #
    # @!attribute [rw] uplink_delay_ms
    #   Delay time for all packets to destination in milliseconds as an
    #   integer from 0 to 2000.
    #   @return [Integer]
    #
    # @!attribute [rw] downlink_delay_ms
    #   Delay time for all packets to destination in milliseconds as an
    #   integer from 0 to 2000.
    #   @return [Integer]
    #
    # @!attribute [rw] uplink_jitter_ms
    #   Time variation in the delay of received packets in milliseconds as
    #   an integer from 0 to 2000.
    #   @return [Integer]
    #
    # @!attribute [rw] downlink_jitter_ms
    #   Time variation in the delay of received packets in milliseconds as
    #   an integer from 0 to 2000.
    #   @return [Integer]
    #
    # @!attribute [rw] uplink_loss_percent
    #   Proportion of transmitted packets that fail to arrive from 0 to 100
    #   percent.
    #   @return [Integer]
    #
    # @!attribute [rw] downlink_loss_percent
    #   Proportion of received packets that fail to arrive from 0 to 100
    #   percent.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateNetworkProfileRequest AWS API Documentation
    #
    class UpdateNetworkProfileRequest < Struct.new(
      :arn,
      :name,
      :description,
      :type,
      :uplink_bandwidth_bits,
      :downlink_bandwidth_bits,
      :uplink_delay_ms,
      :downlink_delay_ms,
      :uplink_jitter_ms,
      :downlink_jitter_ms,
      :uplink_loss_percent,
      :downlink_loss_percent)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_profile
    #   A list of the available network profiles.
    #   @return [Types::NetworkProfile]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateNetworkProfileResult AWS API Documentation
    #
    class UpdateNetworkProfileResult < Struct.new(
      :network_profile)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents a request to the update project operation.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the project whose name to update.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   A string that represents the new name of the project that you are
    #   updating.
    #   @return [String]
    #
    # @!attribute [rw] default_job_timeout_minutes
    #   The number of minutes a test run in the project executes before it
    #   times out.
    #   @return [Integer]
    #
    # @!attribute [rw] vpc_config
    #   The VPC security groups and subnets that are attached to a project.
    #   @return [Types::VpcConfig]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateProjectRequest AWS API Documentation
    #
    class UpdateProjectRequest < Struct.new(
      :arn,
      :name,
      :default_job_timeout_minutes,
      :vpc_config)
      SENSITIVE = []
      include Aws::Structure
    end

    # Represents the result of an update project request.
    #
    # @!attribute [rw] project
    #   The project to update.
    #   @return [Types::Project]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateProjectResult AWS API Documentation
    #
    class UpdateProjectResult < Struct.new(
      :project)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] project_arn
    #   ARN of the project to update.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   Human-readable name for the project.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   Human-readable description for the project.
    #   @return [String]
    #
    # @!attribute [rw] vpc_config
    #   The VPC security groups and subnets that are attached to a project.
    #   @return [Types::TestGridVpcConfig]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateTestGridProjectRequest AWS API Documentation
    #
    class UpdateTestGridProjectRequest < Struct.new(
      :project_arn,
      :name,
      :description,
      :vpc_config)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] test_grid_project
    #   The project, including updated information.
    #   @return [Types::TestGridProject]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateTestGridProjectResult AWS API Documentation
    #
    class UpdateTestGridProjectResult < Struct.new(
      :test_grid_project)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the uploaded test spec.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The upload's test spec file name. The name must not contain any
    #   forward slashes (/). The test spec file name must end with the
    #   `.yaml` or `.yml` file extension.
    #   @return [String]
    #
    # @!attribute [rw] content_type
    #   The upload's content type (for example, `application/x-yaml`).
    #   @return [String]
    #
    # @!attribute [rw] edit_content
    #   Set to true if the YAML file has changed and must be updated.
    #   Otherwise, set to false.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateUploadRequest AWS API Documentation
    #
    class UpdateUploadRequest < Struct.new(
      :arn,
      :name,
      :content_type,
      :edit_content)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] upload
    #   A test spec uploaded to Device Farm.
    #   @return [Types::Upload]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateUploadResult AWS API Documentation
    #
    class UpdateUploadResult < Struct.new(
      :upload)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the VPC endpoint configuration you
    #   want to update.
    #   @return [String]
    #
    # @!attribute [rw] vpce_configuration_name
    #   The friendly name you give to your VPC endpoint configuration to
    #   manage your configurations more easily.
    #   @return [String]
    #
    # @!attribute [rw] vpce_service_name
    #   The name of the VPC endpoint service running in your AWS account
    #   that you want Device Farm to test.
    #   @return [String]
    #
    # @!attribute [rw] service_dns_name
    #   The DNS (domain) name used to connect to your private service in
    #   your VPC. The DNS name must not already be in use on the internet.
    #   @return [String]
    #
    # @!attribute [rw] vpce_configuration_description
    #   An optional description that provides details about your VPC
    #   endpoint configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateVPCEConfigurationRequest AWS API Documentation
    #
    class UpdateVPCEConfigurationRequest < Struct.new(
      :arn,
      :vpce_configuration_name,
      :vpce_service_name,
      :service_dns_name,
      :vpce_configuration_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpce_configuration
    #   An object that contains information about your VPC endpoint
    #   configuration.
    #   @return [Types::VPCEConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/UpdateVPCEConfigurationResult AWS API Documentation
    #
    class UpdateVPCEConfigurationResult < Struct.new(
      :vpce_configuration)
      SENSITIVE = []
      include Aws::Structure
    end

    # An app or a set of one or more tests to upload or that have been
    # uploaded.
    #
    # @!attribute [rw] arn
    #   The upload's ARN.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The upload's file name.
    #   @return [String]
    #
    # @!attribute [rw] created
    #   When the upload was created.
    #   @return [Time]
    #
    # @!attribute [rw] type
    #   The upload's type.
    #
    #   Must be one of the following values:
    #
    #   * ANDROID\_APP
    #
    #   * IOS\_APP
    #
    #   * WEB\_APP
    #
    #   * EXTERNAL\_DATA
    #
    #   * APPIUM\_JAVA\_JUNIT\_TEST\_PACKAGE
    #
    #   * APPIUM\_JAVA\_TESTNG\_TEST\_PACKAGE
    #
    #   * APPIUM\_PYTHON\_TEST\_PACKAGE
    #
    #   * APPIUM\_NODE\_TEST\_PACKAGE
    #
    #   * APPIUM\_RUBY\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_JAVA\_JUNIT\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_JAVA\_TESTNG\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_PYTHON\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_NODE\_TEST\_PACKAGE
    #
    #   * APPIUM\_WEB\_RUBY\_TEST\_PACKAGE
    #
    #   * INSTRUMENTATION\_TEST\_PACKAGE
    #
    #   * XCTEST\_TEST\_PACKAGE
    #
    #   * XCTEST\_UI\_TEST\_PACKAGE
    #
    #   * APPIUM\_JAVA\_JUNIT\_TEST\_SPEC
    #
    #   * APPIUM\_JAVA\_TESTNG\_TEST\_SPEC
    #
    #   * APPIUM\_PYTHON\_TEST\_SPEC
    #
    #   * APPIUM\_NODE\_TEST\_SPEC
    #
    #   * APPIUM\_RUBY\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_JAVA\_JUNIT\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_JAVA\_TESTNG\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_PYTHON\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_NODE\_TEST\_SPEC
    #
    #   * APPIUM\_WEB\_RUBY\_TEST\_SPEC
    #
    #   * INSTRUMENTATION\_TEST\_SPEC
    #
    #   * XCTEST\_UI\_TEST\_SPEC
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The upload's status.
    #
    #   Must be one of the following values:
    #
    #   * FAILED
    #
    #   * INITIALIZED
    #
    #   * PROCESSING
    #
    #   * SUCCEEDED
    #   @return [String]
    #
    # @!attribute [rw] url
    #   The presigned Amazon S3 URL that was used to store a file using a
    #   PUT request.
    #   @return [String]
    #
    # @!attribute [rw] metadata
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] content_type
    #   The upload's content type (for example,
    #   `application/octet-stream`).
    #   @return [String]
    #
    # @!attribute [rw] message
    #   A message about the upload's result.
    #   @return [String]
    #
    # @!attribute [rw] category
    #   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.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/Upload AWS API Documentation
    #
    class Upload < Struct.new(
      :arn,
      :name,
      :created,
      :type,
      :status,
      :url,
      :metadata,
      :content_type,
      :message,
      :category)
      SENSITIVE = [:url]
      include Aws::Structure
    end

    # Represents an Amazon Virtual Private Cloud (VPC) endpoint
    # configuration.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the VPC endpoint configuration.
    #   @return [String]
    #
    # @!attribute [rw] vpce_configuration_name
    #   The friendly name you give to your VPC endpoint configuration to
    #   manage your configurations more easily.
    #   @return [String]
    #
    # @!attribute [rw] vpce_service_name
    #   The name of the VPC endpoint service running in your AWS account
    #   that you want Device Farm to test.
    #   @return [String]
    #
    # @!attribute [rw] service_dns_name
    #   The DNS name that maps to the private IP address of the service you
    #   want to access.
    #   @return [String]
    #
    # @!attribute [rw] vpce_configuration_description
    #   An optional description that provides details about your VPC
    #   endpoint configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/VPCEConfiguration AWS API Documentation
    #
    class VPCEConfiguration < Struct.new(
      :arn,
      :vpce_configuration_name,
      :vpce_service_name,
      :service_dns_name,
      :vpce_configuration_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the VPC configuration data necessary to interface with AWS
    # Device Farm's services.
    #
    # @!attribute [rw] security_group_ids
    #   An array of one or more security groups IDs in your Amazon VPC.
    #   @return [Array<String>]
    #
    # @!attribute [rw] subnet_ids
    #   An array of one or more subnet IDs in your Amazon VPC.
    #   @return [Array<String>]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the Amazon VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/devicefarm-2015-06-23/VpcConfig AWS API Documentation
    #
    class VpcConfig < Struct.new(
      :security_group_ids,
      :subnet_ids,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

  end
end

