rusoto_devicefarm/
generated.rs

1// =================================================================
2//
3//                           * WARNING *
4//
5//                    This file is generated!
6//
7//  Changes made to this file will be overwritten. If changes are
8//  required to the generated code, the service_crategen project
9//  must be updated to generate the changes.
10//
11// =================================================================
12
13use std::error::Error;
14use std::fmt;
15
16use async_trait::async_trait;
17use rusoto_core::credential::ProvideAwsCredentials;
18use rusoto_core::region;
19use rusoto_core::request::{BufferedHttpResponse, DispatchSignedRequest};
20use rusoto_core::{Client, RusotoError};
21
22use rusoto_core::proto;
23use rusoto_core::request::HttpResponse;
24use rusoto_core::signature::SignedRequest;
25#[allow(unused_imports)]
26use serde::{Deserialize, Serialize};
27
28impl DeviceFarmClient {
29    fn new_signed_request(&self, http_method: &str, request_uri: &str) -> SignedRequest {
30        let mut request = SignedRequest::new(http_method, "devicefarm", &self.region, request_uri);
31
32        request.set_content_type("application/x-amz-json-1.1".to_owned());
33
34        request
35    }
36
37    async fn sign_and_dispatch<E>(
38        &self,
39        request: SignedRequest,
40        from_response: fn(BufferedHttpResponse) -> RusotoError<E>,
41    ) -> Result<HttpResponse, RusotoError<E>> {
42        let mut response = self.client.sign_and_dispatch(request).await?;
43        if !response.status.is_success() {
44            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
45            return Err(from_response(response));
46        }
47
48        Ok(response)
49    }
50}
51
52use serde_json;
53/// <p>A container for account-level settings in AWS Device Farm.</p>
54#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
55#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
56pub struct AccountSettings {
57    /// <p>The AWS account number specified in the <code>AccountSettings</code> container.</p>
58    #[serde(rename = "awsAccountNumber")]
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub aws_account_number: Option<String>,
61    /// <p>The default number of minutes (at the account level) a test run executes before it times out. The default value is 150 minutes.</p>
62    #[serde(rename = "defaultJobTimeoutMinutes")]
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub default_job_timeout_minutes: Option<i64>,
65    /// <p>The maximum number of minutes a test run executes before it times out.</p>
66    #[serde(rename = "maxJobTimeoutMinutes")]
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub max_job_timeout_minutes: Option<i64>,
69    /// <p>The maximum number of device slots that the AWS account can purchase. Each maximum is expressed as an <code>offering-id:number</code> pair, where the <code>offering-id</code> represents one of the IDs returned by the <code>ListOfferings</code> command.</p>
70    #[serde(rename = "maxSlots")]
71    #[serde(skip_serializing_if = "Option::is_none")]
72    pub max_slots: Option<::std::collections::HashMap<String, i64>>,
73    /// <p>When set to <code>true</code>, for private devices, Device Farm does not sign your app again. For public devices, Device Farm always signs your apps again.</p> <p>For more information about how Device Farm re-signs your apps, see <a href="https://aws.amazon.com/device-farm/faq/">Do you modify my app?</a> in the <i>AWS Device Farm FAQs</i>.</p>
74    #[serde(rename = "skipAppResign")]
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub skip_app_resign: Option<bool>,
77    /// <p>Information about an AWS account's usage of free trial device minutes.</p>
78    #[serde(rename = "trialMinutes")]
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub trial_minutes: Option<TrialMinutes>,
81    /// <p>Returns the unmetered devices you have purchased or want to purchase.</p>
82    #[serde(rename = "unmeteredDevices")]
83    #[serde(skip_serializing_if = "Option::is_none")]
84    pub unmetered_devices: Option<::std::collections::HashMap<String, i64>>,
85    /// <p>Returns the unmetered remote access devices you have purchased or want to purchase.</p>
86    #[serde(rename = "unmeteredRemoteAccessDevices")]
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub unmetered_remote_access_devices: Option<::std::collections::HashMap<String, i64>>,
89}
90
91/// <p>Represents the output of a test. Examples of artifacts include logs and screenshots.</p>
92#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
93#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
94pub struct Artifact {
95    /// <p>The artifact's ARN.</p>
96    #[serde(rename = "arn")]
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub arn: Option<String>,
99    /// <p>The artifact's file extension.</p>
100    #[serde(rename = "extension")]
101    #[serde(skip_serializing_if = "Option::is_none")]
102    pub extension: Option<String>,
103    /// <p>The artifact's name.</p>
104    #[serde(rename = "name")]
105    #[serde(skip_serializing_if = "Option::is_none")]
106    pub name: Option<String>,
107    /// <p><p>The artifact&#39;s type.</p> <p>Allowed values include the following:</p> <ul> <li> <p>UNKNOWN</p> </li> <li> <p>SCREENSHOT</p> </li> <li> <p>DEVICE<em>LOG</p> </li> <li> <p>MESSAGE</em>LOG</p> </li> <li> <p>VIDEO<em>LOG</p> </li> <li> <p>RESULT</em>LOG</p> </li> <li> <p>SERVICE<em>LOG</p> </li> <li> <p>WEBKIT</em>LOG</p> </li> <li> <p>INSTRUMENTATION<em>OUTPUT</p> </li> <li> <p>EXERCISER</em>MONKEY<em>OUTPUT: the artifact (log) generated by an Android fuzz test.</p> </li> <li> <p>CALABASH</em>JSON<em>OUTPUT</p> </li> <li> <p>CALABASH</em>PRETTY<em>OUTPUT</p> </li> <li> <p>CALABASH</em>STANDARD<em>OUTPUT</p> </li> <li> <p>CALABASH</em>JAVA<em>XML</em>OUTPUT</p> </li> <li> <p>AUTOMATION<em>OUTPUT</p> </li> <li> <p>APPIUM</em>SERVER<em>OUTPUT</p> </li> <li> <p>APPIUM</em>JAVA<em>OUTPUT</p> </li> <li> <p>APPIUM</em>JAVA<em>XML</em>OUTPUT</p> </li> <li> <p>APPIUM<em>PYTHON</em>OUTPUT</p> </li> <li> <p>APPIUM<em>PYTHON</em>XML<em>OUTPUT</p> </li> <li> <p>EXPLORER</em>EVENT<em>LOG</p> </li> <li> <p>EXPLORER</em>SUMMARY<em>LOG</p> </li> <li> <p>APPLICATION</em>CRASH<em>REPORT</p> </li> <li> <p>XCTEST</em>LOG</p> </li> <li> <p>VIDEO</p> </li> <li> <p>CUSTOMER<em>ARTIFACT</p> </li> <li> <p>CUSTOMER</em>ARTIFACT<em>LOG</p> </li> <li> <p>TESTSPEC</em>OUTPUT</p> </li> </ul></p>
108    #[serde(rename = "type")]
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub type_: Option<String>,
111    /// <p>The presigned Amazon S3 URL that can be used with a GET request to download the artifact's file.</p>
112    #[serde(rename = "url")]
113    #[serde(skip_serializing_if = "Option::is_none")]
114    pub url: Option<String>,
115}
116
117/// <p>Represents the amount of CPU that an app is using on a physical device. Does not represent system-wide CPU usage.</p>
118#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
119#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
120pub struct CPU {
121    /// <p>The CPU's architecture (for example, x86 or ARM).</p>
122    #[serde(rename = "architecture")]
123    #[serde(skip_serializing_if = "Option::is_none")]
124    pub architecture: Option<String>,
125    /// <p>The clock speed of the device's CPU, expressed in hertz (Hz). For example, a 1.2 GHz CPU is expressed as 1200000000.</p>
126    #[serde(rename = "clock")]
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub clock: Option<f64>,
129    /// <p>The CPU's frequency.</p>
130    #[serde(rename = "frequency")]
131    #[serde(skip_serializing_if = "Option::is_none")]
132    pub frequency: Option<String>,
133}
134
135/// <p>Represents entity counters.</p>
136#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
137#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
138pub struct Counters {
139    /// <p>The number of errored entities.</p>
140    #[serde(rename = "errored")]
141    #[serde(skip_serializing_if = "Option::is_none")]
142    pub errored: Option<i64>,
143    /// <p>The number of failed entities.</p>
144    #[serde(rename = "failed")]
145    #[serde(skip_serializing_if = "Option::is_none")]
146    pub failed: Option<i64>,
147    /// <p>The number of passed entities.</p>
148    #[serde(rename = "passed")]
149    #[serde(skip_serializing_if = "Option::is_none")]
150    pub passed: Option<i64>,
151    /// <p>The number of skipped entities.</p>
152    #[serde(rename = "skipped")]
153    #[serde(skip_serializing_if = "Option::is_none")]
154    pub skipped: Option<i64>,
155    /// <p>The number of stopped entities.</p>
156    #[serde(rename = "stopped")]
157    #[serde(skip_serializing_if = "Option::is_none")]
158    pub stopped: Option<i64>,
159    /// <p>The total number of entities.</p>
160    #[serde(rename = "total")]
161    #[serde(skip_serializing_if = "Option::is_none")]
162    pub total: Option<i64>,
163    /// <p>The number of warned entities.</p>
164    #[serde(rename = "warned")]
165    #[serde(skip_serializing_if = "Option::is_none")]
166    pub warned: Option<i64>,
167}
168
169/// <p>Represents a request to the create device pool operation.</p>
170#[derive(Clone, Debug, Default, PartialEq, Serialize)]
171#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
172pub struct CreateDevicePoolRequest {
173    /// <p>The device pool's description.</p>
174    #[serde(rename = "description")]
175    #[serde(skip_serializing_if = "Option::is_none")]
176    pub description: Option<String>,
177    /// <p>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 <code>rules</code> parameter. Depending on how many devices meet these constraints, your device pool might contain fewer devices than the value for this parameter.</p> <p>By specifying the maximum number of devices, you can control the costs that you incur by running tests.</p>
178    #[serde(rename = "maxDevices")]
179    #[serde(skip_serializing_if = "Option::is_none")]
180    pub max_devices: Option<i64>,
181    /// <p>The device pool's name.</p>
182    #[serde(rename = "name")]
183    pub name: String,
184    /// <p>The ARN of the project for the device pool.</p>
185    #[serde(rename = "projectArn")]
186    pub project_arn: String,
187    /// <p>The device pool's rules.</p>
188    #[serde(rename = "rules")]
189    pub rules: Vec<Rule>,
190}
191
192/// <p>Represents the result of a create device pool request.</p>
193#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
194#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
195pub struct CreateDevicePoolResult {
196    /// <p>The newly created device pool.</p>
197    #[serde(rename = "devicePool")]
198    #[serde(skip_serializing_if = "Option::is_none")]
199    pub device_pool: Option<DevicePool>,
200}
201
202#[derive(Clone, Debug, Default, PartialEq, Serialize)]
203#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
204pub struct CreateInstanceProfileRequest {
205    /// <p>The description of your instance profile.</p>
206    #[serde(rename = "description")]
207    #[serde(skip_serializing_if = "Option::is_none")]
208    pub description: Option<String>,
209    /// <p>An array of strings that specifies the list of app packages that should not be cleaned up from the device after a test run.</p> <p>The list of packages is considered only if you set <code>packageCleanup</code> to <code>true</code>.</p>
210    #[serde(rename = "excludeAppPackagesFromCleanup")]
211    #[serde(skip_serializing_if = "Option::is_none")]
212    pub exclude_app_packages_from_cleanup: Option<Vec<String>>,
213    /// <p>The name of your instance profile.</p>
214    #[serde(rename = "name")]
215    pub name: String,
216    /// <p>When set to <code>true</code>, Device Farm removes app packages after a test run. The default value is <code>false</code> for private devices.</p>
217    #[serde(rename = "packageCleanup")]
218    #[serde(skip_serializing_if = "Option::is_none")]
219    pub package_cleanup: Option<bool>,
220    /// <p>When set to <code>true</code>, Device Farm reboots the instance after a test run. The default value is <code>true</code>.</p>
221    #[serde(rename = "rebootAfterUse")]
222    #[serde(skip_serializing_if = "Option::is_none")]
223    pub reboot_after_use: Option<bool>,
224}
225
226#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
227#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
228pub struct CreateInstanceProfileResult {
229    /// <p>An object that contains information about your instance profile.</p>
230    #[serde(rename = "instanceProfile")]
231    #[serde(skip_serializing_if = "Option::is_none")]
232    pub instance_profile: Option<InstanceProfile>,
233}
234
235#[derive(Clone, Debug, Default, PartialEq, Serialize)]
236#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
237pub struct CreateNetworkProfileRequest {
238    /// <p>The description of the network profile.</p>
239    #[serde(rename = "description")]
240    #[serde(skip_serializing_if = "Option::is_none")]
241    pub description: Option<String>,
242    /// <p>The data throughput rate in bits per second, as an integer from 0 to 104857600.</p>
243    #[serde(rename = "downlinkBandwidthBits")]
244    #[serde(skip_serializing_if = "Option::is_none")]
245    pub downlink_bandwidth_bits: Option<i64>,
246    /// <p>Delay time for all packets to destination in milliseconds as an integer from 0 to 2000.</p>
247    #[serde(rename = "downlinkDelayMs")]
248    #[serde(skip_serializing_if = "Option::is_none")]
249    pub downlink_delay_ms: Option<i64>,
250    /// <p>Time variation in the delay of received packets in milliseconds as an integer from 0 to 2000.</p>
251    #[serde(rename = "downlinkJitterMs")]
252    #[serde(skip_serializing_if = "Option::is_none")]
253    pub downlink_jitter_ms: Option<i64>,
254    /// <p>Proportion of received packets that fail to arrive from 0 to 100 percent.</p>
255    #[serde(rename = "downlinkLossPercent")]
256    #[serde(skip_serializing_if = "Option::is_none")]
257    pub downlink_loss_percent: Option<i64>,
258    /// <p>The name for the new network profile.</p>
259    #[serde(rename = "name")]
260    pub name: String,
261    /// <p>The Amazon Resource Name (ARN) of the project for which you want to create a network profile.</p>
262    #[serde(rename = "projectArn")]
263    pub project_arn: String,
264    /// <p>The type of network profile to create. Valid values are listed here.</p>
265    #[serde(rename = "type")]
266    #[serde(skip_serializing_if = "Option::is_none")]
267    pub type_: Option<String>,
268    /// <p>The data throughput rate in bits per second, as an integer from 0 to 104857600.</p>
269    #[serde(rename = "uplinkBandwidthBits")]
270    #[serde(skip_serializing_if = "Option::is_none")]
271    pub uplink_bandwidth_bits: Option<i64>,
272    /// <p>Delay time for all packets to destination in milliseconds as an integer from 0 to 2000.</p>
273    #[serde(rename = "uplinkDelayMs")]
274    #[serde(skip_serializing_if = "Option::is_none")]
275    pub uplink_delay_ms: Option<i64>,
276    /// <p>Time variation in the delay of received packets in milliseconds as an integer from 0 to 2000.</p>
277    #[serde(rename = "uplinkJitterMs")]
278    #[serde(skip_serializing_if = "Option::is_none")]
279    pub uplink_jitter_ms: Option<i64>,
280    /// <p>Proportion of transmitted packets that fail to arrive from 0 to 100 percent.</p>
281    #[serde(rename = "uplinkLossPercent")]
282    #[serde(skip_serializing_if = "Option::is_none")]
283    pub uplink_loss_percent: Option<i64>,
284}
285
286#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
287#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
288pub struct CreateNetworkProfileResult {
289    /// <p>The network profile that is returned by the create network profile request.</p>
290    #[serde(rename = "networkProfile")]
291    #[serde(skip_serializing_if = "Option::is_none")]
292    pub network_profile: Option<NetworkProfile>,
293}
294
295/// <p>Represents a request to the create project operation.</p>
296#[derive(Clone, Debug, Default, PartialEq, Serialize)]
297#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
298pub struct CreateProjectRequest {
299    /// <p>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.</p>
300    #[serde(rename = "defaultJobTimeoutMinutes")]
301    #[serde(skip_serializing_if = "Option::is_none")]
302    pub default_job_timeout_minutes: Option<i64>,
303    /// <p>The project's name.</p>
304    #[serde(rename = "name")]
305    pub name: String,
306}
307
308/// <p>Represents the result of a create project request.</p>
309#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
310#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
311pub struct CreateProjectResult {
312    /// <p>The newly created project.</p>
313    #[serde(rename = "project")]
314    #[serde(skip_serializing_if = "Option::is_none")]
315    pub project: Option<Project>,
316}
317
318/// <p>Configuration settings for a remote access session, including billing method.</p>
319#[derive(Clone, Debug, Default, PartialEq, Serialize)]
320#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
321pub struct CreateRemoteAccessSessionConfiguration {
322    /// <p>The billing method for the remote access session.</p>
323    #[serde(rename = "billingMethod")]
324    #[serde(skip_serializing_if = "Option::is_none")]
325    pub billing_method: Option<String>,
326    /// <p>An array of ARNs included in the VPC endpoint configuration.</p>
327    #[serde(rename = "vpceConfigurationArns")]
328    #[serde(skip_serializing_if = "Option::is_none")]
329    pub vpce_configuration_arns: Option<Vec<String>>,
330}
331
332/// <p>Creates and submits a request to start a remote access session.</p>
333#[derive(Clone, Debug, Default, PartialEq, Serialize)]
334#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
335pub struct CreateRemoteAccessSessionRequest {
336    /// <p>Unique identifier for the client. If you want access to multiple devices on the same client, you should pass the same <code>clientId</code> value in each call to <code>CreateRemoteAccessSession</code>. This identifier is required only if <code>remoteDebugEnabled</code> is set to <code>true</code>.</p> <p>Remote debugging is <a href="https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html">no longer supported</a>.</p>
337    #[serde(rename = "clientId")]
338    #[serde(skip_serializing_if = "Option::is_none")]
339    pub client_id: Option<String>,
340    /// <p>The configuration information for the remote access session request.</p>
341    #[serde(rename = "configuration")]
342    #[serde(skip_serializing_if = "Option::is_none")]
343    pub configuration: Option<CreateRemoteAccessSessionConfiguration>,
344    /// <p>The ARN of the device for which you want to create a remote access session.</p>
345    #[serde(rename = "deviceArn")]
346    pub device_arn: String,
347    /// <p>The Amazon Resource Name (ARN) of the device instance for which you want to create a remote access session.</p>
348    #[serde(rename = "instanceArn")]
349    #[serde(skip_serializing_if = "Option::is_none")]
350    pub instance_arn: Option<String>,
351    /// <p><p>The interaction mode of the remote access session. Valid values are:</p> <ul> <li> <p>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.</p> </li> <li> <p>NO<em>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.</p> </li> <li> <p>VIDEO</em>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.</p> </li> </ul></p>
352    #[serde(rename = "interactionMode")]
353    #[serde(skip_serializing_if = "Option::is_none")]
354    pub interaction_mode: Option<String>,
355    /// <p>The name of the remote access session to create.</p>
356    #[serde(rename = "name")]
357    #[serde(skip_serializing_if = "Option::is_none")]
358    pub name: Option<String>,
359    /// <p>The Amazon Resource Name (ARN) of the project for which you want to create a remote access session.</p>
360    #[serde(rename = "projectArn")]
361    pub project_arn: String,
362    /// <p>Set to <code>true</code> if you want to access devices remotely for debugging in your remote access session.</p> <p>Remote debugging is <a href="https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html">no longer supported</a>.</p>
363    #[serde(rename = "remoteDebugEnabled")]
364    #[serde(skip_serializing_if = "Option::is_none")]
365    pub remote_debug_enabled: Option<bool>,
366    /// <p>The Amazon Resource Name (ARN) for the app to be recorded in the remote access session.</p>
367    #[serde(rename = "remoteRecordAppArn")]
368    #[serde(skip_serializing_if = "Option::is_none")]
369    pub remote_record_app_arn: Option<String>,
370    /// <p>Set to <code>true</code> to enable remote recording for the remote access session.</p>
371    #[serde(rename = "remoteRecordEnabled")]
372    #[serde(skip_serializing_if = "Option::is_none")]
373    pub remote_record_enabled: Option<bool>,
374    /// <p>When set to <code>true</code>, for private devices, Device Farm does not sign your app again. For public devices, Device Farm always signs your apps again.</p> <p>For more information on how Device Farm modifies your uploads during tests, see <a href="https://aws.amazon.com/device-farm/faq/">Do you modify my app?</a> </p>
375    #[serde(rename = "skipAppResign")]
376    #[serde(skip_serializing_if = "Option::is_none")]
377    pub skip_app_resign: Option<bool>,
378    /// <p>Ignored. The public key of the <code>ssh</code> key pair you want to use for connecting to remote devices in your remote debugging session. This key is required only if <code>remoteDebugEnabled</code> is set to <code>true</code>.</p> <p>Remote debugging is <a href="https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html">no longer supported</a>.</p>
379    #[serde(rename = "sshPublicKey")]
380    #[serde(skip_serializing_if = "Option::is_none")]
381    pub ssh_public_key: Option<String>,
382}
383
384/// <p>Represents the server response from a request to create a remote access session.</p>
385#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
386#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
387pub struct CreateRemoteAccessSessionResult {
388    /// <p>A container that describes the remote access session when the request to create a remote access session is sent.</p>
389    #[serde(rename = "remoteAccessSession")]
390    #[serde(skip_serializing_if = "Option::is_none")]
391    pub remote_access_session: Option<RemoteAccessSession>,
392}
393
394#[derive(Clone, Debug, Default, PartialEq, Serialize)]
395#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
396pub struct CreateTestGridProjectRequest {
397    /// <p>Human-readable description of the project.</p>
398    #[serde(rename = "description")]
399    #[serde(skip_serializing_if = "Option::is_none")]
400    pub description: Option<String>,
401    /// <p>Human-readable name of the Selenium testing project.</p>
402    #[serde(rename = "name")]
403    pub name: String,
404}
405
406#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
407#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
408pub struct CreateTestGridProjectResult {
409    /// <p>ARN of the Selenium testing project that was created.</p>
410    #[serde(rename = "testGridProject")]
411    #[serde(skip_serializing_if = "Option::is_none")]
412    pub test_grid_project: Option<TestGridProject>,
413}
414
415#[derive(Clone, Debug, Default, PartialEq, Serialize)]
416#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
417pub struct CreateTestGridUrlRequest {
418    /// <p>Lifetime, in seconds, of the URL.</p>
419    #[serde(rename = "expiresInSeconds")]
420    pub expires_in_seconds: i64,
421    /// <p>ARN (from <a>CreateTestGridProject</a> or <a>ListTestGridProjects</a>) to associate with the short-term URL. </p>
422    #[serde(rename = "projectArn")]
423    pub project_arn: String,
424}
425
426#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
427#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
428pub struct CreateTestGridUrlResult {
429    /// <p>The number of seconds the URL from <a>CreateTestGridUrlResult$url</a> stays active.</p>
430    #[serde(rename = "expires")]
431    #[serde(skip_serializing_if = "Option::is_none")]
432    pub expires: Option<f64>,
433    /// <p>A signed URL, expiring in <a>CreateTestGridUrlRequest$expiresInSeconds</a> seconds, to be passed to a <code>RemoteWebDriver</code>. </p>
434    #[serde(rename = "url")]
435    #[serde(skip_serializing_if = "Option::is_none")]
436    pub url: Option<String>,
437}
438
439/// <p>Represents a request to the create upload operation.</p>
440#[derive(Clone, Debug, Default, PartialEq, Serialize)]
441#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
442pub struct CreateUploadRequest {
443    /// <p>The upload's content type (for example, <code>application/octet-stream</code>).</p>
444    #[serde(rename = "contentType")]
445    #[serde(skip_serializing_if = "Option::is_none")]
446    pub content_type: Option<String>,
447    /// <p>The upload's file name. The name should not contain any forward slashes (<code>/</code>). If you are uploading an iOS app, the file name must end with the <code>.ipa</code> extension. If you are uploading an Android app, the file name must end with the <code>.apk</code> extension. For all others, the file name must end with the <code>.zip</code> file extension.</p>
448    #[serde(rename = "name")]
449    pub name: String,
450    /// <p>The ARN of the project for the upload.</p>
451    #[serde(rename = "projectArn")]
452    pub project_arn: String,
453    /// <p>The upload's upload type.</p> <p>Must be one of the following values:</p> <ul> <li> <p>ANDROID_APP</p> </li> <li> <p>IOS_APP</p> </li> <li> <p>WEB_APP</p> </li> <li> <p>EXTERNAL_DATA</p> </li> <li> <p>APPIUM_JAVA_JUNIT_TEST_PACKAGE</p> </li> <li> <p>APPIUM_JAVA_TESTNG_TEST_PACKAGE</p> </li> <li> <p>APPIUM_PYTHON_TEST_PACKAGE</p> </li> <li> <p>APPIUM_NODE_TEST_PACKAGE</p> </li> <li> <p>APPIUM_RUBY_TEST_PACKAGE</p> </li> <li> <p>APPIUM_WEB_JAVA_JUNIT_TEST_PACKAGE</p> </li> <li> <p>APPIUM_WEB_JAVA_TESTNG_TEST_PACKAGE</p> </li> <li> <p>APPIUM_WEB_PYTHON_TEST_PACKAGE</p> </li> <li> <p>APPIUM_WEB_NODE_TEST_PACKAGE</p> </li> <li> <p>APPIUM_WEB_RUBY_TEST_PACKAGE</p> </li> <li> <p>CALABASH_TEST_PACKAGE</p> </li> <li> <p>INSTRUMENTATION_TEST_PACKAGE</p> </li> <li> <p>UIAUTOMATION_TEST_PACKAGE</p> </li> <li> <p>UIAUTOMATOR_TEST_PACKAGE</p> </li> <li> <p>XCTEST_TEST_PACKAGE</p> </li> <li> <p>XCTEST_UI_TEST_PACKAGE</p> </li> <li> <p>APPIUM_JAVA_JUNIT_TEST_SPEC</p> </li> <li> <p>APPIUM_JAVA_TESTNG_TEST_SPEC</p> </li> <li> <p>APPIUM_PYTHON_TEST_SPEC</p> </li> <li> <p>APPIUM_NODE_TEST_SPEC</p> </li> <li> <p>APPIUM_RUBY_TEST_SPEC</p> </li> <li> <p>APPIUM_WEB_JAVA_JUNIT_TEST_SPEC</p> </li> <li> <p>APPIUM_WEB_JAVA_TESTNG_TEST_SPEC</p> </li> <li> <p>APPIUM_WEB_PYTHON_TEST_SPEC</p> </li> <li> <p>APPIUM_WEB_NODE_TEST_SPEC</p> </li> <li> <p>APPIUM_WEB_RUBY_TEST_SPEC</p> </li> <li> <p>INSTRUMENTATION_TEST_SPEC</p> </li> <li> <p>XCTEST_UI_TEST_SPEC</p> </li> </ul> <p> If you call <code>CreateUpload</code> with <code>WEB_APP</code> specified, AWS Device Farm throws an <code>ArgumentException</code> error.</p>
454    #[serde(rename = "type")]
455    pub type_: String,
456}
457
458/// <p>Represents the result of a create upload request.</p>
459#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
460#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
461pub struct CreateUploadResult {
462    /// <p>The newly created upload.</p>
463    #[serde(rename = "upload")]
464    #[serde(skip_serializing_if = "Option::is_none")]
465    pub upload: Option<Upload>,
466}
467
468#[derive(Clone, Debug, Default, PartialEq, Serialize)]
469#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
470pub struct CreateVPCEConfigurationRequest {
471    /// <p>The DNS name of the service running in your VPC that you want Device Farm to test.</p>
472    #[serde(rename = "serviceDnsName")]
473    pub service_dns_name: String,
474    /// <p>An optional description that provides details about your VPC endpoint configuration.</p>
475    #[serde(rename = "vpceConfigurationDescription")]
476    #[serde(skip_serializing_if = "Option::is_none")]
477    pub vpce_configuration_description: Option<String>,
478    /// <p>The friendly name you give to your VPC endpoint configuration, to manage your configurations more easily.</p>
479    #[serde(rename = "vpceConfigurationName")]
480    pub vpce_configuration_name: String,
481    /// <p>The name of the VPC endpoint service running in your AWS account that you want Device Farm to test.</p>
482    #[serde(rename = "vpceServiceName")]
483    pub vpce_service_name: String,
484}
485
486#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
487#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
488pub struct CreateVPCEConfigurationResult {
489    /// <p>An object that contains information about your VPC endpoint configuration.</p>
490    #[serde(rename = "vpceConfiguration")]
491    #[serde(skip_serializing_if = "Option::is_none")]
492    pub vpce_configuration: Option<VPCEConfiguration>,
493}
494
495/// <p>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.</p> <p>Specify <code>deviceHostPaths</code> and optionally specify either <code>iosPaths</code> or <code>androidPaths</code>.</p> <p>For web app tests, you can specify both <code>iosPaths</code> and <code>androidPaths</code>.</p>
496#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
497pub struct CustomerArtifactPaths {
498    /// <p>Comma-separated list of paths on the Android device where the artifacts generated by the customer's tests are pulled from.</p>
499    #[serde(rename = "androidPaths")]
500    #[serde(skip_serializing_if = "Option::is_none")]
501    pub android_paths: Option<Vec<String>>,
502    /// <p>Comma-separated list of paths in the test execution environment where the artifacts generated by the customer's tests are pulled from.</p>
503    #[serde(rename = "deviceHostPaths")]
504    #[serde(skip_serializing_if = "Option::is_none")]
505    pub device_host_paths: Option<Vec<String>>,
506    /// <p>Comma-separated list of paths on the iOS device where the artifacts generated by the customer's tests are pulled from.</p>
507    #[serde(rename = "iosPaths")]
508    #[serde(skip_serializing_if = "Option::is_none")]
509    pub ios_paths: Option<Vec<String>>,
510}
511
512/// <p>Represents a request to the delete device pool operation.</p>
513#[derive(Clone, Debug, Default, PartialEq, Serialize)]
514#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
515pub struct DeleteDevicePoolRequest {
516    /// <p>Represents the Amazon Resource Name (ARN) of the Device Farm device pool to delete.</p>
517    #[serde(rename = "arn")]
518    pub arn: String,
519}
520
521/// <p>Represents the result of a delete device pool request.</p>
522#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
523#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
524pub struct DeleteDevicePoolResult {}
525
526#[derive(Clone, Debug, Default, PartialEq, Serialize)]
527#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
528pub struct DeleteInstanceProfileRequest {
529    /// <p>The Amazon Resource Name (ARN) of the instance profile you are requesting to delete.</p>
530    #[serde(rename = "arn")]
531    pub arn: String,
532}
533
534#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
535#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
536pub struct DeleteInstanceProfileResult {}
537
538#[derive(Clone, Debug, Default, PartialEq, Serialize)]
539#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
540pub struct DeleteNetworkProfileRequest {
541    /// <p>The ARN of the network profile to delete.</p>
542    #[serde(rename = "arn")]
543    pub arn: String,
544}
545
546#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
547#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
548pub struct DeleteNetworkProfileResult {}
549
550/// <p>Represents a request to the delete project operation.</p>
551#[derive(Clone, Debug, Default, PartialEq, Serialize)]
552#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
553pub struct DeleteProjectRequest {
554    /// <p>Represents the Amazon Resource Name (ARN) of the Device Farm project to delete.</p>
555    #[serde(rename = "arn")]
556    pub arn: String,
557}
558
559/// <p>Represents the result of a delete project request.</p>
560#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
561#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
562pub struct DeleteProjectResult {}
563
564/// <p>Represents the request to delete the specified remote access session.</p>
565#[derive(Clone, Debug, Default, PartialEq, Serialize)]
566#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
567pub struct DeleteRemoteAccessSessionRequest {
568    /// <p>The Amazon Resource Name (ARN) of the session for which you want to delete remote access.</p>
569    #[serde(rename = "arn")]
570    pub arn: String,
571}
572
573/// <p>The response from the server when a request is made to delete the remote access session.</p>
574#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
575#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
576pub struct DeleteRemoteAccessSessionResult {}
577
578/// <p>Represents a request to the delete run operation.</p>
579#[derive(Clone, Debug, Default, PartialEq, Serialize)]
580#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
581pub struct DeleteRunRequest {
582    /// <p>The Amazon Resource Name (ARN) for the run to delete.</p>
583    #[serde(rename = "arn")]
584    pub arn: String,
585}
586
587/// <p>Represents the result of a delete run request.</p>
588#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
589#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
590pub struct DeleteRunResult {}
591
592#[derive(Clone, Debug, Default, PartialEq, Serialize)]
593#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
594pub struct DeleteTestGridProjectRequest {
595    /// <p>The ARN of the project to delete, from <a>CreateTestGridProject</a> or <a>ListTestGridProjects</a>.</p>
596    #[serde(rename = "projectArn")]
597    pub project_arn: String,
598}
599
600#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
601#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
602pub struct DeleteTestGridProjectResult {}
603
604/// <p>Represents a request to the delete upload operation.</p>
605#[derive(Clone, Debug, Default, PartialEq, Serialize)]
606#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
607pub struct DeleteUploadRequest {
608    /// <p>Represents the Amazon Resource Name (ARN) of the Device Farm upload to delete.</p>
609    #[serde(rename = "arn")]
610    pub arn: String,
611}
612
613/// <p>Represents the result of a delete upload request.</p>
614#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
615#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
616pub struct DeleteUploadResult {}
617
618#[derive(Clone, Debug, Default, PartialEq, Serialize)]
619#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
620pub struct DeleteVPCEConfigurationRequest {
621    /// <p>The Amazon Resource Name (ARN) of the VPC endpoint configuration you want to delete.</p>
622    #[serde(rename = "arn")]
623    pub arn: String,
624}
625
626#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
627#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
628pub struct DeleteVPCEConfigurationResult {}
629
630/// <p>Represents a device type that an app is tested against.</p>
631#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
632#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
633pub struct Device {
634    /// <p>The device's ARN.</p>
635    #[serde(rename = "arn")]
636    #[serde(skip_serializing_if = "Option::is_none")]
637    pub arn: Option<String>,
638    /// <p>Indicates how likely a device is available for a test run. Currently available in the <a>ListDevices</a> and GetDevice API methods.</p>
639    #[serde(rename = "availability")]
640    #[serde(skip_serializing_if = "Option::is_none")]
641    pub availability: Option<String>,
642    /// <p>The device's carrier.</p>
643    #[serde(rename = "carrier")]
644    #[serde(skip_serializing_if = "Option::is_none")]
645    pub carrier: Option<String>,
646    /// <p>Information about the device's CPU.</p>
647    #[serde(rename = "cpu")]
648    #[serde(skip_serializing_if = "Option::is_none")]
649    pub cpu: Option<CPU>,
650    /// <p>The name of the fleet to which this device belongs.</p>
651    #[serde(rename = "fleetName")]
652    #[serde(skip_serializing_if = "Option::is_none")]
653    pub fleet_name: Option<String>,
654    /// <p>The type of fleet to which this device belongs. Possible values are PRIVATE and PUBLIC.</p>
655    #[serde(rename = "fleetType")]
656    #[serde(skip_serializing_if = "Option::is_none")]
657    pub fleet_type: Option<String>,
658    /// <p><p>The device&#39;s form factor.</p> <p>Allowed values include:</p> <ul> <li> <p>PHONE</p> </li> <li> <p>TABLET</p> </li> </ul></p>
659    #[serde(rename = "formFactor")]
660    #[serde(skip_serializing_if = "Option::is_none")]
661    pub form_factor: Option<String>,
662    /// <p>The device's heap size, expressed in bytes.</p>
663    #[serde(rename = "heapSize")]
664    #[serde(skip_serializing_if = "Option::is_none")]
665    pub heap_size: Option<i64>,
666    /// <p>The device's image name.</p>
667    #[serde(rename = "image")]
668    #[serde(skip_serializing_if = "Option::is_none")]
669    pub image: Option<String>,
670    /// <p>The instances that belong to this device.</p>
671    #[serde(rename = "instances")]
672    #[serde(skip_serializing_if = "Option::is_none")]
673    pub instances: Option<Vec<DeviceInstance>>,
674    /// <p>The device's manufacturer name.</p>
675    #[serde(rename = "manufacturer")]
676    #[serde(skip_serializing_if = "Option::is_none")]
677    pub manufacturer: Option<String>,
678    /// <p>The device's total memory size, expressed in bytes.</p>
679    #[serde(rename = "memory")]
680    #[serde(skip_serializing_if = "Option::is_none")]
681    pub memory: Option<i64>,
682    /// <p>The device's model name.</p>
683    #[serde(rename = "model")]
684    #[serde(skip_serializing_if = "Option::is_none")]
685    pub model: Option<String>,
686    /// <p>The device's model ID.</p>
687    #[serde(rename = "modelId")]
688    #[serde(skip_serializing_if = "Option::is_none")]
689    pub model_id: Option<String>,
690    /// <p>The device's display name.</p>
691    #[serde(rename = "name")]
692    #[serde(skip_serializing_if = "Option::is_none")]
693    pub name: Option<String>,
694    /// <p>The device's operating system type.</p>
695    #[serde(rename = "os")]
696    #[serde(skip_serializing_if = "Option::is_none")]
697    pub os: Option<String>,
698    /// <p><p>The device&#39;s platform.</p> <p>Allowed values include:</p> <ul> <li> <p>ANDROID</p> </li> <li> <p>IOS</p> </li> </ul></p>
699    #[serde(rename = "platform")]
700    #[serde(skip_serializing_if = "Option::is_none")]
701    pub platform: Option<String>,
702    /// <p>The device's radio.</p>
703    #[serde(rename = "radio")]
704    #[serde(skip_serializing_if = "Option::is_none")]
705    pub radio: Option<String>,
706    /// <p>Specifies whether remote access has been enabled for the specified device.</p>
707    #[serde(rename = "remoteAccessEnabled")]
708    #[serde(skip_serializing_if = "Option::is_none")]
709    pub remote_access_enabled: Option<bool>,
710    /// <p>This flag is set to <code>true</code> if remote debugging is enabled for the device.</p> <p>Remote debugging is <a href="https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html">no longer supported</a>.</p>
711    #[serde(rename = "remoteDebugEnabled")]
712    #[serde(skip_serializing_if = "Option::is_none")]
713    pub remote_debug_enabled: Option<bool>,
714    /// <p>The resolution of the device.</p>
715    #[serde(rename = "resolution")]
716    #[serde(skip_serializing_if = "Option::is_none")]
717    pub resolution: Option<Resolution>,
718}
719
720/// <p>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 <code>deviceSelectionConfiguration</code> parameter to <code>ScheduleRun</code>. For an example of the JSON request syntax, see <a>ScheduleRun</a>.</p> <p>It is also passed in as the <code>filters</code> parameter to <code>ListDevices</code>. For an example of the JSON request syntax, see <a>ListDevices</a>.</p>
721#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
722pub struct DeviceFilter {
723    /// <p><p>The aspect of a device such as platform or model used as the selection criteria in a device filter.</p> <p>The supported operators for each attribute are provided in the following list.</p> <dl> <dt>ARN</dt> <dd> <p>The Amazon Resource Name (ARN) of the device (for example, <code>arn:aws:devicefarm:us-west-2::device:12345Example</code>).</p> <p>Supported operators: <code>EQUALS</code>, <code>IN</code>, <code>NOT<em>IN</code> </p> </dd> <dt>PLATFORM</dt> <dd> <p>The device platform. Valid values are ANDROID or IOS.</p> <p>Supported operators: <code>EQUALS</code> </p> </dd> <dt>OS</em>VERSION</dt> <dd> <p>The operating system version (for example, 10.3.2).</p> <p>Supported operators: <code>EQUALS</code>, <code>GREATER<em>THAN</code>, <code>GREATER</em>THAN<em>OR</em>EQUALS</code>, <code>IN</code>, <code>LESS<em>THAN</code>, <code>LESS</em>THAN<em>OR</em>EQUALS</code>, <code>NOT<em>IN</code> </p> </dd> <dt>MODEL</dt> <dd> <p>The device model (for example, iPad 5th Gen).</p> <p>Supported operators: <code>CONTAINS</code>, <code>EQUALS</code>, <code>IN</code>, <code>NOT</em>IN</code> </p> </dd> <dt>AVAILABILITY</dt> <dd> <p>The current availability of the device. Valid values are AVAILABLE, HIGHLY<em>AVAILABLE, BUSY, or TEMPORARY</em>NOT<em>AVAILABLE.</p> <p>Supported operators: <code>EQUALS</code> </p> </dd> <dt>FORM</em>FACTOR</dt> <dd> <p>The device form factor. Valid values are PHONE or TABLET.</p> <p>Supported operators: <code>EQUALS</code> </p> </dd> <dt>MANUFACTURER</dt> <dd> <p>The device manufacturer (for example, Apple).</p> <p>Supported operators: <code>EQUALS</code>, <code>IN</code>, <code>NOT<em>IN</code> </p> </dd> <dt>REMOTE</em>ACCESS<em>ENABLED</dt> <dd> <p>Whether the device is enabled for remote access. Valid values are TRUE or FALSE.</p> <p>Supported operators: <code>EQUALS</code> </p> </dd> <dt>REMOTE</em>DEBUG<em>ENABLED</dt> <dd> <p>Whether the device is enabled for remote debugging. Valid values are TRUE or FALSE.</p> <p>Supported operators: <code>EQUALS</code> </p> <p>Because remote debugging is <a href="https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html">no longer supported</a>, this filter is ignored.</p> </dd> <dt>INSTANCE</em>ARN</dt> <dd> <p>The Amazon Resource Name (ARN) of the device instance.</p> <p>Supported operators: <code>EQUALS</code>, <code>IN</code>, <code>NOT<em>IN</code> </p> </dd> <dt>INSTANCE</em>LABELS</dt> <dd> <p>The label of the device instance.</p> <p>Supported operators: <code>CONTAINS</code> </p> </dd> <dt>FLEET_TYPE</dt> <dd> <p>The fleet type. Valid values are PUBLIC or PRIVATE.</p> <p>Supported operators: <code>EQUALS</code> </p> </dd> </dl></p>
724    #[serde(rename = "attribute")]
725    #[serde(skip_serializing_if = "Option::is_none")]
726    pub attribute: Option<String>,
727    /// <p>Specifies how Device Farm compares the filter's attribute to the value. See the attribute descriptions.</p>
728    #[serde(rename = "operator")]
729    #[serde(skip_serializing_if = "Option::is_none")]
730    pub operator: Option<String>,
731    /// <p><p>An array of one or more filter values used in a device filter.</p> <p class="title"> <b>Operator Values</b> </p> <ul> <li> <p>The IN and NOT<em>IN operators can take a values array that has more than one element.</p> </li> <li> <p>The other operators require an array with a single element.</p> </li> </ul> <p class="title"> <b>Attribute Values</b> </p> <ul> <li> <p>The PLATFORM attribute can be set to ANDROID or IOS.</p> </li> <li> <p>The AVAILABILITY attribute can be set to AVAILABLE, HIGHLY</em>AVAILABLE, BUSY, or TEMPORARY<em>NOT</em>AVAILABLE.</p> </li> <li> <p>The FORM<em>FACTOR attribute can be set to PHONE or TABLET.</p> </li> <li> <p>The FLEET</em>TYPE attribute can be set to PUBLIC or PRIVATE.</p> </li> </ul></p>
732    #[serde(rename = "values")]
733    #[serde(skip_serializing_if = "Option::is_none")]
734    pub values: Option<Vec<String>>,
735}
736
737/// <p>Represents the device instance.</p>
738#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
739#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
740pub struct DeviceInstance {
741    /// <p>The Amazon Resource Name (ARN) of the device instance.</p>
742    #[serde(rename = "arn")]
743    #[serde(skip_serializing_if = "Option::is_none")]
744    pub arn: Option<String>,
745    /// <p>The ARN of the device.</p>
746    #[serde(rename = "deviceArn")]
747    #[serde(skip_serializing_if = "Option::is_none")]
748    pub device_arn: Option<String>,
749    /// <p>A object that contains information about the instance profile.</p>
750    #[serde(rename = "instanceProfile")]
751    #[serde(skip_serializing_if = "Option::is_none")]
752    pub instance_profile: Option<InstanceProfile>,
753    /// <p>An array of strings that describe the device instance.</p>
754    #[serde(rename = "labels")]
755    #[serde(skip_serializing_if = "Option::is_none")]
756    pub labels: Option<Vec<String>>,
757    /// <p>The status of the device instance. Valid values are listed here.</p>
758    #[serde(rename = "status")]
759    #[serde(skip_serializing_if = "Option::is_none")]
760    pub status: Option<String>,
761    /// <p>Unique device identifier for the device instance.</p>
762    #[serde(rename = "udid")]
763    #[serde(skip_serializing_if = "Option::is_none")]
764    pub udid: Option<String>,
765}
766
767/// <p>Represents the total (metered or unmetered) minutes used by the resource to run tests. Contains the sum of minutes consumed by all children.</p>
768#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
769#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
770pub struct DeviceMinutes {
771    /// <p>When specified, represents only the sum of metered minutes used by the resource to run tests.</p>
772    #[serde(rename = "metered")]
773    #[serde(skip_serializing_if = "Option::is_none")]
774    pub metered: Option<f64>,
775    /// <p>When specified, represents the total minutes used by the resource to run tests.</p>
776    #[serde(rename = "total")]
777    #[serde(skip_serializing_if = "Option::is_none")]
778    pub total: Option<f64>,
779    /// <p>When specified, represents only the sum of unmetered minutes used by the resource to run tests.</p>
780    #[serde(rename = "unmetered")]
781    #[serde(skip_serializing_if = "Option::is_none")]
782    pub unmetered: Option<f64>,
783}
784
785/// <p>Represents a collection of device types.</p>
786#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
787#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
788pub struct DevicePool {
789    /// <p>The device pool's ARN.</p>
790    #[serde(rename = "arn")]
791    #[serde(skip_serializing_if = "Option::is_none")]
792    pub arn: Option<String>,
793    /// <p>The device pool's description.</p>
794    #[serde(rename = "description")]
795    #[serde(skip_serializing_if = "Option::is_none")]
796    pub description: Option<String>,
797    /// <p>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 <code>rules</code> parameter. Depending on how many devices meet these constraints, your device pool might contain fewer devices than the value for this parameter.</p> <p>By specifying the maximum number of devices, you can control the costs that you incur by running tests.</p>
798    #[serde(rename = "maxDevices")]
799    #[serde(skip_serializing_if = "Option::is_none")]
800    pub max_devices: Option<i64>,
801    /// <p>The device pool's name.</p>
802    #[serde(rename = "name")]
803    #[serde(skip_serializing_if = "Option::is_none")]
804    pub name: Option<String>,
805    /// <p>Information about the device pool's rules.</p>
806    #[serde(rename = "rules")]
807    #[serde(skip_serializing_if = "Option::is_none")]
808    pub rules: Option<Vec<Rule>>,
809    /// <p><p>The device pool&#39;s type.</p> <p>Allowed values include:</p> <ul> <li> <p>CURATED: A device pool that is created and managed by AWS Device Farm.</p> </li> <li> <p>PRIVATE: A device pool that is created and managed by the device pool developer.</p> </li> </ul></p>
810    #[serde(rename = "type")]
811    #[serde(skip_serializing_if = "Option::is_none")]
812    pub type_: Option<String>,
813}
814
815/// <p>Represents a device pool compatibility result.</p>
816#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
817#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
818pub struct DevicePoolCompatibilityResult {
819    /// <p>Whether the result was compatible with the device pool.</p>
820    #[serde(rename = "compatible")]
821    #[serde(skip_serializing_if = "Option::is_none")]
822    pub compatible: Option<bool>,
823    /// <p>The device (phone or tablet) to return information about.</p>
824    #[serde(rename = "device")]
825    #[serde(skip_serializing_if = "Option::is_none")]
826    pub device: Option<Device>,
827    /// <p>Information about the compatibility.</p>
828    #[serde(rename = "incompatibilityMessages")]
829    #[serde(skip_serializing_if = "Option::is_none")]
830    pub incompatibility_messages: Option<Vec<IncompatibilityMessage>>,
831}
832
833/// <p>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 <code>deviceSelectionConfiguration</code> request parameter in <a>ScheduleRun</a>.</p>
834#[derive(Clone, Debug, Default, PartialEq, Serialize)]
835#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
836pub struct DeviceSelectionConfiguration {
837    /// <p><p>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.</p> <ul> <li> <p> <b>Attribute</b> </p> <p>The aspect of a device such as platform or model used as the selection criteria in a device filter.</p> <p>Allowed values include:</p> <ul> <li> <p>ARN: The Amazon Resource Name (ARN) of the device (for example, <code>arn:aws:devicefarm:us-west-2::device:12345Example</code>).</p> </li> <li> <p>PLATFORM: The device platform. Valid values are ANDROID or IOS.</p> </li> <li> <p>OS<em>VERSION: The operating system version (for example, 10.3.2).</p> </li> <li> <p>MODEL: The device model (for example, iPad 5th Gen).</p> </li> <li> <p>AVAILABILITY: The current availability of the device. Valid values are AVAILABLE, HIGHLY</em>AVAILABLE, BUSY, or TEMPORARY<em>NOT</em>AVAILABLE.</p> </li> <li> <p>FORM<em>FACTOR: The device form factor. Valid values are PHONE or TABLET.</p> </li> <li> <p>MANUFACTURER: The device manufacturer (for example, Apple).</p> </li> <li> <p>REMOTE</em>ACCESS<em>ENABLED: Whether the device is enabled for remote access. Valid values are TRUE or FALSE.</p> </li> <li> <p>REMOTE</em>DEBUG<em>ENABLED: Whether the device is enabled for remote debugging. Valid values are TRUE or FALSE. Because remote debugging is <a href="https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html">no longer supported</a>, this filter is ignored.</p> </li> <li> <p>INSTANCE</em>ARN: The Amazon Resource Name (ARN) of the device instance.</p> </li> <li> <p>INSTANCE<em>LABELS: The label of the device instance.</p> </li> <li> <p>FLEET</em>TYPE: The fleet type. Valid values are PUBLIC or PRIVATE.</p> </li> </ul> </li> <li> <p> <b>Operator</b> </p> <p>The filter operator.</p> <ul> <li> <p>The EQUALS operator is available for every attribute except INSTANCE<em>LABELS.</p> </li> <li> <p>The CONTAINS operator is available for the INSTANCE</em>LABELS and MODEL attributes.</p> </li> <li> <p>The IN and NOT<em>IN operators are available for the ARN, OS</em>VERSION, MODEL, MANUFACTURER, and INSTANCE<em>ARN attributes.</p> </li> <li> <p>The LESS</em>THAN, GREATER<em>THAN, LESS</em>THAN<em>OR</em>EQUALS, and GREATER<em>THAN</em>OR<em>EQUALS operators are also available for the OS</em>VERSION attribute.</p> </li> </ul> </li> <li> <p> <b>Values</b> </p> <p>An array of one or more filter values.</p> <p class="title"> <b>Operator Values</b> </p> <ul> <li> <p>The IN and NOT<em>IN operators can take a values array that has more than one element.</p> </li> <li> <p>The other operators require an array with a single element.</p> </li> </ul> <p class="title"> <b>Attribute Values</b> </p> <ul> <li> <p>The PLATFORM attribute can be set to ANDROID or IOS.</p> </li> <li> <p>The AVAILABILITY attribute can be set to AVAILABLE, HIGHLY</em>AVAILABLE, BUSY, or TEMPORARY<em>NOT</em>AVAILABLE.</p> </li> <li> <p>The FORM<em>FACTOR attribute can be set to PHONE or TABLET.</p> </li> <li> <p>The FLEET</em>TYPE attribute can be set to PUBLIC or PRIVATE.</p> </li> </ul> </li> </ul></p>
838    #[serde(rename = "filters")]
839    pub filters: Vec<DeviceFilter>,
840    /// <p>The maximum number of devices to be included in a test run.</p>
841    #[serde(rename = "maxDevices")]
842    pub max_devices: i64,
843}
844
845/// <p>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 <a>ScheduleRun</a>.</p>
846#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
847#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
848pub struct DeviceSelectionResult {
849    /// <p>The filters in a device selection result.</p>
850    #[serde(rename = "filters")]
851    #[serde(skip_serializing_if = "Option::is_none")]
852    pub filters: Option<Vec<DeviceFilter>>,
853    /// <p>The number of devices that matched the device filter selection criteria.</p>
854    #[serde(rename = "matchedDevicesCount")]
855    #[serde(skip_serializing_if = "Option::is_none")]
856    pub matched_devices_count: Option<i64>,
857    /// <p>The maximum number of devices to be selected by a device filter and included in a test run.</p>
858    #[serde(rename = "maxDevices")]
859    #[serde(skip_serializing_if = "Option::is_none")]
860    pub max_devices: Option<i64>,
861}
862
863/// <p>Represents configuration information about a test run, such as the execution timeout (in minutes).</p>
864#[derive(Clone, Debug, Default, PartialEq, Serialize)]
865#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
866pub struct ExecutionConfiguration {
867    /// <p>True if account cleanup is enabled at the beginning of the test. Otherwise, false.</p>
868    #[serde(rename = "accountsCleanup")]
869    #[serde(skip_serializing_if = "Option::is_none")]
870    pub accounts_cleanup: Option<bool>,
871    /// <p>True if app package cleanup is enabled at the beginning of the test. Otherwise, false.</p>
872    #[serde(rename = "appPackagesCleanup")]
873    #[serde(skip_serializing_if = "Option::is_none")]
874    pub app_packages_cleanup: Option<bool>,
875    /// <p>The number of minutes a test run executes before it times out.</p>
876    #[serde(rename = "jobTimeoutMinutes")]
877    #[serde(skip_serializing_if = "Option::is_none")]
878    pub job_timeout_minutes: Option<i64>,
879    /// <p>When set to <code>true</code>, for private devices, Device Farm does not sign your app again. For public devices, Device Farm always signs your apps again.</p> <p>For more information about how Device Farm re-signs your apps, see <a href="https://aws.amazon.com/device-farm/faq/">Do you modify my app?</a> in the <i>AWS Device Farm FAQs</i>.</p>
880    #[serde(rename = "skipAppResign")]
881    #[serde(skip_serializing_if = "Option::is_none")]
882    pub skip_app_resign: Option<bool>,
883    /// <p>Set to true to enable video capture. Otherwise, set to false. The default is true.</p>
884    #[serde(rename = "videoCapture")]
885    #[serde(skip_serializing_if = "Option::is_none")]
886    pub video_capture: Option<bool>,
887}
888
889/// <p>Represents the request sent to retrieve the account settings.</p>
890#[derive(Clone, Debug, Default, PartialEq, Serialize)]
891#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
892pub struct GetAccountSettingsRequest {}
893
894/// <p>Represents the account settings return values from the <code>GetAccountSettings</code> request.</p>
895#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
896#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
897pub struct GetAccountSettingsResult {
898    /// <p>The account settings.</p>
899    #[serde(rename = "accountSettings")]
900    #[serde(skip_serializing_if = "Option::is_none")]
901    pub account_settings: Option<AccountSettings>,
902}
903
904#[derive(Clone, Debug, Default, PartialEq, Serialize)]
905#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
906pub struct GetDeviceInstanceRequest {
907    /// <p>The Amazon Resource Name (ARN) of the instance you're requesting information about.</p>
908    #[serde(rename = "arn")]
909    pub arn: String,
910}
911
912#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
913#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
914pub struct GetDeviceInstanceResult {
915    /// <p>An object that contains information about your device instance.</p>
916    #[serde(rename = "deviceInstance")]
917    #[serde(skip_serializing_if = "Option::is_none")]
918    pub device_instance: Option<DeviceInstance>,
919}
920
921/// <p>Represents a request to the get device pool compatibility operation.</p>
922#[derive(Clone, Debug, Default, PartialEq, Serialize)]
923#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
924pub struct GetDevicePoolCompatibilityRequest {
925    /// <p>The ARN of the app that is associated with the specified device pool.</p>
926    #[serde(rename = "appArn")]
927    #[serde(skip_serializing_if = "Option::is_none")]
928    pub app_arn: Option<String>,
929    /// <p>An object that contains information about the settings for a run.</p>
930    #[serde(rename = "configuration")]
931    #[serde(skip_serializing_if = "Option::is_none")]
932    pub configuration: Option<ScheduleRunConfiguration>,
933    /// <p>The device pool's ARN.</p>
934    #[serde(rename = "devicePoolArn")]
935    pub device_pool_arn: String,
936    /// <p>Information about the uploaded test to be run against the device pool.</p>
937    #[serde(rename = "test")]
938    #[serde(skip_serializing_if = "Option::is_none")]
939    pub test: Option<ScheduleRunTest>,
940    /// <p><p>The test type for the specified device pool.</p> <p>Allowed values include the following:</p> <ul> <li> <p>BUILTIN<em>FUZZ.</p> </li> <li> <p>BUILTIN</em>EXPLORER. For Android, an app explorer that traverses an Android app, interacting with it and capturing screenshots at the same time.</p> </li> <li> <p>APPIUM<em>JAVA</em>JUNIT.</p> </li> <li> <p>APPIUM<em>JAVA</em>TESTNG.</p> </li> <li> <p>APPIUM<em>PYTHON.</p> </li> <li> <p>APPIUM</em>NODE.</p> </li> <li> <p>APPIUM<em>RUBY.</p> </li> <li> <p>APPIUM</em>WEB<em>JAVA</em>JUNIT.</p> </li> <li> <p>APPIUM<em>WEB</em>JAVA<em>TESTNG.</p> </li> <li> <p>APPIUM</em>WEB<em>PYTHON.</p> </li> <li> <p>APPIUM</em>WEB<em>NODE.</p> </li> <li> <p>APPIUM</em>WEB<em>RUBY.</p> </li> <li> <p>CALABASH.</p> </li> <li> <p>INSTRUMENTATION.</p> </li> <li> <p>UIAUTOMATION.</p> </li> <li> <p>UIAUTOMATOR.</p> </li> <li> <p>XCTEST.</p> </li> <li> <p>XCTEST</em>UI.</p> </li> </ul></p>
941    #[serde(rename = "testType")]
942    #[serde(skip_serializing_if = "Option::is_none")]
943    pub test_type: Option<String>,
944}
945
946/// <p>Represents the result of describe device pool compatibility request.</p>
947#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
948#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
949pub struct GetDevicePoolCompatibilityResult {
950    /// <p>Information about compatible devices.</p>
951    #[serde(rename = "compatibleDevices")]
952    #[serde(skip_serializing_if = "Option::is_none")]
953    pub compatible_devices: Option<Vec<DevicePoolCompatibilityResult>>,
954    /// <p>Information about incompatible devices.</p>
955    #[serde(rename = "incompatibleDevices")]
956    #[serde(skip_serializing_if = "Option::is_none")]
957    pub incompatible_devices: Option<Vec<DevicePoolCompatibilityResult>>,
958}
959
960/// <p>Represents a request to the get device pool operation.</p>
961#[derive(Clone, Debug, Default, PartialEq, Serialize)]
962#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
963pub struct GetDevicePoolRequest {
964    /// <p>The device pool's ARN.</p>
965    #[serde(rename = "arn")]
966    pub arn: String,
967}
968
969/// <p>Represents the result of a get device pool request.</p>
970#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
971#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
972pub struct GetDevicePoolResult {
973    /// <p>An object that contains information about the requested device pool.</p>
974    #[serde(rename = "devicePool")]
975    #[serde(skip_serializing_if = "Option::is_none")]
976    pub device_pool: Option<DevicePool>,
977}
978
979/// <p>Represents a request to the get device request.</p>
980#[derive(Clone, Debug, Default, PartialEq, Serialize)]
981#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
982pub struct GetDeviceRequest {
983    /// <p>The device type's ARN.</p>
984    #[serde(rename = "arn")]
985    pub arn: String,
986}
987
988/// <p>Represents the result of a get device request.</p>
989#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
990#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
991pub struct GetDeviceResult {
992    /// <p>An object that contains information about the requested device.</p>
993    #[serde(rename = "device")]
994    #[serde(skip_serializing_if = "Option::is_none")]
995    pub device: Option<Device>,
996}
997
998#[derive(Clone, Debug, Default, PartialEq, Serialize)]
999#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1000pub struct GetInstanceProfileRequest {
1001    /// <p>The Amazon Resource Name (ARN) of an instance profile.</p>
1002    #[serde(rename = "arn")]
1003    pub arn: String,
1004}
1005
1006#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1007#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1008pub struct GetInstanceProfileResult {
1009    /// <p>An object that contains information about an instance profile.</p>
1010    #[serde(rename = "instanceProfile")]
1011    #[serde(skip_serializing_if = "Option::is_none")]
1012    pub instance_profile: Option<InstanceProfile>,
1013}
1014
1015/// <p>Represents a request to the get job operation.</p>
1016#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1017#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1018pub struct GetJobRequest {
1019    /// <p>The job's ARN.</p>
1020    #[serde(rename = "arn")]
1021    pub arn: String,
1022}
1023
1024/// <p>Represents the result of a get job request.</p>
1025#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1026#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1027pub struct GetJobResult {
1028    /// <p>An object that contains information about the requested job.</p>
1029    #[serde(rename = "job")]
1030    #[serde(skip_serializing_if = "Option::is_none")]
1031    pub job: Option<Job>,
1032}
1033
1034#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1035#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1036pub struct GetNetworkProfileRequest {
1037    /// <p>The ARN of the network profile to return information about.</p>
1038    #[serde(rename = "arn")]
1039    pub arn: String,
1040}
1041
1042#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1043#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1044pub struct GetNetworkProfileResult {
1045    /// <p>The network profile.</p>
1046    #[serde(rename = "networkProfile")]
1047    #[serde(skip_serializing_if = "Option::is_none")]
1048    pub network_profile: Option<NetworkProfile>,
1049}
1050
1051/// <p>Represents the request to retrieve the offering status for the specified customer or account.</p>
1052#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1053#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1054pub struct GetOfferingStatusRequest {
1055    /// <p>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.</p>
1056    #[serde(rename = "nextToken")]
1057    #[serde(skip_serializing_if = "Option::is_none")]
1058    pub next_token: Option<String>,
1059}
1060
1061/// <p>Returns the status result for a device offering.</p>
1062#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1063#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1064pub struct GetOfferingStatusResult {
1065    /// <p>When specified, gets the offering status for the current period.</p>
1066    #[serde(rename = "current")]
1067    #[serde(skip_serializing_if = "Option::is_none")]
1068    pub current: Option<::std::collections::HashMap<String, OfferingStatus>>,
1069    /// <p>When specified, gets the offering status for the next period.</p>
1070    #[serde(rename = "nextPeriod")]
1071    #[serde(skip_serializing_if = "Option::is_none")]
1072    pub next_period: Option<::std::collections::HashMap<String, OfferingStatus>>,
1073    /// <p>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.</p>
1074    #[serde(rename = "nextToken")]
1075    #[serde(skip_serializing_if = "Option::is_none")]
1076    pub next_token: Option<String>,
1077}
1078
1079/// <p>Represents a request to the get project operation.</p>
1080#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1081#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1082pub struct GetProjectRequest {
1083    /// <p>The project's ARN.</p>
1084    #[serde(rename = "arn")]
1085    pub arn: String,
1086}
1087
1088/// <p>Represents the result of a get project request.</p>
1089#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1090#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1091pub struct GetProjectResult {
1092    /// <p>The project to get information about.</p>
1093    #[serde(rename = "project")]
1094    #[serde(skip_serializing_if = "Option::is_none")]
1095    pub project: Option<Project>,
1096}
1097
1098/// <p>Represents the request to get information about the specified remote access session.</p>
1099#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1100#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1101pub struct GetRemoteAccessSessionRequest {
1102    /// <p>The Amazon Resource Name (ARN) of the remote access session about which you want to get session information.</p>
1103    #[serde(rename = "arn")]
1104    pub arn: String,
1105}
1106
1107/// <p>Represents the response from the server that lists detailed information about the remote access session.</p>
1108#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1109#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1110pub struct GetRemoteAccessSessionResult {
1111    /// <p>A container that lists detailed information about the remote access session.</p>
1112    #[serde(rename = "remoteAccessSession")]
1113    #[serde(skip_serializing_if = "Option::is_none")]
1114    pub remote_access_session: Option<RemoteAccessSession>,
1115}
1116
1117/// <p>Represents a request to the get run operation.</p>
1118#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1119#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1120pub struct GetRunRequest {
1121    /// <p>The run's ARN.</p>
1122    #[serde(rename = "arn")]
1123    pub arn: String,
1124}
1125
1126/// <p>Represents the result of a get run request.</p>
1127#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1128#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1129pub struct GetRunResult {
1130    /// <p>The run to get results from.</p>
1131    #[serde(rename = "run")]
1132    #[serde(skip_serializing_if = "Option::is_none")]
1133    pub run: Option<Run>,
1134}
1135
1136/// <p>Represents a request to the get suite operation.</p>
1137#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1138#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1139pub struct GetSuiteRequest {
1140    /// <p>The suite's ARN.</p>
1141    #[serde(rename = "arn")]
1142    pub arn: String,
1143}
1144
1145/// <p>Represents the result of a get suite request.</p>
1146#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1147#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1148pub struct GetSuiteResult {
1149    /// <p>A collection of one or more tests.</p>
1150    #[serde(rename = "suite")]
1151    #[serde(skip_serializing_if = "Option::is_none")]
1152    pub suite: Option<Suite>,
1153}
1154
1155#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1156#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1157pub struct GetTestGridProjectRequest {
1158    /// <p>The ARN of the Selenium testing project, from either <a>CreateTestGridProject</a> or <a>ListTestGridProjects</a>.</p>
1159    #[serde(rename = "projectArn")]
1160    pub project_arn: String,
1161}
1162
1163#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1164#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1165pub struct GetTestGridProjectResult {
1166    /// <p>A <a>TestGridProject</a>.</p>
1167    #[serde(rename = "testGridProject")]
1168    #[serde(skip_serializing_if = "Option::is_none")]
1169    pub test_grid_project: Option<TestGridProject>,
1170}
1171
1172#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1173#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1174pub struct GetTestGridSessionRequest {
1175    /// <p>The ARN for the project that this session belongs to. See <a>CreateTestGridProject</a> and <a>ListTestGridProjects</a>.</p>
1176    #[serde(rename = "projectArn")]
1177    #[serde(skip_serializing_if = "Option::is_none")]
1178    pub project_arn: Option<String>,
1179    /// <p>An ARN that uniquely identifies a <a>TestGridSession</a>.</p>
1180    #[serde(rename = "sessionArn")]
1181    #[serde(skip_serializing_if = "Option::is_none")]
1182    pub session_arn: Option<String>,
1183    /// <p>An ID associated with this session.</p>
1184    #[serde(rename = "sessionId")]
1185    #[serde(skip_serializing_if = "Option::is_none")]
1186    pub session_id: Option<String>,
1187}
1188
1189#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1190#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1191pub struct GetTestGridSessionResult {
1192    /// <p>The <a>TestGridSession</a> that was requested.</p>
1193    #[serde(rename = "testGridSession")]
1194    #[serde(skip_serializing_if = "Option::is_none")]
1195    pub test_grid_session: Option<TestGridSession>,
1196}
1197
1198/// <p>Represents a request to the get test operation.</p>
1199#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1200#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1201pub struct GetTestRequest {
1202    /// <p>The test's ARN.</p>
1203    #[serde(rename = "arn")]
1204    pub arn: String,
1205}
1206
1207/// <p>Represents the result of a get test request.</p>
1208#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1209#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1210pub struct GetTestResult {
1211    /// <p>A test condition that is evaluated.</p>
1212    #[serde(rename = "test")]
1213    #[serde(skip_serializing_if = "Option::is_none")]
1214    pub test: Option<Test>,
1215}
1216
1217/// <p>Represents a request to the get upload operation.</p>
1218#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1219#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1220pub struct GetUploadRequest {
1221    /// <p>The upload's ARN.</p>
1222    #[serde(rename = "arn")]
1223    pub arn: String,
1224}
1225
1226/// <p>Represents the result of a get upload request.</p>
1227#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1228#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1229pub struct GetUploadResult {
1230    /// <p>An app or a set of one or more tests to upload or that have been uploaded.</p>
1231    #[serde(rename = "upload")]
1232    #[serde(skip_serializing_if = "Option::is_none")]
1233    pub upload: Option<Upload>,
1234}
1235
1236#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1237#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1238pub struct GetVPCEConfigurationRequest {
1239    /// <p>The Amazon Resource Name (ARN) of the VPC endpoint configuration you want to describe.</p>
1240    #[serde(rename = "arn")]
1241    pub arn: String,
1242}
1243
1244#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1245#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1246pub struct GetVPCEConfigurationResult {
1247    /// <p>An object that contains information about your VPC endpoint configuration.</p>
1248    #[serde(rename = "vpceConfiguration")]
1249    #[serde(skip_serializing_if = "Option::is_none")]
1250    pub vpce_configuration: Option<VPCEConfiguration>,
1251}
1252
1253/// <p>Represents information about incompatibility.</p>
1254#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1255#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1256pub struct IncompatibilityMessage {
1257    /// <p>A message about the incompatibility.</p>
1258    #[serde(rename = "message")]
1259    #[serde(skip_serializing_if = "Option::is_none")]
1260    pub message: Option<String>,
1261    /// <p><p>The type of incompatibility.</p> <p>Allowed values include:</p> <ul> <li> <p>ARN</p> </li> <li> <p>FORM<em>FACTOR (for example, phone or tablet)</p> </li> <li> <p>MANUFACTURER</p> </li> <li> <p>PLATFORM (for example, Android or iOS)</p> </li> <li> <p>REMOTE</em>ACCESS<em>ENABLED</p> </li> <li> <p>APPIUM</em>VERSION</p> </li> </ul></p>
1262    #[serde(rename = "type")]
1263    #[serde(skip_serializing_if = "Option::is_none")]
1264    pub type_: Option<String>,
1265}
1266
1267/// <p>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.</p>
1268#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1269#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1270pub struct InstallToRemoteAccessSessionRequest {
1271    /// <p>The ARN of the app about which you are requesting information.</p>
1272    #[serde(rename = "appArn")]
1273    pub app_arn: String,
1274    /// <p>The Amazon Resource Name (ARN) of the remote access session about which you are requesting information.</p>
1275    #[serde(rename = "remoteAccessSessionArn")]
1276    pub remote_access_session_arn: String,
1277}
1278
1279/// <p>Represents the response from the server after AWS Device Farm makes a request to install to a remote access session.</p>
1280#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1281#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1282pub struct InstallToRemoteAccessSessionResult {
1283    /// <p>An app to upload or that has been uploaded.</p>
1284    #[serde(rename = "appUpload")]
1285    #[serde(skip_serializing_if = "Option::is_none")]
1286    pub app_upload: Option<Upload>,
1287}
1288
1289/// <p>Represents the instance profile.</p>
1290#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1291#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1292pub struct InstanceProfile {
1293    /// <p>The Amazon Resource Name (ARN) of the instance profile.</p>
1294    #[serde(rename = "arn")]
1295    #[serde(skip_serializing_if = "Option::is_none")]
1296    pub arn: Option<String>,
1297    /// <p>The description of the instance profile.</p>
1298    #[serde(rename = "description")]
1299    #[serde(skip_serializing_if = "Option::is_none")]
1300    pub description: Option<String>,
1301    /// <p>An array of strings containing the list of app packages that should not be cleaned up from the device after a test run completes.</p> <p>The list of packages is considered only if you set <code>packageCleanup</code> to <code>true</code>.</p>
1302    #[serde(rename = "excludeAppPackagesFromCleanup")]
1303    #[serde(skip_serializing_if = "Option::is_none")]
1304    pub exclude_app_packages_from_cleanup: Option<Vec<String>>,
1305    /// <p>The name of the instance profile.</p>
1306    #[serde(rename = "name")]
1307    #[serde(skip_serializing_if = "Option::is_none")]
1308    pub name: Option<String>,
1309    /// <p>When set to <code>true</code>, Device Farm removes app packages after a test run. The default value is <code>false</code> for private devices.</p>
1310    #[serde(rename = "packageCleanup")]
1311    #[serde(skip_serializing_if = "Option::is_none")]
1312    pub package_cleanup: Option<bool>,
1313    /// <p>When set to <code>true</code>, Device Farm reboots the instance after a test run. The default value is <code>true</code>.</p>
1314    #[serde(rename = "rebootAfterUse")]
1315    #[serde(skip_serializing_if = "Option::is_none")]
1316    pub reboot_after_use: Option<bool>,
1317}
1318
1319/// <p>Represents a device.</p>
1320#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1321#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1322pub struct Job {
1323    /// <p>The job's ARN.</p>
1324    #[serde(rename = "arn")]
1325    #[serde(skip_serializing_if = "Option::is_none")]
1326    pub arn: Option<String>,
1327    /// <p>The job's result counters.</p>
1328    #[serde(rename = "counters")]
1329    #[serde(skip_serializing_if = "Option::is_none")]
1330    pub counters: Option<Counters>,
1331    /// <p>When the job was created.</p>
1332    #[serde(rename = "created")]
1333    #[serde(skip_serializing_if = "Option::is_none")]
1334    pub created: Option<f64>,
1335    /// <p>The device (phone or tablet).</p>
1336    #[serde(rename = "device")]
1337    #[serde(skip_serializing_if = "Option::is_none")]
1338    pub device: Option<Device>,
1339    /// <p>Represents the total (metered or unmetered) minutes used by the job.</p>
1340    #[serde(rename = "deviceMinutes")]
1341    #[serde(skip_serializing_if = "Option::is_none")]
1342    pub device_minutes: Option<DeviceMinutes>,
1343    /// <p>The ARN of the instance.</p>
1344    #[serde(rename = "instanceArn")]
1345    #[serde(skip_serializing_if = "Option::is_none")]
1346    pub instance_arn: Option<String>,
1347    /// <p>A message about the job's result.</p>
1348    #[serde(rename = "message")]
1349    #[serde(skip_serializing_if = "Option::is_none")]
1350    pub message: Option<String>,
1351    /// <p>The job's name.</p>
1352    #[serde(rename = "name")]
1353    #[serde(skip_serializing_if = "Option::is_none")]
1354    pub name: Option<String>,
1355    /// <p><p>The job&#39;s result.</p> <p>Allowed values include:</p> <ul> <li> <p>PENDING</p> </li> <li> <p>PASSED</p> </li> <li> <p>WARNED</p> </li> <li> <p>FAILED</p> </li> <li> <p>SKIPPED</p> </li> <li> <p>ERRORED</p> </li> <li> <p>STOPPED</p> </li> </ul></p>
1356    #[serde(rename = "result")]
1357    #[serde(skip_serializing_if = "Option::is_none")]
1358    pub result: Option<String>,
1359    /// <p>The job's start time.</p>
1360    #[serde(rename = "started")]
1361    #[serde(skip_serializing_if = "Option::is_none")]
1362    pub started: Option<f64>,
1363    /// <p><p>The job&#39;s status.</p> <p>Allowed values include:</p> <ul> <li> <p>PENDING</p> </li> <li> <p>PENDING<em>CONCURRENCY</p> </li> <li> <p>PENDING</em>DEVICE</p> </li> <li> <p>PROCESSING</p> </li> <li> <p>SCHEDULING</p> </li> <li> <p>PREPARING</p> </li> <li> <p>RUNNING</p> </li> <li> <p>COMPLETED</p> </li> <li> <p>STOPPING</p> </li> </ul></p>
1364    #[serde(rename = "status")]
1365    #[serde(skip_serializing_if = "Option::is_none")]
1366    pub status: Option<String>,
1367    /// <p>The job's stop time.</p>
1368    #[serde(rename = "stopped")]
1369    #[serde(skip_serializing_if = "Option::is_none")]
1370    pub stopped: Option<f64>,
1371    /// <p><p>The job&#39;s type.</p> <p>Allowed values include the following:</p> <ul> <li> <p>BUILTIN<em>FUZZ</p> </li> <li> <p>BUILTIN</em>EXPLORER. For Android, an app explorer that traverses an Android app, interacting with it and capturing screenshots at the same time.</p> </li> <li> <p>APPIUM<em>JAVA</em>JUNIT</p> </li> <li> <p>APPIUM<em>JAVA</em>TESTNG</p> </li> <li> <p>APPIUM<em>PYTHON</p> </li> <li> <p>APPIUM</em>NODE</p> </li> <li> <p>APPIUM<em>RUBY</p> </li> <li> <p>APPIUM</em>WEB<em>JAVA</em>JUNIT</p> </li> <li> <p>APPIUM<em>WEB</em>JAVA<em>TESTNG</p> </li> <li> <p>APPIUM</em>WEB<em>PYTHON</p> </li> <li> <p>APPIUM</em>WEB<em>NODE</p> </li> <li> <p>APPIUM</em>WEB<em>RUBY</p> </li> <li> <p>CALABASH</p> </li> <li> <p>INSTRUMENTATION</p> </li> <li> <p>UIAUTOMATION</p> </li> <li> <p>UIAUTOMATOR</p> </li> <li> <p>XCTEST</p> </li> <li> <p>XCTEST</em>UI</p> </li> </ul></p>
1372    #[serde(rename = "type")]
1373    #[serde(skip_serializing_if = "Option::is_none")]
1374    pub type_: Option<String>,
1375    /// <p>This value is set to true if video capture is enabled. Otherwise, it is set to false.</p>
1376    #[serde(rename = "videoCapture")]
1377    #[serde(skip_serializing_if = "Option::is_none")]
1378    pub video_capture: Option<bool>,
1379    /// <p>The endpoint for streaming device video.</p>
1380    #[serde(rename = "videoEndpoint")]
1381    #[serde(skip_serializing_if = "Option::is_none")]
1382    pub video_endpoint: Option<String>,
1383}
1384
1385/// <p>Represents a request to the list artifacts operation.</p>
1386#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1387#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1388pub struct ListArtifactsRequest {
1389    /// <p>The run, job, suite, or test ARN.</p>
1390    #[serde(rename = "arn")]
1391    pub arn: String,
1392    /// <p>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.</p>
1393    #[serde(rename = "nextToken")]
1394    #[serde(skip_serializing_if = "Option::is_none")]
1395    pub next_token: Option<String>,
1396    /// <p><p>The artifacts&#39; type.</p> <p>Allowed values include:</p> <ul> <li> <p>FILE</p> </li> <li> <p>LOG</p> </li> <li> <p>SCREENSHOT</p> </li> </ul></p>
1397    #[serde(rename = "type")]
1398    pub type_: String,
1399}
1400
1401/// <p>Represents the result of a list artifacts operation.</p>
1402#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1403#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1404pub struct ListArtifactsResult {
1405    /// <p>Information about the artifacts.</p>
1406    #[serde(rename = "artifacts")]
1407    #[serde(skip_serializing_if = "Option::is_none")]
1408    pub artifacts: Option<Vec<Artifact>>,
1409    /// <p>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.</p>
1410    #[serde(rename = "nextToken")]
1411    #[serde(skip_serializing_if = "Option::is_none")]
1412    pub next_token: Option<String>,
1413}
1414
1415#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1416#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1417pub struct ListDeviceInstancesRequest {
1418    /// <p>An integer that specifies the maximum number of items you want to return in the API response.</p>
1419    #[serde(rename = "maxResults")]
1420    #[serde(skip_serializing_if = "Option::is_none")]
1421    pub max_results: Option<i64>,
1422    /// <p>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.</p>
1423    #[serde(rename = "nextToken")]
1424    #[serde(skip_serializing_if = "Option::is_none")]
1425    pub next_token: Option<String>,
1426}
1427
1428#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1429#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1430pub struct ListDeviceInstancesResult {
1431    /// <p>An object that contains information about your device instances.</p>
1432    #[serde(rename = "deviceInstances")]
1433    #[serde(skip_serializing_if = "Option::is_none")]
1434    pub device_instances: Option<Vec<DeviceInstance>>,
1435    /// <p>An identifier that can be used in the next call to this operation to return the next set of items in the list.</p>
1436    #[serde(rename = "nextToken")]
1437    #[serde(skip_serializing_if = "Option::is_none")]
1438    pub next_token: Option<String>,
1439}
1440
1441/// <p>Represents the result of a list device pools request.</p>
1442#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1443#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1444pub struct ListDevicePoolsRequest {
1445    /// <p>The project ARN.</p>
1446    #[serde(rename = "arn")]
1447    pub arn: String,
1448    /// <p>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.</p>
1449    #[serde(rename = "nextToken")]
1450    #[serde(skip_serializing_if = "Option::is_none")]
1451    pub next_token: Option<String>,
1452    /// <p><p>The device pools&#39; type.</p> <p>Allowed values include:</p> <ul> <li> <p>CURATED: A device pool that is created and managed by AWS Device Farm.</p> </li> <li> <p>PRIVATE: A device pool that is created and managed by the device pool developer.</p> </li> </ul></p>
1453    #[serde(rename = "type")]
1454    #[serde(skip_serializing_if = "Option::is_none")]
1455    pub type_: Option<String>,
1456}
1457
1458/// <p>Represents the result of a list device pools request.</p>
1459#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1460#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1461pub struct ListDevicePoolsResult {
1462    /// <p>Information about the device pools.</p>
1463    #[serde(rename = "devicePools")]
1464    #[serde(skip_serializing_if = "Option::is_none")]
1465    pub device_pools: Option<Vec<DevicePool>>,
1466    /// <p>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.</p>
1467    #[serde(rename = "nextToken")]
1468    #[serde(skip_serializing_if = "Option::is_none")]
1469    pub next_token: Option<String>,
1470}
1471
1472/// <p>Represents the result of a list devices request.</p>
1473#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1474#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1475pub struct ListDevicesRequest {
1476    /// <p>The Amazon Resource Name (ARN) of the project.</p>
1477    #[serde(rename = "arn")]
1478    #[serde(skip_serializing_if = "Option::is_none")]
1479    pub arn: Option<String>,
1480    /// <p><p>Used to select a set of devices. A filter is made up of an attribute, an operator, and one or more values.</p> <ul> <li> <p>Attribute: The aspect of a device such as platform or model used as the selection criteria in a device filter.</p> <p>Allowed values include:</p> <ul> <li> <p>ARN: The Amazon Resource Name (ARN) of the device (for example, <code>arn:aws:devicefarm:us-west-2::device:12345Example</code>).</p> </li> <li> <p>PLATFORM: The device platform. Valid values are ANDROID or IOS.</p> </li> <li> <p>OS<em>VERSION: The operating system version (for example, 10.3.2).</p> </li> <li> <p>MODEL: The device model (for example, iPad 5th Gen).</p> </li> <li> <p>AVAILABILITY: The current availability of the device. Valid values are AVAILABLE, HIGHLY</em>AVAILABLE, BUSY, or TEMPORARY<em>NOT</em>AVAILABLE.</p> </li> <li> <p>FORM<em>FACTOR: The device form factor. Valid values are PHONE or TABLET.</p> </li> <li> <p>MANUFACTURER: The device manufacturer (for example, Apple).</p> </li> <li> <p>REMOTE</em>ACCESS<em>ENABLED: Whether the device is enabled for remote access. Valid values are TRUE or FALSE.</p> </li> <li> <p>REMOTE</em>DEBUG<em>ENABLED: Whether the device is enabled for remote debugging. Valid values are TRUE or FALSE. Because remote debugging is <a href="https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html">no longer supported</a>, this attribute is ignored.</p> </li> <li> <p>INSTANCE</em>ARN: The Amazon Resource Name (ARN) of the device instance.</p> </li> <li> <p>INSTANCE<em>LABELS: The label of the device instance.</p> </li> <li> <p>FLEET</em>TYPE: The fleet type. Valid values are PUBLIC or PRIVATE.</p> </li> </ul> </li> <li> <p>Operator: The filter operator.</p> <ul> <li> <p>The EQUALS operator is available for every attribute except INSTANCE<em>LABELS.</p> </li> <li> <p>The CONTAINS operator is available for the INSTANCE</em>LABELS and MODEL attributes.</p> </li> <li> <p>The IN and NOT<em>IN operators are available for the ARN, OS</em>VERSION, MODEL, MANUFACTURER, and INSTANCE<em>ARN attributes.</p> </li> <li> <p>The LESS</em>THAN, GREATER<em>THAN, LESS</em>THAN<em>OR</em>EQUALS, and GREATER<em>THAN</em>OR<em>EQUALS operators are also available for the OS</em>VERSION attribute.</p> </li> </ul> </li> <li> <p>Values: An array of one or more filter values.</p> <ul> <li> <p>The IN and NOT<em>IN operators take a values array that has one or more elements.</p> </li> <li> <p>The other operators require an array with a single element.</p> </li> <li> <p>In a request, the AVAILABILITY attribute takes the following values: AVAILABLE, HIGHLY</em>AVAILABLE, BUSY, or TEMPORARY<em>NOT</em>AVAILABLE.</p> </li> </ul> </li> </ul></p>
1481    #[serde(rename = "filters")]
1482    #[serde(skip_serializing_if = "Option::is_none")]
1483    pub filters: Option<Vec<DeviceFilter>>,
1484    /// <p>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.</p>
1485    #[serde(rename = "nextToken")]
1486    #[serde(skip_serializing_if = "Option::is_none")]
1487    pub next_token: Option<String>,
1488}
1489
1490/// <p>Represents the result of a list devices operation.</p>
1491#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1492#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1493pub struct ListDevicesResult {
1494    /// <p>Information about the devices.</p>
1495    #[serde(rename = "devices")]
1496    #[serde(skip_serializing_if = "Option::is_none")]
1497    pub devices: Option<Vec<Device>>,
1498    /// <p>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.</p>
1499    #[serde(rename = "nextToken")]
1500    #[serde(skip_serializing_if = "Option::is_none")]
1501    pub next_token: Option<String>,
1502}
1503
1504#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1505#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1506pub struct ListInstanceProfilesRequest {
1507    /// <p>An integer that specifies the maximum number of items you want to return in the API response.</p>
1508    #[serde(rename = "maxResults")]
1509    #[serde(skip_serializing_if = "Option::is_none")]
1510    pub max_results: Option<i64>,
1511    /// <p>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.</p>
1512    #[serde(rename = "nextToken")]
1513    #[serde(skip_serializing_if = "Option::is_none")]
1514    pub next_token: Option<String>,
1515}
1516
1517#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1518#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1519pub struct ListInstanceProfilesResult {
1520    /// <p>An object that contains information about your instance profiles.</p>
1521    #[serde(rename = "instanceProfiles")]
1522    #[serde(skip_serializing_if = "Option::is_none")]
1523    pub instance_profiles: Option<Vec<InstanceProfile>>,
1524    /// <p>An identifier that can be used in the next call to this operation to return the next set of items in the list.</p>
1525    #[serde(rename = "nextToken")]
1526    #[serde(skip_serializing_if = "Option::is_none")]
1527    pub next_token: Option<String>,
1528}
1529
1530/// <p>Represents a request to the list jobs operation.</p>
1531#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1532#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1533pub struct ListJobsRequest {
1534    /// <p>The run's Amazon Resource Name (ARN).</p>
1535    #[serde(rename = "arn")]
1536    pub arn: String,
1537    /// <p>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.</p>
1538    #[serde(rename = "nextToken")]
1539    #[serde(skip_serializing_if = "Option::is_none")]
1540    pub next_token: Option<String>,
1541}
1542
1543/// <p>Represents the result of a list jobs request.</p>
1544#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1545#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1546pub struct ListJobsResult {
1547    /// <p>Information about the jobs.</p>
1548    #[serde(rename = "jobs")]
1549    #[serde(skip_serializing_if = "Option::is_none")]
1550    pub jobs: Option<Vec<Job>>,
1551    /// <p>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.</p>
1552    #[serde(rename = "nextToken")]
1553    #[serde(skip_serializing_if = "Option::is_none")]
1554    pub next_token: Option<String>,
1555}
1556
1557#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1558#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1559pub struct ListNetworkProfilesRequest {
1560    /// <p>The Amazon Resource Name (ARN) of the project for which you want to list network profiles.</p>
1561    #[serde(rename = "arn")]
1562    pub arn: String,
1563    /// <p>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.</p>
1564    #[serde(rename = "nextToken")]
1565    #[serde(skip_serializing_if = "Option::is_none")]
1566    pub next_token: Option<String>,
1567    /// <p>The type of network profile to return information about. Valid values are listed here.</p>
1568    #[serde(rename = "type")]
1569    #[serde(skip_serializing_if = "Option::is_none")]
1570    pub type_: Option<String>,
1571}
1572
1573#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1574#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1575pub struct ListNetworkProfilesResult {
1576    /// <p>A list of the available network profiles.</p>
1577    #[serde(rename = "networkProfiles")]
1578    #[serde(skip_serializing_if = "Option::is_none")]
1579    pub network_profiles: Option<Vec<NetworkProfile>>,
1580    /// <p>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.</p>
1581    #[serde(rename = "nextToken")]
1582    #[serde(skip_serializing_if = "Option::is_none")]
1583    pub next_token: Option<String>,
1584}
1585
1586#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1587#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1588pub struct ListOfferingPromotionsRequest {
1589    /// <p>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.</p>
1590    #[serde(rename = "nextToken")]
1591    #[serde(skip_serializing_if = "Option::is_none")]
1592    pub next_token: Option<String>,
1593}
1594
1595#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1596#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1597pub struct ListOfferingPromotionsResult {
1598    /// <p>An identifier to be used in the next call to this operation, to return the next set of items in the list.</p>
1599    #[serde(rename = "nextToken")]
1600    #[serde(skip_serializing_if = "Option::is_none")]
1601    pub next_token: Option<String>,
1602    /// <p>Information about the offering promotions.</p>
1603    #[serde(rename = "offeringPromotions")]
1604    #[serde(skip_serializing_if = "Option::is_none")]
1605    pub offering_promotions: Option<Vec<OfferingPromotion>>,
1606}
1607
1608/// <p>Represents the request to list the offering transaction history.</p>
1609#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1610#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1611pub struct ListOfferingTransactionsRequest {
1612    /// <p>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.</p>
1613    #[serde(rename = "nextToken")]
1614    #[serde(skip_serializing_if = "Option::is_none")]
1615    pub next_token: Option<String>,
1616}
1617
1618/// <p>Returns the transaction log of the specified offerings.</p>
1619#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1620#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1621pub struct ListOfferingTransactionsResult {
1622    /// <p>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.</p>
1623    #[serde(rename = "nextToken")]
1624    #[serde(skip_serializing_if = "Option::is_none")]
1625    pub next_token: Option<String>,
1626    /// <p>The audit log of subscriptions you have purchased and modified through AWS Device Farm.</p>
1627    #[serde(rename = "offeringTransactions")]
1628    #[serde(skip_serializing_if = "Option::is_none")]
1629    pub offering_transactions: Option<Vec<OfferingTransaction>>,
1630}
1631
1632/// <p>Represents the request to list all offerings.</p>
1633#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1634#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1635pub struct ListOfferingsRequest {
1636    /// <p>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.</p>
1637    #[serde(rename = "nextToken")]
1638    #[serde(skip_serializing_if = "Option::is_none")]
1639    pub next_token: Option<String>,
1640}
1641
1642/// <p>Represents the return values of the list of offerings.</p>
1643#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1644#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1645pub struct ListOfferingsResult {
1646    /// <p>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.</p>
1647    #[serde(rename = "nextToken")]
1648    #[serde(skip_serializing_if = "Option::is_none")]
1649    pub next_token: Option<String>,
1650    /// <p>A value that represents the list offering results.</p>
1651    #[serde(rename = "offerings")]
1652    #[serde(skip_serializing_if = "Option::is_none")]
1653    pub offerings: Option<Vec<Offering>>,
1654}
1655
1656/// <p>Represents a request to the list projects operation.</p>
1657#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1658#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1659pub struct ListProjectsRequest {
1660    /// <p>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.</p>
1661    #[serde(rename = "arn")]
1662    #[serde(skip_serializing_if = "Option::is_none")]
1663    pub arn: Option<String>,
1664    /// <p>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.</p>
1665    #[serde(rename = "nextToken")]
1666    #[serde(skip_serializing_if = "Option::is_none")]
1667    pub next_token: Option<String>,
1668}
1669
1670/// <p>Represents the result of a list projects request.</p>
1671#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1672#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1673pub struct ListProjectsResult {
1674    /// <p>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.</p>
1675    #[serde(rename = "nextToken")]
1676    #[serde(skip_serializing_if = "Option::is_none")]
1677    pub next_token: Option<String>,
1678    /// <p>Information about the projects.</p>
1679    #[serde(rename = "projects")]
1680    #[serde(skip_serializing_if = "Option::is_none")]
1681    pub projects: Option<Vec<Project>>,
1682}
1683
1684/// <p>Represents the request to return information about the remote access session.</p>
1685#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1686#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1687pub struct ListRemoteAccessSessionsRequest {
1688    /// <p>The Amazon Resource Name (ARN) of the project about which you are requesting information.</p>
1689    #[serde(rename = "arn")]
1690    pub arn: String,
1691    /// <p>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.</p>
1692    #[serde(rename = "nextToken")]
1693    #[serde(skip_serializing_if = "Option::is_none")]
1694    pub next_token: Option<String>,
1695}
1696
1697/// <p>Represents the response from the server after AWS Device Farm makes a request to return information about the remote access session.</p>
1698#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1699#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1700pub struct ListRemoteAccessSessionsResult {
1701    /// <p>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.</p>
1702    #[serde(rename = "nextToken")]
1703    #[serde(skip_serializing_if = "Option::is_none")]
1704    pub next_token: Option<String>,
1705    /// <p>A container that represents the metadata from the service about each remote access session you are requesting.</p>
1706    #[serde(rename = "remoteAccessSessions")]
1707    #[serde(skip_serializing_if = "Option::is_none")]
1708    pub remote_access_sessions: Option<Vec<RemoteAccessSession>>,
1709}
1710
1711/// <p>Represents a request to the list runs operation.</p>
1712#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1713#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1714pub struct ListRunsRequest {
1715    /// <p>The Amazon Resource Name (ARN) of the project for which you want to list runs.</p>
1716    #[serde(rename = "arn")]
1717    pub arn: String,
1718    /// <p>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.</p>
1719    #[serde(rename = "nextToken")]
1720    #[serde(skip_serializing_if = "Option::is_none")]
1721    pub next_token: Option<String>,
1722}
1723
1724/// <p>Represents the result of a list runs request.</p>
1725#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1726#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1727pub struct ListRunsResult {
1728    /// <p>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.</p>
1729    #[serde(rename = "nextToken")]
1730    #[serde(skip_serializing_if = "Option::is_none")]
1731    pub next_token: Option<String>,
1732    /// <p>Information about the runs.</p>
1733    #[serde(rename = "runs")]
1734    #[serde(skip_serializing_if = "Option::is_none")]
1735    pub runs: Option<Vec<Run>>,
1736}
1737
1738/// <p>Represents a request to the list samples operation.</p>
1739#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1740#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1741pub struct ListSamplesRequest {
1742    /// <p>The Amazon Resource Name (ARN) of the job used to list samples.</p>
1743    #[serde(rename = "arn")]
1744    pub arn: String,
1745    /// <p>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.</p>
1746    #[serde(rename = "nextToken")]
1747    #[serde(skip_serializing_if = "Option::is_none")]
1748    pub next_token: Option<String>,
1749}
1750
1751/// <p>Represents the result of a list samples request.</p>
1752#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1753#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1754pub struct ListSamplesResult {
1755    /// <p>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.</p>
1756    #[serde(rename = "nextToken")]
1757    #[serde(skip_serializing_if = "Option::is_none")]
1758    pub next_token: Option<String>,
1759    /// <p>Information about the samples.</p>
1760    #[serde(rename = "samples")]
1761    #[serde(skip_serializing_if = "Option::is_none")]
1762    pub samples: Option<Vec<Sample>>,
1763}
1764
1765/// <p>Represents a request to the list suites operation.</p>
1766#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1767#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1768pub struct ListSuitesRequest {
1769    /// <p>The job's Amazon Resource Name (ARN).</p>
1770    #[serde(rename = "arn")]
1771    pub arn: String,
1772    /// <p>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.</p>
1773    #[serde(rename = "nextToken")]
1774    #[serde(skip_serializing_if = "Option::is_none")]
1775    pub next_token: Option<String>,
1776}
1777
1778/// <p>Represents the result of a list suites request.</p>
1779#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1780#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1781pub struct ListSuitesResult {
1782    /// <p>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.</p>
1783    #[serde(rename = "nextToken")]
1784    #[serde(skip_serializing_if = "Option::is_none")]
1785    pub next_token: Option<String>,
1786    /// <p>Information about the suites.</p>
1787    #[serde(rename = "suites")]
1788    #[serde(skip_serializing_if = "Option::is_none")]
1789    pub suites: Option<Vec<Suite>>,
1790}
1791
1792#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1793#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1794pub struct ListTagsForResourceRequest {
1795    /// <p>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: <code>PROJECT</code>, <code>RUN</code>, <code>NETWORK_PROFILE</code>, <code>INSTANCE_PROFILE</code>, <code>DEVICE_INSTANCE</code>, <code>SESSION</code>, <code>DEVICE_POOL</code>, <code>DEVICE</code>, and <code>VPCE_CONFIGURATION</code>.</p>
1796    #[serde(rename = "ResourceARN")]
1797    pub resource_arn: String,
1798}
1799
1800#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1801#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1802pub struct ListTagsForResourceResponse {
1803    /// <p>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.</p>
1804    #[serde(rename = "Tags")]
1805    #[serde(skip_serializing_if = "Option::is_none")]
1806    pub tags: Option<Vec<Tag>>,
1807}
1808
1809#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1810#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1811pub struct ListTestGridProjectsRequest {
1812    /// <p>Return no more than this number of results.</p>
1813    #[serde(rename = "maxResult")]
1814    #[serde(skip_serializing_if = "Option::is_none")]
1815    pub max_result: Option<i64>,
1816    /// <p>From a response, used to continue a paginated listing. </p>
1817    #[serde(rename = "nextToken")]
1818    #[serde(skip_serializing_if = "Option::is_none")]
1819    pub next_token: Option<String>,
1820}
1821
1822#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1823#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1824pub struct ListTestGridProjectsResult {
1825    /// <p>Used for pagination. Pass into <a>ListTestGridProjects</a> to get more results in a paginated request.</p>
1826    #[serde(rename = "nextToken")]
1827    #[serde(skip_serializing_if = "Option::is_none")]
1828    pub next_token: Option<String>,
1829    /// <p>The list of TestGridProjects, based on a <a>ListTestGridProjectsRequest</a>.</p>
1830    #[serde(rename = "testGridProjects")]
1831    #[serde(skip_serializing_if = "Option::is_none")]
1832    pub test_grid_projects: Option<Vec<TestGridProject>>,
1833}
1834
1835#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1836#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1837pub struct ListTestGridSessionActionsRequest {
1838    /// <p>The maximum number of sessions to return per response.</p>
1839    #[serde(rename = "maxResult")]
1840    #[serde(skip_serializing_if = "Option::is_none")]
1841    pub max_result: Option<i64>,
1842    /// <p>Pagination token.</p>
1843    #[serde(rename = "nextToken")]
1844    #[serde(skip_serializing_if = "Option::is_none")]
1845    pub next_token: Option<String>,
1846    /// <p>The ARN of the session to retrieve.</p>
1847    #[serde(rename = "sessionArn")]
1848    pub session_arn: String,
1849}
1850
1851#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1852#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1853pub struct ListTestGridSessionActionsResult {
1854    /// <p>The action taken by the session.</p>
1855    #[serde(rename = "actions")]
1856    #[serde(skip_serializing_if = "Option::is_none")]
1857    pub actions: Option<Vec<TestGridSessionAction>>,
1858    /// <p>Pagination token.</p>
1859    #[serde(rename = "nextToken")]
1860    #[serde(skip_serializing_if = "Option::is_none")]
1861    pub next_token: Option<String>,
1862}
1863
1864#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1865#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1866pub struct ListTestGridSessionArtifactsRequest {
1867    /// <p>The maximum number of results to be returned by a request.</p>
1868    #[serde(rename = "maxResult")]
1869    #[serde(skip_serializing_if = "Option::is_none")]
1870    pub max_result: Option<i64>,
1871    /// <p>Pagination token.</p>
1872    #[serde(rename = "nextToken")]
1873    #[serde(skip_serializing_if = "Option::is_none")]
1874    pub next_token: Option<String>,
1875    /// <p>The ARN of a <a>TestGridSession</a>. </p>
1876    #[serde(rename = "sessionArn")]
1877    pub session_arn: String,
1878    /// <p>Limit results to a specified type of artifact.</p>
1879    #[serde(rename = "type")]
1880    #[serde(skip_serializing_if = "Option::is_none")]
1881    pub type_: Option<String>,
1882}
1883
1884#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1885#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1886pub struct ListTestGridSessionArtifactsResult {
1887    /// <p>A list of test grid session artifacts for a <a>TestGridSession</a>.</p>
1888    #[serde(rename = "artifacts")]
1889    #[serde(skip_serializing_if = "Option::is_none")]
1890    pub artifacts: Option<Vec<TestGridSessionArtifact>>,
1891    /// <p>Pagination token.</p>
1892    #[serde(rename = "nextToken")]
1893    #[serde(skip_serializing_if = "Option::is_none")]
1894    pub next_token: Option<String>,
1895}
1896
1897#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1898#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1899pub struct ListTestGridSessionsRequest {
1900    /// <p>Return only sessions created after this time.</p>
1901    #[serde(rename = "creationTimeAfter")]
1902    #[serde(skip_serializing_if = "Option::is_none")]
1903    pub creation_time_after: Option<f64>,
1904    /// <p>Return only sessions created before this time.</p>
1905    #[serde(rename = "creationTimeBefore")]
1906    #[serde(skip_serializing_if = "Option::is_none")]
1907    pub creation_time_before: Option<f64>,
1908    /// <p>Return only sessions that ended after this time.</p>
1909    #[serde(rename = "endTimeAfter")]
1910    #[serde(skip_serializing_if = "Option::is_none")]
1911    pub end_time_after: Option<f64>,
1912    /// <p>Return only sessions that ended before this time.</p>
1913    #[serde(rename = "endTimeBefore")]
1914    #[serde(skip_serializing_if = "Option::is_none")]
1915    pub end_time_before: Option<f64>,
1916    /// <p>Return only this many results at a time.</p>
1917    #[serde(rename = "maxResult")]
1918    #[serde(skip_serializing_if = "Option::is_none")]
1919    pub max_result: Option<i64>,
1920    /// <p>Pagination token.</p>
1921    #[serde(rename = "nextToken")]
1922    #[serde(skip_serializing_if = "Option::is_none")]
1923    pub next_token: Option<String>,
1924    /// <p>ARN of a <a>TestGridProject</a>.</p>
1925    #[serde(rename = "projectArn")]
1926    pub project_arn: String,
1927    /// <p>Return only sessions in this state.</p>
1928    #[serde(rename = "status")]
1929    #[serde(skip_serializing_if = "Option::is_none")]
1930    pub status: Option<String>,
1931}
1932
1933#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1934#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1935pub struct ListTestGridSessionsResult {
1936    /// <p>Pagination token.</p>
1937    #[serde(rename = "nextToken")]
1938    #[serde(skip_serializing_if = "Option::is_none")]
1939    pub next_token: Option<String>,
1940    /// <p>The sessions that match the criteria in a <a>ListTestGridSessionsRequest</a>. </p>
1941    #[serde(rename = "testGridSessions")]
1942    #[serde(skip_serializing_if = "Option::is_none")]
1943    pub test_grid_sessions: Option<Vec<TestGridSession>>,
1944}
1945
1946/// <p>Represents a request to the list tests operation.</p>
1947#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1948#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1949pub struct ListTestsRequest {
1950    /// <p>The test suite's Amazon Resource Name (ARN).</p>
1951    #[serde(rename = "arn")]
1952    pub arn: String,
1953    /// <p>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.</p>
1954    #[serde(rename = "nextToken")]
1955    #[serde(skip_serializing_if = "Option::is_none")]
1956    pub next_token: Option<String>,
1957}
1958
1959/// <p>Represents the result of a list tests request.</p>
1960#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1961#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1962pub struct ListTestsResult {
1963    /// <p>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.</p>
1964    #[serde(rename = "nextToken")]
1965    #[serde(skip_serializing_if = "Option::is_none")]
1966    pub next_token: Option<String>,
1967    /// <p>Information about the tests.</p>
1968    #[serde(rename = "tests")]
1969    #[serde(skip_serializing_if = "Option::is_none")]
1970    pub tests: Option<Vec<Test>>,
1971}
1972
1973/// <p>Represents a request to the list unique problems operation.</p>
1974#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1975#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1976pub struct ListUniqueProblemsRequest {
1977    /// <p>The unique problems' ARNs.</p>
1978    #[serde(rename = "arn")]
1979    pub arn: String,
1980    /// <p>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.</p>
1981    #[serde(rename = "nextToken")]
1982    #[serde(skip_serializing_if = "Option::is_none")]
1983    pub next_token: Option<String>,
1984}
1985
1986/// <p>Represents the result of a list unique problems request.</p>
1987#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1988#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1989pub struct ListUniqueProblemsResult {
1990    /// <p>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.</p>
1991    #[serde(rename = "nextToken")]
1992    #[serde(skip_serializing_if = "Option::is_none")]
1993    pub next_token: Option<String>,
1994    /// <p><p>Information about the unique problems.</p> <p>Allowed values include:</p> <ul> <li> <p>PENDING</p> </li> <li> <p>PASSED</p> </li> <li> <p>WARNED</p> </li> <li> <p>FAILED</p> </li> <li> <p>SKIPPED</p> </li> <li> <p>ERRORED</p> </li> <li> <p>STOPPED</p> </li> </ul></p>
1995    #[serde(rename = "uniqueProblems")]
1996    #[serde(skip_serializing_if = "Option::is_none")]
1997    pub unique_problems: Option<::std::collections::HashMap<String, Vec<UniqueProblem>>>,
1998}
1999
2000/// <p>Represents a request to the list uploads operation.</p>
2001#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2002#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2003pub struct ListUploadsRequest {
2004    /// <p>The Amazon Resource Name (ARN) of the project for which you want to list uploads.</p>
2005    #[serde(rename = "arn")]
2006    pub arn: String,
2007    /// <p>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.</p>
2008    #[serde(rename = "nextToken")]
2009    #[serde(skip_serializing_if = "Option::is_none")]
2010    pub next_token: Option<String>,
2011    /// <p><p>The type of upload.</p> <p>Must be one of the following values:</p> <ul> <li> <p>ANDROID<em>APP</p> </li> <li> <p>IOS</em>APP</p> </li> <li> <p>WEB<em>APP</p> </li> <li> <p>EXTERNAL</em>DATA</p> </li> <li> <p>APPIUM<em>JAVA</em>JUNIT<em>TEST</em>PACKAGE</p> </li> <li> <p>APPIUM<em>JAVA</em>TESTNG<em>TEST</em>PACKAGE</p> </li> <li> <p>APPIUM<em>PYTHON</em>TEST<em>PACKAGE</p> </li> <li> <p>APPIUM</em>NODE<em>TEST</em>PACKAGE</p> </li> <li> <p>APPIUM<em>RUBY</em>TEST<em>PACKAGE</p> </li> <li> <p>APPIUM</em>WEB<em>JAVA</em>JUNIT<em>TEST</em>PACKAGE</p> </li> <li> <p>APPIUM<em>WEB</em>JAVA<em>TESTNG</em>TEST<em>PACKAGE</p> </li> <li> <p>APPIUM</em>WEB<em>PYTHON</em>TEST<em>PACKAGE</p> </li> <li> <p>APPIUM</em>WEB<em>NODE</em>TEST<em>PACKAGE</p> </li> <li> <p>APPIUM</em>WEB<em>RUBY</em>TEST<em>PACKAGE</p> </li> <li> <p>CALABASH</em>TEST<em>PACKAGE</p> </li> <li> <p>INSTRUMENTATION</em>TEST<em>PACKAGE</p> </li> <li> <p>UIAUTOMATION</em>TEST<em>PACKAGE</p> </li> <li> <p>UIAUTOMATOR</em>TEST<em>PACKAGE</p> </li> <li> <p>XCTEST</em>TEST<em>PACKAGE</p> </li> <li> <p>XCTEST</em>UI<em>TEST</em>PACKAGE</p> </li> <li> <p>APPIUM<em>JAVA</em>JUNIT<em>TEST</em>SPEC</p> </li> <li> <p>APPIUM<em>JAVA</em>TESTNG<em>TEST</em>SPEC</p> </li> <li> <p>APPIUM<em>PYTHON</em>TEST<em>SPEC</p> </li> <li> <p>APPIUM</em>NODE<em>TEST</em>SPEC</p> </li> <li> <p> APPIUM<em>RUBY</em>TEST<em>SPEC</p> </li> <li> <p>APPIUM</em>WEB<em>JAVA</em>JUNIT<em>TEST</em>SPEC</p> </li> <li> <p>APPIUM<em>WEB</em>JAVA<em>TESTNG</em>TEST<em>SPEC</p> </li> <li> <p>APPIUM</em>WEB<em>PYTHON</em>TEST<em>SPEC</p> </li> <li> <p>APPIUM</em>WEB<em>NODE</em>TEST<em>SPEC</p> </li> <li> <p>APPIUM</em>WEB<em>RUBY</em>TEST<em>SPEC</p> </li> <li> <p>INSTRUMENTATION</em>TEST<em>SPEC</p> </li> <li> <p>XCTEST</em>UI<em>TEST</em>SPEC</p> </li> </ul></p>
2012    #[serde(rename = "type")]
2013    #[serde(skip_serializing_if = "Option::is_none")]
2014    pub type_: Option<String>,
2015}
2016
2017/// <p>Represents the result of a list uploads request.</p>
2018#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2019#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2020pub struct ListUploadsResult {
2021    /// <p>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.</p>
2022    #[serde(rename = "nextToken")]
2023    #[serde(skip_serializing_if = "Option::is_none")]
2024    pub next_token: Option<String>,
2025    /// <p>Information about the uploads.</p>
2026    #[serde(rename = "uploads")]
2027    #[serde(skip_serializing_if = "Option::is_none")]
2028    pub uploads: Option<Vec<Upload>>,
2029}
2030
2031#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2032#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2033pub struct ListVPCEConfigurationsRequest {
2034    /// <p>An integer that specifies the maximum number of items you want to return in the API response.</p>
2035    #[serde(rename = "maxResults")]
2036    #[serde(skip_serializing_if = "Option::is_none")]
2037    pub max_results: Option<i64>,
2038    /// <p>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.</p>
2039    #[serde(rename = "nextToken")]
2040    #[serde(skip_serializing_if = "Option::is_none")]
2041    pub next_token: Option<String>,
2042}
2043
2044#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2045#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2046pub struct ListVPCEConfigurationsResult {
2047    /// <p>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.</p>
2048    #[serde(rename = "nextToken")]
2049    #[serde(skip_serializing_if = "Option::is_none")]
2050    pub next_token: Option<String>,
2051    /// <p>An array of <code>VPCEConfiguration</code> objects that contain information about your VPC endpoint configuration.</p>
2052    #[serde(rename = "vpceConfigurations")]
2053    #[serde(skip_serializing_if = "Option::is_none")]
2054    pub vpce_configurations: Option<Vec<VPCEConfiguration>>,
2055}
2056
2057/// <p>Represents a latitude and longitude pair, expressed in geographic coordinate system degrees (for example, 47.6204, -122.3491).</p> <p>Elevation is currently not supported.</p>
2058#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2059pub struct Location {
2060    /// <p>The latitude.</p>
2061    #[serde(rename = "latitude")]
2062    pub latitude: f64,
2063    /// <p>The longitude.</p>
2064    #[serde(rename = "longitude")]
2065    pub longitude: f64,
2066}
2067
2068/// <p>A number that represents the monetary amount for an offering or transaction.</p>
2069#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2070#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2071pub struct MonetaryAmount {
2072    /// <p>The numerical amount of an offering or transaction.</p>
2073    #[serde(rename = "amount")]
2074    #[serde(skip_serializing_if = "Option::is_none")]
2075    pub amount: Option<f64>,
2076    /// <p>The currency code of a monetary amount. For example, <code>USD</code> means U.S. dollars.</p>
2077    #[serde(rename = "currencyCode")]
2078    #[serde(skip_serializing_if = "Option::is_none")]
2079    pub currency_code: Option<String>,
2080}
2081
2082/// <p>An array of settings that describes characteristics of a network profile.</p>
2083#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2084#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2085pub struct NetworkProfile {
2086    /// <p>The Amazon Resource Name (ARN) of the network profile.</p>
2087    #[serde(rename = "arn")]
2088    #[serde(skip_serializing_if = "Option::is_none")]
2089    pub arn: Option<String>,
2090    /// <p>The description of the network profile.</p>
2091    #[serde(rename = "description")]
2092    #[serde(skip_serializing_if = "Option::is_none")]
2093    pub description: Option<String>,
2094    /// <p>The data throughput rate in bits per second, as an integer from 0 to 104857600.</p>
2095    #[serde(rename = "downlinkBandwidthBits")]
2096    #[serde(skip_serializing_if = "Option::is_none")]
2097    pub downlink_bandwidth_bits: Option<i64>,
2098    /// <p>Delay time for all packets to destination in milliseconds as an integer from 0 to 2000.</p>
2099    #[serde(rename = "downlinkDelayMs")]
2100    #[serde(skip_serializing_if = "Option::is_none")]
2101    pub downlink_delay_ms: Option<i64>,
2102    /// <p>Time variation in the delay of received packets in milliseconds as an integer from 0 to 2000.</p>
2103    #[serde(rename = "downlinkJitterMs")]
2104    #[serde(skip_serializing_if = "Option::is_none")]
2105    pub downlink_jitter_ms: Option<i64>,
2106    /// <p>Proportion of received packets that fail to arrive from 0 to 100 percent.</p>
2107    #[serde(rename = "downlinkLossPercent")]
2108    #[serde(skip_serializing_if = "Option::is_none")]
2109    pub downlink_loss_percent: Option<i64>,
2110    /// <p>The name of the network profile.</p>
2111    #[serde(rename = "name")]
2112    #[serde(skip_serializing_if = "Option::is_none")]
2113    pub name: Option<String>,
2114    /// <p>The type of network profile. Valid values are listed here.</p>
2115    #[serde(rename = "type")]
2116    #[serde(skip_serializing_if = "Option::is_none")]
2117    pub type_: Option<String>,
2118    /// <p>The data throughput rate in bits per second, as an integer from 0 to 104857600.</p>
2119    #[serde(rename = "uplinkBandwidthBits")]
2120    #[serde(skip_serializing_if = "Option::is_none")]
2121    pub uplink_bandwidth_bits: Option<i64>,
2122    /// <p>Delay time for all packets to destination in milliseconds as an integer from 0 to 2000.</p>
2123    #[serde(rename = "uplinkDelayMs")]
2124    #[serde(skip_serializing_if = "Option::is_none")]
2125    pub uplink_delay_ms: Option<i64>,
2126    /// <p>Time variation in the delay of received packets in milliseconds as an integer from 0 to 2000.</p>
2127    #[serde(rename = "uplinkJitterMs")]
2128    #[serde(skip_serializing_if = "Option::is_none")]
2129    pub uplink_jitter_ms: Option<i64>,
2130    /// <p>Proportion of transmitted packets that fail to arrive from 0 to 100 percent.</p>
2131    #[serde(rename = "uplinkLossPercent")]
2132    #[serde(skip_serializing_if = "Option::is_none")]
2133    pub uplink_loss_percent: Option<i64>,
2134}
2135
2136/// <p>Represents the metadata of a device offering.</p>
2137#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2138#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2139pub struct Offering {
2140    /// <p>A string that describes the offering.</p>
2141    #[serde(rename = "description")]
2142    #[serde(skip_serializing_if = "Option::is_none")]
2143    pub description: Option<String>,
2144    /// <p>The ID that corresponds to a device offering.</p>
2145    #[serde(rename = "id")]
2146    #[serde(skip_serializing_if = "Option::is_none")]
2147    pub id: Option<String>,
2148    /// <p>The platform of the device (for example, <code>ANDROID</code> or <code>IOS</code>).</p>
2149    #[serde(rename = "platform")]
2150    #[serde(skip_serializing_if = "Option::is_none")]
2151    pub platform: Option<String>,
2152    /// <p>Specifies whether there are recurring charges for the offering.</p>
2153    #[serde(rename = "recurringCharges")]
2154    #[serde(skip_serializing_if = "Option::is_none")]
2155    pub recurring_charges: Option<Vec<RecurringCharge>>,
2156    /// <p>The type of offering (for example, <code>RECURRING</code>) for a device.</p>
2157    #[serde(rename = "type")]
2158    #[serde(skip_serializing_if = "Option::is_none")]
2159    pub type_: Option<String>,
2160}
2161
2162/// <p>Represents information about an offering promotion.</p>
2163#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2164#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2165pub struct OfferingPromotion {
2166    /// <p>A string that describes the offering promotion.</p>
2167    #[serde(rename = "description")]
2168    #[serde(skip_serializing_if = "Option::is_none")]
2169    pub description: Option<String>,
2170    /// <p>The ID of the offering promotion.</p>
2171    #[serde(rename = "id")]
2172    #[serde(skip_serializing_if = "Option::is_none")]
2173    pub id: Option<String>,
2174}
2175
2176/// <p>The status of the offering.</p>
2177#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2178#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2179pub struct OfferingStatus {
2180    /// <p>The date on which the offering is effective.</p>
2181    #[serde(rename = "effectiveOn")]
2182    #[serde(skip_serializing_if = "Option::is_none")]
2183    pub effective_on: Option<f64>,
2184    /// <p>Represents the metadata of an offering status.</p>
2185    #[serde(rename = "offering")]
2186    #[serde(skip_serializing_if = "Option::is_none")]
2187    pub offering: Option<Offering>,
2188    /// <p>The number of available devices in the offering.</p>
2189    #[serde(rename = "quantity")]
2190    #[serde(skip_serializing_if = "Option::is_none")]
2191    pub quantity: Option<i64>,
2192    /// <p>The type specified for the offering status.</p>
2193    #[serde(rename = "type")]
2194    #[serde(skip_serializing_if = "Option::is_none")]
2195    pub type_: Option<String>,
2196}
2197
2198/// <p>Represents the metadata of an offering transaction.</p>
2199#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2200#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2201pub struct OfferingTransaction {
2202    /// <p>The cost of an offering transaction.</p>
2203    #[serde(rename = "cost")]
2204    #[serde(skip_serializing_if = "Option::is_none")]
2205    pub cost: Option<MonetaryAmount>,
2206    /// <p>The date on which an offering transaction was created.</p>
2207    #[serde(rename = "createdOn")]
2208    #[serde(skip_serializing_if = "Option::is_none")]
2209    pub created_on: Option<f64>,
2210    /// <p>The ID that corresponds to a device offering promotion.</p>
2211    #[serde(rename = "offeringPromotionId")]
2212    #[serde(skip_serializing_if = "Option::is_none")]
2213    pub offering_promotion_id: Option<String>,
2214    /// <p>The status of an offering transaction.</p>
2215    #[serde(rename = "offeringStatus")]
2216    #[serde(skip_serializing_if = "Option::is_none")]
2217    pub offering_status: Option<OfferingStatus>,
2218    /// <p>The transaction ID of the offering transaction.</p>
2219    #[serde(rename = "transactionId")]
2220    #[serde(skip_serializing_if = "Option::is_none")]
2221    pub transaction_id: Option<String>,
2222}
2223
2224/// <p>Represents a specific warning or failure.</p>
2225#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2226#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2227pub struct Problem {
2228    /// <p>Information about the associated device.</p>
2229    #[serde(rename = "device")]
2230    #[serde(skip_serializing_if = "Option::is_none")]
2231    pub device: Option<Device>,
2232    /// <p>Information about the associated job.</p>
2233    #[serde(rename = "job")]
2234    #[serde(skip_serializing_if = "Option::is_none")]
2235    pub job: Option<ProblemDetail>,
2236    /// <p>A message about the problem's result.</p>
2237    #[serde(rename = "message")]
2238    #[serde(skip_serializing_if = "Option::is_none")]
2239    pub message: Option<String>,
2240    /// <p><p>The problem&#39;s result.</p> <p>Allowed values include:</p> <ul> <li> <p>PENDING</p> </li> <li> <p>PASSED</p> </li> <li> <p>WARNED</p> </li> <li> <p>FAILED</p> </li> <li> <p>SKIPPED</p> </li> <li> <p>ERRORED</p> </li> <li> <p>STOPPED</p> </li> </ul></p>
2241    #[serde(rename = "result")]
2242    #[serde(skip_serializing_if = "Option::is_none")]
2243    pub result: Option<String>,
2244    /// <p>Information about the associated run.</p>
2245    #[serde(rename = "run")]
2246    #[serde(skip_serializing_if = "Option::is_none")]
2247    pub run: Option<ProblemDetail>,
2248    /// <p>Information about the associated suite.</p>
2249    #[serde(rename = "suite")]
2250    #[serde(skip_serializing_if = "Option::is_none")]
2251    pub suite: Option<ProblemDetail>,
2252    /// <p>Information about the associated test.</p>
2253    #[serde(rename = "test")]
2254    #[serde(skip_serializing_if = "Option::is_none")]
2255    pub test: Option<ProblemDetail>,
2256}
2257
2258/// <p>Information about a problem detail.</p>
2259#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2260#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2261pub struct ProblemDetail {
2262    /// <p>The problem detail's ARN.</p>
2263    #[serde(rename = "arn")]
2264    #[serde(skip_serializing_if = "Option::is_none")]
2265    pub arn: Option<String>,
2266    /// <p>The problem detail's name.</p>
2267    #[serde(rename = "name")]
2268    #[serde(skip_serializing_if = "Option::is_none")]
2269    pub name: Option<String>,
2270}
2271
2272/// <p>Represents an operating-system neutral workspace for running and managing tests.</p>
2273#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2274#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2275pub struct Project {
2276    /// <p>The project's ARN.</p>
2277    #[serde(rename = "arn")]
2278    #[serde(skip_serializing_if = "Option::is_none")]
2279    pub arn: Option<String>,
2280    /// <p>When the project was created.</p>
2281    #[serde(rename = "created")]
2282    #[serde(skip_serializing_if = "Option::is_none")]
2283    pub created: Option<f64>,
2284    /// <p>The default number of minutes (at the project level) a test run executes before it times out. The default value is 150 minutes.</p>
2285    #[serde(rename = "defaultJobTimeoutMinutes")]
2286    #[serde(skip_serializing_if = "Option::is_none")]
2287    pub default_job_timeout_minutes: Option<i64>,
2288    /// <p>The project's name.</p>
2289    #[serde(rename = "name")]
2290    #[serde(skip_serializing_if = "Option::is_none")]
2291    pub name: Option<String>,
2292}
2293
2294/// <p>Represents a request for a purchase offering.</p>
2295#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2296#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2297pub struct PurchaseOfferingRequest {
2298    /// <p>The ID of the offering.</p>
2299    #[serde(rename = "offeringId")]
2300    #[serde(skip_serializing_if = "Option::is_none")]
2301    pub offering_id: Option<String>,
2302    /// <p>The ID of the offering promotion to be applied to the purchase.</p>
2303    #[serde(rename = "offeringPromotionId")]
2304    #[serde(skip_serializing_if = "Option::is_none")]
2305    pub offering_promotion_id: Option<String>,
2306    /// <p>The number of device slots to purchase in an offering request.</p>
2307    #[serde(rename = "quantity")]
2308    #[serde(skip_serializing_if = "Option::is_none")]
2309    pub quantity: Option<i64>,
2310}
2311
2312/// <p>The result of the purchase offering (for example, success or failure).</p>
2313#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2314#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2315pub struct PurchaseOfferingResult {
2316    /// <p>Represents the offering transaction for the purchase result.</p>
2317    #[serde(rename = "offeringTransaction")]
2318    #[serde(skip_serializing_if = "Option::is_none")]
2319    pub offering_transaction: Option<OfferingTransaction>,
2320}
2321
2322/// <p>Represents the set of radios and their states on a device. Examples of radios include Wi-Fi, GPS, Bluetooth, and NFC.</p>
2323#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2324pub struct Radios {
2325    /// <p>True if Bluetooth is enabled at the beginning of the test. Otherwise, false.</p>
2326    #[serde(rename = "bluetooth")]
2327    #[serde(skip_serializing_if = "Option::is_none")]
2328    pub bluetooth: Option<bool>,
2329    /// <p>True if GPS is enabled at the beginning of the test. Otherwise, false.</p>
2330    #[serde(rename = "gps")]
2331    #[serde(skip_serializing_if = "Option::is_none")]
2332    pub gps: Option<bool>,
2333    /// <p>True if NFC is enabled at the beginning of the test. Otherwise, false.</p>
2334    #[serde(rename = "nfc")]
2335    #[serde(skip_serializing_if = "Option::is_none")]
2336    pub nfc: Option<bool>,
2337    /// <p>True if Wi-Fi is enabled at the beginning of the test. Otherwise, false.</p>
2338    #[serde(rename = "wifi")]
2339    #[serde(skip_serializing_if = "Option::is_none")]
2340    pub wifi: Option<bool>,
2341}
2342
2343/// <p>Specifies whether charges for devices are recurring.</p>
2344#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2345#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2346pub struct RecurringCharge {
2347    /// <p>The cost of the recurring charge.</p>
2348    #[serde(rename = "cost")]
2349    #[serde(skip_serializing_if = "Option::is_none")]
2350    pub cost: Option<MonetaryAmount>,
2351    /// <p>The frequency in which charges recur.</p>
2352    #[serde(rename = "frequency")]
2353    #[serde(skip_serializing_if = "Option::is_none")]
2354    pub frequency: Option<String>,
2355}
2356
2357/// <p>Represents information about the remote access session.</p>
2358#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2359#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2360pub struct RemoteAccessSession {
2361    /// <p>The Amazon Resource Name (ARN) of the remote access session.</p>
2362    #[serde(rename = "arn")]
2363    #[serde(skip_serializing_if = "Option::is_none")]
2364    pub arn: Option<String>,
2365    /// <p>The billing method of the remote access session. Possible values include <code>METERED</code> or <code>UNMETERED</code>. For more information about metered devices, see <a href="https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html#welcome-terminology">AWS Device Farm terminology</a>.</p>
2366    #[serde(rename = "billingMethod")]
2367    #[serde(skip_serializing_if = "Option::is_none")]
2368    pub billing_method: Option<String>,
2369    /// <p>Unique identifier of your client for the remote access session. Only returned if remote debugging is enabled for the remote access session.</p> <p>Remote debugging is <a href="https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html">no longer supported</a>.</p>
2370    #[serde(rename = "clientId")]
2371    #[serde(skip_serializing_if = "Option::is_none")]
2372    pub client_id: Option<String>,
2373    /// <p>The date and time the remote access session was created.</p>
2374    #[serde(rename = "created")]
2375    #[serde(skip_serializing_if = "Option::is_none")]
2376    pub created: Option<f64>,
2377    /// <p>The device (phone or tablet) used in the remote access session.</p>
2378    #[serde(rename = "device")]
2379    #[serde(skip_serializing_if = "Option::is_none")]
2380    pub device: Option<Device>,
2381    /// <p>The number of minutes a device is used in a remote access session (including setup and teardown minutes).</p>
2382    #[serde(rename = "deviceMinutes")]
2383    #[serde(skip_serializing_if = "Option::is_none")]
2384    pub device_minutes: Option<DeviceMinutes>,
2385    /// <p>Unique device identifier for the remote device. Only returned if remote debugging is enabled for the remote access session.</p> <p>Remote debugging is <a href="https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html">no longer supported</a>.</p>
2386    #[serde(rename = "deviceUdid")]
2387    #[serde(skip_serializing_if = "Option::is_none")]
2388    pub device_udid: Option<String>,
2389    /// <p>The endpoint for the remote access sesssion.</p>
2390    #[serde(rename = "endpoint")]
2391    #[serde(skip_serializing_if = "Option::is_none")]
2392    pub endpoint: Option<String>,
2393    /// <p>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.</p> <p>Remote debugging is <a href="https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html">no longer supported</a>.</p>
2394    #[serde(rename = "hostAddress")]
2395    #[serde(skip_serializing_if = "Option::is_none")]
2396    pub host_address: Option<String>,
2397    /// <p>The ARN of the instance.</p>
2398    #[serde(rename = "instanceArn")]
2399    #[serde(skip_serializing_if = "Option::is_none")]
2400    pub instance_arn: Option<String>,
2401    /// <p><p>The interaction mode of the remote access session. Valid values are:</p> <ul> <li> <p>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.</p> </li> <li> <p>NO<em>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.</p> </li> <li> <p>VIDEO</em>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.</p> </li> </ul></p>
2402    #[serde(rename = "interactionMode")]
2403    #[serde(skip_serializing_if = "Option::is_none")]
2404    pub interaction_mode: Option<String>,
2405    /// <p>A message about the remote access session.</p>
2406    #[serde(rename = "message")]
2407    #[serde(skip_serializing_if = "Option::is_none")]
2408    pub message: Option<String>,
2409    /// <p>The name of the remote access session.</p>
2410    #[serde(rename = "name")]
2411    #[serde(skip_serializing_if = "Option::is_none")]
2412    pub name: Option<String>,
2413    /// <p>This flag is set to <code>true</code> if remote debugging is enabled for the remote access session.</p> <p>Remote debugging is <a href="https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html">no longer supported</a>.</p>
2414    #[serde(rename = "remoteDebugEnabled")]
2415    #[serde(skip_serializing_if = "Option::is_none")]
2416    pub remote_debug_enabled: Option<bool>,
2417    /// <p>The ARN for the app to be recorded in the remote access session.</p>
2418    #[serde(rename = "remoteRecordAppArn")]
2419    #[serde(skip_serializing_if = "Option::is_none")]
2420    pub remote_record_app_arn: Option<String>,
2421    /// <p>This flag is set to <code>true</code> if remote recording is enabled for the remote access session.</p>
2422    #[serde(rename = "remoteRecordEnabled")]
2423    #[serde(skip_serializing_if = "Option::is_none")]
2424    pub remote_record_enabled: Option<bool>,
2425    /// <p><p>The result of the remote access session. Can be any of the following:</p> <ul> <li> <p>PENDING.</p> </li> <li> <p>PASSED.</p> </li> <li> <p>WARNED.</p> </li> <li> <p>FAILED.</p> </li> <li> <p>SKIPPED.</p> </li> <li> <p>ERRORED.</p> </li> <li> <p>STOPPED.</p> </li> </ul></p>
2426    #[serde(rename = "result")]
2427    #[serde(skip_serializing_if = "Option::is_none")]
2428    pub result: Option<String>,
2429    /// <p>When set to <code>true</code>, for private devices, Device Farm does not sign your app again. For public devices, Device Farm always signs your apps again.</p> <p>For more information about how Device Farm re-signs your apps, see <a href="https://aws.amazon.com/device-farm/faq/">Do you modify my app?</a> in the <i>AWS Device Farm FAQs</i>.</p>
2430    #[serde(rename = "skipAppResign")]
2431    #[serde(skip_serializing_if = "Option::is_none")]
2432    pub skip_app_resign: Option<bool>,
2433    /// <p>The date and time the remote access session was started.</p>
2434    #[serde(rename = "started")]
2435    #[serde(skip_serializing_if = "Option::is_none")]
2436    pub started: Option<f64>,
2437    /// <p><p>The status of the remote access session. Can be any of the following:</p> <ul> <li> <p>PENDING.</p> </li> <li> <p>PENDING<em>CONCURRENCY.</p> </li> <li> <p>PENDING</em>DEVICE.</p> </li> <li> <p>PROCESSING.</p> </li> <li> <p>SCHEDULING.</p> </li> <li> <p>PREPARING.</p> </li> <li> <p>RUNNING.</p> </li> <li> <p>COMPLETED.</p> </li> <li> <p>STOPPING.</p> </li> </ul></p>
2438    #[serde(rename = "status")]
2439    #[serde(skip_serializing_if = "Option::is_none")]
2440    pub status: Option<String>,
2441    /// <p>The date and time the remote access session was stopped.</p>
2442    #[serde(rename = "stopped")]
2443    #[serde(skip_serializing_if = "Option::is_none")]
2444    pub stopped: Option<f64>,
2445}
2446
2447/// <p>A request that represents an offering renewal.</p>
2448#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2449#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2450pub struct RenewOfferingRequest {
2451    /// <p>The ID of a request to renew an offering.</p>
2452    #[serde(rename = "offeringId")]
2453    #[serde(skip_serializing_if = "Option::is_none")]
2454    pub offering_id: Option<String>,
2455    /// <p>The quantity requested in an offering renewal.</p>
2456    #[serde(rename = "quantity")]
2457    #[serde(skip_serializing_if = "Option::is_none")]
2458    pub quantity: Option<i64>,
2459}
2460
2461/// <p>The result of a renewal offering.</p>
2462#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2463#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2464pub struct RenewOfferingResult {
2465    /// <p>Represents the status of the offering transaction for the renewal.</p>
2466    #[serde(rename = "offeringTransaction")]
2467    #[serde(skip_serializing_if = "Option::is_none")]
2468    pub offering_transaction: Option<OfferingTransaction>,
2469}
2470
2471/// <p>Represents the screen resolution of a device in height and width, expressed in pixels.</p>
2472#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2473#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2474pub struct Resolution {
2475    /// <p>The screen resolution's height, expressed in pixels.</p>
2476    #[serde(rename = "height")]
2477    #[serde(skip_serializing_if = "Option::is_none")]
2478    pub height: Option<i64>,
2479    /// <p>The screen resolution's width, expressed in pixels.</p>
2480    #[serde(rename = "width")]
2481    #[serde(skip_serializing_if = "Option::is_none")]
2482    pub width: Option<i64>,
2483}
2484
2485/// <p>Represents a condition for a device pool.</p>
2486#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2487pub struct Rule {
2488    /// <p><p>The rule&#39;s stringified attribute. For example, specify the value as <code>&quot;&quot;abc&quot;&quot;</code>.</p> <p>The supported operators for each attribute are provided in the following list.</p> <dl> <dt>APPIUM<em>VERSION</dt> <dd> <p>The Appium version for the test.</p> <p>Supported operators: <code>CONTAINS</code> </p> </dd> <dt>ARN</dt> <dd> <p>The Amazon Resource Name (ARN) of the device (for example, <code>arn:aws:devicefarm:us-west-2::device:12345Example</code>.</p> <p>Supported operators: <code>EQUALS</code>, <code>IN</code>, <code>NOT</em>IN</code> </p> </dd> <dt>AVAILABILITY</dt> <dd> <p>The current availability of the device. Valid values are AVAILABLE, HIGHLY<em>AVAILABLE, BUSY, or TEMPORARY</em>NOT<em>AVAILABLE.</p> <p>Supported operators: <code>EQUALS</code> </p> </dd> <dt>FLEET</em>TYPE</dt> <dd> <p>The fleet type. Valid values are PUBLIC or PRIVATE.</p> <p>Supported operators: <code>EQUALS</code> </p> </dd> <dt>FORM<em>FACTOR</dt> <dd> <p>The device form factor. Valid values are PHONE or TABLET.</p> <p>Supported operators: <code>EQUALS</code>, <code>IN</code>, <code>NOT</em>IN</code> </p> </dd> <dt>INSTANCE<em>ARN</dt> <dd> <p>The Amazon Resource Name (ARN) of the device instance.</p> <p>Supported operators: <code>IN</code>, <code>NOT</em>IN</code> </p> </dd> <dt>INSTANCE<em>LABELS</dt> <dd> <p>The label of the device instance.</p> <p>Supported operators: <code>CONTAINS</code> </p> </dd> <dt>MANUFACTURER</dt> <dd> <p>The device manufacturer (for example, Apple).</p> <p>Supported operators: <code>EQUALS</code>, <code>IN</code>, <code>NOT</em>IN</code> </p> </dd> <dt>MODEL</dt> <dd> <p>The device model, such as Apple iPad Air 2 or Google Pixel.</p> <p>Supported operators: <code>CONTAINS</code>, <code>EQUALS</code>, <code>IN</code>, <code>NOT<em>IN</code> </p> </dd> <dt>OS</em>VERSION</dt> <dd> <p>The operating system version (for example, 10.3.2).</p> <p>Supported operators: <code>EQUALS</code>, <code>GREATER<em>THAN</code>, <code>GREATER</em>THAN<em>OR</em>EQUALS</code>, <code>IN</code>, <code>LESS<em>THAN</code>, <code>LESS</em>THAN<em>OR</em>EQUALS</code>, <code>NOT<em>IN</code> </p> </dd> <dt>PLATFORM</dt> <dd> <p>The device platform. Valid values are ANDROID or IOS.</p> <p>Supported operators: <code>EQUALS</code>, <code>IN</code>, <code>NOT</em>IN</code> </p> </dd> <dt>REMOTE<em>ACCESS</em>ENABLED</dt> <dd> <p>Whether the device is enabled for remote access. Valid values are TRUE or FALSE.</p> <p>Supported operators: <code>EQUALS</code> </p> </dd> <dt>REMOTE<em>DEBUG</em>ENABLED</dt> <dd> <p>Whether the device is enabled for remote debugging. Valid values are TRUE or FALSE.</p> <p>Supported operators: <code>EQUALS</code> </p> <p>Because remote debugging is <a href="https://docs.aws.amazon.com/devicefarm/latest/developerguide/history.html">no longer supported</a>, this filter is ignored.</p> </dd> </dl></p>
2489    #[serde(rename = "attribute")]
2490    #[serde(skip_serializing_if = "Option::is_none")]
2491    pub attribute: Option<String>,
2492    /// <p>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.</p>
2493    #[serde(rename = "operator")]
2494    #[serde(skip_serializing_if = "Option::is_none")]
2495    pub operator: Option<String>,
2496    /// <p>The rule's value.</p>
2497    #[serde(rename = "value")]
2498    #[serde(skip_serializing_if = "Option::is_none")]
2499    pub value: Option<String>,
2500}
2501
2502/// <p>Represents a test run on a set of devices with a given app package, test parameters, and so on.</p>
2503#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2504#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2505pub struct Run {
2506    /// <p>An app to upload or that has been uploaded.</p>
2507    #[serde(rename = "appUpload")]
2508    #[serde(skip_serializing_if = "Option::is_none")]
2509    pub app_upload: Option<String>,
2510    /// <p>The run's ARN.</p>
2511    #[serde(rename = "arn")]
2512    #[serde(skip_serializing_if = "Option::is_none")]
2513    pub arn: Option<String>,
2514    /// <p><p>Specifies the billing method for a test run: <code>metered</code> or <code>unmetered</code>. If the parameter is not specified, the default value is <code>metered</code>.</p> <note> <p>If you have unmetered device slots, you must set this to <code>unmetered</code> to use them. Otherwise, the run is counted toward metered device minutes.</p> </note></p>
2515    #[serde(rename = "billingMethod")]
2516    #[serde(skip_serializing_if = "Option::is_none")]
2517    pub billing_method: Option<String>,
2518    /// <p>The total number of completed jobs.</p>
2519    #[serde(rename = "completedJobs")]
2520    #[serde(skip_serializing_if = "Option::is_none")]
2521    pub completed_jobs: Option<i64>,
2522    /// <p>The run's result counters.</p>
2523    #[serde(rename = "counters")]
2524    #[serde(skip_serializing_if = "Option::is_none")]
2525    pub counters: Option<Counters>,
2526    /// <p>When the run was created.</p>
2527    #[serde(rename = "created")]
2528    #[serde(skip_serializing_if = "Option::is_none")]
2529    pub created: Option<f64>,
2530    /// <p>Output <code>CustomerArtifactPaths</code> object for the test run.</p>
2531    #[serde(rename = "customerArtifactPaths")]
2532    #[serde(skip_serializing_if = "Option::is_none")]
2533    pub customer_artifact_paths: Option<CustomerArtifactPaths>,
2534    /// <p>Represents the total (metered or unmetered) minutes used by the test run.</p>
2535    #[serde(rename = "deviceMinutes")]
2536    #[serde(skip_serializing_if = "Option::is_none")]
2537    pub device_minutes: Option<DeviceMinutes>,
2538    /// <p>The ARN of the device pool for the run.</p>
2539    #[serde(rename = "devicePoolArn")]
2540    #[serde(skip_serializing_if = "Option::is_none")]
2541    pub device_pool_arn: Option<String>,
2542    /// <p>The results of a device filter used to select the devices for a test run.</p>
2543    #[serde(rename = "deviceSelectionResult")]
2544    #[serde(skip_serializing_if = "Option::is_none")]
2545    pub device_selection_result: Option<DeviceSelectionResult>,
2546    /// <p>For fuzz tests, this is the number of events, between 1 and 10000, that the UI fuzz test should perform.</p>
2547    #[serde(rename = "eventCount")]
2548    #[serde(skip_serializing_if = "Option::is_none")]
2549    pub event_count: Option<i64>,
2550    /// <p>The number of minutes the job executes before it times out.</p>
2551    #[serde(rename = "jobTimeoutMinutes")]
2552    #[serde(skip_serializing_if = "Option::is_none")]
2553    pub job_timeout_minutes: Option<i64>,
2554    /// <p>Information about the locale that is used for the run.</p>
2555    #[serde(rename = "locale")]
2556    #[serde(skip_serializing_if = "Option::is_none")]
2557    pub locale: Option<String>,
2558    /// <p>Information about the location that is used for the run.</p>
2559    #[serde(rename = "location")]
2560    #[serde(skip_serializing_if = "Option::is_none")]
2561    pub location: Option<Location>,
2562    /// <p>A message about the run's result.</p>
2563    #[serde(rename = "message")]
2564    #[serde(skip_serializing_if = "Option::is_none")]
2565    pub message: Option<String>,
2566    /// <p>The run's name.</p>
2567    #[serde(rename = "name")]
2568    #[serde(skip_serializing_if = "Option::is_none")]
2569    pub name: Option<String>,
2570    /// <p>The network profile being used for a test run.</p>
2571    #[serde(rename = "networkProfile")]
2572    #[serde(skip_serializing_if = "Option::is_none")]
2573    pub network_profile: Option<NetworkProfile>,
2574    /// <p>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.</p>
2575    #[serde(rename = "parsingResultUrl")]
2576    #[serde(skip_serializing_if = "Option::is_none")]
2577    pub parsing_result_url: Option<String>,
2578    /// <p><p>The run&#39;s platform.</p> <p>Allowed values include:</p> <ul> <li> <p>ANDROID</p> </li> <li> <p>IOS</p> </li> </ul></p>
2579    #[serde(rename = "platform")]
2580    #[serde(skip_serializing_if = "Option::is_none")]
2581    pub platform: Option<String>,
2582    /// <p>Information about the radio states for the run.</p>
2583    #[serde(rename = "radios")]
2584    #[serde(skip_serializing_if = "Option::is_none")]
2585    pub radios: Option<Radios>,
2586    /// <p><p>The run&#39;s result.</p> <p>Allowed values include:</p> <ul> <li> <p>PENDING</p> </li> <li> <p>PASSED</p> </li> <li> <p>WARNED</p> </li> <li> <p>FAILED</p> </li> <li> <p>SKIPPED</p> </li> <li> <p>ERRORED</p> </li> <li> <p>STOPPED</p> </li> </ul></p>
2587    #[serde(rename = "result")]
2588    #[serde(skip_serializing_if = "Option::is_none")]
2589    pub result: Option<String>,
2590    /// <p>Supporting field for the result field. Set only if <code>result</code> is <code>SKIPPED</code>. <code>PARSING_FAILED</code> if the result is skipped because of test package parsing failure.</p>
2591    #[serde(rename = "resultCode")]
2592    #[serde(skip_serializing_if = "Option::is_none")]
2593    pub result_code: Option<String>,
2594    /// <p>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.</p>
2595    #[serde(rename = "seed")]
2596    #[serde(skip_serializing_if = "Option::is_none")]
2597    pub seed: Option<i64>,
2598    /// <p>When set to <code>true</code>, for private devices, Device Farm does not sign your app again. For public devices, Device Farm always signs your apps again.</p> <p>For more information about how Device Farm re-signs your apps, see <a href="https://aws.amazon.com/device-farm/faq/">Do you modify my app?</a> in the <i>AWS Device Farm FAQs</i>.</p>
2599    #[serde(rename = "skipAppResign")]
2600    #[serde(skip_serializing_if = "Option::is_none")]
2601    pub skip_app_resign: Option<bool>,
2602    /// <p>The run's start time.</p>
2603    #[serde(rename = "started")]
2604    #[serde(skip_serializing_if = "Option::is_none")]
2605    pub started: Option<f64>,
2606    /// <p><p>The run&#39;s status.</p> <p>Allowed values include:</p> <ul> <li> <p>PENDING</p> </li> <li> <p>PENDING<em>CONCURRENCY</p> </li> <li> <p>PENDING</em>DEVICE</p> </li> <li> <p>PROCESSING</p> </li> <li> <p>SCHEDULING</p> </li> <li> <p>PREPARING</p> </li> <li> <p>RUNNING</p> </li> <li> <p>COMPLETED</p> </li> <li> <p>STOPPING</p> </li> </ul></p>
2607    #[serde(rename = "status")]
2608    #[serde(skip_serializing_if = "Option::is_none")]
2609    pub status: Option<String>,
2610    /// <p>The run's stop time.</p>
2611    #[serde(rename = "stopped")]
2612    #[serde(skip_serializing_if = "Option::is_none")]
2613    pub stopped: Option<f64>,
2614    /// <p>The ARN of the YAML-formatted test specification for the run.</p>
2615    #[serde(rename = "testSpecArn")]
2616    #[serde(skip_serializing_if = "Option::is_none")]
2617    pub test_spec_arn: Option<String>,
2618    /// <p>The total number of jobs for the run.</p>
2619    #[serde(rename = "totalJobs")]
2620    #[serde(skip_serializing_if = "Option::is_none")]
2621    pub total_jobs: Option<i64>,
2622    /// <p><p>The run&#39;s type.</p> <p>Must be one of the following values:</p> <ul> <li> <p>BUILTIN<em>FUZZ</p> </li> <li> <p>BUILTIN</em>EXPLORER</p> <note> <p>For Android, an app explorer that traverses an Android app, interacting with it and capturing screenshots at the same time.</p> </note> </li> <li> <p>APPIUM<em>JAVA</em>JUNIT</p> </li> <li> <p>APPIUM<em>JAVA</em>TESTNG</p> </li> <li> <p>APPIUM<em>PYTHON</p> </li> <li> <p>APPIUM</em>NODE</p> </li> <li> <p>APPIUM<em>RUBY</p> </li> <li> <p>APPIUM</em>WEB<em>JAVA</em>JUNIT</p> </li> <li> <p>APPIUM<em>WEB</em>JAVA<em>TESTNG</p> </li> <li> <p>APPIUM</em>WEB<em>PYTHON</p> </li> <li> <p>APPIUM</em>WEB<em>NODE</p> </li> <li> <p>APPIUM</em>WEB<em>RUBY</p> </li> <li> <p>CALABASH</p> </li> <li> <p>INSTRUMENTATION</p> </li> <li> <p>UIAUTOMATION</p> </li> <li> <p>UIAUTOMATOR</p> </li> <li> <p>XCTEST</p> </li> <li> <p>XCTEST</em>UI</p> </li> </ul></p>
2623    #[serde(rename = "type")]
2624    #[serde(skip_serializing_if = "Option::is_none")]
2625    pub type_: Option<String>,
2626    /// <p>The Device Farm console URL for the recording of the run.</p>
2627    #[serde(rename = "webUrl")]
2628    #[serde(skip_serializing_if = "Option::is_none")]
2629    pub web_url: Option<String>,
2630}
2631
2632/// <p>Represents a sample of performance data.</p>
2633#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2634#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2635pub struct Sample {
2636    /// <p>The sample's ARN.</p>
2637    #[serde(rename = "arn")]
2638    #[serde(skip_serializing_if = "Option::is_none")]
2639    pub arn: Option<String>,
2640    /// <p><p>The sample&#39;s type.</p> <p>Must be one of the following values:</p> <ul> <li> <p>CPU: A CPU sample type. This is expressed as the app processing CPU time (including child processes) as reported by process, as a percentage.</p> </li> <li> <p>MEMORY: A memory usage sample type. This is expressed as the total proportional set size of an app process, in kilobytes.</p> </li> <li> <p>NATIVE<em>AVG</em>DRAWTIME</p> </li> <li> <p>NATIVE<em>FPS</p> </li> <li> <p>NATIVE</em>FRAMES</p> </li> <li> <p>NATIVE<em>MAX</em>DRAWTIME</p> </li> <li> <p>NATIVE<em>MIN</em>DRAWTIME</p> </li> <li> <p>OPENGL<em>AVG</em>DRAWTIME</p> </li> <li> <p>OPENGL<em>FPS</p> </li> <li> <p>OPENGL</em>FRAMES</p> </li> <li> <p>OPENGL<em>MAX</em>DRAWTIME</p> </li> <li> <p>OPENGL<em>MIN</em>DRAWTIME</p> </li> <li> <p>RX</p> </li> <li> <p>RX<em>RATE: The total number of bytes per second (TCP and UDP) that are sent, by app process.</p> </li> <li> <p>THREADS: A threads sample type. This is expressed as the total number of threads per app process.</p> </li> <li> <p>TX</p> </li> <li> <p>TX</em>RATE: The total number of bytes per second (TCP and UDP) that are received, by app process.</p> </li> </ul></p>
2641    #[serde(rename = "type")]
2642    #[serde(skip_serializing_if = "Option::is_none")]
2643    pub type_: Option<String>,
2644    /// <p>The presigned Amazon S3 URL that can be used with a GET request to download the sample's file.</p>
2645    #[serde(rename = "url")]
2646    #[serde(skip_serializing_if = "Option::is_none")]
2647    pub url: Option<String>,
2648}
2649
2650/// <p>Represents the settings for a run. Includes things like location, radio states, auxiliary apps, and network profiles.</p>
2651#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2652#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2653pub struct ScheduleRunConfiguration {
2654    /// <p>A list of upload ARNs for app packages to be installed with your app.</p>
2655    #[serde(rename = "auxiliaryApps")]
2656    #[serde(skip_serializing_if = "Option::is_none")]
2657    pub auxiliary_apps: Option<Vec<String>>,
2658    /// <p><p>Specifies the billing method for a test run: <code>metered</code> or <code>unmetered</code>. If the parameter is not specified, the default value is <code>metered</code>.</p> <note> <p>If you have purchased unmetered device slots, you must set this parameter to <code>unmetered</code> to make use of them. Otherwise, your run counts against your metered time.</p> </note></p>
2659    #[serde(rename = "billingMethod")]
2660    #[serde(skip_serializing_if = "Option::is_none")]
2661    pub billing_method: Option<String>,
2662    /// <p>Input <code>CustomerArtifactPaths</code> object for the scheduled run configuration.</p>
2663    #[serde(rename = "customerArtifactPaths")]
2664    #[serde(skip_serializing_if = "Option::is_none")]
2665    pub customer_artifact_paths: Option<CustomerArtifactPaths>,
2666    /// <p>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.</p>
2667    #[serde(rename = "extraDataPackageArn")]
2668    #[serde(skip_serializing_if = "Option::is_none")]
2669    pub extra_data_package_arn: Option<String>,
2670    /// <p>Information about the locale that is used for the run.</p>
2671    #[serde(rename = "locale")]
2672    #[serde(skip_serializing_if = "Option::is_none")]
2673    pub locale: Option<String>,
2674    /// <p>Information about the location that is used for the run.</p>
2675    #[serde(rename = "location")]
2676    #[serde(skip_serializing_if = "Option::is_none")]
2677    pub location: Option<Location>,
2678    /// <p>Reserved for internal use.</p>
2679    #[serde(rename = "networkProfileArn")]
2680    #[serde(skip_serializing_if = "Option::is_none")]
2681    pub network_profile_arn: Option<String>,
2682    /// <p>Information about the radio states for the run.</p>
2683    #[serde(rename = "radios")]
2684    #[serde(skip_serializing_if = "Option::is_none")]
2685    pub radios: Option<Radios>,
2686    /// <p>An array of ARNs for your VPC endpoint configurations.</p>
2687    #[serde(rename = "vpceConfigurationArns")]
2688    #[serde(skip_serializing_if = "Option::is_none")]
2689    pub vpce_configuration_arns: Option<Vec<String>>,
2690}
2691
2692/// <p>Represents a request to the schedule run operation.</p>
2693#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2694#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2695pub struct ScheduleRunRequest {
2696    /// <p>The ARN of an application package to run tests against, created with <a>CreateUpload</a>. See <a>ListUploads</a>.</p>
2697    #[serde(rename = "appArn")]
2698    #[serde(skip_serializing_if = "Option::is_none")]
2699    pub app_arn: Option<String>,
2700    /// <p>Information about the settings for the run to be scheduled.</p>
2701    #[serde(rename = "configuration")]
2702    #[serde(skip_serializing_if = "Option::is_none")]
2703    pub configuration: Option<ScheduleRunConfiguration>,
2704    /// <p>The ARN of the device pool for the run to be scheduled.</p>
2705    #[serde(rename = "devicePoolArn")]
2706    #[serde(skip_serializing_if = "Option::is_none")]
2707    pub device_pool_arn: Option<String>,
2708    /// <p>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.</p> <p>Either <b> <code>devicePoolArn</code> </b> or <b> <code>deviceSelectionConfiguration</code> </b> is required in a request.</p>
2709    #[serde(rename = "deviceSelectionConfiguration")]
2710    #[serde(skip_serializing_if = "Option::is_none")]
2711    pub device_selection_configuration: Option<DeviceSelectionConfiguration>,
2712    /// <p>Specifies configuration information about a test run, such as the execution timeout (in minutes).</p>
2713    #[serde(rename = "executionConfiguration")]
2714    #[serde(skip_serializing_if = "Option::is_none")]
2715    pub execution_configuration: Option<ExecutionConfiguration>,
2716    /// <p>The name for the run to be scheduled.</p>
2717    #[serde(rename = "name")]
2718    #[serde(skip_serializing_if = "Option::is_none")]
2719    pub name: Option<String>,
2720    /// <p>The ARN of the project for the run to be scheduled.</p>
2721    #[serde(rename = "projectArn")]
2722    pub project_arn: String,
2723    /// <p>Information about the test for the run to be scheduled.</p>
2724    #[serde(rename = "test")]
2725    pub test: ScheduleRunTest,
2726}
2727
2728/// <p>Represents the result of a schedule run request.</p>
2729#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2730#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2731pub struct ScheduleRunResult {
2732    /// <p>Information about the scheduled run.</p>
2733    #[serde(rename = "run")]
2734    #[serde(skip_serializing_if = "Option::is_none")]
2735    pub run: Option<Run>,
2736}
2737
2738/// <p>Represents test settings. This data structure is passed in as the test parameter to ScheduleRun. For an example of the JSON request syntax, see <a>ScheduleRun</a>.</p>
2739#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2740#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2741pub struct ScheduleRunTest {
2742    /// <p>The test's filter.</p>
2743    #[serde(rename = "filter")]
2744    #[serde(skip_serializing_if = "Option::is_none")]
2745    pub filter: Option<String>,
2746    /// <p><p>The test&#39;s parameters, such as test framework parameters and fixture settings. Parameters are represented by name-value pairs of strings.</p> <p>For all tests:</p> <ul> <li> <p> <code>app<em>performance</em>monitoring</code>: Performance monitoring is enabled by default. Set this parameter to false to disable it.</p> </li> </ul> <p>For Calabash tests:</p> <ul> <li> <p>profile: A cucumber profile (for example, <code>my<em>profile</em>name</code>).</p> </li> <li> <p>tags: You can limit execution to features or scenarios that have (or don&#39;t have) certain tags (for example, @smoke or @smoke,~@wip).</p> </li> </ul> <p>For Appium tests (all types):</p> <ul> <li> <p>appium<em>version: The Appium version. Currently supported values are 1.6.5 (and later), latest, and default.</p> <ul> <li> <p>latest runs the latest Appium version supported by Device Farm (1.9.1).</p> </li> <li> <p>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.</p> </li> <li> <p>This behavior is subject to change.</p> </li> </ul> </li> </ul> <p>For fuzz tests (Android only):</p> <ul> <li> <p>event</em>count: The number of events, between 1 and 10000, that the UI fuzz test should perform.</p> </li> <li> <p>throttle: The time, in ms, between 0 and 1000, that the UI fuzz test should wait between events.</p> </li> <li> <p>seed: A seed to use for randomizing the UI fuzz test. Using the same seed value between tests ensures identical event sequences.</p> </li> </ul> <p>For Explorer tests:</p> <ul> <li> <p>username: A user name to use if the Explorer encounters a login form. If not supplied, no user name is inserted.</p> </li> <li> <p>password: A password to use if the Explorer encounters a login form. If not supplied, no password is inserted.</p> </li> </ul> <p>For Instrumentation:</p> <ul> <li> <p>filter: A test filter string. Examples:</p> <ul> <li> <p>Running a single test case: <code>com.android.abc.Test1</code> </p> </li> <li> <p>Running a single test: <code>com.android.abc.Test1#smoke</code> </p> </li> <li> <p>Running multiple tests: <code>com.android.abc.Test1,com.android.abc.Test2</code> </p> </li> </ul> </li> </ul> <p>For XCTest and XCTestUI:</p> <ul> <li> <p>filter: A test filter string. Examples:</p> <ul> <li> <p>Running a single test class: <code>LoginTests</code> </p> </li> <li> <p>Running a multiple test classes: <code>LoginTests,SmokeTests</code> </p> </li> <li> <p>Running a single test: <code>LoginTests/testValid</code> </p> </li> <li> <p>Running multiple tests: <code>LoginTests/testValid,LoginTests/testInvalid</code> </p> </li> </ul> </li> </ul> <p>For UIAutomator:</p> <ul> <li> <p>filter: A test filter string. Examples:</p> <ul> <li> <p>Running a single test case: <code>com.android.abc.Test1</code> </p> </li> <li> <p>Running a single test: <code>com.android.abc.Test1#smoke</code> </p> </li> <li> <p>Running multiple tests: <code>com.android.abc.Test1,com.android.abc.Test2</code> </p> </li> </ul> </li> </ul></p>
2747    #[serde(rename = "parameters")]
2748    #[serde(skip_serializing_if = "Option::is_none")]
2749    pub parameters: Option<::std::collections::HashMap<String, String>>,
2750    /// <p>The ARN of the uploaded test to be run.</p>
2751    #[serde(rename = "testPackageArn")]
2752    #[serde(skip_serializing_if = "Option::is_none")]
2753    pub test_package_arn: Option<String>,
2754    /// <p>The ARN of the YAML-formatted test specification.</p>
2755    #[serde(rename = "testSpecArn")]
2756    #[serde(skip_serializing_if = "Option::is_none")]
2757    pub test_spec_arn: Option<String>,
2758    /// <p><p>The test&#39;s type.</p> <p>Must be one of the following values:</p> <ul> <li> <p>BUILTIN<em>FUZZ</p> </li> <li> <p>BUILTIN</em>EXPLORER. For Android, an app explorer that traverses an Android app, interacting with it and capturing screenshots at the same time.</p> </li> <li> <p>APPIUM<em>JAVA</em>JUNIT</p> </li> <li> <p>APPIUM<em>JAVA</em>TESTNG</p> </li> <li> <p>APPIUM<em>PYTHON</p> </li> <li> <p>APPIUM</em>NODE</p> </li> <li> <p>APPIUM<em>RUBY</p> </li> <li> <p>APPIUM</em>WEB<em>JAVA</em>JUNIT</p> </li> <li> <p>APPIUM<em>WEB</em>JAVA<em>TESTNG</p> </li> <li> <p>APPIUM</em>WEB<em>PYTHON</p> </li> <li> <p>APPIUM</em>WEB<em>NODE</p> </li> <li> <p>APPIUM</em>WEB<em>RUBY</p> </li> <li> <p>CALABASH</p> </li> <li> <p>INSTRUMENTATION</p> </li> <li> <p>UIAUTOMATION</p> </li> <li> <p>UIAUTOMATOR</p> </li> <li> <p>XCTEST</p> </li> <li> <p>XCTEST</em>UI</p> </li> </ul></p>
2759    #[serde(rename = "type")]
2760    pub type_: String,
2761}
2762
2763#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2764#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2765pub struct StopJobRequest {
2766    /// <p>Represents the Amazon Resource Name (ARN) of the Device Farm job to stop.</p>
2767    #[serde(rename = "arn")]
2768    pub arn: String,
2769}
2770
2771#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2772#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2773pub struct StopJobResult {
2774    /// <p>The job that was stopped.</p>
2775    #[serde(rename = "job")]
2776    #[serde(skip_serializing_if = "Option::is_none")]
2777    pub job: Option<Job>,
2778}
2779
2780/// <p>Represents the request to stop the remote access session.</p>
2781#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2782#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2783pub struct StopRemoteAccessSessionRequest {
2784    /// <p>The Amazon Resource Name (ARN) of the remote access session to stop.</p>
2785    #[serde(rename = "arn")]
2786    pub arn: String,
2787}
2788
2789/// <p>Represents the response from the server that describes the remote access session when AWS Device Farm stops the session.</p>
2790#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2791#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2792pub struct StopRemoteAccessSessionResult {
2793    /// <p>A container that represents the metadata from the service about the remote access session you are stopping.</p>
2794    #[serde(rename = "remoteAccessSession")]
2795    #[serde(skip_serializing_if = "Option::is_none")]
2796    pub remote_access_session: Option<RemoteAccessSession>,
2797}
2798
2799/// <p>Represents the request to stop a specific run.</p>
2800#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2801#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2802pub struct StopRunRequest {
2803    /// <p>Represents the Amazon Resource Name (ARN) of the Device Farm run to stop.</p>
2804    #[serde(rename = "arn")]
2805    pub arn: String,
2806}
2807
2808/// <p>Represents the results of your stop run attempt.</p>
2809#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2810#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2811pub struct StopRunResult {
2812    /// <p>The run that was stopped.</p>
2813    #[serde(rename = "run")]
2814    #[serde(skip_serializing_if = "Option::is_none")]
2815    pub run: Option<Run>,
2816}
2817
2818/// <p>Represents a collection of one or more tests.</p>
2819#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2820#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2821pub struct Suite {
2822    /// <p>The suite's ARN.</p>
2823    #[serde(rename = "arn")]
2824    #[serde(skip_serializing_if = "Option::is_none")]
2825    pub arn: Option<String>,
2826    /// <p>The suite's result counters.</p>
2827    #[serde(rename = "counters")]
2828    #[serde(skip_serializing_if = "Option::is_none")]
2829    pub counters: Option<Counters>,
2830    /// <p>When the suite was created.</p>
2831    #[serde(rename = "created")]
2832    #[serde(skip_serializing_if = "Option::is_none")]
2833    pub created: Option<f64>,
2834    /// <p>Represents the total (metered or unmetered) minutes used by the test suite.</p>
2835    #[serde(rename = "deviceMinutes")]
2836    #[serde(skip_serializing_if = "Option::is_none")]
2837    pub device_minutes: Option<DeviceMinutes>,
2838    /// <p>A message about the suite's result.</p>
2839    #[serde(rename = "message")]
2840    #[serde(skip_serializing_if = "Option::is_none")]
2841    pub message: Option<String>,
2842    /// <p>The suite's name.</p>
2843    #[serde(rename = "name")]
2844    #[serde(skip_serializing_if = "Option::is_none")]
2845    pub name: Option<String>,
2846    /// <p><p>The suite&#39;s result.</p> <p>Allowed values include:</p> <ul> <li> <p>PENDING</p> </li> <li> <p>PASSED</p> </li> <li> <p>WARNED</p> </li> <li> <p>FAILED</p> </li> <li> <p>SKIPPED</p> </li> <li> <p>ERRORED</p> </li> <li> <p>STOPPED</p> </li> </ul></p>
2847    #[serde(rename = "result")]
2848    #[serde(skip_serializing_if = "Option::is_none")]
2849    pub result: Option<String>,
2850    /// <p>The suite's start time.</p>
2851    #[serde(rename = "started")]
2852    #[serde(skip_serializing_if = "Option::is_none")]
2853    pub started: Option<f64>,
2854    /// <p><p>The suite&#39;s status.</p> <p>Allowed values include:</p> <ul> <li> <p>PENDING</p> </li> <li> <p>PENDING<em>CONCURRENCY</p> </li> <li> <p>PENDING</em>DEVICE</p> </li> <li> <p>PROCESSING</p> </li> <li> <p>SCHEDULING</p> </li> <li> <p>PREPARING</p> </li> <li> <p>RUNNING</p> </li> <li> <p>COMPLETED</p> </li> <li> <p>STOPPING</p> </li> </ul></p>
2855    #[serde(rename = "status")]
2856    #[serde(skip_serializing_if = "Option::is_none")]
2857    pub status: Option<String>,
2858    /// <p>The suite's stop time.</p>
2859    #[serde(rename = "stopped")]
2860    #[serde(skip_serializing_if = "Option::is_none")]
2861    pub stopped: Option<f64>,
2862    /// <p><p>The suite&#39;s type.</p> <p>Must be one of the following values:</p> <ul> <li> <p>BUILTIN<em>FUZZ</p> </li> <li> <p>BUILTIN</em>EXPLORER </p> <note> <p>Only available for Android; an app explorer that traverses an Android app, interacting with it and capturing screenshots at the same time.</p> </note> </li> <li> <p>APPIUM<em>JAVA</em>JUNIT</p> </li> <li> <p>APPIUM<em>JAVA</em>TESTNG</p> </li> <li> <p>APPIUM<em>PYTHON</p> </li> <li> <p>APPIUM</em>NODE</p> </li> <li> <p>APPIUM<em>RUBY</p> </li> <li> <p>APPIUM</em>WEB<em>JAVA</em>JUNIT</p> </li> <li> <p>APPIUM<em>WEB</em>JAVA<em>TESTNG</p> </li> <li> <p>APPIUM</em>WEB<em>PYTHON</p> </li> <li> <p>APPIUM</em>WEB<em>NODE</p> </li> <li> <p>APPIUM</em>WEB<em>RUBY</p> </li> <li> <p>CALABASH</p> </li> <li> <p>INSTRUMENTATION</p> </li> <li> <p>UIAUTOMATION</p> </li> <li> <p>UIAUTOMATOR</p> </li> <li> <p>XCTEST</p> </li> <li> <p>XCTEST</em>UI</p> </li> </ul></p>
2863    #[serde(rename = "type")]
2864    #[serde(skip_serializing_if = "Option::is_none")]
2865    pub type_: Option<String>,
2866}
2867
2868/// <p>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. </p>
2869#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2870pub struct Tag {
2871    /// <p>One part of a key-value pair that makes up a tag. A <code>key</code> is a general label that acts like a category for more specific tag values.</p>
2872    #[serde(rename = "Key")]
2873    pub key: String,
2874    /// <p>The optional part of a key-value pair that makes up a tag. A <code>value</code> acts as a descriptor in a tag category (key).</p>
2875    #[serde(rename = "Value")]
2876    pub value: String,
2877}
2878
2879#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2880#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2881pub struct TagResourceRequest {
2882    /// <p>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: <code>PROJECT</code>, <code>RUN</code>, <code>NETWORK_PROFILE</code>, <code>INSTANCE_PROFILE</code>, <code>DEVICE_INSTANCE</code>, <code>SESSION</code>, <code>DEVICE_POOL</code>, <code>DEVICE</code>, and <code>VPCE_CONFIGURATION</code>.</p>
2883    #[serde(rename = "ResourceARN")]
2884    pub resource_arn: String,
2885    /// <p>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.</p>
2886    #[serde(rename = "Tags")]
2887    pub tags: Vec<Tag>,
2888}
2889
2890#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2891#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2892pub struct TagResourceResponse {}
2893
2894/// <p>Represents a condition that is evaluated.</p>
2895#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2896#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2897pub struct Test {
2898    /// <p>The test's ARN.</p>
2899    #[serde(rename = "arn")]
2900    #[serde(skip_serializing_if = "Option::is_none")]
2901    pub arn: Option<String>,
2902    /// <p>The test's result counters.</p>
2903    #[serde(rename = "counters")]
2904    #[serde(skip_serializing_if = "Option::is_none")]
2905    pub counters: Option<Counters>,
2906    /// <p>When the test was created.</p>
2907    #[serde(rename = "created")]
2908    #[serde(skip_serializing_if = "Option::is_none")]
2909    pub created: Option<f64>,
2910    /// <p>Represents the total (metered or unmetered) minutes used by the test.</p>
2911    #[serde(rename = "deviceMinutes")]
2912    #[serde(skip_serializing_if = "Option::is_none")]
2913    pub device_minutes: Option<DeviceMinutes>,
2914    /// <p>A message about the test's result.</p>
2915    #[serde(rename = "message")]
2916    #[serde(skip_serializing_if = "Option::is_none")]
2917    pub message: Option<String>,
2918    /// <p>The test's name.</p>
2919    #[serde(rename = "name")]
2920    #[serde(skip_serializing_if = "Option::is_none")]
2921    pub name: Option<String>,
2922    /// <p><p>The test&#39;s result.</p> <p>Allowed values include:</p> <ul> <li> <p>PENDING</p> </li> <li> <p>PASSED</p> </li> <li> <p>WARNED</p> </li> <li> <p>FAILED</p> </li> <li> <p>SKIPPED</p> </li> <li> <p>ERRORED</p> </li> <li> <p>STOPPED</p> </li> </ul></p>
2923    #[serde(rename = "result")]
2924    #[serde(skip_serializing_if = "Option::is_none")]
2925    pub result: Option<String>,
2926    /// <p>The test's start time.</p>
2927    #[serde(rename = "started")]
2928    #[serde(skip_serializing_if = "Option::is_none")]
2929    pub started: Option<f64>,
2930    /// <p><p>The test&#39;s status.</p> <p>Allowed values include:</p> <ul> <li> <p>PENDING</p> </li> <li> <p>PENDING<em>CONCURRENCY</p> </li> <li> <p>PENDING</em>DEVICE</p> </li> <li> <p>PROCESSING</p> </li> <li> <p>SCHEDULING</p> </li> <li> <p>PREPARING</p> </li> <li> <p>RUNNING</p> </li> <li> <p>COMPLETED</p> </li> <li> <p>STOPPING</p> </li> </ul></p>
2931    #[serde(rename = "status")]
2932    #[serde(skip_serializing_if = "Option::is_none")]
2933    pub status: Option<String>,
2934    /// <p>The test's stop time.</p>
2935    #[serde(rename = "stopped")]
2936    #[serde(skip_serializing_if = "Option::is_none")]
2937    pub stopped: Option<f64>,
2938    /// <p><p>The test&#39;s type.</p> <p>Must be one of the following values:</p> <ul> <li> <p>BUILTIN<em>FUZZ</p> </li> <li> <p>BUILTIN</em>EXPLORER</p> <note> <p>For Android, an app explorer that traverses an Android app, interacting with it and capturing screenshots at the same time.</p> </note> </li> <li> <p>APPIUM<em>JAVA</em>JUNIT</p> </li> <li> <p>APPIUM<em>JAVA</em>TESTNG</p> </li> <li> <p>APPIUM<em>PYTHON</p> </li> <li> <p>APPIUM</em>NODE</p> </li> <li> <p>APPIUM<em>RUBY</p> </li> <li> <p>APPIUM</em>WEB<em>JAVA</em>JUNIT</p> </li> <li> <p>APPIUM<em>WEB</em>JAVA<em>TESTNG</p> </li> <li> <p>APPIUM</em>WEB<em>PYTHON</p> </li> <li> <p>APPIUM</em>WEB<em>NODE</p> </li> <li> <p>APPIUM</em>WEB<em>RUBY</p> </li> <li> <p>CALABASH</p> </li> <li> <p>INSTRUMENTATION</p> </li> <li> <p>UIAUTOMATION</p> </li> <li> <p>UIAUTOMATOR</p> </li> <li> <p>XCTEST</p> </li> <li> <p>XCTEST</em>UI</p> </li> </ul></p>
2939    #[serde(rename = "type")]
2940    #[serde(skip_serializing_if = "Option::is_none")]
2941    pub type_: Option<String>,
2942}
2943
2944/// <p>A Selenium testing project. Projects are used to collect and collate sessions.</p>
2945#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2946#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2947pub struct TestGridProject {
2948    /// <p>The ARN for the project.</p>
2949    #[serde(rename = "arn")]
2950    #[serde(skip_serializing_if = "Option::is_none")]
2951    pub arn: Option<String>,
2952    /// <p>When the project was created.</p>
2953    #[serde(rename = "created")]
2954    #[serde(skip_serializing_if = "Option::is_none")]
2955    pub created: Option<f64>,
2956    /// <p>A human-readable description for the project.</p>
2957    #[serde(rename = "description")]
2958    #[serde(skip_serializing_if = "Option::is_none")]
2959    pub description: Option<String>,
2960    /// <p>A human-readable name for the project.</p>
2961    #[serde(rename = "name")]
2962    #[serde(skip_serializing_if = "Option::is_none")]
2963    pub name: Option<String>,
2964}
2965
2966/// <p>A <a>TestGridSession</a> is a single instance of a browser launched from the URL provided by a call to <a>CreateTestGridUrl</a>.</p>
2967#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2968#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2969pub struct TestGridSession {
2970    /// <p>The ARN of the session.</p>
2971    #[serde(rename = "arn")]
2972    #[serde(skip_serializing_if = "Option::is_none")]
2973    pub arn: Option<String>,
2974    /// <p>The number of billed minutes that were used for this session. </p>
2975    #[serde(rename = "billingMinutes")]
2976    #[serde(skip_serializing_if = "Option::is_none")]
2977    pub billing_minutes: Option<f64>,
2978    /// <p>The time that the session was started.</p>
2979    #[serde(rename = "created")]
2980    #[serde(skip_serializing_if = "Option::is_none")]
2981    pub created: Option<f64>,
2982    /// <p>The time the session ended.</p>
2983    #[serde(rename = "ended")]
2984    #[serde(skip_serializing_if = "Option::is_none")]
2985    pub ended: Option<f64>,
2986    /// <p>A JSON object of options and parameters passed to the Selenium WebDriver.</p>
2987    #[serde(rename = "seleniumProperties")]
2988    #[serde(skip_serializing_if = "Option::is_none")]
2989    pub selenium_properties: Option<String>,
2990    /// <p>The state of the session.</p>
2991    #[serde(rename = "status")]
2992    #[serde(skip_serializing_if = "Option::is_none")]
2993    pub status: Option<String>,
2994}
2995
2996/// <p>An action taken by a <a>TestGridSession</a> browser instance.</p>
2997#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2998#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2999pub struct TestGridSessionAction {
3000    /// <p>The action taken by the session.</p>
3001    #[serde(rename = "action")]
3002    #[serde(skip_serializing_if = "Option::is_none")]
3003    pub action: Option<String>,
3004    /// <p>The time, in milliseconds, that the action took to complete in the browser.</p>
3005    #[serde(rename = "duration")]
3006    #[serde(skip_serializing_if = "Option::is_none")]
3007    pub duration: Option<i64>,
3008    /// <p>HTTP method that the browser used to make the request.</p>
3009    #[serde(rename = "requestMethod")]
3010    #[serde(skip_serializing_if = "Option::is_none")]
3011    pub request_method: Option<String>,
3012    /// <p>The time that the session invoked the action.</p>
3013    #[serde(rename = "started")]
3014    #[serde(skip_serializing_if = "Option::is_none")]
3015    pub started: Option<f64>,
3016    /// <p>HTTP status code returned to the browser when the action was taken.</p>
3017    #[serde(rename = "statusCode")]
3018    #[serde(skip_serializing_if = "Option::is_none")]
3019    pub status_code: Option<String>,
3020}
3021
3022/// <p><p>Artifacts are video and other files that are produced in the process of running a browser in an automated context. </p> <note> <p>Video elements might be broken up into multiple artifacts as they grow in size during creation. </p> </note></p>
3023#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3024#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3025pub struct TestGridSessionArtifact {
3026    /// <p>The file name of the artifact.</p>
3027    #[serde(rename = "filename")]
3028    #[serde(skip_serializing_if = "Option::is_none")]
3029    pub filename: Option<String>,
3030    /// <p>The kind of artifact.</p>
3031    #[serde(rename = "type")]
3032    #[serde(skip_serializing_if = "Option::is_none")]
3033    pub type_: Option<String>,
3034    /// <p>A semi-stable URL to the content of the object.</p>
3035    #[serde(rename = "url")]
3036    #[serde(skip_serializing_if = "Option::is_none")]
3037    pub url: Option<String>,
3038}
3039
3040/// <p>Represents information about free trial device minutes for an AWS account.</p>
3041#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3042#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3043pub struct TrialMinutes {
3044    /// <p>The number of free trial minutes remaining in the account.</p>
3045    #[serde(rename = "remaining")]
3046    #[serde(skip_serializing_if = "Option::is_none")]
3047    pub remaining: Option<f64>,
3048    /// <p>The total number of free trial minutes that the account started with.</p>
3049    #[serde(rename = "total")]
3050    #[serde(skip_serializing_if = "Option::is_none")]
3051    pub total: Option<f64>,
3052}
3053
3054/// <p>A collection of one or more problems, grouped by their result.</p>
3055#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3056#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3057pub struct UniqueProblem {
3058    /// <p>A message about the unique problems' result.</p>
3059    #[serde(rename = "message")]
3060    #[serde(skip_serializing_if = "Option::is_none")]
3061    pub message: Option<String>,
3062    /// <p>Information about the problems.</p>
3063    #[serde(rename = "problems")]
3064    #[serde(skip_serializing_if = "Option::is_none")]
3065    pub problems: Option<Vec<Problem>>,
3066}
3067
3068#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3069#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3070pub struct UntagResourceRequest {
3071    /// <p>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: <code>PROJECT</code>, <code>RUN</code>, <code>NETWORK_PROFILE</code>, <code>INSTANCE_PROFILE</code>, <code>DEVICE_INSTANCE</code>, <code>SESSION</code>, <code>DEVICE_POOL</code>, <code>DEVICE</code>, and <code>VPCE_CONFIGURATION</code>.</p>
3072    #[serde(rename = "ResourceARN")]
3073    pub resource_arn: String,
3074    /// <p>The keys of the tags to be removed.</p>
3075    #[serde(rename = "TagKeys")]
3076    pub tag_keys: Vec<String>,
3077}
3078
3079#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3080#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3081pub struct UntagResourceResponse {}
3082
3083#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3084#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3085pub struct UpdateDeviceInstanceRequest {
3086    /// <p>The Amazon Resource Name (ARN) of the device instance.</p>
3087    #[serde(rename = "arn")]
3088    pub arn: String,
3089    /// <p>An array of strings that you want to associate with the device instance.</p>
3090    #[serde(rename = "labels")]
3091    #[serde(skip_serializing_if = "Option::is_none")]
3092    pub labels: Option<Vec<String>>,
3093    /// <p>The ARN of the profile that you want to associate with the device instance.</p>
3094    #[serde(rename = "profileArn")]
3095    #[serde(skip_serializing_if = "Option::is_none")]
3096    pub profile_arn: Option<String>,
3097}
3098
3099#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3100#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3101pub struct UpdateDeviceInstanceResult {
3102    /// <p>An object that contains information about your device instance.</p>
3103    #[serde(rename = "deviceInstance")]
3104    #[serde(skip_serializing_if = "Option::is_none")]
3105    pub device_instance: Option<DeviceInstance>,
3106}
3107
3108/// <p>Represents a request to the update device pool operation.</p>
3109#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3110#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3111pub struct UpdateDevicePoolRequest {
3112    /// <p>The Amazon Resource Name (ARN) of the Device Farm device pool to update.</p>
3113    #[serde(rename = "arn")]
3114    pub arn: String,
3115    /// <p>Sets whether the <code>maxDevices</code> parameter applies to your device pool. If you set this parameter to <code>true</code>, the <code>maxDevices</code> 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 <code>rules</code> parameter.</p> <p>If you use this parameter in your request, you cannot use the <code>maxDevices</code> parameter in the same request.</p>
3116    #[serde(rename = "clearMaxDevices")]
3117    #[serde(skip_serializing_if = "Option::is_none")]
3118    pub clear_max_devices: Option<bool>,
3119    /// <p>A description of the device pool to update.</p>
3120    #[serde(rename = "description")]
3121    #[serde(skip_serializing_if = "Option::is_none")]
3122    pub description: Option<String>,
3123    /// <p>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 <code>rules</code> parameter. Depending on how many devices meet these constraints, your device pool might contain fewer devices than the value for this parameter.</p> <p>By specifying the maximum number of devices, you can control the costs that you incur by running tests.</p> <p>If you use this parameter in your request, you cannot use the <code>clearMaxDevices</code> parameter in the same request.</p>
3124    #[serde(rename = "maxDevices")]
3125    #[serde(skip_serializing_if = "Option::is_none")]
3126    pub max_devices: Option<i64>,
3127    /// <p>A string that represents the name of the device pool to update.</p>
3128    #[serde(rename = "name")]
3129    #[serde(skip_serializing_if = "Option::is_none")]
3130    pub name: Option<String>,
3131    /// <p>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.</p>
3132    #[serde(rename = "rules")]
3133    #[serde(skip_serializing_if = "Option::is_none")]
3134    pub rules: Option<Vec<Rule>>,
3135}
3136
3137/// <p>Represents the result of an update device pool request.</p>
3138#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3139#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3140pub struct UpdateDevicePoolResult {
3141    /// <p>The device pool you just updated.</p>
3142    #[serde(rename = "devicePool")]
3143    #[serde(skip_serializing_if = "Option::is_none")]
3144    pub device_pool: Option<DevicePool>,
3145}
3146
3147#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3148#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3149pub struct UpdateInstanceProfileRequest {
3150    /// <p>The Amazon Resource Name (ARN) of the instance profile.</p>
3151    #[serde(rename = "arn")]
3152    pub arn: String,
3153    /// <p>The updated description for your instance profile.</p>
3154    #[serde(rename = "description")]
3155    #[serde(skip_serializing_if = "Option::is_none")]
3156    pub description: Option<String>,
3157    /// <p>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.</p> <p>The list of packages is only considered if you set <code>packageCleanup</code> to <code>true</code>.</p>
3158    #[serde(rename = "excludeAppPackagesFromCleanup")]
3159    #[serde(skip_serializing_if = "Option::is_none")]
3160    pub exclude_app_packages_from_cleanup: Option<Vec<String>>,
3161    /// <p>The updated name for your instance profile.</p>
3162    #[serde(rename = "name")]
3163    #[serde(skip_serializing_if = "Option::is_none")]
3164    pub name: Option<String>,
3165    /// <p>The updated choice for whether you want to specify package cleanup. The default value is <code>false</code> for private devices.</p>
3166    #[serde(rename = "packageCleanup")]
3167    #[serde(skip_serializing_if = "Option::is_none")]
3168    pub package_cleanup: Option<bool>,
3169    /// <p>The updated choice for whether you want to reboot the device after use. The default value is <code>true</code>.</p>
3170    #[serde(rename = "rebootAfterUse")]
3171    #[serde(skip_serializing_if = "Option::is_none")]
3172    pub reboot_after_use: Option<bool>,
3173}
3174
3175#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3176#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3177pub struct UpdateInstanceProfileResult {
3178    /// <p>An object that contains information about your instance profile.</p>
3179    #[serde(rename = "instanceProfile")]
3180    #[serde(skip_serializing_if = "Option::is_none")]
3181    pub instance_profile: Option<InstanceProfile>,
3182}
3183
3184#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3185#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3186pub struct UpdateNetworkProfileRequest {
3187    /// <p>The Amazon Resource Name (ARN) of the project for which you want to update network profile settings.</p>
3188    #[serde(rename = "arn")]
3189    pub arn: String,
3190    /// <p>The description of the network profile about which you are returning information.</p>
3191    #[serde(rename = "description")]
3192    #[serde(skip_serializing_if = "Option::is_none")]
3193    pub description: Option<String>,
3194    /// <p>The data throughput rate in bits per second, as an integer from 0 to 104857600.</p>
3195    #[serde(rename = "downlinkBandwidthBits")]
3196    #[serde(skip_serializing_if = "Option::is_none")]
3197    pub downlink_bandwidth_bits: Option<i64>,
3198    /// <p>Delay time for all packets to destination in milliseconds as an integer from 0 to 2000.</p>
3199    #[serde(rename = "downlinkDelayMs")]
3200    #[serde(skip_serializing_if = "Option::is_none")]
3201    pub downlink_delay_ms: Option<i64>,
3202    /// <p>Time variation in the delay of received packets in milliseconds as an integer from 0 to 2000.</p>
3203    #[serde(rename = "downlinkJitterMs")]
3204    #[serde(skip_serializing_if = "Option::is_none")]
3205    pub downlink_jitter_ms: Option<i64>,
3206    /// <p>Proportion of received packets that fail to arrive from 0 to 100 percent.</p>
3207    #[serde(rename = "downlinkLossPercent")]
3208    #[serde(skip_serializing_if = "Option::is_none")]
3209    pub downlink_loss_percent: Option<i64>,
3210    /// <p>The name of the network profile about which you are returning information.</p>
3211    #[serde(rename = "name")]
3212    #[serde(skip_serializing_if = "Option::is_none")]
3213    pub name: Option<String>,
3214    /// <p>The type of network profile to return information about. Valid values are listed here.</p>
3215    #[serde(rename = "type")]
3216    #[serde(skip_serializing_if = "Option::is_none")]
3217    pub type_: Option<String>,
3218    /// <p>The data throughput rate in bits per second, as an integer from 0 to 104857600.</p>
3219    #[serde(rename = "uplinkBandwidthBits")]
3220    #[serde(skip_serializing_if = "Option::is_none")]
3221    pub uplink_bandwidth_bits: Option<i64>,
3222    /// <p>Delay time for all packets to destination in milliseconds as an integer from 0 to 2000.</p>
3223    #[serde(rename = "uplinkDelayMs")]
3224    #[serde(skip_serializing_if = "Option::is_none")]
3225    pub uplink_delay_ms: Option<i64>,
3226    /// <p>Time variation in the delay of received packets in milliseconds as an integer from 0 to 2000.</p>
3227    #[serde(rename = "uplinkJitterMs")]
3228    #[serde(skip_serializing_if = "Option::is_none")]
3229    pub uplink_jitter_ms: Option<i64>,
3230    /// <p>Proportion of transmitted packets that fail to arrive from 0 to 100 percent.</p>
3231    #[serde(rename = "uplinkLossPercent")]
3232    #[serde(skip_serializing_if = "Option::is_none")]
3233    pub uplink_loss_percent: Option<i64>,
3234}
3235
3236#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3237#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3238pub struct UpdateNetworkProfileResult {
3239    /// <p>A list of the available network profiles.</p>
3240    #[serde(rename = "networkProfile")]
3241    #[serde(skip_serializing_if = "Option::is_none")]
3242    pub network_profile: Option<NetworkProfile>,
3243}
3244
3245/// <p>Represents a request to the update project operation.</p>
3246#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3247#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3248pub struct UpdateProjectRequest {
3249    /// <p>The Amazon Resource Name (ARN) of the project whose name to update.</p>
3250    #[serde(rename = "arn")]
3251    pub arn: String,
3252    /// <p>The number of minutes a test run in the project executes before it times out.</p>
3253    #[serde(rename = "defaultJobTimeoutMinutes")]
3254    #[serde(skip_serializing_if = "Option::is_none")]
3255    pub default_job_timeout_minutes: Option<i64>,
3256    /// <p>A string that represents the new name of the project that you are updating.</p>
3257    #[serde(rename = "name")]
3258    #[serde(skip_serializing_if = "Option::is_none")]
3259    pub name: Option<String>,
3260}
3261
3262/// <p>Represents the result of an update project request.</p>
3263#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3264#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3265pub struct UpdateProjectResult {
3266    /// <p>The project to update.</p>
3267    #[serde(rename = "project")]
3268    #[serde(skip_serializing_if = "Option::is_none")]
3269    pub project: Option<Project>,
3270}
3271
3272#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3273#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3274pub struct UpdateTestGridProjectRequest {
3275    /// <p>Human-readable description for the project.</p>
3276    #[serde(rename = "description")]
3277    #[serde(skip_serializing_if = "Option::is_none")]
3278    pub description: Option<String>,
3279    /// <p>Human-readable name for the project.</p>
3280    #[serde(rename = "name")]
3281    #[serde(skip_serializing_if = "Option::is_none")]
3282    pub name: Option<String>,
3283    /// <p>ARN of the project to update.</p>
3284    #[serde(rename = "projectArn")]
3285    pub project_arn: String,
3286}
3287
3288#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3289#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3290pub struct UpdateTestGridProjectResult {
3291    /// <p>The project, including updated information.</p>
3292    #[serde(rename = "testGridProject")]
3293    #[serde(skip_serializing_if = "Option::is_none")]
3294    pub test_grid_project: Option<TestGridProject>,
3295}
3296
3297#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3298#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3299pub struct UpdateUploadRequest {
3300    /// <p>The Amazon Resource Name (ARN) of the uploaded test spec.</p>
3301    #[serde(rename = "arn")]
3302    pub arn: String,
3303    /// <p>The upload's content type (for example, <code>application/x-yaml</code>).</p>
3304    #[serde(rename = "contentType")]
3305    #[serde(skip_serializing_if = "Option::is_none")]
3306    pub content_type: Option<String>,
3307    /// <p>Set to true if the YAML file has changed and must be updated. Otherwise, set to false.</p>
3308    #[serde(rename = "editContent")]
3309    #[serde(skip_serializing_if = "Option::is_none")]
3310    pub edit_content: Option<bool>,
3311    /// <p>The upload's test spec file name. The name must not contain any forward slashes (/). The test spec file name must end with the <code>.yaml</code> or <code>.yml</code> file extension.</p>
3312    #[serde(rename = "name")]
3313    #[serde(skip_serializing_if = "Option::is_none")]
3314    pub name: Option<String>,
3315}
3316
3317#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3318#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3319pub struct UpdateUploadResult {
3320    /// <p>A test spec uploaded to Device Farm.</p>
3321    #[serde(rename = "upload")]
3322    #[serde(skip_serializing_if = "Option::is_none")]
3323    pub upload: Option<Upload>,
3324}
3325
3326#[derive(Clone, Debug, Default, PartialEq, Serialize)]
3327#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
3328pub struct UpdateVPCEConfigurationRequest {
3329    /// <p>The Amazon Resource Name (ARN) of the VPC endpoint configuration you want to update.</p>
3330    #[serde(rename = "arn")]
3331    pub arn: String,
3332    /// <p>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.</p>
3333    #[serde(rename = "serviceDnsName")]
3334    #[serde(skip_serializing_if = "Option::is_none")]
3335    pub service_dns_name: Option<String>,
3336    /// <p>An optional description that provides details about your VPC endpoint configuration.</p>
3337    #[serde(rename = "vpceConfigurationDescription")]
3338    #[serde(skip_serializing_if = "Option::is_none")]
3339    pub vpce_configuration_description: Option<String>,
3340    /// <p>The friendly name you give to your VPC endpoint configuration to manage your configurations more easily.</p>
3341    #[serde(rename = "vpceConfigurationName")]
3342    #[serde(skip_serializing_if = "Option::is_none")]
3343    pub vpce_configuration_name: Option<String>,
3344    /// <p>The name of the VPC endpoint service running in your AWS account that you want Device Farm to test.</p>
3345    #[serde(rename = "vpceServiceName")]
3346    #[serde(skip_serializing_if = "Option::is_none")]
3347    pub vpce_service_name: Option<String>,
3348}
3349
3350#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3351#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3352pub struct UpdateVPCEConfigurationResult {
3353    /// <p>An object that contains information about your VPC endpoint configuration.</p>
3354    #[serde(rename = "vpceConfiguration")]
3355    #[serde(skip_serializing_if = "Option::is_none")]
3356    pub vpce_configuration: Option<VPCEConfiguration>,
3357}
3358
3359/// <p>An app or a set of one or more tests to upload or that have been uploaded.</p>
3360#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3361#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3362pub struct Upload {
3363    /// <p>The upload's ARN.</p>
3364    #[serde(rename = "arn")]
3365    #[serde(skip_serializing_if = "Option::is_none")]
3366    pub arn: Option<String>,
3367    /// <p><p>The upload&#39;s category. Allowed values include:</p> <ul> <li> <p>CURATED: An upload managed by AWS Device Farm.</p> </li> <li> <p>PRIVATE: An upload managed by the AWS Device Farm customer.</p> </li> </ul></p>
3368    #[serde(rename = "category")]
3369    #[serde(skip_serializing_if = "Option::is_none")]
3370    pub category: Option<String>,
3371    /// <p>The upload's content type (for example, <code>application/octet-stream</code>).</p>
3372    #[serde(rename = "contentType")]
3373    #[serde(skip_serializing_if = "Option::is_none")]
3374    pub content_type: Option<String>,
3375    /// <p>When the upload was created.</p>
3376    #[serde(rename = "created")]
3377    #[serde(skip_serializing_if = "Option::is_none")]
3378    pub created: Option<f64>,
3379    /// <p>A message about the upload's result.</p>
3380    #[serde(rename = "message")]
3381    #[serde(skip_serializing_if = "Option::is_none")]
3382    pub message: Option<String>,
3383    /// <p>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.</p>
3384    #[serde(rename = "metadata")]
3385    #[serde(skip_serializing_if = "Option::is_none")]
3386    pub metadata: Option<String>,
3387    /// <p>The upload's file name.</p>
3388    #[serde(rename = "name")]
3389    #[serde(skip_serializing_if = "Option::is_none")]
3390    pub name: Option<String>,
3391    /// <p><p>The upload&#39;s status.</p> <p>Must be one of the following values:</p> <ul> <li> <p>FAILED</p> </li> <li> <p>INITIALIZED</p> </li> <li> <p>PROCESSING</p> </li> <li> <p>SUCCEEDED</p> </li> </ul></p>
3392    #[serde(rename = "status")]
3393    #[serde(skip_serializing_if = "Option::is_none")]
3394    pub status: Option<String>,
3395    /// <p><p>The upload&#39;s type.</p> <p>Must be one of the following values:</p> <ul> <li> <p>ANDROID<em>APP</p> </li> <li> <p>IOS</em>APP</p> </li> <li> <p>WEB<em>APP</p> </li> <li> <p>EXTERNAL</em>DATA</p> </li> <li> <p>APPIUM<em>JAVA</em>JUNIT<em>TEST</em>PACKAGE</p> </li> <li> <p>APPIUM<em>JAVA</em>TESTNG<em>TEST</em>PACKAGE</p> </li> <li> <p>APPIUM<em>PYTHON</em>TEST<em>PACKAGE</p> </li> <li> <p>APPIUM</em>NODE<em>TEST</em>PACKAGE</p> </li> <li> <p>APPIUM<em>RUBY</em>TEST<em>PACKAGE</p> </li> <li> <p>APPIUM</em>WEB<em>JAVA</em>JUNIT<em>TEST</em>PACKAGE</p> </li> <li> <p>APPIUM<em>WEB</em>JAVA<em>TESTNG</em>TEST<em>PACKAGE</p> </li> <li> <p>APPIUM</em>WEB<em>PYTHON</em>TEST<em>PACKAGE</p> </li> <li> <p>APPIUM</em>WEB<em>NODE</em>TEST<em>PACKAGE</p> </li> <li> <p>APPIUM</em>WEB<em>RUBY</em>TEST<em>PACKAGE</p> </li> <li> <p>CALABASH</em>TEST<em>PACKAGE</p> </li> <li> <p>INSTRUMENTATION</em>TEST<em>PACKAGE</p> </li> <li> <p>UIAUTOMATION</em>TEST<em>PACKAGE</p> </li> <li> <p>UIAUTOMATOR</em>TEST<em>PACKAGE</p> </li> <li> <p>XCTEST</em>TEST<em>PACKAGE</p> </li> <li> <p>XCTEST</em>UI<em>TEST</em>PACKAGE</p> </li> <li> <p>APPIUM<em>JAVA</em>JUNIT<em>TEST</em>SPEC</p> </li> <li> <p>APPIUM<em>JAVA</em>TESTNG<em>TEST</em>SPEC</p> </li> <li> <p>APPIUM<em>PYTHON</em>TEST<em>SPEC</p> </li> <li> <p>APPIUM</em>NODE<em>TEST</em>SPEC</p> </li> <li> <p>APPIUM<em>RUBY</em>TEST<em>SPEC</p> </li> <li> <p>APPIUM</em>WEB<em>JAVA</em>JUNIT<em>TEST</em>SPEC</p> </li> <li> <p>APPIUM<em>WEB</em>JAVA<em>TESTNG</em>TEST<em>SPEC</p> </li> <li> <p>APPIUM</em>WEB<em>PYTHON</em>TEST<em>SPEC</p> </li> <li> <p>APPIUM</em>WEB<em>NODE</em>TEST<em>SPEC</p> </li> <li> <p>APPIUM</em>WEB<em>RUBY</em>TEST<em>SPEC</p> </li> <li> <p>INSTRUMENTATION</em>TEST<em>SPEC</p> </li> <li> <p>XCTEST</em>UI<em>TEST</em>SPEC</p> </li> </ul></p>
3396    #[serde(rename = "type")]
3397    #[serde(skip_serializing_if = "Option::is_none")]
3398    pub type_: Option<String>,
3399    /// <p>The presigned Amazon S3 URL that was used to store a file using a PUT request.</p>
3400    #[serde(rename = "url")]
3401    #[serde(skip_serializing_if = "Option::is_none")]
3402    pub url: Option<String>,
3403}
3404
3405/// <p>Represents an Amazon Virtual Private Cloud (VPC) endpoint configuration.</p>
3406#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
3407#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
3408pub struct VPCEConfiguration {
3409    /// <p>The Amazon Resource Name (ARN) of the VPC endpoint configuration.</p>
3410    #[serde(rename = "arn")]
3411    #[serde(skip_serializing_if = "Option::is_none")]
3412    pub arn: Option<String>,
3413    /// <p>The DNS name that maps to the private IP address of the service you want to access.</p>
3414    #[serde(rename = "serviceDnsName")]
3415    #[serde(skip_serializing_if = "Option::is_none")]
3416    pub service_dns_name: Option<String>,
3417    /// <p>An optional description that provides details about your VPC endpoint configuration.</p>
3418    #[serde(rename = "vpceConfigurationDescription")]
3419    #[serde(skip_serializing_if = "Option::is_none")]
3420    pub vpce_configuration_description: Option<String>,
3421    /// <p>The friendly name you give to your VPC endpoint configuration to manage your configurations more easily.</p>
3422    #[serde(rename = "vpceConfigurationName")]
3423    #[serde(skip_serializing_if = "Option::is_none")]
3424    pub vpce_configuration_name: Option<String>,
3425    /// <p>The name of the VPC endpoint service running in your AWS account that you want Device Farm to test.</p>
3426    #[serde(rename = "vpceServiceName")]
3427    #[serde(skip_serializing_if = "Option::is_none")]
3428    pub vpce_service_name: Option<String>,
3429}
3430
3431/// Errors returned by CreateDevicePool
3432#[derive(Debug, PartialEq)]
3433pub enum CreateDevicePoolError {
3434    /// <p>An invalid argument was specified.</p>
3435    Argument(String),
3436    /// <p>A limit was exceeded.</p>
3437    LimitExceeded(String),
3438    /// <p>The specified entity was not found.</p>
3439    NotFound(String),
3440    /// <p>There was a problem with the service account.</p>
3441    ServiceAccount(String),
3442}
3443
3444impl CreateDevicePoolError {
3445    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateDevicePoolError> {
3446        if let Some(err) = proto::json::Error::parse(&res) {
3447            match err.typ.as_str() {
3448                "ArgumentException" => {
3449                    return RusotoError::Service(CreateDevicePoolError::Argument(err.msg))
3450                }
3451                "LimitExceededException" => {
3452                    return RusotoError::Service(CreateDevicePoolError::LimitExceeded(err.msg))
3453                }
3454                "NotFoundException" => {
3455                    return RusotoError::Service(CreateDevicePoolError::NotFound(err.msg))
3456                }
3457                "ServiceAccountException" => {
3458                    return RusotoError::Service(CreateDevicePoolError::ServiceAccount(err.msg))
3459                }
3460                "ValidationException" => return RusotoError::Validation(err.msg),
3461                _ => {}
3462            }
3463        }
3464        RusotoError::Unknown(res)
3465    }
3466}
3467impl fmt::Display for CreateDevicePoolError {
3468    #[allow(unused_variables)]
3469    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3470        match *self {
3471            CreateDevicePoolError::Argument(ref cause) => write!(f, "{}", cause),
3472            CreateDevicePoolError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3473            CreateDevicePoolError::NotFound(ref cause) => write!(f, "{}", cause),
3474            CreateDevicePoolError::ServiceAccount(ref cause) => write!(f, "{}", cause),
3475        }
3476    }
3477}
3478impl Error for CreateDevicePoolError {}
3479/// Errors returned by CreateInstanceProfile
3480#[derive(Debug, PartialEq)]
3481pub enum CreateInstanceProfileError {
3482    /// <p>An invalid argument was specified.</p>
3483    Argument(String),
3484    /// <p>A limit was exceeded.</p>
3485    LimitExceeded(String),
3486    /// <p>The specified entity was not found.</p>
3487    NotFound(String),
3488    /// <p>There was a problem with the service account.</p>
3489    ServiceAccount(String),
3490}
3491
3492impl CreateInstanceProfileError {
3493    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateInstanceProfileError> {
3494        if let Some(err) = proto::json::Error::parse(&res) {
3495            match err.typ.as_str() {
3496                "ArgumentException" => {
3497                    return RusotoError::Service(CreateInstanceProfileError::Argument(err.msg))
3498                }
3499                "LimitExceededException" => {
3500                    return RusotoError::Service(CreateInstanceProfileError::LimitExceeded(err.msg))
3501                }
3502                "NotFoundException" => {
3503                    return RusotoError::Service(CreateInstanceProfileError::NotFound(err.msg))
3504                }
3505                "ServiceAccountException" => {
3506                    return RusotoError::Service(CreateInstanceProfileError::ServiceAccount(
3507                        err.msg,
3508                    ))
3509                }
3510                "ValidationException" => return RusotoError::Validation(err.msg),
3511                _ => {}
3512            }
3513        }
3514        RusotoError::Unknown(res)
3515    }
3516}
3517impl fmt::Display for CreateInstanceProfileError {
3518    #[allow(unused_variables)]
3519    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3520        match *self {
3521            CreateInstanceProfileError::Argument(ref cause) => write!(f, "{}", cause),
3522            CreateInstanceProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3523            CreateInstanceProfileError::NotFound(ref cause) => write!(f, "{}", cause),
3524            CreateInstanceProfileError::ServiceAccount(ref cause) => write!(f, "{}", cause),
3525        }
3526    }
3527}
3528impl Error for CreateInstanceProfileError {}
3529/// Errors returned by CreateNetworkProfile
3530#[derive(Debug, PartialEq)]
3531pub enum CreateNetworkProfileError {
3532    /// <p>An invalid argument was specified.</p>
3533    Argument(String),
3534    /// <p>A limit was exceeded.</p>
3535    LimitExceeded(String),
3536    /// <p>The specified entity was not found.</p>
3537    NotFound(String),
3538    /// <p>There was a problem with the service account.</p>
3539    ServiceAccount(String),
3540}
3541
3542impl CreateNetworkProfileError {
3543    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateNetworkProfileError> {
3544        if let Some(err) = proto::json::Error::parse(&res) {
3545            match err.typ.as_str() {
3546                "ArgumentException" => {
3547                    return RusotoError::Service(CreateNetworkProfileError::Argument(err.msg))
3548                }
3549                "LimitExceededException" => {
3550                    return RusotoError::Service(CreateNetworkProfileError::LimitExceeded(err.msg))
3551                }
3552                "NotFoundException" => {
3553                    return RusotoError::Service(CreateNetworkProfileError::NotFound(err.msg))
3554                }
3555                "ServiceAccountException" => {
3556                    return RusotoError::Service(CreateNetworkProfileError::ServiceAccount(err.msg))
3557                }
3558                "ValidationException" => return RusotoError::Validation(err.msg),
3559                _ => {}
3560            }
3561        }
3562        RusotoError::Unknown(res)
3563    }
3564}
3565impl fmt::Display for CreateNetworkProfileError {
3566    #[allow(unused_variables)]
3567    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3568        match *self {
3569            CreateNetworkProfileError::Argument(ref cause) => write!(f, "{}", cause),
3570            CreateNetworkProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3571            CreateNetworkProfileError::NotFound(ref cause) => write!(f, "{}", cause),
3572            CreateNetworkProfileError::ServiceAccount(ref cause) => write!(f, "{}", cause),
3573        }
3574    }
3575}
3576impl Error for CreateNetworkProfileError {}
3577/// Errors returned by CreateProject
3578#[derive(Debug, PartialEq)]
3579pub enum CreateProjectError {
3580    /// <p>An invalid argument was specified.</p>
3581    Argument(String),
3582    /// <p>A limit was exceeded.</p>
3583    LimitExceeded(String),
3584    /// <p>The specified entity was not found.</p>
3585    NotFound(String),
3586    /// <p>There was a problem with the service account.</p>
3587    ServiceAccount(String),
3588    /// <p>The operation was not successful. Try again.</p>
3589    TagOperation(String),
3590}
3591
3592impl CreateProjectError {
3593    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateProjectError> {
3594        if let Some(err) = proto::json::Error::parse(&res) {
3595            match err.typ.as_str() {
3596                "ArgumentException" => {
3597                    return RusotoError::Service(CreateProjectError::Argument(err.msg))
3598                }
3599                "LimitExceededException" => {
3600                    return RusotoError::Service(CreateProjectError::LimitExceeded(err.msg))
3601                }
3602                "NotFoundException" => {
3603                    return RusotoError::Service(CreateProjectError::NotFound(err.msg))
3604                }
3605                "ServiceAccountException" => {
3606                    return RusotoError::Service(CreateProjectError::ServiceAccount(err.msg))
3607                }
3608                "TagOperationException" => {
3609                    return RusotoError::Service(CreateProjectError::TagOperation(err.msg))
3610                }
3611                "ValidationException" => return RusotoError::Validation(err.msg),
3612                _ => {}
3613            }
3614        }
3615        RusotoError::Unknown(res)
3616    }
3617}
3618impl fmt::Display for CreateProjectError {
3619    #[allow(unused_variables)]
3620    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3621        match *self {
3622            CreateProjectError::Argument(ref cause) => write!(f, "{}", cause),
3623            CreateProjectError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3624            CreateProjectError::NotFound(ref cause) => write!(f, "{}", cause),
3625            CreateProjectError::ServiceAccount(ref cause) => write!(f, "{}", cause),
3626            CreateProjectError::TagOperation(ref cause) => write!(f, "{}", cause),
3627        }
3628    }
3629}
3630impl Error for CreateProjectError {}
3631/// Errors returned by CreateRemoteAccessSession
3632#[derive(Debug, PartialEq)]
3633pub enum CreateRemoteAccessSessionError {
3634    /// <p>An invalid argument was specified.</p>
3635    Argument(String),
3636    /// <p>A limit was exceeded.</p>
3637    LimitExceeded(String),
3638    /// <p>The specified entity was not found.</p>
3639    NotFound(String),
3640    /// <p>There was a problem with the service account.</p>
3641    ServiceAccount(String),
3642}
3643
3644impl CreateRemoteAccessSessionError {
3645    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateRemoteAccessSessionError> {
3646        if let Some(err) = proto::json::Error::parse(&res) {
3647            match err.typ.as_str() {
3648                "ArgumentException" => {
3649                    return RusotoError::Service(CreateRemoteAccessSessionError::Argument(err.msg))
3650                }
3651                "LimitExceededException" => {
3652                    return RusotoError::Service(CreateRemoteAccessSessionError::LimitExceeded(
3653                        err.msg,
3654                    ))
3655                }
3656                "NotFoundException" => {
3657                    return RusotoError::Service(CreateRemoteAccessSessionError::NotFound(err.msg))
3658                }
3659                "ServiceAccountException" => {
3660                    return RusotoError::Service(CreateRemoteAccessSessionError::ServiceAccount(
3661                        err.msg,
3662                    ))
3663                }
3664                "ValidationException" => return RusotoError::Validation(err.msg),
3665                _ => {}
3666            }
3667        }
3668        RusotoError::Unknown(res)
3669    }
3670}
3671impl fmt::Display for CreateRemoteAccessSessionError {
3672    #[allow(unused_variables)]
3673    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3674        match *self {
3675            CreateRemoteAccessSessionError::Argument(ref cause) => write!(f, "{}", cause),
3676            CreateRemoteAccessSessionError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3677            CreateRemoteAccessSessionError::NotFound(ref cause) => write!(f, "{}", cause),
3678            CreateRemoteAccessSessionError::ServiceAccount(ref cause) => write!(f, "{}", cause),
3679        }
3680    }
3681}
3682impl Error for CreateRemoteAccessSessionError {}
3683/// Errors returned by CreateTestGridProject
3684#[derive(Debug, PartialEq)]
3685pub enum CreateTestGridProjectError {
3686    /// <p>An internal exception was raised in the service. Contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a> if you see this error. </p>
3687    InternalService(String),
3688}
3689
3690impl CreateTestGridProjectError {
3691    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateTestGridProjectError> {
3692        if let Some(err) = proto::json::Error::parse(&res) {
3693            match err.typ.as_str() {
3694                "InternalServiceException" => {
3695                    return RusotoError::Service(CreateTestGridProjectError::InternalService(
3696                        err.msg,
3697                    ))
3698                }
3699                "ValidationException" => return RusotoError::Validation(err.msg),
3700                _ => {}
3701            }
3702        }
3703        RusotoError::Unknown(res)
3704    }
3705}
3706impl fmt::Display for CreateTestGridProjectError {
3707    #[allow(unused_variables)]
3708    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3709        match *self {
3710            CreateTestGridProjectError::InternalService(ref cause) => write!(f, "{}", cause),
3711        }
3712    }
3713}
3714impl Error for CreateTestGridProjectError {}
3715/// Errors returned by CreateTestGridUrl
3716#[derive(Debug, PartialEq)]
3717pub enum CreateTestGridUrlError {
3718    /// <p>An invalid argument was specified.</p>
3719    Argument(String),
3720    /// <p>An internal exception was raised in the service. Contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a> if you see this error. </p>
3721    InternalService(String),
3722    /// <p>The specified entity was not found.</p>
3723    NotFound(String),
3724}
3725
3726impl CreateTestGridUrlError {
3727    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateTestGridUrlError> {
3728        if let Some(err) = proto::json::Error::parse(&res) {
3729            match err.typ.as_str() {
3730                "ArgumentException" => {
3731                    return RusotoError::Service(CreateTestGridUrlError::Argument(err.msg))
3732                }
3733                "InternalServiceException" => {
3734                    return RusotoError::Service(CreateTestGridUrlError::InternalService(err.msg))
3735                }
3736                "NotFoundException" => {
3737                    return RusotoError::Service(CreateTestGridUrlError::NotFound(err.msg))
3738                }
3739                "ValidationException" => return RusotoError::Validation(err.msg),
3740                _ => {}
3741            }
3742        }
3743        RusotoError::Unknown(res)
3744    }
3745}
3746impl fmt::Display for CreateTestGridUrlError {
3747    #[allow(unused_variables)]
3748    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3749        match *self {
3750            CreateTestGridUrlError::Argument(ref cause) => write!(f, "{}", cause),
3751            CreateTestGridUrlError::InternalService(ref cause) => write!(f, "{}", cause),
3752            CreateTestGridUrlError::NotFound(ref cause) => write!(f, "{}", cause),
3753        }
3754    }
3755}
3756impl Error for CreateTestGridUrlError {}
3757/// Errors returned by CreateUpload
3758#[derive(Debug, PartialEq)]
3759pub enum CreateUploadError {
3760    /// <p>An invalid argument was specified.</p>
3761    Argument(String),
3762    /// <p>A limit was exceeded.</p>
3763    LimitExceeded(String),
3764    /// <p>The specified entity was not found.</p>
3765    NotFound(String),
3766    /// <p>There was a problem with the service account.</p>
3767    ServiceAccount(String),
3768}
3769
3770impl CreateUploadError {
3771    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateUploadError> {
3772        if let Some(err) = proto::json::Error::parse(&res) {
3773            match err.typ.as_str() {
3774                "ArgumentException" => {
3775                    return RusotoError::Service(CreateUploadError::Argument(err.msg))
3776                }
3777                "LimitExceededException" => {
3778                    return RusotoError::Service(CreateUploadError::LimitExceeded(err.msg))
3779                }
3780                "NotFoundException" => {
3781                    return RusotoError::Service(CreateUploadError::NotFound(err.msg))
3782                }
3783                "ServiceAccountException" => {
3784                    return RusotoError::Service(CreateUploadError::ServiceAccount(err.msg))
3785                }
3786                "ValidationException" => return RusotoError::Validation(err.msg),
3787                _ => {}
3788            }
3789        }
3790        RusotoError::Unknown(res)
3791    }
3792}
3793impl fmt::Display for CreateUploadError {
3794    #[allow(unused_variables)]
3795    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3796        match *self {
3797            CreateUploadError::Argument(ref cause) => write!(f, "{}", cause),
3798            CreateUploadError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3799            CreateUploadError::NotFound(ref cause) => write!(f, "{}", cause),
3800            CreateUploadError::ServiceAccount(ref cause) => write!(f, "{}", cause),
3801        }
3802    }
3803}
3804impl Error for CreateUploadError {}
3805/// Errors returned by CreateVPCEConfiguration
3806#[derive(Debug, PartialEq)]
3807pub enum CreateVPCEConfigurationError {
3808    /// <p>An invalid argument was specified.</p>
3809    Argument(String),
3810    /// <p>A limit was exceeded.</p>
3811    LimitExceeded(String),
3812    /// <p>There was a problem with the service account.</p>
3813    ServiceAccount(String),
3814}
3815
3816impl CreateVPCEConfigurationError {
3817    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateVPCEConfigurationError> {
3818        if let Some(err) = proto::json::Error::parse(&res) {
3819            match err.typ.as_str() {
3820                "ArgumentException" => {
3821                    return RusotoError::Service(CreateVPCEConfigurationError::Argument(err.msg))
3822                }
3823                "LimitExceededException" => {
3824                    return RusotoError::Service(CreateVPCEConfigurationError::LimitExceeded(
3825                        err.msg,
3826                    ))
3827                }
3828                "ServiceAccountException" => {
3829                    return RusotoError::Service(CreateVPCEConfigurationError::ServiceAccount(
3830                        err.msg,
3831                    ))
3832                }
3833                "ValidationException" => return RusotoError::Validation(err.msg),
3834                _ => {}
3835            }
3836        }
3837        RusotoError::Unknown(res)
3838    }
3839}
3840impl fmt::Display for CreateVPCEConfigurationError {
3841    #[allow(unused_variables)]
3842    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3843        match *self {
3844            CreateVPCEConfigurationError::Argument(ref cause) => write!(f, "{}", cause),
3845            CreateVPCEConfigurationError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3846            CreateVPCEConfigurationError::ServiceAccount(ref cause) => write!(f, "{}", cause),
3847        }
3848    }
3849}
3850impl Error for CreateVPCEConfigurationError {}
3851/// Errors returned by DeleteDevicePool
3852#[derive(Debug, PartialEq)]
3853pub enum DeleteDevicePoolError {
3854    /// <p>An invalid argument was specified.</p>
3855    Argument(String),
3856    /// <p>A limit was exceeded.</p>
3857    LimitExceeded(String),
3858    /// <p>The specified entity was not found.</p>
3859    NotFound(String),
3860    /// <p>There was a problem with the service account.</p>
3861    ServiceAccount(String),
3862}
3863
3864impl DeleteDevicePoolError {
3865    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteDevicePoolError> {
3866        if let Some(err) = proto::json::Error::parse(&res) {
3867            match err.typ.as_str() {
3868                "ArgumentException" => {
3869                    return RusotoError::Service(DeleteDevicePoolError::Argument(err.msg))
3870                }
3871                "LimitExceededException" => {
3872                    return RusotoError::Service(DeleteDevicePoolError::LimitExceeded(err.msg))
3873                }
3874                "NotFoundException" => {
3875                    return RusotoError::Service(DeleteDevicePoolError::NotFound(err.msg))
3876                }
3877                "ServiceAccountException" => {
3878                    return RusotoError::Service(DeleteDevicePoolError::ServiceAccount(err.msg))
3879                }
3880                "ValidationException" => return RusotoError::Validation(err.msg),
3881                _ => {}
3882            }
3883        }
3884        RusotoError::Unknown(res)
3885    }
3886}
3887impl fmt::Display for DeleteDevicePoolError {
3888    #[allow(unused_variables)]
3889    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3890        match *self {
3891            DeleteDevicePoolError::Argument(ref cause) => write!(f, "{}", cause),
3892            DeleteDevicePoolError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3893            DeleteDevicePoolError::NotFound(ref cause) => write!(f, "{}", cause),
3894            DeleteDevicePoolError::ServiceAccount(ref cause) => write!(f, "{}", cause),
3895        }
3896    }
3897}
3898impl Error for DeleteDevicePoolError {}
3899/// Errors returned by DeleteInstanceProfile
3900#[derive(Debug, PartialEq)]
3901pub enum DeleteInstanceProfileError {
3902    /// <p>An invalid argument was specified.</p>
3903    Argument(String),
3904    /// <p>A limit was exceeded.</p>
3905    LimitExceeded(String),
3906    /// <p>The specified entity was not found.</p>
3907    NotFound(String),
3908    /// <p>There was a problem with the service account.</p>
3909    ServiceAccount(String),
3910}
3911
3912impl DeleteInstanceProfileError {
3913    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteInstanceProfileError> {
3914        if let Some(err) = proto::json::Error::parse(&res) {
3915            match err.typ.as_str() {
3916                "ArgumentException" => {
3917                    return RusotoError::Service(DeleteInstanceProfileError::Argument(err.msg))
3918                }
3919                "LimitExceededException" => {
3920                    return RusotoError::Service(DeleteInstanceProfileError::LimitExceeded(err.msg))
3921                }
3922                "NotFoundException" => {
3923                    return RusotoError::Service(DeleteInstanceProfileError::NotFound(err.msg))
3924                }
3925                "ServiceAccountException" => {
3926                    return RusotoError::Service(DeleteInstanceProfileError::ServiceAccount(
3927                        err.msg,
3928                    ))
3929                }
3930                "ValidationException" => return RusotoError::Validation(err.msg),
3931                _ => {}
3932            }
3933        }
3934        RusotoError::Unknown(res)
3935    }
3936}
3937impl fmt::Display for DeleteInstanceProfileError {
3938    #[allow(unused_variables)]
3939    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3940        match *self {
3941            DeleteInstanceProfileError::Argument(ref cause) => write!(f, "{}", cause),
3942            DeleteInstanceProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3943            DeleteInstanceProfileError::NotFound(ref cause) => write!(f, "{}", cause),
3944            DeleteInstanceProfileError::ServiceAccount(ref cause) => write!(f, "{}", cause),
3945        }
3946    }
3947}
3948impl Error for DeleteInstanceProfileError {}
3949/// Errors returned by DeleteNetworkProfile
3950#[derive(Debug, PartialEq)]
3951pub enum DeleteNetworkProfileError {
3952    /// <p>An invalid argument was specified.</p>
3953    Argument(String),
3954    /// <p>A limit was exceeded.</p>
3955    LimitExceeded(String),
3956    /// <p>The specified entity was not found.</p>
3957    NotFound(String),
3958    /// <p>There was a problem with the service account.</p>
3959    ServiceAccount(String),
3960}
3961
3962impl DeleteNetworkProfileError {
3963    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteNetworkProfileError> {
3964        if let Some(err) = proto::json::Error::parse(&res) {
3965            match err.typ.as_str() {
3966                "ArgumentException" => {
3967                    return RusotoError::Service(DeleteNetworkProfileError::Argument(err.msg))
3968                }
3969                "LimitExceededException" => {
3970                    return RusotoError::Service(DeleteNetworkProfileError::LimitExceeded(err.msg))
3971                }
3972                "NotFoundException" => {
3973                    return RusotoError::Service(DeleteNetworkProfileError::NotFound(err.msg))
3974                }
3975                "ServiceAccountException" => {
3976                    return RusotoError::Service(DeleteNetworkProfileError::ServiceAccount(err.msg))
3977                }
3978                "ValidationException" => return RusotoError::Validation(err.msg),
3979                _ => {}
3980            }
3981        }
3982        RusotoError::Unknown(res)
3983    }
3984}
3985impl fmt::Display for DeleteNetworkProfileError {
3986    #[allow(unused_variables)]
3987    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3988        match *self {
3989            DeleteNetworkProfileError::Argument(ref cause) => write!(f, "{}", cause),
3990            DeleteNetworkProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3991            DeleteNetworkProfileError::NotFound(ref cause) => write!(f, "{}", cause),
3992            DeleteNetworkProfileError::ServiceAccount(ref cause) => write!(f, "{}", cause),
3993        }
3994    }
3995}
3996impl Error for DeleteNetworkProfileError {}
3997/// Errors returned by DeleteProject
3998#[derive(Debug, PartialEq)]
3999pub enum DeleteProjectError {
4000    /// <p>An invalid argument was specified.</p>
4001    Argument(String),
4002    /// <p>A limit was exceeded.</p>
4003    LimitExceeded(String),
4004    /// <p>The specified entity was not found.</p>
4005    NotFound(String),
4006    /// <p>There was a problem with the service account.</p>
4007    ServiceAccount(String),
4008}
4009
4010impl DeleteProjectError {
4011    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteProjectError> {
4012        if let Some(err) = proto::json::Error::parse(&res) {
4013            match err.typ.as_str() {
4014                "ArgumentException" => {
4015                    return RusotoError::Service(DeleteProjectError::Argument(err.msg))
4016                }
4017                "LimitExceededException" => {
4018                    return RusotoError::Service(DeleteProjectError::LimitExceeded(err.msg))
4019                }
4020                "NotFoundException" => {
4021                    return RusotoError::Service(DeleteProjectError::NotFound(err.msg))
4022                }
4023                "ServiceAccountException" => {
4024                    return RusotoError::Service(DeleteProjectError::ServiceAccount(err.msg))
4025                }
4026                "ValidationException" => return RusotoError::Validation(err.msg),
4027                _ => {}
4028            }
4029        }
4030        RusotoError::Unknown(res)
4031    }
4032}
4033impl fmt::Display for DeleteProjectError {
4034    #[allow(unused_variables)]
4035    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4036        match *self {
4037            DeleteProjectError::Argument(ref cause) => write!(f, "{}", cause),
4038            DeleteProjectError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4039            DeleteProjectError::NotFound(ref cause) => write!(f, "{}", cause),
4040            DeleteProjectError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4041        }
4042    }
4043}
4044impl Error for DeleteProjectError {}
4045/// Errors returned by DeleteRemoteAccessSession
4046#[derive(Debug, PartialEq)]
4047pub enum DeleteRemoteAccessSessionError {
4048    /// <p>An invalid argument was specified.</p>
4049    Argument(String),
4050    /// <p>A limit was exceeded.</p>
4051    LimitExceeded(String),
4052    /// <p>The specified entity was not found.</p>
4053    NotFound(String),
4054    /// <p>There was a problem with the service account.</p>
4055    ServiceAccount(String),
4056}
4057
4058impl DeleteRemoteAccessSessionError {
4059    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteRemoteAccessSessionError> {
4060        if let Some(err) = proto::json::Error::parse(&res) {
4061            match err.typ.as_str() {
4062                "ArgumentException" => {
4063                    return RusotoError::Service(DeleteRemoteAccessSessionError::Argument(err.msg))
4064                }
4065                "LimitExceededException" => {
4066                    return RusotoError::Service(DeleteRemoteAccessSessionError::LimitExceeded(
4067                        err.msg,
4068                    ))
4069                }
4070                "NotFoundException" => {
4071                    return RusotoError::Service(DeleteRemoteAccessSessionError::NotFound(err.msg))
4072                }
4073                "ServiceAccountException" => {
4074                    return RusotoError::Service(DeleteRemoteAccessSessionError::ServiceAccount(
4075                        err.msg,
4076                    ))
4077                }
4078                "ValidationException" => return RusotoError::Validation(err.msg),
4079                _ => {}
4080            }
4081        }
4082        RusotoError::Unknown(res)
4083    }
4084}
4085impl fmt::Display for DeleteRemoteAccessSessionError {
4086    #[allow(unused_variables)]
4087    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4088        match *self {
4089            DeleteRemoteAccessSessionError::Argument(ref cause) => write!(f, "{}", cause),
4090            DeleteRemoteAccessSessionError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4091            DeleteRemoteAccessSessionError::NotFound(ref cause) => write!(f, "{}", cause),
4092            DeleteRemoteAccessSessionError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4093        }
4094    }
4095}
4096impl Error for DeleteRemoteAccessSessionError {}
4097/// Errors returned by DeleteRun
4098#[derive(Debug, PartialEq)]
4099pub enum DeleteRunError {
4100    /// <p>An invalid argument was specified.</p>
4101    Argument(String),
4102    /// <p>A limit was exceeded.</p>
4103    LimitExceeded(String),
4104    /// <p>The specified entity was not found.</p>
4105    NotFound(String),
4106    /// <p>There was a problem with the service account.</p>
4107    ServiceAccount(String),
4108}
4109
4110impl DeleteRunError {
4111    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteRunError> {
4112        if let Some(err) = proto::json::Error::parse(&res) {
4113            match err.typ.as_str() {
4114                "ArgumentException" => {
4115                    return RusotoError::Service(DeleteRunError::Argument(err.msg))
4116                }
4117                "LimitExceededException" => {
4118                    return RusotoError::Service(DeleteRunError::LimitExceeded(err.msg))
4119                }
4120                "NotFoundException" => {
4121                    return RusotoError::Service(DeleteRunError::NotFound(err.msg))
4122                }
4123                "ServiceAccountException" => {
4124                    return RusotoError::Service(DeleteRunError::ServiceAccount(err.msg))
4125                }
4126                "ValidationException" => return RusotoError::Validation(err.msg),
4127                _ => {}
4128            }
4129        }
4130        RusotoError::Unknown(res)
4131    }
4132}
4133impl fmt::Display for DeleteRunError {
4134    #[allow(unused_variables)]
4135    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4136        match *self {
4137            DeleteRunError::Argument(ref cause) => write!(f, "{}", cause),
4138            DeleteRunError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4139            DeleteRunError::NotFound(ref cause) => write!(f, "{}", cause),
4140            DeleteRunError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4141        }
4142    }
4143}
4144impl Error for DeleteRunError {}
4145/// Errors returned by DeleteTestGridProject
4146#[derive(Debug, PartialEq)]
4147pub enum DeleteTestGridProjectError {
4148    /// <p>An invalid argument was specified.</p>
4149    Argument(String),
4150    /// <p>The requested object could not be deleted.</p>
4151    CannotDelete(String),
4152    /// <p>An internal exception was raised in the service. Contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a> if you see this error. </p>
4153    InternalService(String),
4154    /// <p>The specified entity was not found.</p>
4155    NotFound(String),
4156}
4157
4158impl DeleteTestGridProjectError {
4159    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteTestGridProjectError> {
4160        if let Some(err) = proto::json::Error::parse(&res) {
4161            match err.typ.as_str() {
4162                "ArgumentException" => {
4163                    return RusotoError::Service(DeleteTestGridProjectError::Argument(err.msg))
4164                }
4165                "CannotDeleteException" => {
4166                    return RusotoError::Service(DeleteTestGridProjectError::CannotDelete(err.msg))
4167                }
4168                "InternalServiceException" => {
4169                    return RusotoError::Service(DeleteTestGridProjectError::InternalService(
4170                        err.msg,
4171                    ))
4172                }
4173                "NotFoundException" => {
4174                    return RusotoError::Service(DeleteTestGridProjectError::NotFound(err.msg))
4175                }
4176                "ValidationException" => return RusotoError::Validation(err.msg),
4177                _ => {}
4178            }
4179        }
4180        RusotoError::Unknown(res)
4181    }
4182}
4183impl fmt::Display for DeleteTestGridProjectError {
4184    #[allow(unused_variables)]
4185    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4186        match *self {
4187            DeleteTestGridProjectError::Argument(ref cause) => write!(f, "{}", cause),
4188            DeleteTestGridProjectError::CannotDelete(ref cause) => write!(f, "{}", cause),
4189            DeleteTestGridProjectError::InternalService(ref cause) => write!(f, "{}", cause),
4190            DeleteTestGridProjectError::NotFound(ref cause) => write!(f, "{}", cause),
4191        }
4192    }
4193}
4194impl Error for DeleteTestGridProjectError {}
4195/// Errors returned by DeleteUpload
4196#[derive(Debug, PartialEq)]
4197pub enum DeleteUploadError {
4198    /// <p>An invalid argument was specified.</p>
4199    Argument(String),
4200    /// <p>A limit was exceeded.</p>
4201    LimitExceeded(String),
4202    /// <p>The specified entity was not found.</p>
4203    NotFound(String),
4204    /// <p>There was a problem with the service account.</p>
4205    ServiceAccount(String),
4206}
4207
4208impl DeleteUploadError {
4209    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteUploadError> {
4210        if let Some(err) = proto::json::Error::parse(&res) {
4211            match err.typ.as_str() {
4212                "ArgumentException" => {
4213                    return RusotoError::Service(DeleteUploadError::Argument(err.msg))
4214                }
4215                "LimitExceededException" => {
4216                    return RusotoError::Service(DeleteUploadError::LimitExceeded(err.msg))
4217                }
4218                "NotFoundException" => {
4219                    return RusotoError::Service(DeleteUploadError::NotFound(err.msg))
4220                }
4221                "ServiceAccountException" => {
4222                    return RusotoError::Service(DeleteUploadError::ServiceAccount(err.msg))
4223                }
4224                "ValidationException" => return RusotoError::Validation(err.msg),
4225                _ => {}
4226            }
4227        }
4228        RusotoError::Unknown(res)
4229    }
4230}
4231impl fmt::Display for DeleteUploadError {
4232    #[allow(unused_variables)]
4233    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4234        match *self {
4235            DeleteUploadError::Argument(ref cause) => write!(f, "{}", cause),
4236            DeleteUploadError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4237            DeleteUploadError::NotFound(ref cause) => write!(f, "{}", cause),
4238            DeleteUploadError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4239        }
4240    }
4241}
4242impl Error for DeleteUploadError {}
4243/// Errors returned by DeleteVPCEConfiguration
4244#[derive(Debug, PartialEq)]
4245pub enum DeleteVPCEConfigurationError {
4246    /// <p>An invalid argument was specified.</p>
4247    Argument(String),
4248    /// <p>There was an error with the update request, or you do not have sufficient permissions to update this VPC endpoint configuration.</p>
4249    InvalidOperation(String),
4250    /// <p>The specified entity was not found.</p>
4251    NotFound(String),
4252    /// <p>There was a problem with the service account.</p>
4253    ServiceAccount(String),
4254}
4255
4256impl DeleteVPCEConfigurationError {
4257    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteVPCEConfigurationError> {
4258        if let Some(err) = proto::json::Error::parse(&res) {
4259            match err.typ.as_str() {
4260                "ArgumentException" => {
4261                    return RusotoError::Service(DeleteVPCEConfigurationError::Argument(err.msg))
4262                }
4263                "InvalidOperationException" => {
4264                    return RusotoError::Service(DeleteVPCEConfigurationError::InvalidOperation(
4265                        err.msg,
4266                    ))
4267                }
4268                "NotFoundException" => {
4269                    return RusotoError::Service(DeleteVPCEConfigurationError::NotFound(err.msg))
4270                }
4271                "ServiceAccountException" => {
4272                    return RusotoError::Service(DeleteVPCEConfigurationError::ServiceAccount(
4273                        err.msg,
4274                    ))
4275                }
4276                "ValidationException" => return RusotoError::Validation(err.msg),
4277                _ => {}
4278            }
4279        }
4280        RusotoError::Unknown(res)
4281    }
4282}
4283impl fmt::Display for DeleteVPCEConfigurationError {
4284    #[allow(unused_variables)]
4285    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4286        match *self {
4287            DeleteVPCEConfigurationError::Argument(ref cause) => write!(f, "{}", cause),
4288            DeleteVPCEConfigurationError::InvalidOperation(ref cause) => write!(f, "{}", cause),
4289            DeleteVPCEConfigurationError::NotFound(ref cause) => write!(f, "{}", cause),
4290            DeleteVPCEConfigurationError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4291        }
4292    }
4293}
4294impl Error for DeleteVPCEConfigurationError {}
4295/// Errors returned by GetAccountSettings
4296#[derive(Debug, PartialEq)]
4297pub enum GetAccountSettingsError {
4298    /// <p>An invalid argument was specified.</p>
4299    Argument(String),
4300    /// <p>A limit was exceeded.</p>
4301    LimitExceeded(String),
4302    /// <p>The specified entity was not found.</p>
4303    NotFound(String),
4304    /// <p>There was a problem with the service account.</p>
4305    ServiceAccount(String),
4306}
4307
4308impl GetAccountSettingsError {
4309    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetAccountSettingsError> {
4310        if let Some(err) = proto::json::Error::parse(&res) {
4311            match err.typ.as_str() {
4312                "ArgumentException" => {
4313                    return RusotoError::Service(GetAccountSettingsError::Argument(err.msg))
4314                }
4315                "LimitExceededException" => {
4316                    return RusotoError::Service(GetAccountSettingsError::LimitExceeded(err.msg))
4317                }
4318                "NotFoundException" => {
4319                    return RusotoError::Service(GetAccountSettingsError::NotFound(err.msg))
4320                }
4321                "ServiceAccountException" => {
4322                    return RusotoError::Service(GetAccountSettingsError::ServiceAccount(err.msg))
4323                }
4324                "ValidationException" => return RusotoError::Validation(err.msg),
4325                _ => {}
4326            }
4327        }
4328        RusotoError::Unknown(res)
4329    }
4330}
4331impl fmt::Display for GetAccountSettingsError {
4332    #[allow(unused_variables)]
4333    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4334        match *self {
4335            GetAccountSettingsError::Argument(ref cause) => write!(f, "{}", cause),
4336            GetAccountSettingsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4337            GetAccountSettingsError::NotFound(ref cause) => write!(f, "{}", cause),
4338            GetAccountSettingsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4339        }
4340    }
4341}
4342impl Error for GetAccountSettingsError {}
4343/// Errors returned by GetDevice
4344#[derive(Debug, PartialEq)]
4345pub enum GetDeviceError {
4346    /// <p>An invalid argument was specified.</p>
4347    Argument(String),
4348    /// <p>A limit was exceeded.</p>
4349    LimitExceeded(String),
4350    /// <p>The specified entity was not found.</p>
4351    NotFound(String),
4352    /// <p>There was a problem with the service account.</p>
4353    ServiceAccount(String),
4354}
4355
4356impl GetDeviceError {
4357    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetDeviceError> {
4358        if let Some(err) = proto::json::Error::parse(&res) {
4359            match err.typ.as_str() {
4360                "ArgumentException" => {
4361                    return RusotoError::Service(GetDeviceError::Argument(err.msg))
4362                }
4363                "LimitExceededException" => {
4364                    return RusotoError::Service(GetDeviceError::LimitExceeded(err.msg))
4365                }
4366                "NotFoundException" => {
4367                    return RusotoError::Service(GetDeviceError::NotFound(err.msg))
4368                }
4369                "ServiceAccountException" => {
4370                    return RusotoError::Service(GetDeviceError::ServiceAccount(err.msg))
4371                }
4372                "ValidationException" => return RusotoError::Validation(err.msg),
4373                _ => {}
4374            }
4375        }
4376        RusotoError::Unknown(res)
4377    }
4378}
4379impl fmt::Display for GetDeviceError {
4380    #[allow(unused_variables)]
4381    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4382        match *self {
4383            GetDeviceError::Argument(ref cause) => write!(f, "{}", cause),
4384            GetDeviceError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4385            GetDeviceError::NotFound(ref cause) => write!(f, "{}", cause),
4386            GetDeviceError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4387        }
4388    }
4389}
4390impl Error for GetDeviceError {}
4391/// Errors returned by GetDeviceInstance
4392#[derive(Debug, PartialEq)]
4393pub enum GetDeviceInstanceError {
4394    /// <p>An invalid argument was specified.</p>
4395    Argument(String),
4396    /// <p>A limit was exceeded.</p>
4397    LimitExceeded(String),
4398    /// <p>The specified entity was not found.</p>
4399    NotFound(String),
4400    /// <p>There was a problem with the service account.</p>
4401    ServiceAccount(String),
4402}
4403
4404impl GetDeviceInstanceError {
4405    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetDeviceInstanceError> {
4406        if let Some(err) = proto::json::Error::parse(&res) {
4407            match err.typ.as_str() {
4408                "ArgumentException" => {
4409                    return RusotoError::Service(GetDeviceInstanceError::Argument(err.msg))
4410                }
4411                "LimitExceededException" => {
4412                    return RusotoError::Service(GetDeviceInstanceError::LimitExceeded(err.msg))
4413                }
4414                "NotFoundException" => {
4415                    return RusotoError::Service(GetDeviceInstanceError::NotFound(err.msg))
4416                }
4417                "ServiceAccountException" => {
4418                    return RusotoError::Service(GetDeviceInstanceError::ServiceAccount(err.msg))
4419                }
4420                "ValidationException" => return RusotoError::Validation(err.msg),
4421                _ => {}
4422            }
4423        }
4424        RusotoError::Unknown(res)
4425    }
4426}
4427impl fmt::Display for GetDeviceInstanceError {
4428    #[allow(unused_variables)]
4429    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4430        match *self {
4431            GetDeviceInstanceError::Argument(ref cause) => write!(f, "{}", cause),
4432            GetDeviceInstanceError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4433            GetDeviceInstanceError::NotFound(ref cause) => write!(f, "{}", cause),
4434            GetDeviceInstanceError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4435        }
4436    }
4437}
4438impl Error for GetDeviceInstanceError {}
4439/// Errors returned by GetDevicePool
4440#[derive(Debug, PartialEq)]
4441pub enum GetDevicePoolError {
4442    /// <p>An invalid argument was specified.</p>
4443    Argument(String),
4444    /// <p>A limit was exceeded.</p>
4445    LimitExceeded(String),
4446    /// <p>The specified entity was not found.</p>
4447    NotFound(String),
4448    /// <p>There was a problem with the service account.</p>
4449    ServiceAccount(String),
4450}
4451
4452impl GetDevicePoolError {
4453    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetDevicePoolError> {
4454        if let Some(err) = proto::json::Error::parse(&res) {
4455            match err.typ.as_str() {
4456                "ArgumentException" => {
4457                    return RusotoError::Service(GetDevicePoolError::Argument(err.msg))
4458                }
4459                "LimitExceededException" => {
4460                    return RusotoError::Service(GetDevicePoolError::LimitExceeded(err.msg))
4461                }
4462                "NotFoundException" => {
4463                    return RusotoError::Service(GetDevicePoolError::NotFound(err.msg))
4464                }
4465                "ServiceAccountException" => {
4466                    return RusotoError::Service(GetDevicePoolError::ServiceAccount(err.msg))
4467                }
4468                "ValidationException" => return RusotoError::Validation(err.msg),
4469                _ => {}
4470            }
4471        }
4472        RusotoError::Unknown(res)
4473    }
4474}
4475impl fmt::Display for GetDevicePoolError {
4476    #[allow(unused_variables)]
4477    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4478        match *self {
4479            GetDevicePoolError::Argument(ref cause) => write!(f, "{}", cause),
4480            GetDevicePoolError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4481            GetDevicePoolError::NotFound(ref cause) => write!(f, "{}", cause),
4482            GetDevicePoolError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4483        }
4484    }
4485}
4486impl Error for GetDevicePoolError {}
4487/// Errors returned by GetDevicePoolCompatibility
4488#[derive(Debug, PartialEq)]
4489pub enum GetDevicePoolCompatibilityError {
4490    /// <p>An invalid argument was specified.</p>
4491    Argument(String),
4492    /// <p>A limit was exceeded.</p>
4493    LimitExceeded(String),
4494    /// <p>The specified entity was not found.</p>
4495    NotFound(String),
4496    /// <p>There was a problem with the service account.</p>
4497    ServiceAccount(String),
4498}
4499
4500impl GetDevicePoolCompatibilityError {
4501    pub fn from_response(
4502        res: BufferedHttpResponse,
4503    ) -> RusotoError<GetDevicePoolCompatibilityError> {
4504        if let Some(err) = proto::json::Error::parse(&res) {
4505            match err.typ.as_str() {
4506                "ArgumentException" => {
4507                    return RusotoError::Service(GetDevicePoolCompatibilityError::Argument(err.msg))
4508                }
4509                "LimitExceededException" => {
4510                    return RusotoError::Service(GetDevicePoolCompatibilityError::LimitExceeded(
4511                        err.msg,
4512                    ))
4513                }
4514                "NotFoundException" => {
4515                    return RusotoError::Service(GetDevicePoolCompatibilityError::NotFound(err.msg))
4516                }
4517                "ServiceAccountException" => {
4518                    return RusotoError::Service(GetDevicePoolCompatibilityError::ServiceAccount(
4519                        err.msg,
4520                    ))
4521                }
4522                "ValidationException" => return RusotoError::Validation(err.msg),
4523                _ => {}
4524            }
4525        }
4526        RusotoError::Unknown(res)
4527    }
4528}
4529impl fmt::Display for GetDevicePoolCompatibilityError {
4530    #[allow(unused_variables)]
4531    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4532        match *self {
4533            GetDevicePoolCompatibilityError::Argument(ref cause) => write!(f, "{}", cause),
4534            GetDevicePoolCompatibilityError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4535            GetDevicePoolCompatibilityError::NotFound(ref cause) => write!(f, "{}", cause),
4536            GetDevicePoolCompatibilityError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4537        }
4538    }
4539}
4540impl Error for GetDevicePoolCompatibilityError {}
4541/// Errors returned by GetInstanceProfile
4542#[derive(Debug, PartialEq)]
4543pub enum GetInstanceProfileError {
4544    /// <p>An invalid argument was specified.</p>
4545    Argument(String),
4546    /// <p>A limit was exceeded.</p>
4547    LimitExceeded(String),
4548    /// <p>The specified entity was not found.</p>
4549    NotFound(String),
4550    /// <p>There was a problem with the service account.</p>
4551    ServiceAccount(String),
4552}
4553
4554impl GetInstanceProfileError {
4555    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetInstanceProfileError> {
4556        if let Some(err) = proto::json::Error::parse(&res) {
4557            match err.typ.as_str() {
4558                "ArgumentException" => {
4559                    return RusotoError::Service(GetInstanceProfileError::Argument(err.msg))
4560                }
4561                "LimitExceededException" => {
4562                    return RusotoError::Service(GetInstanceProfileError::LimitExceeded(err.msg))
4563                }
4564                "NotFoundException" => {
4565                    return RusotoError::Service(GetInstanceProfileError::NotFound(err.msg))
4566                }
4567                "ServiceAccountException" => {
4568                    return RusotoError::Service(GetInstanceProfileError::ServiceAccount(err.msg))
4569                }
4570                "ValidationException" => return RusotoError::Validation(err.msg),
4571                _ => {}
4572            }
4573        }
4574        RusotoError::Unknown(res)
4575    }
4576}
4577impl fmt::Display for GetInstanceProfileError {
4578    #[allow(unused_variables)]
4579    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4580        match *self {
4581            GetInstanceProfileError::Argument(ref cause) => write!(f, "{}", cause),
4582            GetInstanceProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4583            GetInstanceProfileError::NotFound(ref cause) => write!(f, "{}", cause),
4584            GetInstanceProfileError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4585        }
4586    }
4587}
4588impl Error for GetInstanceProfileError {}
4589/// Errors returned by GetJob
4590#[derive(Debug, PartialEq)]
4591pub enum GetJobError {
4592    /// <p>An invalid argument was specified.</p>
4593    Argument(String),
4594    /// <p>A limit was exceeded.</p>
4595    LimitExceeded(String),
4596    /// <p>The specified entity was not found.</p>
4597    NotFound(String),
4598    /// <p>There was a problem with the service account.</p>
4599    ServiceAccount(String),
4600}
4601
4602impl GetJobError {
4603    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetJobError> {
4604        if let Some(err) = proto::json::Error::parse(&res) {
4605            match err.typ.as_str() {
4606                "ArgumentException" => return RusotoError::Service(GetJobError::Argument(err.msg)),
4607                "LimitExceededException" => {
4608                    return RusotoError::Service(GetJobError::LimitExceeded(err.msg))
4609                }
4610                "NotFoundException" => return RusotoError::Service(GetJobError::NotFound(err.msg)),
4611                "ServiceAccountException" => {
4612                    return RusotoError::Service(GetJobError::ServiceAccount(err.msg))
4613                }
4614                "ValidationException" => return RusotoError::Validation(err.msg),
4615                _ => {}
4616            }
4617        }
4618        RusotoError::Unknown(res)
4619    }
4620}
4621impl fmt::Display for GetJobError {
4622    #[allow(unused_variables)]
4623    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4624        match *self {
4625            GetJobError::Argument(ref cause) => write!(f, "{}", cause),
4626            GetJobError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4627            GetJobError::NotFound(ref cause) => write!(f, "{}", cause),
4628            GetJobError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4629        }
4630    }
4631}
4632impl Error for GetJobError {}
4633/// Errors returned by GetNetworkProfile
4634#[derive(Debug, PartialEq)]
4635pub enum GetNetworkProfileError {
4636    /// <p>An invalid argument was specified.</p>
4637    Argument(String),
4638    /// <p>A limit was exceeded.</p>
4639    LimitExceeded(String),
4640    /// <p>The specified entity was not found.</p>
4641    NotFound(String),
4642    /// <p>There was a problem with the service account.</p>
4643    ServiceAccount(String),
4644}
4645
4646impl GetNetworkProfileError {
4647    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetNetworkProfileError> {
4648        if let Some(err) = proto::json::Error::parse(&res) {
4649            match err.typ.as_str() {
4650                "ArgumentException" => {
4651                    return RusotoError::Service(GetNetworkProfileError::Argument(err.msg))
4652                }
4653                "LimitExceededException" => {
4654                    return RusotoError::Service(GetNetworkProfileError::LimitExceeded(err.msg))
4655                }
4656                "NotFoundException" => {
4657                    return RusotoError::Service(GetNetworkProfileError::NotFound(err.msg))
4658                }
4659                "ServiceAccountException" => {
4660                    return RusotoError::Service(GetNetworkProfileError::ServiceAccount(err.msg))
4661                }
4662                "ValidationException" => return RusotoError::Validation(err.msg),
4663                _ => {}
4664            }
4665        }
4666        RusotoError::Unknown(res)
4667    }
4668}
4669impl fmt::Display for GetNetworkProfileError {
4670    #[allow(unused_variables)]
4671    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4672        match *self {
4673            GetNetworkProfileError::Argument(ref cause) => write!(f, "{}", cause),
4674            GetNetworkProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4675            GetNetworkProfileError::NotFound(ref cause) => write!(f, "{}", cause),
4676            GetNetworkProfileError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4677        }
4678    }
4679}
4680impl Error for GetNetworkProfileError {}
4681/// Errors returned by GetOfferingStatus
4682#[derive(Debug, PartialEq)]
4683pub enum GetOfferingStatusError {
4684    /// <p>An invalid argument was specified.</p>
4685    Argument(String),
4686    /// <p>A limit was exceeded.</p>
4687    LimitExceeded(String),
4688    /// <p>Exception gets thrown when a user is not eligible to perform the specified transaction.</p>
4689    NotEligible(String),
4690    /// <p>The specified entity was not found.</p>
4691    NotFound(String),
4692    /// <p>There was a problem with the service account.</p>
4693    ServiceAccount(String),
4694}
4695
4696impl GetOfferingStatusError {
4697    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetOfferingStatusError> {
4698        if let Some(err) = proto::json::Error::parse(&res) {
4699            match err.typ.as_str() {
4700                "ArgumentException" => {
4701                    return RusotoError::Service(GetOfferingStatusError::Argument(err.msg))
4702                }
4703                "LimitExceededException" => {
4704                    return RusotoError::Service(GetOfferingStatusError::LimitExceeded(err.msg))
4705                }
4706                "NotEligibleException" => {
4707                    return RusotoError::Service(GetOfferingStatusError::NotEligible(err.msg))
4708                }
4709                "NotFoundException" => {
4710                    return RusotoError::Service(GetOfferingStatusError::NotFound(err.msg))
4711                }
4712                "ServiceAccountException" => {
4713                    return RusotoError::Service(GetOfferingStatusError::ServiceAccount(err.msg))
4714                }
4715                "ValidationException" => return RusotoError::Validation(err.msg),
4716                _ => {}
4717            }
4718        }
4719        RusotoError::Unknown(res)
4720    }
4721}
4722impl fmt::Display for GetOfferingStatusError {
4723    #[allow(unused_variables)]
4724    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4725        match *self {
4726            GetOfferingStatusError::Argument(ref cause) => write!(f, "{}", cause),
4727            GetOfferingStatusError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4728            GetOfferingStatusError::NotEligible(ref cause) => write!(f, "{}", cause),
4729            GetOfferingStatusError::NotFound(ref cause) => write!(f, "{}", cause),
4730            GetOfferingStatusError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4731        }
4732    }
4733}
4734impl Error for GetOfferingStatusError {}
4735/// Errors returned by GetProject
4736#[derive(Debug, PartialEq)]
4737pub enum GetProjectError {
4738    /// <p>An invalid argument was specified.</p>
4739    Argument(String),
4740    /// <p>A limit was exceeded.</p>
4741    LimitExceeded(String),
4742    /// <p>The specified entity was not found.</p>
4743    NotFound(String),
4744    /// <p>There was a problem with the service account.</p>
4745    ServiceAccount(String),
4746}
4747
4748impl GetProjectError {
4749    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetProjectError> {
4750        if let Some(err) = proto::json::Error::parse(&res) {
4751            match err.typ.as_str() {
4752                "ArgumentException" => {
4753                    return RusotoError::Service(GetProjectError::Argument(err.msg))
4754                }
4755                "LimitExceededException" => {
4756                    return RusotoError::Service(GetProjectError::LimitExceeded(err.msg))
4757                }
4758                "NotFoundException" => {
4759                    return RusotoError::Service(GetProjectError::NotFound(err.msg))
4760                }
4761                "ServiceAccountException" => {
4762                    return RusotoError::Service(GetProjectError::ServiceAccount(err.msg))
4763                }
4764                "ValidationException" => return RusotoError::Validation(err.msg),
4765                _ => {}
4766            }
4767        }
4768        RusotoError::Unknown(res)
4769    }
4770}
4771impl fmt::Display for GetProjectError {
4772    #[allow(unused_variables)]
4773    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4774        match *self {
4775            GetProjectError::Argument(ref cause) => write!(f, "{}", cause),
4776            GetProjectError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4777            GetProjectError::NotFound(ref cause) => write!(f, "{}", cause),
4778            GetProjectError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4779        }
4780    }
4781}
4782impl Error for GetProjectError {}
4783/// Errors returned by GetRemoteAccessSession
4784#[derive(Debug, PartialEq)]
4785pub enum GetRemoteAccessSessionError {
4786    /// <p>An invalid argument was specified.</p>
4787    Argument(String),
4788    /// <p>A limit was exceeded.</p>
4789    LimitExceeded(String),
4790    /// <p>The specified entity was not found.</p>
4791    NotFound(String),
4792    /// <p>There was a problem with the service account.</p>
4793    ServiceAccount(String),
4794}
4795
4796impl GetRemoteAccessSessionError {
4797    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetRemoteAccessSessionError> {
4798        if let Some(err) = proto::json::Error::parse(&res) {
4799            match err.typ.as_str() {
4800                "ArgumentException" => {
4801                    return RusotoError::Service(GetRemoteAccessSessionError::Argument(err.msg))
4802                }
4803                "LimitExceededException" => {
4804                    return RusotoError::Service(GetRemoteAccessSessionError::LimitExceeded(
4805                        err.msg,
4806                    ))
4807                }
4808                "NotFoundException" => {
4809                    return RusotoError::Service(GetRemoteAccessSessionError::NotFound(err.msg))
4810                }
4811                "ServiceAccountException" => {
4812                    return RusotoError::Service(GetRemoteAccessSessionError::ServiceAccount(
4813                        err.msg,
4814                    ))
4815                }
4816                "ValidationException" => return RusotoError::Validation(err.msg),
4817                _ => {}
4818            }
4819        }
4820        RusotoError::Unknown(res)
4821    }
4822}
4823impl fmt::Display for GetRemoteAccessSessionError {
4824    #[allow(unused_variables)]
4825    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4826        match *self {
4827            GetRemoteAccessSessionError::Argument(ref cause) => write!(f, "{}", cause),
4828            GetRemoteAccessSessionError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4829            GetRemoteAccessSessionError::NotFound(ref cause) => write!(f, "{}", cause),
4830            GetRemoteAccessSessionError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4831        }
4832    }
4833}
4834impl Error for GetRemoteAccessSessionError {}
4835/// Errors returned by GetRun
4836#[derive(Debug, PartialEq)]
4837pub enum GetRunError {
4838    /// <p>An invalid argument was specified.</p>
4839    Argument(String),
4840    /// <p>A limit was exceeded.</p>
4841    LimitExceeded(String),
4842    /// <p>The specified entity was not found.</p>
4843    NotFound(String),
4844    /// <p>There was a problem with the service account.</p>
4845    ServiceAccount(String),
4846}
4847
4848impl GetRunError {
4849    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetRunError> {
4850        if let Some(err) = proto::json::Error::parse(&res) {
4851            match err.typ.as_str() {
4852                "ArgumentException" => return RusotoError::Service(GetRunError::Argument(err.msg)),
4853                "LimitExceededException" => {
4854                    return RusotoError::Service(GetRunError::LimitExceeded(err.msg))
4855                }
4856                "NotFoundException" => return RusotoError::Service(GetRunError::NotFound(err.msg)),
4857                "ServiceAccountException" => {
4858                    return RusotoError::Service(GetRunError::ServiceAccount(err.msg))
4859                }
4860                "ValidationException" => return RusotoError::Validation(err.msg),
4861                _ => {}
4862            }
4863        }
4864        RusotoError::Unknown(res)
4865    }
4866}
4867impl fmt::Display for GetRunError {
4868    #[allow(unused_variables)]
4869    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4870        match *self {
4871            GetRunError::Argument(ref cause) => write!(f, "{}", cause),
4872            GetRunError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4873            GetRunError::NotFound(ref cause) => write!(f, "{}", cause),
4874            GetRunError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4875        }
4876    }
4877}
4878impl Error for GetRunError {}
4879/// Errors returned by GetSuite
4880#[derive(Debug, PartialEq)]
4881pub enum GetSuiteError {
4882    /// <p>An invalid argument was specified.</p>
4883    Argument(String),
4884    /// <p>A limit was exceeded.</p>
4885    LimitExceeded(String),
4886    /// <p>The specified entity was not found.</p>
4887    NotFound(String),
4888    /// <p>There was a problem with the service account.</p>
4889    ServiceAccount(String),
4890}
4891
4892impl GetSuiteError {
4893    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetSuiteError> {
4894        if let Some(err) = proto::json::Error::parse(&res) {
4895            match err.typ.as_str() {
4896                "ArgumentException" => {
4897                    return RusotoError::Service(GetSuiteError::Argument(err.msg))
4898                }
4899                "LimitExceededException" => {
4900                    return RusotoError::Service(GetSuiteError::LimitExceeded(err.msg))
4901                }
4902                "NotFoundException" => {
4903                    return RusotoError::Service(GetSuiteError::NotFound(err.msg))
4904                }
4905                "ServiceAccountException" => {
4906                    return RusotoError::Service(GetSuiteError::ServiceAccount(err.msg))
4907                }
4908                "ValidationException" => return RusotoError::Validation(err.msg),
4909                _ => {}
4910            }
4911        }
4912        RusotoError::Unknown(res)
4913    }
4914}
4915impl fmt::Display for GetSuiteError {
4916    #[allow(unused_variables)]
4917    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4918        match *self {
4919            GetSuiteError::Argument(ref cause) => write!(f, "{}", cause),
4920            GetSuiteError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4921            GetSuiteError::NotFound(ref cause) => write!(f, "{}", cause),
4922            GetSuiteError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4923        }
4924    }
4925}
4926impl Error for GetSuiteError {}
4927/// Errors returned by GetTest
4928#[derive(Debug, PartialEq)]
4929pub enum GetTestError {
4930    /// <p>An invalid argument was specified.</p>
4931    Argument(String),
4932    /// <p>A limit was exceeded.</p>
4933    LimitExceeded(String),
4934    /// <p>The specified entity was not found.</p>
4935    NotFound(String),
4936    /// <p>There was a problem with the service account.</p>
4937    ServiceAccount(String),
4938}
4939
4940impl GetTestError {
4941    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetTestError> {
4942        if let Some(err) = proto::json::Error::parse(&res) {
4943            match err.typ.as_str() {
4944                "ArgumentException" => {
4945                    return RusotoError::Service(GetTestError::Argument(err.msg))
4946                }
4947                "LimitExceededException" => {
4948                    return RusotoError::Service(GetTestError::LimitExceeded(err.msg))
4949                }
4950                "NotFoundException" => {
4951                    return RusotoError::Service(GetTestError::NotFound(err.msg))
4952                }
4953                "ServiceAccountException" => {
4954                    return RusotoError::Service(GetTestError::ServiceAccount(err.msg))
4955                }
4956                "ValidationException" => return RusotoError::Validation(err.msg),
4957                _ => {}
4958            }
4959        }
4960        RusotoError::Unknown(res)
4961    }
4962}
4963impl fmt::Display for GetTestError {
4964    #[allow(unused_variables)]
4965    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4966        match *self {
4967            GetTestError::Argument(ref cause) => write!(f, "{}", cause),
4968            GetTestError::LimitExceeded(ref cause) => write!(f, "{}", cause),
4969            GetTestError::NotFound(ref cause) => write!(f, "{}", cause),
4970            GetTestError::ServiceAccount(ref cause) => write!(f, "{}", cause),
4971        }
4972    }
4973}
4974impl Error for GetTestError {}
4975/// Errors returned by GetTestGridProject
4976#[derive(Debug, PartialEq)]
4977pub enum GetTestGridProjectError {
4978    /// <p>An invalid argument was specified.</p>
4979    Argument(String),
4980    /// <p>An internal exception was raised in the service. Contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a> if you see this error. </p>
4981    InternalService(String),
4982    /// <p>The specified entity was not found.</p>
4983    NotFound(String),
4984}
4985
4986impl GetTestGridProjectError {
4987    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetTestGridProjectError> {
4988        if let Some(err) = proto::json::Error::parse(&res) {
4989            match err.typ.as_str() {
4990                "ArgumentException" => {
4991                    return RusotoError::Service(GetTestGridProjectError::Argument(err.msg))
4992                }
4993                "InternalServiceException" => {
4994                    return RusotoError::Service(GetTestGridProjectError::InternalService(err.msg))
4995                }
4996                "NotFoundException" => {
4997                    return RusotoError::Service(GetTestGridProjectError::NotFound(err.msg))
4998                }
4999                "ValidationException" => return RusotoError::Validation(err.msg),
5000                _ => {}
5001            }
5002        }
5003        RusotoError::Unknown(res)
5004    }
5005}
5006impl fmt::Display for GetTestGridProjectError {
5007    #[allow(unused_variables)]
5008    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5009        match *self {
5010            GetTestGridProjectError::Argument(ref cause) => write!(f, "{}", cause),
5011            GetTestGridProjectError::InternalService(ref cause) => write!(f, "{}", cause),
5012            GetTestGridProjectError::NotFound(ref cause) => write!(f, "{}", cause),
5013        }
5014    }
5015}
5016impl Error for GetTestGridProjectError {}
5017/// Errors returned by GetTestGridSession
5018#[derive(Debug, PartialEq)]
5019pub enum GetTestGridSessionError {
5020    /// <p>An invalid argument was specified.</p>
5021    Argument(String),
5022    /// <p>An internal exception was raised in the service. Contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a> if you see this error. </p>
5023    InternalService(String),
5024    /// <p>The specified entity was not found.</p>
5025    NotFound(String),
5026}
5027
5028impl GetTestGridSessionError {
5029    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetTestGridSessionError> {
5030        if let Some(err) = proto::json::Error::parse(&res) {
5031            match err.typ.as_str() {
5032                "ArgumentException" => {
5033                    return RusotoError::Service(GetTestGridSessionError::Argument(err.msg))
5034                }
5035                "InternalServiceException" => {
5036                    return RusotoError::Service(GetTestGridSessionError::InternalService(err.msg))
5037                }
5038                "NotFoundException" => {
5039                    return RusotoError::Service(GetTestGridSessionError::NotFound(err.msg))
5040                }
5041                "ValidationException" => return RusotoError::Validation(err.msg),
5042                _ => {}
5043            }
5044        }
5045        RusotoError::Unknown(res)
5046    }
5047}
5048impl fmt::Display for GetTestGridSessionError {
5049    #[allow(unused_variables)]
5050    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5051        match *self {
5052            GetTestGridSessionError::Argument(ref cause) => write!(f, "{}", cause),
5053            GetTestGridSessionError::InternalService(ref cause) => write!(f, "{}", cause),
5054            GetTestGridSessionError::NotFound(ref cause) => write!(f, "{}", cause),
5055        }
5056    }
5057}
5058impl Error for GetTestGridSessionError {}
5059/// Errors returned by GetUpload
5060#[derive(Debug, PartialEq)]
5061pub enum GetUploadError {
5062    /// <p>An invalid argument was specified.</p>
5063    Argument(String),
5064    /// <p>A limit was exceeded.</p>
5065    LimitExceeded(String),
5066    /// <p>The specified entity was not found.</p>
5067    NotFound(String),
5068    /// <p>There was a problem with the service account.</p>
5069    ServiceAccount(String),
5070}
5071
5072impl GetUploadError {
5073    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetUploadError> {
5074        if let Some(err) = proto::json::Error::parse(&res) {
5075            match err.typ.as_str() {
5076                "ArgumentException" => {
5077                    return RusotoError::Service(GetUploadError::Argument(err.msg))
5078                }
5079                "LimitExceededException" => {
5080                    return RusotoError::Service(GetUploadError::LimitExceeded(err.msg))
5081                }
5082                "NotFoundException" => {
5083                    return RusotoError::Service(GetUploadError::NotFound(err.msg))
5084                }
5085                "ServiceAccountException" => {
5086                    return RusotoError::Service(GetUploadError::ServiceAccount(err.msg))
5087                }
5088                "ValidationException" => return RusotoError::Validation(err.msg),
5089                _ => {}
5090            }
5091        }
5092        RusotoError::Unknown(res)
5093    }
5094}
5095impl fmt::Display for GetUploadError {
5096    #[allow(unused_variables)]
5097    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5098        match *self {
5099            GetUploadError::Argument(ref cause) => write!(f, "{}", cause),
5100            GetUploadError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5101            GetUploadError::NotFound(ref cause) => write!(f, "{}", cause),
5102            GetUploadError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5103        }
5104    }
5105}
5106impl Error for GetUploadError {}
5107/// Errors returned by GetVPCEConfiguration
5108#[derive(Debug, PartialEq)]
5109pub enum GetVPCEConfigurationError {
5110    /// <p>An invalid argument was specified.</p>
5111    Argument(String),
5112    /// <p>The specified entity was not found.</p>
5113    NotFound(String),
5114    /// <p>There was a problem with the service account.</p>
5115    ServiceAccount(String),
5116}
5117
5118impl GetVPCEConfigurationError {
5119    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetVPCEConfigurationError> {
5120        if let Some(err) = proto::json::Error::parse(&res) {
5121            match err.typ.as_str() {
5122                "ArgumentException" => {
5123                    return RusotoError::Service(GetVPCEConfigurationError::Argument(err.msg))
5124                }
5125                "NotFoundException" => {
5126                    return RusotoError::Service(GetVPCEConfigurationError::NotFound(err.msg))
5127                }
5128                "ServiceAccountException" => {
5129                    return RusotoError::Service(GetVPCEConfigurationError::ServiceAccount(err.msg))
5130                }
5131                "ValidationException" => return RusotoError::Validation(err.msg),
5132                _ => {}
5133            }
5134        }
5135        RusotoError::Unknown(res)
5136    }
5137}
5138impl fmt::Display for GetVPCEConfigurationError {
5139    #[allow(unused_variables)]
5140    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5141        match *self {
5142            GetVPCEConfigurationError::Argument(ref cause) => write!(f, "{}", cause),
5143            GetVPCEConfigurationError::NotFound(ref cause) => write!(f, "{}", cause),
5144            GetVPCEConfigurationError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5145        }
5146    }
5147}
5148impl Error for GetVPCEConfigurationError {}
5149/// Errors returned by InstallToRemoteAccessSession
5150#[derive(Debug, PartialEq)]
5151pub enum InstallToRemoteAccessSessionError {
5152    /// <p>An invalid argument was specified.</p>
5153    Argument(String),
5154    /// <p>A limit was exceeded.</p>
5155    LimitExceeded(String),
5156    /// <p>The specified entity was not found.</p>
5157    NotFound(String),
5158    /// <p>There was a problem with the service account.</p>
5159    ServiceAccount(String),
5160}
5161
5162impl InstallToRemoteAccessSessionError {
5163    pub fn from_response(
5164        res: BufferedHttpResponse,
5165    ) -> RusotoError<InstallToRemoteAccessSessionError> {
5166        if let Some(err) = proto::json::Error::parse(&res) {
5167            match err.typ.as_str() {
5168                "ArgumentException" => {
5169                    return RusotoError::Service(InstallToRemoteAccessSessionError::Argument(
5170                        err.msg,
5171                    ))
5172                }
5173                "LimitExceededException" => {
5174                    return RusotoError::Service(InstallToRemoteAccessSessionError::LimitExceeded(
5175                        err.msg,
5176                    ))
5177                }
5178                "NotFoundException" => {
5179                    return RusotoError::Service(InstallToRemoteAccessSessionError::NotFound(
5180                        err.msg,
5181                    ))
5182                }
5183                "ServiceAccountException" => {
5184                    return RusotoError::Service(InstallToRemoteAccessSessionError::ServiceAccount(
5185                        err.msg,
5186                    ))
5187                }
5188                "ValidationException" => return RusotoError::Validation(err.msg),
5189                _ => {}
5190            }
5191        }
5192        RusotoError::Unknown(res)
5193    }
5194}
5195impl fmt::Display for InstallToRemoteAccessSessionError {
5196    #[allow(unused_variables)]
5197    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5198        match *self {
5199            InstallToRemoteAccessSessionError::Argument(ref cause) => write!(f, "{}", cause),
5200            InstallToRemoteAccessSessionError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5201            InstallToRemoteAccessSessionError::NotFound(ref cause) => write!(f, "{}", cause),
5202            InstallToRemoteAccessSessionError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5203        }
5204    }
5205}
5206impl Error for InstallToRemoteAccessSessionError {}
5207/// Errors returned by ListArtifacts
5208#[derive(Debug, PartialEq)]
5209pub enum ListArtifactsError {
5210    /// <p>An invalid argument was specified.</p>
5211    Argument(String),
5212    /// <p>A limit was exceeded.</p>
5213    LimitExceeded(String),
5214    /// <p>The specified entity was not found.</p>
5215    NotFound(String),
5216    /// <p>There was a problem with the service account.</p>
5217    ServiceAccount(String),
5218}
5219
5220impl ListArtifactsError {
5221    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListArtifactsError> {
5222        if let Some(err) = proto::json::Error::parse(&res) {
5223            match err.typ.as_str() {
5224                "ArgumentException" => {
5225                    return RusotoError::Service(ListArtifactsError::Argument(err.msg))
5226                }
5227                "LimitExceededException" => {
5228                    return RusotoError::Service(ListArtifactsError::LimitExceeded(err.msg))
5229                }
5230                "NotFoundException" => {
5231                    return RusotoError::Service(ListArtifactsError::NotFound(err.msg))
5232                }
5233                "ServiceAccountException" => {
5234                    return RusotoError::Service(ListArtifactsError::ServiceAccount(err.msg))
5235                }
5236                "ValidationException" => return RusotoError::Validation(err.msg),
5237                _ => {}
5238            }
5239        }
5240        RusotoError::Unknown(res)
5241    }
5242}
5243impl fmt::Display for ListArtifactsError {
5244    #[allow(unused_variables)]
5245    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5246        match *self {
5247            ListArtifactsError::Argument(ref cause) => write!(f, "{}", cause),
5248            ListArtifactsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5249            ListArtifactsError::NotFound(ref cause) => write!(f, "{}", cause),
5250            ListArtifactsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5251        }
5252    }
5253}
5254impl Error for ListArtifactsError {}
5255/// Errors returned by ListDeviceInstances
5256#[derive(Debug, PartialEq)]
5257pub enum ListDeviceInstancesError {
5258    /// <p>An invalid argument was specified.</p>
5259    Argument(String),
5260    /// <p>A limit was exceeded.</p>
5261    LimitExceeded(String),
5262    /// <p>The specified entity was not found.</p>
5263    NotFound(String),
5264    /// <p>There was a problem with the service account.</p>
5265    ServiceAccount(String),
5266}
5267
5268impl ListDeviceInstancesError {
5269    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListDeviceInstancesError> {
5270        if let Some(err) = proto::json::Error::parse(&res) {
5271            match err.typ.as_str() {
5272                "ArgumentException" => {
5273                    return RusotoError::Service(ListDeviceInstancesError::Argument(err.msg))
5274                }
5275                "LimitExceededException" => {
5276                    return RusotoError::Service(ListDeviceInstancesError::LimitExceeded(err.msg))
5277                }
5278                "NotFoundException" => {
5279                    return RusotoError::Service(ListDeviceInstancesError::NotFound(err.msg))
5280                }
5281                "ServiceAccountException" => {
5282                    return RusotoError::Service(ListDeviceInstancesError::ServiceAccount(err.msg))
5283                }
5284                "ValidationException" => return RusotoError::Validation(err.msg),
5285                _ => {}
5286            }
5287        }
5288        RusotoError::Unknown(res)
5289    }
5290}
5291impl fmt::Display for ListDeviceInstancesError {
5292    #[allow(unused_variables)]
5293    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5294        match *self {
5295            ListDeviceInstancesError::Argument(ref cause) => write!(f, "{}", cause),
5296            ListDeviceInstancesError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5297            ListDeviceInstancesError::NotFound(ref cause) => write!(f, "{}", cause),
5298            ListDeviceInstancesError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5299        }
5300    }
5301}
5302impl Error for ListDeviceInstancesError {}
5303/// Errors returned by ListDevicePools
5304#[derive(Debug, PartialEq)]
5305pub enum ListDevicePoolsError {
5306    /// <p>An invalid argument was specified.</p>
5307    Argument(String),
5308    /// <p>A limit was exceeded.</p>
5309    LimitExceeded(String),
5310    /// <p>The specified entity was not found.</p>
5311    NotFound(String),
5312    /// <p>There was a problem with the service account.</p>
5313    ServiceAccount(String),
5314}
5315
5316impl ListDevicePoolsError {
5317    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListDevicePoolsError> {
5318        if let Some(err) = proto::json::Error::parse(&res) {
5319            match err.typ.as_str() {
5320                "ArgumentException" => {
5321                    return RusotoError::Service(ListDevicePoolsError::Argument(err.msg))
5322                }
5323                "LimitExceededException" => {
5324                    return RusotoError::Service(ListDevicePoolsError::LimitExceeded(err.msg))
5325                }
5326                "NotFoundException" => {
5327                    return RusotoError::Service(ListDevicePoolsError::NotFound(err.msg))
5328                }
5329                "ServiceAccountException" => {
5330                    return RusotoError::Service(ListDevicePoolsError::ServiceAccount(err.msg))
5331                }
5332                "ValidationException" => return RusotoError::Validation(err.msg),
5333                _ => {}
5334            }
5335        }
5336        RusotoError::Unknown(res)
5337    }
5338}
5339impl fmt::Display for ListDevicePoolsError {
5340    #[allow(unused_variables)]
5341    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5342        match *self {
5343            ListDevicePoolsError::Argument(ref cause) => write!(f, "{}", cause),
5344            ListDevicePoolsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5345            ListDevicePoolsError::NotFound(ref cause) => write!(f, "{}", cause),
5346            ListDevicePoolsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5347        }
5348    }
5349}
5350impl Error for ListDevicePoolsError {}
5351/// Errors returned by ListDevices
5352#[derive(Debug, PartialEq)]
5353pub enum ListDevicesError {
5354    /// <p>An invalid argument was specified.</p>
5355    Argument(String),
5356    /// <p>A limit was exceeded.</p>
5357    LimitExceeded(String),
5358    /// <p>The specified entity was not found.</p>
5359    NotFound(String),
5360    /// <p>There was a problem with the service account.</p>
5361    ServiceAccount(String),
5362}
5363
5364impl ListDevicesError {
5365    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListDevicesError> {
5366        if let Some(err) = proto::json::Error::parse(&res) {
5367            match err.typ.as_str() {
5368                "ArgumentException" => {
5369                    return RusotoError::Service(ListDevicesError::Argument(err.msg))
5370                }
5371                "LimitExceededException" => {
5372                    return RusotoError::Service(ListDevicesError::LimitExceeded(err.msg))
5373                }
5374                "NotFoundException" => {
5375                    return RusotoError::Service(ListDevicesError::NotFound(err.msg))
5376                }
5377                "ServiceAccountException" => {
5378                    return RusotoError::Service(ListDevicesError::ServiceAccount(err.msg))
5379                }
5380                "ValidationException" => return RusotoError::Validation(err.msg),
5381                _ => {}
5382            }
5383        }
5384        RusotoError::Unknown(res)
5385    }
5386}
5387impl fmt::Display for ListDevicesError {
5388    #[allow(unused_variables)]
5389    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5390        match *self {
5391            ListDevicesError::Argument(ref cause) => write!(f, "{}", cause),
5392            ListDevicesError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5393            ListDevicesError::NotFound(ref cause) => write!(f, "{}", cause),
5394            ListDevicesError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5395        }
5396    }
5397}
5398impl Error for ListDevicesError {}
5399/// Errors returned by ListInstanceProfiles
5400#[derive(Debug, PartialEq)]
5401pub enum ListInstanceProfilesError {
5402    /// <p>An invalid argument was specified.</p>
5403    Argument(String),
5404    /// <p>A limit was exceeded.</p>
5405    LimitExceeded(String),
5406    /// <p>The specified entity was not found.</p>
5407    NotFound(String),
5408    /// <p>There was a problem with the service account.</p>
5409    ServiceAccount(String),
5410}
5411
5412impl ListInstanceProfilesError {
5413    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListInstanceProfilesError> {
5414        if let Some(err) = proto::json::Error::parse(&res) {
5415            match err.typ.as_str() {
5416                "ArgumentException" => {
5417                    return RusotoError::Service(ListInstanceProfilesError::Argument(err.msg))
5418                }
5419                "LimitExceededException" => {
5420                    return RusotoError::Service(ListInstanceProfilesError::LimitExceeded(err.msg))
5421                }
5422                "NotFoundException" => {
5423                    return RusotoError::Service(ListInstanceProfilesError::NotFound(err.msg))
5424                }
5425                "ServiceAccountException" => {
5426                    return RusotoError::Service(ListInstanceProfilesError::ServiceAccount(err.msg))
5427                }
5428                "ValidationException" => return RusotoError::Validation(err.msg),
5429                _ => {}
5430            }
5431        }
5432        RusotoError::Unknown(res)
5433    }
5434}
5435impl fmt::Display for ListInstanceProfilesError {
5436    #[allow(unused_variables)]
5437    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5438        match *self {
5439            ListInstanceProfilesError::Argument(ref cause) => write!(f, "{}", cause),
5440            ListInstanceProfilesError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5441            ListInstanceProfilesError::NotFound(ref cause) => write!(f, "{}", cause),
5442            ListInstanceProfilesError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5443        }
5444    }
5445}
5446impl Error for ListInstanceProfilesError {}
5447/// Errors returned by ListJobs
5448#[derive(Debug, PartialEq)]
5449pub enum ListJobsError {
5450    /// <p>An invalid argument was specified.</p>
5451    Argument(String),
5452    /// <p>A limit was exceeded.</p>
5453    LimitExceeded(String),
5454    /// <p>The specified entity was not found.</p>
5455    NotFound(String),
5456    /// <p>There was a problem with the service account.</p>
5457    ServiceAccount(String),
5458}
5459
5460impl ListJobsError {
5461    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListJobsError> {
5462        if let Some(err) = proto::json::Error::parse(&res) {
5463            match err.typ.as_str() {
5464                "ArgumentException" => {
5465                    return RusotoError::Service(ListJobsError::Argument(err.msg))
5466                }
5467                "LimitExceededException" => {
5468                    return RusotoError::Service(ListJobsError::LimitExceeded(err.msg))
5469                }
5470                "NotFoundException" => {
5471                    return RusotoError::Service(ListJobsError::NotFound(err.msg))
5472                }
5473                "ServiceAccountException" => {
5474                    return RusotoError::Service(ListJobsError::ServiceAccount(err.msg))
5475                }
5476                "ValidationException" => return RusotoError::Validation(err.msg),
5477                _ => {}
5478            }
5479        }
5480        RusotoError::Unknown(res)
5481    }
5482}
5483impl fmt::Display for ListJobsError {
5484    #[allow(unused_variables)]
5485    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5486        match *self {
5487            ListJobsError::Argument(ref cause) => write!(f, "{}", cause),
5488            ListJobsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5489            ListJobsError::NotFound(ref cause) => write!(f, "{}", cause),
5490            ListJobsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5491        }
5492    }
5493}
5494impl Error for ListJobsError {}
5495/// Errors returned by ListNetworkProfiles
5496#[derive(Debug, PartialEq)]
5497pub enum ListNetworkProfilesError {
5498    /// <p>An invalid argument was specified.</p>
5499    Argument(String),
5500    /// <p>A limit was exceeded.</p>
5501    LimitExceeded(String),
5502    /// <p>The specified entity was not found.</p>
5503    NotFound(String),
5504    /// <p>There was a problem with the service account.</p>
5505    ServiceAccount(String),
5506}
5507
5508impl ListNetworkProfilesError {
5509    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListNetworkProfilesError> {
5510        if let Some(err) = proto::json::Error::parse(&res) {
5511            match err.typ.as_str() {
5512                "ArgumentException" => {
5513                    return RusotoError::Service(ListNetworkProfilesError::Argument(err.msg))
5514                }
5515                "LimitExceededException" => {
5516                    return RusotoError::Service(ListNetworkProfilesError::LimitExceeded(err.msg))
5517                }
5518                "NotFoundException" => {
5519                    return RusotoError::Service(ListNetworkProfilesError::NotFound(err.msg))
5520                }
5521                "ServiceAccountException" => {
5522                    return RusotoError::Service(ListNetworkProfilesError::ServiceAccount(err.msg))
5523                }
5524                "ValidationException" => return RusotoError::Validation(err.msg),
5525                _ => {}
5526            }
5527        }
5528        RusotoError::Unknown(res)
5529    }
5530}
5531impl fmt::Display for ListNetworkProfilesError {
5532    #[allow(unused_variables)]
5533    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5534        match *self {
5535            ListNetworkProfilesError::Argument(ref cause) => write!(f, "{}", cause),
5536            ListNetworkProfilesError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5537            ListNetworkProfilesError::NotFound(ref cause) => write!(f, "{}", cause),
5538            ListNetworkProfilesError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5539        }
5540    }
5541}
5542impl Error for ListNetworkProfilesError {}
5543/// Errors returned by ListOfferingPromotions
5544#[derive(Debug, PartialEq)]
5545pub enum ListOfferingPromotionsError {
5546    /// <p>An invalid argument was specified.</p>
5547    Argument(String),
5548    /// <p>A limit was exceeded.</p>
5549    LimitExceeded(String),
5550    /// <p>Exception gets thrown when a user is not eligible to perform the specified transaction.</p>
5551    NotEligible(String),
5552    /// <p>The specified entity was not found.</p>
5553    NotFound(String),
5554    /// <p>There was a problem with the service account.</p>
5555    ServiceAccount(String),
5556}
5557
5558impl ListOfferingPromotionsError {
5559    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListOfferingPromotionsError> {
5560        if let Some(err) = proto::json::Error::parse(&res) {
5561            match err.typ.as_str() {
5562                "ArgumentException" => {
5563                    return RusotoError::Service(ListOfferingPromotionsError::Argument(err.msg))
5564                }
5565                "LimitExceededException" => {
5566                    return RusotoError::Service(ListOfferingPromotionsError::LimitExceeded(
5567                        err.msg,
5568                    ))
5569                }
5570                "NotEligibleException" => {
5571                    return RusotoError::Service(ListOfferingPromotionsError::NotEligible(err.msg))
5572                }
5573                "NotFoundException" => {
5574                    return RusotoError::Service(ListOfferingPromotionsError::NotFound(err.msg))
5575                }
5576                "ServiceAccountException" => {
5577                    return RusotoError::Service(ListOfferingPromotionsError::ServiceAccount(
5578                        err.msg,
5579                    ))
5580                }
5581                "ValidationException" => return RusotoError::Validation(err.msg),
5582                _ => {}
5583            }
5584        }
5585        RusotoError::Unknown(res)
5586    }
5587}
5588impl fmt::Display for ListOfferingPromotionsError {
5589    #[allow(unused_variables)]
5590    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5591        match *self {
5592            ListOfferingPromotionsError::Argument(ref cause) => write!(f, "{}", cause),
5593            ListOfferingPromotionsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5594            ListOfferingPromotionsError::NotEligible(ref cause) => write!(f, "{}", cause),
5595            ListOfferingPromotionsError::NotFound(ref cause) => write!(f, "{}", cause),
5596            ListOfferingPromotionsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5597        }
5598    }
5599}
5600impl Error for ListOfferingPromotionsError {}
5601/// Errors returned by ListOfferingTransactions
5602#[derive(Debug, PartialEq)]
5603pub enum ListOfferingTransactionsError {
5604    /// <p>An invalid argument was specified.</p>
5605    Argument(String),
5606    /// <p>A limit was exceeded.</p>
5607    LimitExceeded(String),
5608    /// <p>Exception gets thrown when a user is not eligible to perform the specified transaction.</p>
5609    NotEligible(String),
5610    /// <p>The specified entity was not found.</p>
5611    NotFound(String),
5612    /// <p>There was a problem with the service account.</p>
5613    ServiceAccount(String),
5614}
5615
5616impl ListOfferingTransactionsError {
5617    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListOfferingTransactionsError> {
5618        if let Some(err) = proto::json::Error::parse(&res) {
5619            match err.typ.as_str() {
5620                "ArgumentException" => {
5621                    return RusotoError::Service(ListOfferingTransactionsError::Argument(err.msg))
5622                }
5623                "LimitExceededException" => {
5624                    return RusotoError::Service(ListOfferingTransactionsError::LimitExceeded(
5625                        err.msg,
5626                    ))
5627                }
5628                "NotEligibleException" => {
5629                    return RusotoError::Service(ListOfferingTransactionsError::NotEligible(
5630                        err.msg,
5631                    ))
5632                }
5633                "NotFoundException" => {
5634                    return RusotoError::Service(ListOfferingTransactionsError::NotFound(err.msg))
5635                }
5636                "ServiceAccountException" => {
5637                    return RusotoError::Service(ListOfferingTransactionsError::ServiceAccount(
5638                        err.msg,
5639                    ))
5640                }
5641                "ValidationException" => return RusotoError::Validation(err.msg),
5642                _ => {}
5643            }
5644        }
5645        RusotoError::Unknown(res)
5646    }
5647}
5648impl fmt::Display for ListOfferingTransactionsError {
5649    #[allow(unused_variables)]
5650    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5651        match *self {
5652            ListOfferingTransactionsError::Argument(ref cause) => write!(f, "{}", cause),
5653            ListOfferingTransactionsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5654            ListOfferingTransactionsError::NotEligible(ref cause) => write!(f, "{}", cause),
5655            ListOfferingTransactionsError::NotFound(ref cause) => write!(f, "{}", cause),
5656            ListOfferingTransactionsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5657        }
5658    }
5659}
5660impl Error for ListOfferingTransactionsError {}
5661/// Errors returned by ListOfferings
5662#[derive(Debug, PartialEq)]
5663pub enum ListOfferingsError {
5664    /// <p>An invalid argument was specified.</p>
5665    Argument(String),
5666    /// <p>A limit was exceeded.</p>
5667    LimitExceeded(String),
5668    /// <p>Exception gets thrown when a user is not eligible to perform the specified transaction.</p>
5669    NotEligible(String),
5670    /// <p>The specified entity was not found.</p>
5671    NotFound(String),
5672    /// <p>There was a problem with the service account.</p>
5673    ServiceAccount(String),
5674}
5675
5676impl ListOfferingsError {
5677    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListOfferingsError> {
5678        if let Some(err) = proto::json::Error::parse(&res) {
5679            match err.typ.as_str() {
5680                "ArgumentException" => {
5681                    return RusotoError::Service(ListOfferingsError::Argument(err.msg))
5682                }
5683                "LimitExceededException" => {
5684                    return RusotoError::Service(ListOfferingsError::LimitExceeded(err.msg))
5685                }
5686                "NotEligibleException" => {
5687                    return RusotoError::Service(ListOfferingsError::NotEligible(err.msg))
5688                }
5689                "NotFoundException" => {
5690                    return RusotoError::Service(ListOfferingsError::NotFound(err.msg))
5691                }
5692                "ServiceAccountException" => {
5693                    return RusotoError::Service(ListOfferingsError::ServiceAccount(err.msg))
5694                }
5695                "ValidationException" => return RusotoError::Validation(err.msg),
5696                _ => {}
5697            }
5698        }
5699        RusotoError::Unknown(res)
5700    }
5701}
5702impl fmt::Display for ListOfferingsError {
5703    #[allow(unused_variables)]
5704    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5705        match *self {
5706            ListOfferingsError::Argument(ref cause) => write!(f, "{}", cause),
5707            ListOfferingsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5708            ListOfferingsError::NotEligible(ref cause) => write!(f, "{}", cause),
5709            ListOfferingsError::NotFound(ref cause) => write!(f, "{}", cause),
5710            ListOfferingsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5711        }
5712    }
5713}
5714impl Error for ListOfferingsError {}
5715/// Errors returned by ListProjects
5716#[derive(Debug, PartialEq)]
5717pub enum ListProjectsError {
5718    /// <p>An invalid argument was specified.</p>
5719    Argument(String),
5720    /// <p>A limit was exceeded.</p>
5721    LimitExceeded(String),
5722    /// <p>The specified entity was not found.</p>
5723    NotFound(String),
5724    /// <p>There was a problem with the service account.</p>
5725    ServiceAccount(String),
5726}
5727
5728impl ListProjectsError {
5729    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListProjectsError> {
5730        if let Some(err) = proto::json::Error::parse(&res) {
5731            match err.typ.as_str() {
5732                "ArgumentException" => {
5733                    return RusotoError::Service(ListProjectsError::Argument(err.msg))
5734                }
5735                "LimitExceededException" => {
5736                    return RusotoError::Service(ListProjectsError::LimitExceeded(err.msg))
5737                }
5738                "NotFoundException" => {
5739                    return RusotoError::Service(ListProjectsError::NotFound(err.msg))
5740                }
5741                "ServiceAccountException" => {
5742                    return RusotoError::Service(ListProjectsError::ServiceAccount(err.msg))
5743                }
5744                "ValidationException" => return RusotoError::Validation(err.msg),
5745                _ => {}
5746            }
5747        }
5748        RusotoError::Unknown(res)
5749    }
5750}
5751impl fmt::Display for ListProjectsError {
5752    #[allow(unused_variables)]
5753    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5754        match *self {
5755            ListProjectsError::Argument(ref cause) => write!(f, "{}", cause),
5756            ListProjectsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5757            ListProjectsError::NotFound(ref cause) => write!(f, "{}", cause),
5758            ListProjectsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5759        }
5760    }
5761}
5762impl Error for ListProjectsError {}
5763/// Errors returned by ListRemoteAccessSessions
5764#[derive(Debug, PartialEq)]
5765pub enum ListRemoteAccessSessionsError {
5766    /// <p>An invalid argument was specified.</p>
5767    Argument(String),
5768    /// <p>A limit was exceeded.</p>
5769    LimitExceeded(String),
5770    /// <p>The specified entity was not found.</p>
5771    NotFound(String),
5772    /// <p>There was a problem with the service account.</p>
5773    ServiceAccount(String),
5774}
5775
5776impl ListRemoteAccessSessionsError {
5777    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListRemoteAccessSessionsError> {
5778        if let Some(err) = proto::json::Error::parse(&res) {
5779            match err.typ.as_str() {
5780                "ArgumentException" => {
5781                    return RusotoError::Service(ListRemoteAccessSessionsError::Argument(err.msg))
5782                }
5783                "LimitExceededException" => {
5784                    return RusotoError::Service(ListRemoteAccessSessionsError::LimitExceeded(
5785                        err.msg,
5786                    ))
5787                }
5788                "NotFoundException" => {
5789                    return RusotoError::Service(ListRemoteAccessSessionsError::NotFound(err.msg))
5790                }
5791                "ServiceAccountException" => {
5792                    return RusotoError::Service(ListRemoteAccessSessionsError::ServiceAccount(
5793                        err.msg,
5794                    ))
5795                }
5796                "ValidationException" => return RusotoError::Validation(err.msg),
5797                _ => {}
5798            }
5799        }
5800        RusotoError::Unknown(res)
5801    }
5802}
5803impl fmt::Display for ListRemoteAccessSessionsError {
5804    #[allow(unused_variables)]
5805    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5806        match *self {
5807            ListRemoteAccessSessionsError::Argument(ref cause) => write!(f, "{}", cause),
5808            ListRemoteAccessSessionsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5809            ListRemoteAccessSessionsError::NotFound(ref cause) => write!(f, "{}", cause),
5810            ListRemoteAccessSessionsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5811        }
5812    }
5813}
5814impl Error for ListRemoteAccessSessionsError {}
5815/// Errors returned by ListRuns
5816#[derive(Debug, PartialEq)]
5817pub enum ListRunsError {
5818    /// <p>An invalid argument was specified.</p>
5819    Argument(String),
5820    /// <p>A limit was exceeded.</p>
5821    LimitExceeded(String),
5822    /// <p>The specified entity was not found.</p>
5823    NotFound(String),
5824    /// <p>There was a problem with the service account.</p>
5825    ServiceAccount(String),
5826}
5827
5828impl ListRunsError {
5829    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListRunsError> {
5830        if let Some(err) = proto::json::Error::parse(&res) {
5831            match err.typ.as_str() {
5832                "ArgumentException" => {
5833                    return RusotoError::Service(ListRunsError::Argument(err.msg))
5834                }
5835                "LimitExceededException" => {
5836                    return RusotoError::Service(ListRunsError::LimitExceeded(err.msg))
5837                }
5838                "NotFoundException" => {
5839                    return RusotoError::Service(ListRunsError::NotFound(err.msg))
5840                }
5841                "ServiceAccountException" => {
5842                    return RusotoError::Service(ListRunsError::ServiceAccount(err.msg))
5843                }
5844                "ValidationException" => return RusotoError::Validation(err.msg),
5845                _ => {}
5846            }
5847        }
5848        RusotoError::Unknown(res)
5849    }
5850}
5851impl fmt::Display for ListRunsError {
5852    #[allow(unused_variables)]
5853    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5854        match *self {
5855            ListRunsError::Argument(ref cause) => write!(f, "{}", cause),
5856            ListRunsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5857            ListRunsError::NotFound(ref cause) => write!(f, "{}", cause),
5858            ListRunsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5859        }
5860    }
5861}
5862impl Error for ListRunsError {}
5863/// Errors returned by ListSamples
5864#[derive(Debug, PartialEq)]
5865pub enum ListSamplesError {
5866    /// <p>An invalid argument was specified.</p>
5867    Argument(String),
5868    /// <p>A limit was exceeded.</p>
5869    LimitExceeded(String),
5870    /// <p>The specified entity was not found.</p>
5871    NotFound(String),
5872    /// <p>There was a problem with the service account.</p>
5873    ServiceAccount(String),
5874}
5875
5876impl ListSamplesError {
5877    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListSamplesError> {
5878        if let Some(err) = proto::json::Error::parse(&res) {
5879            match err.typ.as_str() {
5880                "ArgumentException" => {
5881                    return RusotoError::Service(ListSamplesError::Argument(err.msg))
5882                }
5883                "LimitExceededException" => {
5884                    return RusotoError::Service(ListSamplesError::LimitExceeded(err.msg))
5885                }
5886                "NotFoundException" => {
5887                    return RusotoError::Service(ListSamplesError::NotFound(err.msg))
5888                }
5889                "ServiceAccountException" => {
5890                    return RusotoError::Service(ListSamplesError::ServiceAccount(err.msg))
5891                }
5892                "ValidationException" => return RusotoError::Validation(err.msg),
5893                _ => {}
5894            }
5895        }
5896        RusotoError::Unknown(res)
5897    }
5898}
5899impl fmt::Display for ListSamplesError {
5900    #[allow(unused_variables)]
5901    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5902        match *self {
5903            ListSamplesError::Argument(ref cause) => write!(f, "{}", cause),
5904            ListSamplesError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5905            ListSamplesError::NotFound(ref cause) => write!(f, "{}", cause),
5906            ListSamplesError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5907        }
5908    }
5909}
5910impl Error for ListSamplesError {}
5911/// Errors returned by ListSuites
5912#[derive(Debug, PartialEq)]
5913pub enum ListSuitesError {
5914    /// <p>An invalid argument was specified.</p>
5915    Argument(String),
5916    /// <p>A limit was exceeded.</p>
5917    LimitExceeded(String),
5918    /// <p>The specified entity was not found.</p>
5919    NotFound(String),
5920    /// <p>There was a problem with the service account.</p>
5921    ServiceAccount(String),
5922}
5923
5924impl ListSuitesError {
5925    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListSuitesError> {
5926        if let Some(err) = proto::json::Error::parse(&res) {
5927            match err.typ.as_str() {
5928                "ArgumentException" => {
5929                    return RusotoError::Service(ListSuitesError::Argument(err.msg))
5930                }
5931                "LimitExceededException" => {
5932                    return RusotoError::Service(ListSuitesError::LimitExceeded(err.msg))
5933                }
5934                "NotFoundException" => {
5935                    return RusotoError::Service(ListSuitesError::NotFound(err.msg))
5936                }
5937                "ServiceAccountException" => {
5938                    return RusotoError::Service(ListSuitesError::ServiceAccount(err.msg))
5939                }
5940                "ValidationException" => return RusotoError::Validation(err.msg),
5941                _ => {}
5942            }
5943        }
5944        RusotoError::Unknown(res)
5945    }
5946}
5947impl fmt::Display for ListSuitesError {
5948    #[allow(unused_variables)]
5949    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5950        match *self {
5951            ListSuitesError::Argument(ref cause) => write!(f, "{}", cause),
5952            ListSuitesError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5953            ListSuitesError::NotFound(ref cause) => write!(f, "{}", cause),
5954            ListSuitesError::ServiceAccount(ref cause) => write!(f, "{}", cause),
5955        }
5956    }
5957}
5958impl Error for ListSuitesError {}
5959/// Errors returned by ListTagsForResource
5960#[derive(Debug, PartialEq)]
5961pub enum ListTagsForResourceError {
5962    /// <p>An invalid argument was specified.</p>
5963    Argument(String),
5964    /// <p>The specified entity was not found.</p>
5965    NotFound(String),
5966    /// <p>The operation was not successful. Try again.</p>
5967    TagOperation(String),
5968}
5969
5970impl ListTagsForResourceError {
5971    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListTagsForResourceError> {
5972        if let Some(err) = proto::json::Error::parse(&res) {
5973            match err.typ.as_str() {
5974                "ArgumentException" => {
5975                    return RusotoError::Service(ListTagsForResourceError::Argument(err.msg))
5976                }
5977                "NotFoundException" => {
5978                    return RusotoError::Service(ListTagsForResourceError::NotFound(err.msg))
5979                }
5980                "TagOperationException" => {
5981                    return RusotoError::Service(ListTagsForResourceError::TagOperation(err.msg))
5982                }
5983                "ValidationException" => return RusotoError::Validation(err.msg),
5984                _ => {}
5985            }
5986        }
5987        RusotoError::Unknown(res)
5988    }
5989}
5990impl fmt::Display for ListTagsForResourceError {
5991    #[allow(unused_variables)]
5992    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5993        match *self {
5994            ListTagsForResourceError::Argument(ref cause) => write!(f, "{}", cause),
5995            ListTagsForResourceError::NotFound(ref cause) => write!(f, "{}", cause),
5996            ListTagsForResourceError::TagOperation(ref cause) => write!(f, "{}", cause),
5997        }
5998    }
5999}
6000impl Error for ListTagsForResourceError {}
6001/// Errors returned by ListTestGridProjects
6002#[derive(Debug, PartialEq)]
6003pub enum ListTestGridProjectsError {
6004    /// <p>An invalid argument was specified.</p>
6005    Argument(String),
6006    /// <p>An internal exception was raised in the service. Contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a> if you see this error. </p>
6007    InternalService(String),
6008}
6009
6010impl ListTestGridProjectsError {
6011    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListTestGridProjectsError> {
6012        if let Some(err) = proto::json::Error::parse(&res) {
6013            match err.typ.as_str() {
6014                "ArgumentException" => {
6015                    return RusotoError::Service(ListTestGridProjectsError::Argument(err.msg))
6016                }
6017                "InternalServiceException" => {
6018                    return RusotoError::Service(ListTestGridProjectsError::InternalService(
6019                        err.msg,
6020                    ))
6021                }
6022                "ValidationException" => return RusotoError::Validation(err.msg),
6023                _ => {}
6024            }
6025        }
6026        RusotoError::Unknown(res)
6027    }
6028}
6029impl fmt::Display for ListTestGridProjectsError {
6030    #[allow(unused_variables)]
6031    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6032        match *self {
6033            ListTestGridProjectsError::Argument(ref cause) => write!(f, "{}", cause),
6034            ListTestGridProjectsError::InternalService(ref cause) => write!(f, "{}", cause),
6035        }
6036    }
6037}
6038impl Error for ListTestGridProjectsError {}
6039/// Errors returned by ListTestGridSessionActions
6040#[derive(Debug, PartialEq)]
6041pub enum ListTestGridSessionActionsError {
6042    /// <p>An invalid argument was specified.</p>
6043    Argument(String),
6044    /// <p>An internal exception was raised in the service. Contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a> if you see this error. </p>
6045    InternalService(String),
6046    /// <p>The specified entity was not found.</p>
6047    NotFound(String),
6048}
6049
6050impl ListTestGridSessionActionsError {
6051    pub fn from_response(
6052        res: BufferedHttpResponse,
6053    ) -> RusotoError<ListTestGridSessionActionsError> {
6054        if let Some(err) = proto::json::Error::parse(&res) {
6055            match err.typ.as_str() {
6056                "ArgumentException" => {
6057                    return RusotoError::Service(ListTestGridSessionActionsError::Argument(err.msg))
6058                }
6059                "InternalServiceException" => {
6060                    return RusotoError::Service(ListTestGridSessionActionsError::InternalService(
6061                        err.msg,
6062                    ))
6063                }
6064                "NotFoundException" => {
6065                    return RusotoError::Service(ListTestGridSessionActionsError::NotFound(err.msg))
6066                }
6067                "ValidationException" => return RusotoError::Validation(err.msg),
6068                _ => {}
6069            }
6070        }
6071        RusotoError::Unknown(res)
6072    }
6073}
6074impl fmt::Display for ListTestGridSessionActionsError {
6075    #[allow(unused_variables)]
6076    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6077        match *self {
6078            ListTestGridSessionActionsError::Argument(ref cause) => write!(f, "{}", cause),
6079            ListTestGridSessionActionsError::InternalService(ref cause) => write!(f, "{}", cause),
6080            ListTestGridSessionActionsError::NotFound(ref cause) => write!(f, "{}", cause),
6081        }
6082    }
6083}
6084impl Error for ListTestGridSessionActionsError {}
6085/// Errors returned by ListTestGridSessionArtifacts
6086#[derive(Debug, PartialEq)]
6087pub enum ListTestGridSessionArtifactsError {
6088    /// <p>An invalid argument was specified.</p>
6089    Argument(String),
6090    /// <p>An internal exception was raised in the service. Contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a> if you see this error. </p>
6091    InternalService(String),
6092    /// <p>The specified entity was not found.</p>
6093    NotFound(String),
6094}
6095
6096impl ListTestGridSessionArtifactsError {
6097    pub fn from_response(
6098        res: BufferedHttpResponse,
6099    ) -> RusotoError<ListTestGridSessionArtifactsError> {
6100        if let Some(err) = proto::json::Error::parse(&res) {
6101            match err.typ.as_str() {
6102                "ArgumentException" => {
6103                    return RusotoError::Service(ListTestGridSessionArtifactsError::Argument(
6104                        err.msg,
6105                    ))
6106                }
6107                "InternalServiceException" => {
6108                    return RusotoError::Service(
6109                        ListTestGridSessionArtifactsError::InternalService(err.msg),
6110                    )
6111                }
6112                "NotFoundException" => {
6113                    return RusotoError::Service(ListTestGridSessionArtifactsError::NotFound(
6114                        err.msg,
6115                    ))
6116                }
6117                "ValidationException" => return RusotoError::Validation(err.msg),
6118                _ => {}
6119            }
6120        }
6121        RusotoError::Unknown(res)
6122    }
6123}
6124impl fmt::Display for ListTestGridSessionArtifactsError {
6125    #[allow(unused_variables)]
6126    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6127        match *self {
6128            ListTestGridSessionArtifactsError::Argument(ref cause) => write!(f, "{}", cause),
6129            ListTestGridSessionArtifactsError::InternalService(ref cause) => write!(f, "{}", cause),
6130            ListTestGridSessionArtifactsError::NotFound(ref cause) => write!(f, "{}", cause),
6131        }
6132    }
6133}
6134impl Error for ListTestGridSessionArtifactsError {}
6135/// Errors returned by ListTestGridSessions
6136#[derive(Debug, PartialEq)]
6137pub enum ListTestGridSessionsError {
6138    /// <p>An invalid argument was specified.</p>
6139    Argument(String),
6140    /// <p>An internal exception was raised in the service. Contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a> if you see this error. </p>
6141    InternalService(String),
6142    /// <p>The specified entity was not found.</p>
6143    NotFound(String),
6144}
6145
6146impl ListTestGridSessionsError {
6147    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListTestGridSessionsError> {
6148        if let Some(err) = proto::json::Error::parse(&res) {
6149            match err.typ.as_str() {
6150                "ArgumentException" => {
6151                    return RusotoError::Service(ListTestGridSessionsError::Argument(err.msg))
6152                }
6153                "InternalServiceException" => {
6154                    return RusotoError::Service(ListTestGridSessionsError::InternalService(
6155                        err.msg,
6156                    ))
6157                }
6158                "NotFoundException" => {
6159                    return RusotoError::Service(ListTestGridSessionsError::NotFound(err.msg))
6160                }
6161                "ValidationException" => return RusotoError::Validation(err.msg),
6162                _ => {}
6163            }
6164        }
6165        RusotoError::Unknown(res)
6166    }
6167}
6168impl fmt::Display for ListTestGridSessionsError {
6169    #[allow(unused_variables)]
6170    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6171        match *self {
6172            ListTestGridSessionsError::Argument(ref cause) => write!(f, "{}", cause),
6173            ListTestGridSessionsError::InternalService(ref cause) => write!(f, "{}", cause),
6174            ListTestGridSessionsError::NotFound(ref cause) => write!(f, "{}", cause),
6175        }
6176    }
6177}
6178impl Error for ListTestGridSessionsError {}
6179/// Errors returned by ListTests
6180#[derive(Debug, PartialEq)]
6181pub enum ListTestsError {
6182    /// <p>An invalid argument was specified.</p>
6183    Argument(String),
6184    /// <p>A limit was exceeded.</p>
6185    LimitExceeded(String),
6186    /// <p>The specified entity was not found.</p>
6187    NotFound(String),
6188    /// <p>There was a problem with the service account.</p>
6189    ServiceAccount(String),
6190}
6191
6192impl ListTestsError {
6193    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListTestsError> {
6194        if let Some(err) = proto::json::Error::parse(&res) {
6195            match err.typ.as_str() {
6196                "ArgumentException" => {
6197                    return RusotoError::Service(ListTestsError::Argument(err.msg))
6198                }
6199                "LimitExceededException" => {
6200                    return RusotoError::Service(ListTestsError::LimitExceeded(err.msg))
6201                }
6202                "NotFoundException" => {
6203                    return RusotoError::Service(ListTestsError::NotFound(err.msg))
6204                }
6205                "ServiceAccountException" => {
6206                    return RusotoError::Service(ListTestsError::ServiceAccount(err.msg))
6207                }
6208                "ValidationException" => return RusotoError::Validation(err.msg),
6209                _ => {}
6210            }
6211        }
6212        RusotoError::Unknown(res)
6213    }
6214}
6215impl fmt::Display for ListTestsError {
6216    #[allow(unused_variables)]
6217    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6218        match *self {
6219            ListTestsError::Argument(ref cause) => write!(f, "{}", cause),
6220            ListTestsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
6221            ListTestsError::NotFound(ref cause) => write!(f, "{}", cause),
6222            ListTestsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6223        }
6224    }
6225}
6226impl Error for ListTestsError {}
6227/// Errors returned by ListUniqueProblems
6228#[derive(Debug, PartialEq)]
6229pub enum ListUniqueProblemsError {
6230    /// <p>An invalid argument was specified.</p>
6231    Argument(String),
6232    /// <p>A limit was exceeded.</p>
6233    LimitExceeded(String),
6234    /// <p>The specified entity was not found.</p>
6235    NotFound(String),
6236    /// <p>There was a problem with the service account.</p>
6237    ServiceAccount(String),
6238}
6239
6240impl ListUniqueProblemsError {
6241    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListUniqueProblemsError> {
6242        if let Some(err) = proto::json::Error::parse(&res) {
6243            match err.typ.as_str() {
6244                "ArgumentException" => {
6245                    return RusotoError::Service(ListUniqueProblemsError::Argument(err.msg))
6246                }
6247                "LimitExceededException" => {
6248                    return RusotoError::Service(ListUniqueProblemsError::LimitExceeded(err.msg))
6249                }
6250                "NotFoundException" => {
6251                    return RusotoError::Service(ListUniqueProblemsError::NotFound(err.msg))
6252                }
6253                "ServiceAccountException" => {
6254                    return RusotoError::Service(ListUniqueProblemsError::ServiceAccount(err.msg))
6255                }
6256                "ValidationException" => return RusotoError::Validation(err.msg),
6257                _ => {}
6258            }
6259        }
6260        RusotoError::Unknown(res)
6261    }
6262}
6263impl fmt::Display for ListUniqueProblemsError {
6264    #[allow(unused_variables)]
6265    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6266        match *self {
6267            ListUniqueProblemsError::Argument(ref cause) => write!(f, "{}", cause),
6268            ListUniqueProblemsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
6269            ListUniqueProblemsError::NotFound(ref cause) => write!(f, "{}", cause),
6270            ListUniqueProblemsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6271        }
6272    }
6273}
6274impl Error for ListUniqueProblemsError {}
6275/// Errors returned by ListUploads
6276#[derive(Debug, PartialEq)]
6277pub enum ListUploadsError {
6278    /// <p>An invalid argument was specified.</p>
6279    Argument(String),
6280    /// <p>A limit was exceeded.</p>
6281    LimitExceeded(String),
6282    /// <p>The specified entity was not found.</p>
6283    NotFound(String),
6284    /// <p>There was a problem with the service account.</p>
6285    ServiceAccount(String),
6286}
6287
6288impl ListUploadsError {
6289    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListUploadsError> {
6290        if let Some(err) = proto::json::Error::parse(&res) {
6291            match err.typ.as_str() {
6292                "ArgumentException" => {
6293                    return RusotoError::Service(ListUploadsError::Argument(err.msg))
6294                }
6295                "LimitExceededException" => {
6296                    return RusotoError::Service(ListUploadsError::LimitExceeded(err.msg))
6297                }
6298                "NotFoundException" => {
6299                    return RusotoError::Service(ListUploadsError::NotFound(err.msg))
6300                }
6301                "ServiceAccountException" => {
6302                    return RusotoError::Service(ListUploadsError::ServiceAccount(err.msg))
6303                }
6304                "ValidationException" => return RusotoError::Validation(err.msg),
6305                _ => {}
6306            }
6307        }
6308        RusotoError::Unknown(res)
6309    }
6310}
6311impl fmt::Display for ListUploadsError {
6312    #[allow(unused_variables)]
6313    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6314        match *self {
6315            ListUploadsError::Argument(ref cause) => write!(f, "{}", cause),
6316            ListUploadsError::LimitExceeded(ref cause) => write!(f, "{}", cause),
6317            ListUploadsError::NotFound(ref cause) => write!(f, "{}", cause),
6318            ListUploadsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6319        }
6320    }
6321}
6322impl Error for ListUploadsError {}
6323/// Errors returned by ListVPCEConfigurations
6324#[derive(Debug, PartialEq)]
6325pub enum ListVPCEConfigurationsError {
6326    /// <p>An invalid argument was specified.</p>
6327    Argument(String),
6328    /// <p>There was a problem with the service account.</p>
6329    ServiceAccount(String),
6330}
6331
6332impl ListVPCEConfigurationsError {
6333    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListVPCEConfigurationsError> {
6334        if let Some(err) = proto::json::Error::parse(&res) {
6335            match err.typ.as_str() {
6336                "ArgumentException" => {
6337                    return RusotoError::Service(ListVPCEConfigurationsError::Argument(err.msg))
6338                }
6339                "ServiceAccountException" => {
6340                    return RusotoError::Service(ListVPCEConfigurationsError::ServiceAccount(
6341                        err.msg,
6342                    ))
6343                }
6344                "ValidationException" => return RusotoError::Validation(err.msg),
6345                _ => {}
6346            }
6347        }
6348        RusotoError::Unknown(res)
6349    }
6350}
6351impl fmt::Display for ListVPCEConfigurationsError {
6352    #[allow(unused_variables)]
6353    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6354        match *self {
6355            ListVPCEConfigurationsError::Argument(ref cause) => write!(f, "{}", cause),
6356            ListVPCEConfigurationsError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6357        }
6358    }
6359}
6360impl Error for ListVPCEConfigurationsError {}
6361/// Errors returned by PurchaseOffering
6362#[derive(Debug, PartialEq)]
6363pub enum PurchaseOfferingError {
6364    /// <p>An invalid argument was specified.</p>
6365    Argument(String),
6366    /// <p>A limit was exceeded.</p>
6367    LimitExceeded(String),
6368    /// <p>Exception gets thrown when a user is not eligible to perform the specified transaction.</p>
6369    NotEligible(String),
6370    /// <p>The specified entity was not found.</p>
6371    NotFound(String),
6372    /// <p>There was a problem with the service account.</p>
6373    ServiceAccount(String),
6374}
6375
6376impl PurchaseOfferingError {
6377    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<PurchaseOfferingError> {
6378        if let Some(err) = proto::json::Error::parse(&res) {
6379            match err.typ.as_str() {
6380                "ArgumentException" => {
6381                    return RusotoError::Service(PurchaseOfferingError::Argument(err.msg))
6382                }
6383                "LimitExceededException" => {
6384                    return RusotoError::Service(PurchaseOfferingError::LimitExceeded(err.msg))
6385                }
6386                "NotEligibleException" => {
6387                    return RusotoError::Service(PurchaseOfferingError::NotEligible(err.msg))
6388                }
6389                "NotFoundException" => {
6390                    return RusotoError::Service(PurchaseOfferingError::NotFound(err.msg))
6391                }
6392                "ServiceAccountException" => {
6393                    return RusotoError::Service(PurchaseOfferingError::ServiceAccount(err.msg))
6394                }
6395                "ValidationException" => return RusotoError::Validation(err.msg),
6396                _ => {}
6397            }
6398        }
6399        RusotoError::Unknown(res)
6400    }
6401}
6402impl fmt::Display for PurchaseOfferingError {
6403    #[allow(unused_variables)]
6404    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6405        match *self {
6406            PurchaseOfferingError::Argument(ref cause) => write!(f, "{}", cause),
6407            PurchaseOfferingError::LimitExceeded(ref cause) => write!(f, "{}", cause),
6408            PurchaseOfferingError::NotEligible(ref cause) => write!(f, "{}", cause),
6409            PurchaseOfferingError::NotFound(ref cause) => write!(f, "{}", cause),
6410            PurchaseOfferingError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6411        }
6412    }
6413}
6414impl Error for PurchaseOfferingError {}
6415/// Errors returned by RenewOffering
6416#[derive(Debug, PartialEq)]
6417pub enum RenewOfferingError {
6418    /// <p>An invalid argument was specified.</p>
6419    Argument(String),
6420    /// <p>A limit was exceeded.</p>
6421    LimitExceeded(String),
6422    /// <p>Exception gets thrown when a user is not eligible to perform the specified transaction.</p>
6423    NotEligible(String),
6424    /// <p>The specified entity was not found.</p>
6425    NotFound(String),
6426    /// <p>There was a problem with the service account.</p>
6427    ServiceAccount(String),
6428}
6429
6430impl RenewOfferingError {
6431    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<RenewOfferingError> {
6432        if let Some(err) = proto::json::Error::parse(&res) {
6433            match err.typ.as_str() {
6434                "ArgumentException" => {
6435                    return RusotoError::Service(RenewOfferingError::Argument(err.msg))
6436                }
6437                "LimitExceededException" => {
6438                    return RusotoError::Service(RenewOfferingError::LimitExceeded(err.msg))
6439                }
6440                "NotEligibleException" => {
6441                    return RusotoError::Service(RenewOfferingError::NotEligible(err.msg))
6442                }
6443                "NotFoundException" => {
6444                    return RusotoError::Service(RenewOfferingError::NotFound(err.msg))
6445                }
6446                "ServiceAccountException" => {
6447                    return RusotoError::Service(RenewOfferingError::ServiceAccount(err.msg))
6448                }
6449                "ValidationException" => return RusotoError::Validation(err.msg),
6450                _ => {}
6451            }
6452        }
6453        RusotoError::Unknown(res)
6454    }
6455}
6456impl fmt::Display for RenewOfferingError {
6457    #[allow(unused_variables)]
6458    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6459        match *self {
6460            RenewOfferingError::Argument(ref cause) => write!(f, "{}", cause),
6461            RenewOfferingError::LimitExceeded(ref cause) => write!(f, "{}", cause),
6462            RenewOfferingError::NotEligible(ref cause) => write!(f, "{}", cause),
6463            RenewOfferingError::NotFound(ref cause) => write!(f, "{}", cause),
6464            RenewOfferingError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6465        }
6466    }
6467}
6468impl Error for RenewOfferingError {}
6469/// Errors returned by ScheduleRun
6470#[derive(Debug, PartialEq)]
6471pub enum ScheduleRunError {
6472    /// <p>An invalid argument was specified.</p>
6473    Argument(String),
6474    /// <p>An entity with the same name already exists.</p>
6475    Idempotency(String),
6476    /// <p>A limit was exceeded.</p>
6477    LimitExceeded(String),
6478    /// <p>The specified entity was not found.</p>
6479    NotFound(String),
6480    /// <p>There was a problem with the service account.</p>
6481    ServiceAccount(String),
6482}
6483
6484impl ScheduleRunError {
6485    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ScheduleRunError> {
6486        if let Some(err) = proto::json::Error::parse(&res) {
6487            match err.typ.as_str() {
6488                "ArgumentException" => {
6489                    return RusotoError::Service(ScheduleRunError::Argument(err.msg))
6490                }
6491                "IdempotencyException" => {
6492                    return RusotoError::Service(ScheduleRunError::Idempotency(err.msg))
6493                }
6494                "LimitExceededException" => {
6495                    return RusotoError::Service(ScheduleRunError::LimitExceeded(err.msg))
6496                }
6497                "NotFoundException" => {
6498                    return RusotoError::Service(ScheduleRunError::NotFound(err.msg))
6499                }
6500                "ServiceAccountException" => {
6501                    return RusotoError::Service(ScheduleRunError::ServiceAccount(err.msg))
6502                }
6503                "ValidationException" => return RusotoError::Validation(err.msg),
6504                _ => {}
6505            }
6506        }
6507        RusotoError::Unknown(res)
6508    }
6509}
6510impl fmt::Display for ScheduleRunError {
6511    #[allow(unused_variables)]
6512    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6513        match *self {
6514            ScheduleRunError::Argument(ref cause) => write!(f, "{}", cause),
6515            ScheduleRunError::Idempotency(ref cause) => write!(f, "{}", cause),
6516            ScheduleRunError::LimitExceeded(ref cause) => write!(f, "{}", cause),
6517            ScheduleRunError::NotFound(ref cause) => write!(f, "{}", cause),
6518            ScheduleRunError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6519        }
6520    }
6521}
6522impl Error for ScheduleRunError {}
6523/// Errors returned by StopJob
6524#[derive(Debug, PartialEq)]
6525pub enum StopJobError {
6526    /// <p>An invalid argument was specified.</p>
6527    Argument(String),
6528    /// <p>A limit was exceeded.</p>
6529    LimitExceeded(String),
6530    /// <p>The specified entity was not found.</p>
6531    NotFound(String),
6532    /// <p>There was a problem with the service account.</p>
6533    ServiceAccount(String),
6534}
6535
6536impl StopJobError {
6537    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<StopJobError> {
6538        if let Some(err) = proto::json::Error::parse(&res) {
6539            match err.typ.as_str() {
6540                "ArgumentException" => {
6541                    return RusotoError::Service(StopJobError::Argument(err.msg))
6542                }
6543                "LimitExceededException" => {
6544                    return RusotoError::Service(StopJobError::LimitExceeded(err.msg))
6545                }
6546                "NotFoundException" => {
6547                    return RusotoError::Service(StopJobError::NotFound(err.msg))
6548                }
6549                "ServiceAccountException" => {
6550                    return RusotoError::Service(StopJobError::ServiceAccount(err.msg))
6551                }
6552                "ValidationException" => return RusotoError::Validation(err.msg),
6553                _ => {}
6554            }
6555        }
6556        RusotoError::Unknown(res)
6557    }
6558}
6559impl fmt::Display for StopJobError {
6560    #[allow(unused_variables)]
6561    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6562        match *self {
6563            StopJobError::Argument(ref cause) => write!(f, "{}", cause),
6564            StopJobError::LimitExceeded(ref cause) => write!(f, "{}", cause),
6565            StopJobError::NotFound(ref cause) => write!(f, "{}", cause),
6566            StopJobError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6567        }
6568    }
6569}
6570impl Error for StopJobError {}
6571/// Errors returned by StopRemoteAccessSession
6572#[derive(Debug, PartialEq)]
6573pub enum StopRemoteAccessSessionError {
6574    /// <p>An invalid argument was specified.</p>
6575    Argument(String),
6576    /// <p>A limit was exceeded.</p>
6577    LimitExceeded(String),
6578    /// <p>The specified entity was not found.</p>
6579    NotFound(String),
6580    /// <p>There was a problem with the service account.</p>
6581    ServiceAccount(String),
6582}
6583
6584impl StopRemoteAccessSessionError {
6585    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<StopRemoteAccessSessionError> {
6586        if let Some(err) = proto::json::Error::parse(&res) {
6587            match err.typ.as_str() {
6588                "ArgumentException" => {
6589                    return RusotoError::Service(StopRemoteAccessSessionError::Argument(err.msg))
6590                }
6591                "LimitExceededException" => {
6592                    return RusotoError::Service(StopRemoteAccessSessionError::LimitExceeded(
6593                        err.msg,
6594                    ))
6595                }
6596                "NotFoundException" => {
6597                    return RusotoError::Service(StopRemoteAccessSessionError::NotFound(err.msg))
6598                }
6599                "ServiceAccountException" => {
6600                    return RusotoError::Service(StopRemoteAccessSessionError::ServiceAccount(
6601                        err.msg,
6602                    ))
6603                }
6604                "ValidationException" => return RusotoError::Validation(err.msg),
6605                _ => {}
6606            }
6607        }
6608        RusotoError::Unknown(res)
6609    }
6610}
6611impl fmt::Display for StopRemoteAccessSessionError {
6612    #[allow(unused_variables)]
6613    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6614        match *self {
6615            StopRemoteAccessSessionError::Argument(ref cause) => write!(f, "{}", cause),
6616            StopRemoteAccessSessionError::LimitExceeded(ref cause) => write!(f, "{}", cause),
6617            StopRemoteAccessSessionError::NotFound(ref cause) => write!(f, "{}", cause),
6618            StopRemoteAccessSessionError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6619        }
6620    }
6621}
6622impl Error for StopRemoteAccessSessionError {}
6623/// Errors returned by StopRun
6624#[derive(Debug, PartialEq)]
6625pub enum StopRunError {
6626    /// <p>An invalid argument was specified.</p>
6627    Argument(String),
6628    /// <p>A limit was exceeded.</p>
6629    LimitExceeded(String),
6630    /// <p>The specified entity was not found.</p>
6631    NotFound(String),
6632    /// <p>There was a problem with the service account.</p>
6633    ServiceAccount(String),
6634}
6635
6636impl StopRunError {
6637    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<StopRunError> {
6638        if let Some(err) = proto::json::Error::parse(&res) {
6639            match err.typ.as_str() {
6640                "ArgumentException" => {
6641                    return RusotoError::Service(StopRunError::Argument(err.msg))
6642                }
6643                "LimitExceededException" => {
6644                    return RusotoError::Service(StopRunError::LimitExceeded(err.msg))
6645                }
6646                "NotFoundException" => {
6647                    return RusotoError::Service(StopRunError::NotFound(err.msg))
6648                }
6649                "ServiceAccountException" => {
6650                    return RusotoError::Service(StopRunError::ServiceAccount(err.msg))
6651                }
6652                "ValidationException" => return RusotoError::Validation(err.msg),
6653                _ => {}
6654            }
6655        }
6656        RusotoError::Unknown(res)
6657    }
6658}
6659impl fmt::Display for StopRunError {
6660    #[allow(unused_variables)]
6661    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6662        match *self {
6663            StopRunError::Argument(ref cause) => write!(f, "{}", cause),
6664            StopRunError::LimitExceeded(ref cause) => write!(f, "{}", cause),
6665            StopRunError::NotFound(ref cause) => write!(f, "{}", cause),
6666            StopRunError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6667        }
6668    }
6669}
6670impl Error for StopRunError {}
6671/// Errors returned by TagResource
6672#[derive(Debug, PartialEq)]
6673pub enum TagResourceError {
6674    /// <p>An invalid argument was specified.</p>
6675    Argument(String),
6676    /// <p>The specified entity was not found.</p>
6677    NotFound(String),
6678    /// <p>The operation was not successful. Try again.</p>
6679    TagOperation(String),
6680    /// <p>The request doesn't comply with the AWS Identity and Access Management (IAM) tag policy. Correct your request and then retry it.</p>
6681    TagPolicy(String),
6682    /// <p>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. </p>
6683    TooManyTags(String),
6684}
6685
6686impl TagResourceError {
6687    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<TagResourceError> {
6688        if let Some(err) = proto::json::Error::parse(&res) {
6689            match err.typ.as_str() {
6690                "ArgumentException" => {
6691                    return RusotoError::Service(TagResourceError::Argument(err.msg))
6692                }
6693                "NotFoundException" => {
6694                    return RusotoError::Service(TagResourceError::NotFound(err.msg))
6695                }
6696                "TagOperationException" => {
6697                    return RusotoError::Service(TagResourceError::TagOperation(err.msg))
6698                }
6699                "TagPolicyException" => {
6700                    return RusotoError::Service(TagResourceError::TagPolicy(err.msg))
6701                }
6702                "TooManyTagsException" => {
6703                    return RusotoError::Service(TagResourceError::TooManyTags(err.msg))
6704                }
6705                "ValidationException" => return RusotoError::Validation(err.msg),
6706                _ => {}
6707            }
6708        }
6709        RusotoError::Unknown(res)
6710    }
6711}
6712impl fmt::Display for TagResourceError {
6713    #[allow(unused_variables)]
6714    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6715        match *self {
6716            TagResourceError::Argument(ref cause) => write!(f, "{}", cause),
6717            TagResourceError::NotFound(ref cause) => write!(f, "{}", cause),
6718            TagResourceError::TagOperation(ref cause) => write!(f, "{}", cause),
6719            TagResourceError::TagPolicy(ref cause) => write!(f, "{}", cause),
6720            TagResourceError::TooManyTags(ref cause) => write!(f, "{}", cause),
6721        }
6722    }
6723}
6724impl Error for TagResourceError {}
6725/// Errors returned by UntagResource
6726#[derive(Debug, PartialEq)]
6727pub enum UntagResourceError {
6728    /// <p>An invalid argument was specified.</p>
6729    Argument(String),
6730    /// <p>The specified entity was not found.</p>
6731    NotFound(String),
6732    /// <p>The operation was not successful. Try again.</p>
6733    TagOperation(String),
6734}
6735
6736impl UntagResourceError {
6737    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UntagResourceError> {
6738        if let Some(err) = proto::json::Error::parse(&res) {
6739            match err.typ.as_str() {
6740                "ArgumentException" => {
6741                    return RusotoError::Service(UntagResourceError::Argument(err.msg))
6742                }
6743                "NotFoundException" => {
6744                    return RusotoError::Service(UntagResourceError::NotFound(err.msg))
6745                }
6746                "TagOperationException" => {
6747                    return RusotoError::Service(UntagResourceError::TagOperation(err.msg))
6748                }
6749                "ValidationException" => return RusotoError::Validation(err.msg),
6750                _ => {}
6751            }
6752        }
6753        RusotoError::Unknown(res)
6754    }
6755}
6756impl fmt::Display for UntagResourceError {
6757    #[allow(unused_variables)]
6758    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6759        match *self {
6760            UntagResourceError::Argument(ref cause) => write!(f, "{}", cause),
6761            UntagResourceError::NotFound(ref cause) => write!(f, "{}", cause),
6762            UntagResourceError::TagOperation(ref cause) => write!(f, "{}", cause),
6763        }
6764    }
6765}
6766impl Error for UntagResourceError {}
6767/// Errors returned by UpdateDeviceInstance
6768#[derive(Debug, PartialEq)]
6769pub enum UpdateDeviceInstanceError {
6770    /// <p>An invalid argument was specified.</p>
6771    Argument(String),
6772    /// <p>A limit was exceeded.</p>
6773    LimitExceeded(String),
6774    /// <p>The specified entity was not found.</p>
6775    NotFound(String),
6776    /// <p>There was a problem with the service account.</p>
6777    ServiceAccount(String),
6778}
6779
6780impl UpdateDeviceInstanceError {
6781    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateDeviceInstanceError> {
6782        if let Some(err) = proto::json::Error::parse(&res) {
6783            match err.typ.as_str() {
6784                "ArgumentException" => {
6785                    return RusotoError::Service(UpdateDeviceInstanceError::Argument(err.msg))
6786                }
6787                "LimitExceededException" => {
6788                    return RusotoError::Service(UpdateDeviceInstanceError::LimitExceeded(err.msg))
6789                }
6790                "NotFoundException" => {
6791                    return RusotoError::Service(UpdateDeviceInstanceError::NotFound(err.msg))
6792                }
6793                "ServiceAccountException" => {
6794                    return RusotoError::Service(UpdateDeviceInstanceError::ServiceAccount(err.msg))
6795                }
6796                "ValidationException" => return RusotoError::Validation(err.msg),
6797                _ => {}
6798            }
6799        }
6800        RusotoError::Unknown(res)
6801    }
6802}
6803impl fmt::Display for UpdateDeviceInstanceError {
6804    #[allow(unused_variables)]
6805    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6806        match *self {
6807            UpdateDeviceInstanceError::Argument(ref cause) => write!(f, "{}", cause),
6808            UpdateDeviceInstanceError::LimitExceeded(ref cause) => write!(f, "{}", cause),
6809            UpdateDeviceInstanceError::NotFound(ref cause) => write!(f, "{}", cause),
6810            UpdateDeviceInstanceError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6811        }
6812    }
6813}
6814impl Error for UpdateDeviceInstanceError {}
6815/// Errors returned by UpdateDevicePool
6816#[derive(Debug, PartialEq)]
6817pub enum UpdateDevicePoolError {
6818    /// <p>An invalid argument was specified.</p>
6819    Argument(String),
6820    /// <p>A limit was exceeded.</p>
6821    LimitExceeded(String),
6822    /// <p>The specified entity was not found.</p>
6823    NotFound(String),
6824    /// <p>There was a problem with the service account.</p>
6825    ServiceAccount(String),
6826}
6827
6828impl UpdateDevicePoolError {
6829    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateDevicePoolError> {
6830        if let Some(err) = proto::json::Error::parse(&res) {
6831            match err.typ.as_str() {
6832                "ArgumentException" => {
6833                    return RusotoError::Service(UpdateDevicePoolError::Argument(err.msg))
6834                }
6835                "LimitExceededException" => {
6836                    return RusotoError::Service(UpdateDevicePoolError::LimitExceeded(err.msg))
6837                }
6838                "NotFoundException" => {
6839                    return RusotoError::Service(UpdateDevicePoolError::NotFound(err.msg))
6840                }
6841                "ServiceAccountException" => {
6842                    return RusotoError::Service(UpdateDevicePoolError::ServiceAccount(err.msg))
6843                }
6844                "ValidationException" => return RusotoError::Validation(err.msg),
6845                _ => {}
6846            }
6847        }
6848        RusotoError::Unknown(res)
6849    }
6850}
6851impl fmt::Display for UpdateDevicePoolError {
6852    #[allow(unused_variables)]
6853    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6854        match *self {
6855            UpdateDevicePoolError::Argument(ref cause) => write!(f, "{}", cause),
6856            UpdateDevicePoolError::LimitExceeded(ref cause) => write!(f, "{}", cause),
6857            UpdateDevicePoolError::NotFound(ref cause) => write!(f, "{}", cause),
6858            UpdateDevicePoolError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6859        }
6860    }
6861}
6862impl Error for UpdateDevicePoolError {}
6863/// Errors returned by UpdateInstanceProfile
6864#[derive(Debug, PartialEq)]
6865pub enum UpdateInstanceProfileError {
6866    /// <p>An invalid argument was specified.</p>
6867    Argument(String),
6868    /// <p>A limit was exceeded.</p>
6869    LimitExceeded(String),
6870    /// <p>The specified entity was not found.</p>
6871    NotFound(String),
6872    /// <p>There was a problem with the service account.</p>
6873    ServiceAccount(String),
6874}
6875
6876impl UpdateInstanceProfileError {
6877    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateInstanceProfileError> {
6878        if let Some(err) = proto::json::Error::parse(&res) {
6879            match err.typ.as_str() {
6880                "ArgumentException" => {
6881                    return RusotoError::Service(UpdateInstanceProfileError::Argument(err.msg))
6882                }
6883                "LimitExceededException" => {
6884                    return RusotoError::Service(UpdateInstanceProfileError::LimitExceeded(err.msg))
6885                }
6886                "NotFoundException" => {
6887                    return RusotoError::Service(UpdateInstanceProfileError::NotFound(err.msg))
6888                }
6889                "ServiceAccountException" => {
6890                    return RusotoError::Service(UpdateInstanceProfileError::ServiceAccount(
6891                        err.msg,
6892                    ))
6893                }
6894                "ValidationException" => return RusotoError::Validation(err.msg),
6895                _ => {}
6896            }
6897        }
6898        RusotoError::Unknown(res)
6899    }
6900}
6901impl fmt::Display for UpdateInstanceProfileError {
6902    #[allow(unused_variables)]
6903    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6904        match *self {
6905            UpdateInstanceProfileError::Argument(ref cause) => write!(f, "{}", cause),
6906            UpdateInstanceProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
6907            UpdateInstanceProfileError::NotFound(ref cause) => write!(f, "{}", cause),
6908            UpdateInstanceProfileError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6909        }
6910    }
6911}
6912impl Error for UpdateInstanceProfileError {}
6913/// Errors returned by UpdateNetworkProfile
6914#[derive(Debug, PartialEq)]
6915pub enum UpdateNetworkProfileError {
6916    /// <p>An invalid argument was specified.</p>
6917    Argument(String),
6918    /// <p>A limit was exceeded.</p>
6919    LimitExceeded(String),
6920    /// <p>The specified entity was not found.</p>
6921    NotFound(String),
6922    /// <p>There was a problem with the service account.</p>
6923    ServiceAccount(String),
6924}
6925
6926impl UpdateNetworkProfileError {
6927    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateNetworkProfileError> {
6928        if let Some(err) = proto::json::Error::parse(&res) {
6929            match err.typ.as_str() {
6930                "ArgumentException" => {
6931                    return RusotoError::Service(UpdateNetworkProfileError::Argument(err.msg))
6932                }
6933                "LimitExceededException" => {
6934                    return RusotoError::Service(UpdateNetworkProfileError::LimitExceeded(err.msg))
6935                }
6936                "NotFoundException" => {
6937                    return RusotoError::Service(UpdateNetworkProfileError::NotFound(err.msg))
6938                }
6939                "ServiceAccountException" => {
6940                    return RusotoError::Service(UpdateNetworkProfileError::ServiceAccount(err.msg))
6941                }
6942                "ValidationException" => return RusotoError::Validation(err.msg),
6943                _ => {}
6944            }
6945        }
6946        RusotoError::Unknown(res)
6947    }
6948}
6949impl fmt::Display for UpdateNetworkProfileError {
6950    #[allow(unused_variables)]
6951    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6952        match *self {
6953            UpdateNetworkProfileError::Argument(ref cause) => write!(f, "{}", cause),
6954            UpdateNetworkProfileError::LimitExceeded(ref cause) => write!(f, "{}", cause),
6955            UpdateNetworkProfileError::NotFound(ref cause) => write!(f, "{}", cause),
6956            UpdateNetworkProfileError::ServiceAccount(ref cause) => write!(f, "{}", cause),
6957        }
6958    }
6959}
6960impl Error for UpdateNetworkProfileError {}
6961/// Errors returned by UpdateProject
6962#[derive(Debug, PartialEq)]
6963pub enum UpdateProjectError {
6964    /// <p>An invalid argument was specified.</p>
6965    Argument(String),
6966    /// <p>A limit was exceeded.</p>
6967    LimitExceeded(String),
6968    /// <p>The specified entity was not found.</p>
6969    NotFound(String),
6970    /// <p>There was a problem with the service account.</p>
6971    ServiceAccount(String),
6972}
6973
6974impl UpdateProjectError {
6975    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateProjectError> {
6976        if let Some(err) = proto::json::Error::parse(&res) {
6977            match err.typ.as_str() {
6978                "ArgumentException" => {
6979                    return RusotoError::Service(UpdateProjectError::Argument(err.msg))
6980                }
6981                "LimitExceededException" => {
6982                    return RusotoError::Service(UpdateProjectError::LimitExceeded(err.msg))
6983                }
6984                "NotFoundException" => {
6985                    return RusotoError::Service(UpdateProjectError::NotFound(err.msg))
6986                }
6987                "ServiceAccountException" => {
6988                    return RusotoError::Service(UpdateProjectError::ServiceAccount(err.msg))
6989                }
6990                "ValidationException" => return RusotoError::Validation(err.msg),
6991                _ => {}
6992            }
6993        }
6994        RusotoError::Unknown(res)
6995    }
6996}
6997impl fmt::Display for UpdateProjectError {
6998    #[allow(unused_variables)]
6999    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
7000        match *self {
7001            UpdateProjectError::Argument(ref cause) => write!(f, "{}", cause),
7002            UpdateProjectError::LimitExceeded(ref cause) => write!(f, "{}", cause),
7003            UpdateProjectError::NotFound(ref cause) => write!(f, "{}", cause),
7004            UpdateProjectError::ServiceAccount(ref cause) => write!(f, "{}", cause),
7005        }
7006    }
7007}
7008impl Error for UpdateProjectError {}
7009/// Errors returned by UpdateTestGridProject
7010#[derive(Debug, PartialEq)]
7011pub enum UpdateTestGridProjectError {
7012    /// <p>An invalid argument was specified.</p>
7013    Argument(String),
7014    /// <p>An internal exception was raised in the service. Contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a> if you see this error. </p>
7015    InternalService(String),
7016    /// <p>The specified entity was not found.</p>
7017    NotFound(String),
7018}
7019
7020impl UpdateTestGridProjectError {
7021    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateTestGridProjectError> {
7022        if let Some(err) = proto::json::Error::parse(&res) {
7023            match err.typ.as_str() {
7024                "ArgumentException" => {
7025                    return RusotoError::Service(UpdateTestGridProjectError::Argument(err.msg))
7026                }
7027                "InternalServiceException" => {
7028                    return RusotoError::Service(UpdateTestGridProjectError::InternalService(
7029                        err.msg,
7030                    ))
7031                }
7032                "NotFoundException" => {
7033                    return RusotoError::Service(UpdateTestGridProjectError::NotFound(err.msg))
7034                }
7035                "ValidationException" => return RusotoError::Validation(err.msg),
7036                _ => {}
7037            }
7038        }
7039        RusotoError::Unknown(res)
7040    }
7041}
7042impl fmt::Display for UpdateTestGridProjectError {
7043    #[allow(unused_variables)]
7044    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
7045        match *self {
7046            UpdateTestGridProjectError::Argument(ref cause) => write!(f, "{}", cause),
7047            UpdateTestGridProjectError::InternalService(ref cause) => write!(f, "{}", cause),
7048            UpdateTestGridProjectError::NotFound(ref cause) => write!(f, "{}", cause),
7049        }
7050    }
7051}
7052impl Error for UpdateTestGridProjectError {}
7053/// Errors returned by UpdateUpload
7054#[derive(Debug, PartialEq)]
7055pub enum UpdateUploadError {
7056    /// <p>An invalid argument was specified.</p>
7057    Argument(String),
7058    /// <p>A limit was exceeded.</p>
7059    LimitExceeded(String),
7060    /// <p>The specified entity was not found.</p>
7061    NotFound(String),
7062    /// <p>There was a problem with the service account.</p>
7063    ServiceAccount(String),
7064}
7065
7066impl UpdateUploadError {
7067    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateUploadError> {
7068        if let Some(err) = proto::json::Error::parse(&res) {
7069            match err.typ.as_str() {
7070                "ArgumentException" => {
7071                    return RusotoError::Service(UpdateUploadError::Argument(err.msg))
7072                }
7073                "LimitExceededException" => {
7074                    return RusotoError::Service(UpdateUploadError::LimitExceeded(err.msg))
7075                }
7076                "NotFoundException" => {
7077                    return RusotoError::Service(UpdateUploadError::NotFound(err.msg))
7078                }
7079                "ServiceAccountException" => {
7080                    return RusotoError::Service(UpdateUploadError::ServiceAccount(err.msg))
7081                }
7082                "ValidationException" => return RusotoError::Validation(err.msg),
7083                _ => {}
7084            }
7085        }
7086        RusotoError::Unknown(res)
7087    }
7088}
7089impl fmt::Display for UpdateUploadError {
7090    #[allow(unused_variables)]
7091    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
7092        match *self {
7093            UpdateUploadError::Argument(ref cause) => write!(f, "{}", cause),
7094            UpdateUploadError::LimitExceeded(ref cause) => write!(f, "{}", cause),
7095            UpdateUploadError::NotFound(ref cause) => write!(f, "{}", cause),
7096            UpdateUploadError::ServiceAccount(ref cause) => write!(f, "{}", cause),
7097        }
7098    }
7099}
7100impl Error for UpdateUploadError {}
7101/// Errors returned by UpdateVPCEConfiguration
7102#[derive(Debug, PartialEq)]
7103pub enum UpdateVPCEConfigurationError {
7104    /// <p>An invalid argument was specified.</p>
7105    Argument(String),
7106    /// <p>There was an error with the update request, or you do not have sufficient permissions to update this VPC endpoint configuration.</p>
7107    InvalidOperation(String),
7108    /// <p>The specified entity was not found.</p>
7109    NotFound(String),
7110    /// <p>There was a problem with the service account.</p>
7111    ServiceAccount(String),
7112}
7113
7114impl UpdateVPCEConfigurationError {
7115    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateVPCEConfigurationError> {
7116        if let Some(err) = proto::json::Error::parse(&res) {
7117            match err.typ.as_str() {
7118                "ArgumentException" => {
7119                    return RusotoError::Service(UpdateVPCEConfigurationError::Argument(err.msg))
7120                }
7121                "InvalidOperationException" => {
7122                    return RusotoError::Service(UpdateVPCEConfigurationError::InvalidOperation(
7123                        err.msg,
7124                    ))
7125                }
7126                "NotFoundException" => {
7127                    return RusotoError::Service(UpdateVPCEConfigurationError::NotFound(err.msg))
7128                }
7129                "ServiceAccountException" => {
7130                    return RusotoError::Service(UpdateVPCEConfigurationError::ServiceAccount(
7131                        err.msg,
7132                    ))
7133                }
7134                "ValidationException" => return RusotoError::Validation(err.msg),
7135                _ => {}
7136            }
7137        }
7138        RusotoError::Unknown(res)
7139    }
7140}
7141impl fmt::Display for UpdateVPCEConfigurationError {
7142    #[allow(unused_variables)]
7143    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
7144        match *self {
7145            UpdateVPCEConfigurationError::Argument(ref cause) => write!(f, "{}", cause),
7146            UpdateVPCEConfigurationError::InvalidOperation(ref cause) => write!(f, "{}", cause),
7147            UpdateVPCEConfigurationError::NotFound(ref cause) => write!(f, "{}", cause),
7148            UpdateVPCEConfigurationError::ServiceAccount(ref cause) => write!(f, "{}", cause),
7149        }
7150    }
7151}
7152impl Error for UpdateVPCEConfigurationError {}
7153/// Trait representing the capabilities of the AWS Device Farm API. AWS Device Farm clients implement this trait.
7154#[async_trait]
7155pub trait DeviceFarm {
7156    /// <p>Creates a device pool.</p>
7157    async fn create_device_pool(
7158        &self,
7159        input: CreateDevicePoolRequest,
7160    ) -> Result<CreateDevicePoolResult, RusotoError<CreateDevicePoolError>>;
7161
7162    /// <p>Creates a profile that can be applied to one or more private fleet device instances.</p>
7163    async fn create_instance_profile(
7164        &self,
7165        input: CreateInstanceProfileRequest,
7166    ) -> Result<CreateInstanceProfileResult, RusotoError<CreateInstanceProfileError>>;
7167
7168    /// <p>Creates a network profile.</p>
7169    async fn create_network_profile(
7170        &self,
7171        input: CreateNetworkProfileRequest,
7172    ) -> Result<CreateNetworkProfileResult, RusotoError<CreateNetworkProfileError>>;
7173
7174    /// <p>Creates a project.</p>
7175    async fn create_project(
7176        &self,
7177        input: CreateProjectRequest,
7178    ) -> Result<CreateProjectResult, RusotoError<CreateProjectError>>;
7179
7180    /// <p>Specifies and starts a remote access session.</p>
7181    async fn create_remote_access_session(
7182        &self,
7183        input: CreateRemoteAccessSessionRequest,
7184    ) -> Result<CreateRemoteAccessSessionResult, RusotoError<CreateRemoteAccessSessionError>>;
7185
7186    /// <p>Creates a Selenium testing project. Projects are used to track <a>TestGridSession</a> instances.</p>
7187    async fn create_test_grid_project(
7188        &self,
7189        input: CreateTestGridProjectRequest,
7190    ) -> Result<CreateTestGridProjectResult, RusotoError<CreateTestGridProjectError>>;
7191
7192    /// <p>Creates a signed, short-term URL that can be passed to a Selenium <code>RemoteWebDriver</code> constructor.</p>
7193    async fn create_test_grid_url(
7194        &self,
7195        input: CreateTestGridUrlRequest,
7196    ) -> Result<CreateTestGridUrlResult, RusotoError<CreateTestGridUrlError>>;
7197
7198    /// <p>Uploads an app or test scripts.</p>
7199    async fn create_upload(
7200        &self,
7201        input: CreateUploadRequest,
7202    ) -> Result<CreateUploadResult, RusotoError<CreateUploadError>>;
7203
7204    /// <p>Creates a configuration record in Device Farm for your Amazon Virtual Private Cloud (VPC) endpoint.</p>
7205    async fn create_vpce_configuration(
7206        &self,
7207        input: CreateVPCEConfigurationRequest,
7208    ) -> Result<CreateVPCEConfigurationResult, RusotoError<CreateVPCEConfigurationError>>;
7209
7210    /// <p>Deletes a device pool given the pool ARN. Does not allow deletion of curated pools owned by the system.</p>
7211    async fn delete_device_pool(
7212        &self,
7213        input: DeleteDevicePoolRequest,
7214    ) -> Result<DeleteDevicePoolResult, RusotoError<DeleteDevicePoolError>>;
7215
7216    /// <p>Deletes a profile that can be applied to one or more private device instances.</p>
7217    async fn delete_instance_profile(
7218        &self,
7219        input: DeleteInstanceProfileRequest,
7220    ) -> Result<DeleteInstanceProfileResult, RusotoError<DeleteInstanceProfileError>>;
7221
7222    /// <p>Deletes a network profile.</p>
7223    async fn delete_network_profile(
7224        &self,
7225        input: DeleteNetworkProfileRequest,
7226    ) -> Result<DeleteNetworkProfileResult, RusotoError<DeleteNetworkProfileError>>;
7227
7228    /// <p>Deletes an AWS Device Farm project, given the project ARN.</p> <p> Deleting this resource does not stop an in-progress run.</p>
7229    async fn delete_project(
7230        &self,
7231        input: DeleteProjectRequest,
7232    ) -> Result<DeleteProjectResult, RusotoError<DeleteProjectError>>;
7233
7234    /// <p>Deletes a completed remote access session and its results.</p>
7235    async fn delete_remote_access_session(
7236        &self,
7237        input: DeleteRemoteAccessSessionRequest,
7238    ) -> Result<DeleteRemoteAccessSessionResult, RusotoError<DeleteRemoteAccessSessionError>>;
7239
7240    /// <p>Deletes the run, given the run ARN.</p> <p> Deleting this resource does not stop an in-progress run.</p>
7241    async fn delete_run(
7242        &self,
7243        input: DeleteRunRequest,
7244    ) -> Result<DeleteRunResult, RusotoError<DeleteRunError>>;
7245
7246    /// <p><p> Deletes a Selenium testing project and all content generated under it. </p> <important> <p>You cannot undo this operation.</p> </important> <note> <p>You cannot delete a project if it has active sessions.</p> </note></p>
7247    async fn delete_test_grid_project(
7248        &self,
7249        input: DeleteTestGridProjectRequest,
7250    ) -> Result<DeleteTestGridProjectResult, RusotoError<DeleteTestGridProjectError>>;
7251
7252    /// <p>Deletes an upload given the upload ARN.</p>
7253    async fn delete_upload(
7254        &self,
7255        input: DeleteUploadRequest,
7256    ) -> Result<DeleteUploadResult, RusotoError<DeleteUploadError>>;
7257
7258    /// <p>Deletes a configuration for your Amazon Virtual Private Cloud (VPC) endpoint.</p>
7259    async fn delete_vpce_configuration(
7260        &self,
7261        input: DeleteVPCEConfigurationRequest,
7262    ) -> Result<DeleteVPCEConfigurationResult, RusotoError<DeleteVPCEConfigurationError>>;
7263
7264    /// <p>Returns the number of unmetered iOS or unmetered Android devices that have been purchased by the account.</p>
7265    async fn get_account_settings(
7266        &self,
7267    ) -> Result<GetAccountSettingsResult, RusotoError<GetAccountSettingsError>>;
7268
7269    /// <p>Gets information about a unique device type.</p>
7270    async fn get_device(
7271        &self,
7272        input: GetDeviceRequest,
7273    ) -> Result<GetDeviceResult, RusotoError<GetDeviceError>>;
7274
7275    /// <p>Returns information about a device instance that belongs to a private device fleet.</p>
7276    async fn get_device_instance(
7277        &self,
7278        input: GetDeviceInstanceRequest,
7279    ) -> Result<GetDeviceInstanceResult, RusotoError<GetDeviceInstanceError>>;
7280
7281    /// <p>Gets information about a device pool.</p>
7282    async fn get_device_pool(
7283        &self,
7284        input: GetDevicePoolRequest,
7285    ) -> Result<GetDevicePoolResult, RusotoError<GetDevicePoolError>>;
7286
7287    /// <p>Gets information about compatibility with a device pool.</p>
7288    async fn get_device_pool_compatibility(
7289        &self,
7290        input: GetDevicePoolCompatibilityRequest,
7291    ) -> Result<GetDevicePoolCompatibilityResult, RusotoError<GetDevicePoolCompatibilityError>>;
7292
7293    /// <p>Returns information about the specified instance profile.</p>
7294    async fn get_instance_profile(
7295        &self,
7296        input: GetInstanceProfileRequest,
7297    ) -> Result<GetInstanceProfileResult, RusotoError<GetInstanceProfileError>>;
7298
7299    /// <p>Gets information about a job.</p>
7300    async fn get_job(&self, input: GetJobRequest)
7301        -> Result<GetJobResult, RusotoError<GetJobError>>;
7302
7303    /// <p>Returns information about a network profile.</p>
7304    async fn get_network_profile(
7305        &self,
7306        input: GetNetworkProfileRequest,
7307    ) -> Result<GetNetworkProfileResult, RusotoError<GetNetworkProfileError>>;
7308
7309    /// <p>Gets the current status and future status of all offerings purchased by an AWS account. The response indicates how many offerings are currently available and the offerings that will be available in the next period. The API returns a <code>NotEligible</code> error if the user is not permitted to invoke the operation. If you must be able to invoke this operation, contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a>.</p>
7310    async fn get_offering_status(
7311        &self,
7312        input: GetOfferingStatusRequest,
7313    ) -> Result<GetOfferingStatusResult, RusotoError<GetOfferingStatusError>>;
7314
7315    /// <p>Gets information about a project.</p>
7316    async fn get_project(
7317        &self,
7318        input: GetProjectRequest,
7319    ) -> Result<GetProjectResult, RusotoError<GetProjectError>>;
7320
7321    /// <p>Returns a link to a currently running remote access session.</p>
7322    async fn get_remote_access_session(
7323        &self,
7324        input: GetRemoteAccessSessionRequest,
7325    ) -> Result<GetRemoteAccessSessionResult, RusotoError<GetRemoteAccessSessionError>>;
7326
7327    /// <p>Gets information about a run.</p>
7328    async fn get_run(&self, input: GetRunRequest)
7329        -> Result<GetRunResult, RusotoError<GetRunError>>;
7330
7331    /// <p>Gets information about a suite.</p>
7332    async fn get_suite(
7333        &self,
7334        input: GetSuiteRequest,
7335    ) -> Result<GetSuiteResult, RusotoError<GetSuiteError>>;
7336
7337    /// <p>Gets information about a test.</p>
7338    async fn get_test(
7339        &self,
7340        input: GetTestRequest,
7341    ) -> Result<GetTestResult, RusotoError<GetTestError>>;
7342
7343    /// <p>Retrieves information about a Selenium testing project.</p>
7344    async fn get_test_grid_project(
7345        &self,
7346        input: GetTestGridProjectRequest,
7347    ) -> Result<GetTestGridProjectResult, RusotoError<GetTestGridProjectError>>;
7348
7349    /// <p><p>A session is an instance of a browser created through a <code>RemoteWebDriver</code> with the URL from <a>CreateTestGridUrlResult$url</a>. You can use the following to look up sessions:</p> <ul> <li> <p>The session ARN (<a>GetTestGridSessionRequest$sessionArn</a>).</p> </li> <li> <p>The project ARN and a session ID (<a>GetTestGridSessionRequest$projectArn</a> and <a>GetTestGridSessionRequest$sessionId</a>).</p> </li> </ul> <p/></p>
7350    async fn get_test_grid_session(
7351        &self,
7352        input: GetTestGridSessionRequest,
7353    ) -> Result<GetTestGridSessionResult, RusotoError<GetTestGridSessionError>>;
7354
7355    /// <p>Gets information about an upload.</p>
7356    async fn get_upload(
7357        &self,
7358        input: GetUploadRequest,
7359    ) -> Result<GetUploadResult, RusotoError<GetUploadError>>;
7360
7361    /// <p>Returns information about the configuration settings for your Amazon Virtual Private Cloud (VPC) endpoint.</p>
7362    async fn get_vpce_configuration(
7363        &self,
7364        input: GetVPCEConfigurationRequest,
7365    ) -> Result<GetVPCEConfigurationResult, RusotoError<GetVPCEConfigurationError>>;
7366
7367    /// <p>Installs an application to the device in a remote access session. For Android applications, the file must be in .apk format. For iOS applications, the file must be in .ipa format.</p>
7368    async fn install_to_remote_access_session(
7369        &self,
7370        input: InstallToRemoteAccessSessionRequest,
7371    ) -> Result<InstallToRemoteAccessSessionResult, RusotoError<InstallToRemoteAccessSessionError>>;
7372
7373    /// <p>Gets information about artifacts.</p>
7374    async fn list_artifacts(
7375        &self,
7376        input: ListArtifactsRequest,
7377    ) -> Result<ListArtifactsResult, RusotoError<ListArtifactsError>>;
7378
7379    /// <p>Returns information about the private device instances associated with one or more AWS accounts.</p>
7380    async fn list_device_instances(
7381        &self,
7382        input: ListDeviceInstancesRequest,
7383    ) -> Result<ListDeviceInstancesResult, RusotoError<ListDeviceInstancesError>>;
7384
7385    /// <p>Gets information about device pools.</p>
7386    async fn list_device_pools(
7387        &self,
7388        input: ListDevicePoolsRequest,
7389    ) -> Result<ListDevicePoolsResult, RusotoError<ListDevicePoolsError>>;
7390
7391    /// <p>Gets information about unique device types.</p>
7392    async fn list_devices(
7393        &self,
7394        input: ListDevicesRequest,
7395    ) -> Result<ListDevicesResult, RusotoError<ListDevicesError>>;
7396
7397    /// <p>Returns information about all the instance profiles in an AWS account.</p>
7398    async fn list_instance_profiles(
7399        &self,
7400        input: ListInstanceProfilesRequest,
7401    ) -> Result<ListInstanceProfilesResult, RusotoError<ListInstanceProfilesError>>;
7402
7403    /// <p>Gets information about jobs for a given test run.</p>
7404    async fn list_jobs(
7405        &self,
7406        input: ListJobsRequest,
7407    ) -> Result<ListJobsResult, RusotoError<ListJobsError>>;
7408
7409    /// <p>Returns the list of available network profiles.</p>
7410    async fn list_network_profiles(
7411        &self,
7412        input: ListNetworkProfilesRequest,
7413    ) -> Result<ListNetworkProfilesResult, RusotoError<ListNetworkProfilesError>>;
7414
7415    /// <p>Returns a list of offering promotions. Each offering promotion record contains the ID and description of the promotion. The API returns a <code>NotEligible</code> error if the caller is not permitted to invoke the operation. Contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a> if you must be able to invoke this operation.</p>
7416    async fn list_offering_promotions(
7417        &self,
7418        input: ListOfferingPromotionsRequest,
7419    ) -> Result<ListOfferingPromotionsResult, RusotoError<ListOfferingPromotionsError>>;
7420
7421    /// <p>Returns a list of all historical purchases, renewals, and system renewal transactions for an AWS account. The list is paginated and ordered by a descending timestamp (most recent transactions are first). The API returns a <code>NotEligible</code> error if the user is not permitted to invoke the operation. If you must be able to invoke this operation, contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a>.</p>
7422    async fn list_offering_transactions(
7423        &self,
7424        input: ListOfferingTransactionsRequest,
7425    ) -> Result<ListOfferingTransactionsResult, RusotoError<ListOfferingTransactionsError>>;
7426
7427    /// <p>Returns a list of products or offerings that the user can manage through the API. Each offering record indicates the recurring price per unit and the frequency for that offering. The API returns a <code>NotEligible</code> error if the user is not permitted to invoke the operation. If you must be able to invoke this operation, contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a>.</p>
7428    async fn list_offerings(
7429        &self,
7430        input: ListOfferingsRequest,
7431    ) -> Result<ListOfferingsResult, RusotoError<ListOfferingsError>>;
7432
7433    /// <p>Gets information about projects.</p>
7434    async fn list_projects(
7435        &self,
7436        input: ListProjectsRequest,
7437    ) -> Result<ListProjectsResult, RusotoError<ListProjectsError>>;
7438
7439    /// <p>Returns a list of all currently running remote access sessions.</p>
7440    async fn list_remote_access_sessions(
7441        &self,
7442        input: ListRemoteAccessSessionsRequest,
7443    ) -> Result<ListRemoteAccessSessionsResult, RusotoError<ListRemoteAccessSessionsError>>;
7444
7445    /// <p>Gets information about runs, given an AWS Device Farm project ARN.</p>
7446    async fn list_runs(
7447        &self,
7448        input: ListRunsRequest,
7449    ) -> Result<ListRunsResult, RusotoError<ListRunsError>>;
7450
7451    /// <p>Gets information about samples, given an AWS Device Farm job ARN.</p>
7452    async fn list_samples(
7453        &self,
7454        input: ListSamplesRequest,
7455    ) -> Result<ListSamplesResult, RusotoError<ListSamplesError>>;
7456
7457    /// <p>Gets information about test suites for a given job.</p>
7458    async fn list_suites(
7459        &self,
7460        input: ListSuitesRequest,
7461    ) -> Result<ListSuitesResult, RusotoError<ListSuitesError>>;
7462
7463    /// <p>List the tags for an AWS Device Farm resource.</p>
7464    async fn list_tags_for_resource(
7465        &self,
7466        input: ListTagsForResourceRequest,
7467    ) -> Result<ListTagsForResourceResponse, RusotoError<ListTagsForResourceError>>;
7468
7469    /// <p>Gets a list of all Selenium testing projects in your account.</p>
7470    async fn list_test_grid_projects(
7471        &self,
7472        input: ListTestGridProjectsRequest,
7473    ) -> Result<ListTestGridProjectsResult, RusotoError<ListTestGridProjectsError>>;
7474
7475    /// <p>Returns a list of the actions taken in a <a>TestGridSession</a>.</p>
7476    async fn list_test_grid_session_actions(
7477        &self,
7478        input: ListTestGridSessionActionsRequest,
7479    ) -> Result<ListTestGridSessionActionsResult, RusotoError<ListTestGridSessionActionsError>>;
7480
7481    /// <p>Retrieves a list of artifacts created during the session.</p>
7482    async fn list_test_grid_session_artifacts(
7483        &self,
7484        input: ListTestGridSessionArtifactsRequest,
7485    ) -> Result<ListTestGridSessionArtifactsResult, RusotoError<ListTestGridSessionArtifactsError>>;
7486
7487    /// <p>Retrieves a list of sessions for a <a>TestGridProject</a>.</p>
7488    async fn list_test_grid_sessions(
7489        &self,
7490        input: ListTestGridSessionsRequest,
7491    ) -> Result<ListTestGridSessionsResult, RusotoError<ListTestGridSessionsError>>;
7492
7493    /// <p>Gets information about tests in a given test suite.</p>
7494    async fn list_tests(
7495        &self,
7496        input: ListTestsRequest,
7497    ) -> Result<ListTestsResult, RusotoError<ListTestsError>>;
7498
7499    /// <p>Gets information about unique problems, such as exceptions or crashes.</p> <p>Unique problems are defined as a single instance of an error across a run, job, or suite. For example, if a call in your application consistently raises an exception (<code>OutOfBoundsException in MyActivity.java:386</code>), <code>ListUniqueProblems</code> returns a single entry instead of many individual entries for that exception.</p>
7500    async fn list_unique_problems(
7501        &self,
7502        input: ListUniqueProblemsRequest,
7503    ) -> Result<ListUniqueProblemsResult, RusotoError<ListUniqueProblemsError>>;
7504
7505    /// <p>Gets information about uploads, given an AWS Device Farm project ARN.</p>
7506    async fn list_uploads(
7507        &self,
7508        input: ListUploadsRequest,
7509    ) -> Result<ListUploadsResult, RusotoError<ListUploadsError>>;
7510
7511    /// <p>Returns information about all Amazon Virtual Private Cloud (VPC) endpoint configurations in the AWS account.</p>
7512    async fn list_vpce_configurations(
7513        &self,
7514        input: ListVPCEConfigurationsRequest,
7515    ) -> Result<ListVPCEConfigurationsResult, RusotoError<ListVPCEConfigurationsError>>;
7516
7517    /// <p>Immediately purchases offerings for an AWS account. Offerings renew with the latest total purchased quantity for an offering, unless the renewal was overridden. The API returns a <code>NotEligible</code> error if the user is not permitted to invoke the operation. If you must be able to invoke this operation, contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a>.</p>
7518    async fn purchase_offering(
7519        &self,
7520        input: PurchaseOfferingRequest,
7521    ) -> Result<PurchaseOfferingResult, RusotoError<PurchaseOfferingError>>;
7522
7523    /// <p>Explicitly sets the quantity of devices to renew for an offering, starting from the <code>effectiveDate</code> of the next period. The API returns a <code>NotEligible</code> error if the user is not permitted to invoke the operation. If you must be able to invoke this operation, contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a>.</p>
7524    async fn renew_offering(
7525        &self,
7526        input: RenewOfferingRequest,
7527    ) -> Result<RenewOfferingResult, RusotoError<RenewOfferingError>>;
7528
7529    /// <p>Schedules a run.</p>
7530    async fn schedule_run(
7531        &self,
7532        input: ScheduleRunRequest,
7533    ) -> Result<ScheduleRunResult, RusotoError<ScheduleRunError>>;
7534
7535    /// <p>Initiates a stop request for the current job. AWS Device Farm immediately stops the job on the device where tests have not started. You are not billed for this device. On the device where tests have started, setup suite and teardown suite tests run to completion on the device. You are billed for setup, teardown, and any tests that were in progress or already completed.</p>
7536    async fn stop_job(
7537        &self,
7538        input: StopJobRequest,
7539    ) -> Result<StopJobResult, RusotoError<StopJobError>>;
7540
7541    /// <p>Ends a specified remote access session.</p>
7542    async fn stop_remote_access_session(
7543        &self,
7544        input: StopRemoteAccessSessionRequest,
7545    ) -> Result<StopRemoteAccessSessionResult, RusotoError<StopRemoteAccessSessionError>>;
7546
7547    /// <p>Initiates a stop request for the current test run. AWS Device Farm immediately stops the run on devices where tests have not started. You are not billed for these devices. On devices where tests have started executing, setup suite and teardown suite tests run to completion on those devices. You are billed for setup, teardown, and any tests that were in progress or already completed.</p>
7548    async fn stop_run(
7549        &self,
7550        input: StopRunRequest,
7551    ) -> Result<StopRunResult, RusotoError<StopRunError>>;
7552
7553    /// <p>Associates the specified tags to a resource with the specified <code>resourceArn</code>. If existing tags on a resource are not specified in the request parameters, they are not changed. When a resource is deleted, the tags associated with that resource are also deleted.</p>
7554    async fn tag_resource(
7555        &self,
7556        input: TagResourceRequest,
7557    ) -> Result<TagResourceResponse, RusotoError<TagResourceError>>;
7558
7559    /// <p>Deletes the specified tags from a resource.</p>
7560    async fn untag_resource(
7561        &self,
7562        input: UntagResourceRequest,
7563    ) -> Result<UntagResourceResponse, RusotoError<UntagResourceError>>;
7564
7565    /// <p>Updates information about a private device instance.</p>
7566    async fn update_device_instance(
7567        &self,
7568        input: UpdateDeviceInstanceRequest,
7569    ) -> Result<UpdateDeviceInstanceResult, RusotoError<UpdateDeviceInstanceError>>;
7570
7571    /// <p>Modifies the name, description, and rules in a device pool given the attributes and the pool ARN. Rule updates are all-or-nothing, meaning they can only be updated as a whole (or not at all).</p>
7572    async fn update_device_pool(
7573        &self,
7574        input: UpdateDevicePoolRequest,
7575    ) -> Result<UpdateDevicePoolResult, RusotoError<UpdateDevicePoolError>>;
7576
7577    /// <p>Updates information about an existing private device instance profile.</p>
7578    async fn update_instance_profile(
7579        &self,
7580        input: UpdateInstanceProfileRequest,
7581    ) -> Result<UpdateInstanceProfileResult, RusotoError<UpdateInstanceProfileError>>;
7582
7583    /// <p>Updates the network profile.</p>
7584    async fn update_network_profile(
7585        &self,
7586        input: UpdateNetworkProfileRequest,
7587    ) -> Result<UpdateNetworkProfileResult, RusotoError<UpdateNetworkProfileError>>;
7588
7589    /// <p>Modifies the specified project name, given the project ARN and a new name.</p>
7590    async fn update_project(
7591        &self,
7592        input: UpdateProjectRequest,
7593    ) -> Result<UpdateProjectResult, RusotoError<UpdateProjectError>>;
7594
7595    /// <p>Change details of a project.</p>
7596    async fn update_test_grid_project(
7597        &self,
7598        input: UpdateTestGridProjectRequest,
7599    ) -> Result<UpdateTestGridProjectResult, RusotoError<UpdateTestGridProjectError>>;
7600
7601    /// <p>Updates an uploaded test spec.</p>
7602    async fn update_upload(
7603        &self,
7604        input: UpdateUploadRequest,
7605    ) -> Result<UpdateUploadResult, RusotoError<UpdateUploadError>>;
7606
7607    /// <p>Updates information about an Amazon Virtual Private Cloud (VPC) endpoint configuration.</p>
7608    async fn update_vpce_configuration(
7609        &self,
7610        input: UpdateVPCEConfigurationRequest,
7611    ) -> Result<UpdateVPCEConfigurationResult, RusotoError<UpdateVPCEConfigurationError>>;
7612}
7613/// A client for the AWS Device Farm API.
7614#[derive(Clone)]
7615pub struct DeviceFarmClient {
7616    client: Client,
7617    region: region::Region,
7618}
7619
7620impl DeviceFarmClient {
7621    /// Creates a client backed by the default tokio event loop.
7622    ///
7623    /// The client will use the default credentials provider and tls client.
7624    pub fn new(region: region::Region) -> DeviceFarmClient {
7625        DeviceFarmClient {
7626            client: Client::shared(),
7627            region,
7628        }
7629    }
7630
7631    pub fn new_with<P, D>(
7632        request_dispatcher: D,
7633        credentials_provider: P,
7634        region: region::Region,
7635    ) -> DeviceFarmClient
7636    where
7637        P: ProvideAwsCredentials + Send + Sync + 'static,
7638        D: DispatchSignedRequest + Send + Sync + 'static,
7639    {
7640        DeviceFarmClient {
7641            client: Client::new_with(credentials_provider, request_dispatcher),
7642            region,
7643        }
7644    }
7645
7646    pub fn new_with_client(client: Client, region: region::Region) -> DeviceFarmClient {
7647        DeviceFarmClient { client, region }
7648    }
7649}
7650
7651#[async_trait]
7652impl DeviceFarm for DeviceFarmClient {
7653    /// <p>Creates a device pool.</p>
7654    async fn create_device_pool(
7655        &self,
7656        input: CreateDevicePoolRequest,
7657    ) -> Result<CreateDevicePoolResult, RusotoError<CreateDevicePoolError>> {
7658        let mut request = self.new_signed_request("POST", "/");
7659        request.add_header("x-amz-target", "DeviceFarm_20150623.CreateDevicePool");
7660        let encoded = serde_json::to_string(&input).unwrap();
7661        request.set_payload(Some(encoded));
7662
7663        let response = self
7664            .sign_and_dispatch(request, CreateDevicePoolError::from_response)
7665            .await?;
7666        let mut response = response;
7667        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7668        proto::json::ResponsePayload::new(&response).deserialize::<CreateDevicePoolResult, _>()
7669    }
7670
7671    /// <p>Creates a profile that can be applied to one or more private fleet device instances.</p>
7672    async fn create_instance_profile(
7673        &self,
7674        input: CreateInstanceProfileRequest,
7675    ) -> Result<CreateInstanceProfileResult, RusotoError<CreateInstanceProfileError>> {
7676        let mut request = self.new_signed_request("POST", "/");
7677        request.add_header("x-amz-target", "DeviceFarm_20150623.CreateInstanceProfile");
7678        let encoded = serde_json::to_string(&input).unwrap();
7679        request.set_payload(Some(encoded));
7680
7681        let response = self
7682            .sign_and_dispatch(request, CreateInstanceProfileError::from_response)
7683            .await?;
7684        let mut response = response;
7685        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7686        proto::json::ResponsePayload::new(&response).deserialize::<CreateInstanceProfileResult, _>()
7687    }
7688
7689    /// <p>Creates a network profile.</p>
7690    async fn create_network_profile(
7691        &self,
7692        input: CreateNetworkProfileRequest,
7693    ) -> Result<CreateNetworkProfileResult, RusotoError<CreateNetworkProfileError>> {
7694        let mut request = self.new_signed_request("POST", "/");
7695        request.add_header("x-amz-target", "DeviceFarm_20150623.CreateNetworkProfile");
7696        let encoded = serde_json::to_string(&input).unwrap();
7697        request.set_payload(Some(encoded));
7698
7699        let response = self
7700            .sign_and_dispatch(request, CreateNetworkProfileError::from_response)
7701            .await?;
7702        let mut response = response;
7703        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7704        proto::json::ResponsePayload::new(&response).deserialize::<CreateNetworkProfileResult, _>()
7705    }
7706
7707    /// <p>Creates a project.</p>
7708    async fn create_project(
7709        &self,
7710        input: CreateProjectRequest,
7711    ) -> Result<CreateProjectResult, RusotoError<CreateProjectError>> {
7712        let mut request = self.new_signed_request("POST", "/");
7713        request.add_header("x-amz-target", "DeviceFarm_20150623.CreateProject");
7714        let encoded = serde_json::to_string(&input).unwrap();
7715        request.set_payload(Some(encoded));
7716
7717        let response = self
7718            .sign_and_dispatch(request, CreateProjectError::from_response)
7719            .await?;
7720        let mut response = response;
7721        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7722        proto::json::ResponsePayload::new(&response).deserialize::<CreateProjectResult, _>()
7723    }
7724
7725    /// <p>Specifies and starts a remote access session.</p>
7726    async fn create_remote_access_session(
7727        &self,
7728        input: CreateRemoteAccessSessionRequest,
7729    ) -> Result<CreateRemoteAccessSessionResult, RusotoError<CreateRemoteAccessSessionError>> {
7730        let mut request = self.new_signed_request("POST", "/");
7731        request.add_header(
7732            "x-amz-target",
7733            "DeviceFarm_20150623.CreateRemoteAccessSession",
7734        );
7735        let encoded = serde_json::to_string(&input).unwrap();
7736        request.set_payload(Some(encoded));
7737
7738        let response = self
7739            .sign_and_dispatch(request, CreateRemoteAccessSessionError::from_response)
7740            .await?;
7741        let mut response = response;
7742        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7743        proto::json::ResponsePayload::new(&response)
7744            .deserialize::<CreateRemoteAccessSessionResult, _>()
7745    }
7746
7747    /// <p>Creates a Selenium testing project. Projects are used to track <a>TestGridSession</a> instances.</p>
7748    async fn create_test_grid_project(
7749        &self,
7750        input: CreateTestGridProjectRequest,
7751    ) -> Result<CreateTestGridProjectResult, RusotoError<CreateTestGridProjectError>> {
7752        let mut request = self.new_signed_request("POST", "/");
7753        request.add_header("x-amz-target", "DeviceFarm_20150623.CreateTestGridProject");
7754        let encoded = serde_json::to_string(&input).unwrap();
7755        request.set_payload(Some(encoded));
7756
7757        let response = self
7758            .sign_and_dispatch(request, CreateTestGridProjectError::from_response)
7759            .await?;
7760        let mut response = response;
7761        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7762        proto::json::ResponsePayload::new(&response).deserialize::<CreateTestGridProjectResult, _>()
7763    }
7764
7765    /// <p>Creates a signed, short-term URL that can be passed to a Selenium <code>RemoteWebDriver</code> constructor.</p>
7766    async fn create_test_grid_url(
7767        &self,
7768        input: CreateTestGridUrlRequest,
7769    ) -> Result<CreateTestGridUrlResult, RusotoError<CreateTestGridUrlError>> {
7770        let mut request = self.new_signed_request("POST", "/");
7771        request.add_header("x-amz-target", "DeviceFarm_20150623.CreateTestGridUrl");
7772        let encoded = serde_json::to_string(&input).unwrap();
7773        request.set_payload(Some(encoded));
7774
7775        let response = self
7776            .sign_and_dispatch(request, CreateTestGridUrlError::from_response)
7777            .await?;
7778        let mut response = response;
7779        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7780        proto::json::ResponsePayload::new(&response).deserialize::<CreateTestGridUrlResult, _>()
7781    }
7782
7783    /// <p>Uploads an app or test scripts.</p>
7784    async fn create_upload(
7785        &self,
7786        input: CreateUploadRequest,
7787    ) -> Result<CreateUploadResult, RusotoError<CreateUploadError>> {
7788        let mut request = self.new_signed_request("POST", "/");
7789        request.add_header("x-amz-target", "DeviceFarm_20150623.CreateUpload");
7790        let encoded = serde_json::to_string(&input).unwrap();
7791        request.set_payload(Some(encoded));
7792
7793        let response = self
7794            .sign_and_dispatch(request, CreateUploadError::from_response)
7795            .await?;
7796        let mut response = response;
7797        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7798        proto::json::ResponsePayload::new(&response).deserialize::<CreateUploadResult, _>()
7799    }
7800
7801    /// <p>Creates a configuration record in Device Farm for your Amazon Virtual Private Cloud (VPC) endpoint.</p>
7802    async fn create_vpce_configuration(
7803        &self,
7804        input: CreateVPCEConfigurationRequest,
7805    ) -> Result<CreateVPCEConfigurationResult, RusotoError<CreateVPCEConfigurationError>> {
7806        let mut request = self.new_signed_request("POST", "/");
7807        request.add_header(
7808            "x-amz-target",
7809            "DeviceFarm_20150623.CreateVPCEConfiguration",
7810        );
7811        let encoded = serde_json::to_string(&input).unwrap();
7812        request.set_payload(Some(encoded));
7813
7814        let response = self
7815            .sign_and_dispatch(request, CreateVPCEConfigurationError::from_response)
7816            .await?;
7817        let mut response = response;
7818        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7819        proto::json::ResponsePayload::new(&response)
7820            .deserialize::<CreateVPCEConfigurationResult, _>()
7821    }
7822
7823    /// <p>Deletes a device pool given the pool ARN. Does not allow deletion of curated pools owned by the system.</p>
7824    async fn delete_device_pool(
7825        &self,
7826        input: DeleteDevicePoolRequest,
7827    ) -> Result<DeleteDevicePoolResult, RusotoError<DeleteDevicePoolError>> {
7828        let mut request = self.new_signed_request("POST", "/");
7829        request.add_header("x-amz-target", "DeviceFarm_20150623.DeleteDevicePool");
7830        let encoded = serde_json::to_string(&input).unwrap();
7831        request.set_payload(Some(encoded));
7832
7833        let response = self
7834            .sign_and_dispatch(request, DeleteDevicePoolError::from_response)
7835            .await?;
7836        let mut response = response;
7837        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7838        proto::json::ResponsePayload::new(&response).deserialize::<DeleteDevicePoolResult, _>()
7839    }
7840
7841    /// <p>Deletes a profile that can be applied to one or more private device instances.</p>
7842    async fn delete_instance_profile(
7843        &self,
7844        input: DeleteInstanceProfileRequest,
7845    ) -> Result<DeleteInstanceProfileResult, RusotoError<DeleteInstanceProfileError>> {
7846        let mut request = self.new_signed_request("POST", "/");
7847        request.add_header("x-amz-target", "DeviceFarm_20150623.DeleteInstanceProfile");
7848        let encoded = serde_json::to_string(&input).unwrap();
7849        request.set_payload(Some(encoded));
7850
7851        let response = self
7852            .sign_and_dispatch(request, DeleteInstanceProfileError::from_response)
7853            .await?;
7854        let mut response = response;
7855        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7856        proto::json::ResponsePayload::new(&response).deserialize::<DeleteInstanceProfileResult, _>()
7857    }
7858
7859    /// <p>Deletes a network profile.</p>
7860    async fn delete_network_profile(
7861        &self,
7862        input: DeleteNetworkProfileRequest,
7863    ) -> Result<DeleteNetworkProfileResult, RusotoError<DeleteNetworkProfileError>> {
7864        let mut request = self.new_signed_request("POST", "/");
7865        request.add_header("x-amz-target", "DeviceFarm_20150623.DeleteNetworkProfile");
7866        let encoded = serde_json::to_string(&input).unwrap();
7867        request.set_payload(Some(encoded));
7868
7869        let response = self
7870            .sign_and_dispatch(request, DeleteNetworkProfileError::from_response)
7871            .await?;
7872        let mut response = response;
7873        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7874        proto::json::ResponsePayload::new(&response).deserialize::<DeleteNetworkProfileResult, _>()
7875    }
7876
7877    /// <p>Deletes an AWS Device Farm project, given the project ARN.</p> <p> Deleting this resource does not stop an in-progress run.</p>
7878    async fn delete_project(
7879        &self,
7880        input: DeleteProjectRequest,
7881    ) -> Result<DeleteProjectResult, RusotoError<DeleteProjectError>> {
7882        let mut request = self.new_signed_request("POST", "/");
7883        request.add_header("x-amz-target", "DeviceFarm_20150623.DeleteProject");
7884        let encoded = serde_json::to_string(&input).unwrap();
7885        request.set_payload(Some(encoded));
7886
7887        let response = self
7888            .sign_and_dispatch(request, DeleteProjectError::from_response)
7889            .await?;
7890        let mut response = response;
7891        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7892        proto::json::ResponsePayload::new(&response).deserialize::<DeleteProjectResult, _>()
7893    }
7894
7895    /// <p>Deletes a completed remote access session and its results.</p>
7896    async fn delete_remote_access_session(
7897        &self,
7898        input: DeleteRemoteAccessSessionRequest,
7899    ) -> Result<DeleteRemoteAccessSessionResult, RusotoError<DeleteRemoteAccessSessionError>> {
7900        let mut request = self.new_signed_request("POST", "/");
7901        request.add_header(
7902            "x-amz-target",
7903            "DeviceFarm_20150623.DeleteRemoteAccessSession",
7904        );
7905        let encoded = serde_json::to_string(&input).unwrap();
7906        request.set_payload(Some(encoded));
7907
7908        let response = self
7909            .sign_and_dispatch(request, DeleteRemoteAccessSessionError::from_response)
7910            .await?;
7911        let mut response = response;
7912        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7913        proto::json::ResponsePayload::new(&response)
7914            .deserialize::<DeleteRemoteAccessSessionResult, _>()
7915    }
7916
7917    /// <p>Deletes the run, given the run ARN.</p> <p> Deleting this resource does not stop an in-progress run.</p>
7918    async fn delete_run(
7919        &self,
7920        input: DeleteRunRequest,
7921    ) -> Result<DeleteRunResult, RusotoError<DeleteRunError>> {
7922        let mut request = self.new_signed_request("POST", "/");
7923        request.add_header("x-amz-target", "DeviceFarm_20150623.DeleteRun");
7924        let encoded = serde_json::to_string(&input).unwrap();
7925        request.set_payload(Some(encoded));
7926
7927        let response = self
7928            .sign_and_dispatch(request, DeleteRunError::from_response)
7929            .await?;
7930        let mut response = response;
7931        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7932        proto::json::ResponsePayload::new(&response).deserialize::<DeleteRunResult, _>()
7933    }
7934
7935    /// <p><p> Deletes a Selenium testing project and all content generated under it. </p> <important> <p>You cannot undo this operation.</p> </important> <note> <p>You cannot delete a project if it has active sessions.</p> </note></p>
7936    async fn delete_test_grid_project(
7937        &self,
7938        input: DeleteTestGridProjectRequest,
7939    ) -> Result<DeleteTestGridProjectResult, RusotoError<DeleteTestGridProjectError>> {
7940        let mut request = self.new_signed_request("POST", "/");
7941        request.add_header("x-amz-target", "DeviceFarm_20150623.DeleteTestGridProject");
7942        let encoded = serde_json::to_string(&input).unwrap();
7943        request.set_payload(Some(encoded));
7944
7945        let response = self
7946            .sign_and_dispatch(request, DeleteTestGridProjectError::from_response)
7947            .await?;
7948        let mut response = response;
7949        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7950        proto::json::ResponsePayload::new(&response).deserialize::<DeleteTestGridProjectResult, _>()
7951    }
7952
7953    /// <p>Deletes an upload given the upload ARN.</p>
7954    async fn delete_upload(
7955        &self,
7956        input: DeleteUploadRequest,
7957    ) -> Result<DeleteUploadResult, RusotoError<DeleteUploadError>> {
7958        let mut request = self.new_signed_request("POST", "/");
7959        request.add_header("x-amz-target", "DeviceFarm_20150623.DeleteUpload");
7960        let encoded = serde_json::to_string(&input).unwrap();
7961        request.set_payload(Some(encoded));
7962
7963        let response = self
7964            .sign_and_dispatch(request, DeleteUploadError::from_response)
7965            .await?;
7966        let mut response = response;
7967        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7968        proto::json::ResponsePayload::new(&response).deserialize::<DeleteUploadResult, _>()
7969    }
7970
7971    /// <p>Deletes a configuration for your Amazon Virtual Private Cloud (VPC) endpoint.</p>
7972    async fn delete_vpce_configuration(
7973        &self,
7974        input: DeleteVPCEConfigurationRequest,
7975    ) -> Result<DeleteVPCEConfigurationResult, RusotoError<DeleteVPCEConfigurationError>> {
7976        let mut request = self.new_signed_request("POST", "/");
7977        request.add_header(
7978            "x-amz-target",
7979            "DeviceFarm_20150623.DeleteVPCEConfiguration",
7980        );
7981        let encoded = serde_json::to_string(&input).unwrap();
7982        request.set_payload(Some(encoded));
7983
7984        let response = self
7985            .sign_and_dispatch(request, DeleteVPCEConfigurationError::from_response)
7986            .await?;
7987        let mut response = response;
7988        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7989        proto::json::ResponsePayload::new(&response)
7990            .deserialize::<DeleteVPCEConfigurationResult, _>()
7991    }
7992
7993    /// <p>Returns the number of unmetered iOS or unmetered Android devices that have been purchased by the account.</p>
7994    async fn get_account_settings(
7995        &self,
7996    ) -> Result<GetAccountSettingsResult, RusotoError<GetAccountSettingsError>> {
7997        let mut request = self.new_signed_request("POST", "/");
7998        request.add_header("x-amz-target", "DeviceFarm_20150623.GetAccountSettings");
7999        request.set_payload(Some(bytes::Bytes::from_static(b"{}")));
8000
8001        let response = self
8002            .sign_and_dispatch(request, GetAccountSettingsError::from_response)
8003            .await?;
8004        let mut response = response;
8005        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8006        proto::json::ResponsePayload::new(&response).deserialize::<GetAccountSettingsResult, _>()
8007    }
8008
8009    /// <p>Gets information about a unique device type.</p>
8010    async fn get_device(
8011        &self,
8012        input: GetDeviceRequest,
8013    ) -> Result<GetDeviceResult, RusotoError<GetDeviceError>> {
8014        let mut request = self.new_signed_request("POST", "/");
8015        request.add_header("x-amz-target", "DeviceFarm_20150623.GetDevice");
8016        let encoded = serde_json::to_string(&input).unwrap();
8017        request.set_payload(Some(encoded));
8018
8019        let response = self
8020            .sign_and_dispatch(request, GetDeviceError::from_response)
8021            .await?;
8022        let mut response = response;
8023        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8024        proto::json::ResponsePayload::new(&response).deserialize::<GetDeviceResult, _>()
8025    }
8026
8027    /// <p>Returns information about a device instance that belongs to a private device fleet.</p>
8028    async fn get_device_instance(
8029        &self,
8030        input: GetDeviceInstanceRequest,
8031    ) -> Result<GetDeviceInstanceResult, RusotoError<GetDeviceInstanceError>> {
8032        let mut request = self.new_signed_request("POST", "/");
8033        request.add_header("x-amz-target", "DeviceFarm_20150623.GetDeviceInstance");
8034        let encoded = serde_json::to_string(&input).unwrap();
8035        request.set_payload(Some(encoded));
8036
8037        let response = self
8038            .sign_and_dispatch(request, GetDeviceInstanceError::from_response)
8039            .await?;
8040        let mut response = response;
8041        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8042        proto::json::ResponsePayload::new(&response).deserialize::<GetDeviceInstanceResult, _>()
8043    }
8044
8045    /// <p>Gets information about a device pool.</p>
8046    async fn get_device_pool(
8047        &self,
8048        input: GetDevicePoolRequest,
8049    ) -> Result<GetDevicePoolResult, RusotoError<GetDevicePoolError>> {
8050        let mut request = self.new_signed_request("POST", "/");
8051        request.add_header("x-amz-target", "DeviceFarm_20150623.GetDevicePool");
8052        let encoded = serde_json::to_string(&input).unwrap();
8053        request.set_payload(Some(encoded));
8054
8055        let response = self
8056            .sign_and_dispatch(request, GetDevicePoolError::from_response)
8057            .await?;
8058        let mut response = response;
8059        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8060        proto::json::ResponsePayload::new(&response).deserialize::<GetDevicePoolResult, _>()
8061    }
8062
8063    /// <p>Gets information about compatibility with a device pool.</p>
8064    async fn get_device_pool_compatibility(
8065        &self,
8066        input: GetDevicePoolCompatibilityRequest,
8067    ) -> Result<GetDevicePoolCompatibilityResult, RusotoError<GetDevicePoolCompatibilityError>>
8068    {
8069        let mut request = self.new_signed_request("POST", "/");
8070        request.add_header(
8071            "x-amz-target",
8072            "DeviceFarm_20150623.GetDevicePoolCompatibility",
8073        );
8074        let encoded = serde_json::to_string(&input).unwrap();
8075        request.set_payload(Some(encoded));
8076
8077        let response = self
8078            .sign_and_dispatch(request, GetDevicePoolCompatibilityError::from_response)
8079            .await?;
8080        let mut response = response;
8081        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8082        proto::json::ResponsePayload::new(&response)
8083            .deserialize::<GetDevicePoolCompatibilityResult, _>()
8084    }
8085
8086    /// <p>Returns information about the specified instance profile.</p>
8087    async fn get_instance_profile(
8088        &self,
8089        input: GetInstanceProfileRequest,
8090    ) -> Result<GetInstanceProfileResult, RusotoError<GetInstanceProfileError>> {
8091        let mut request = self.new_signed_request("POST", "/");
8092        request.add_header("x-amz-target", "DeviceFarm_20150623.GetInstanceProfile");
8093        let encoded = serde_json::to_string(&input).unwrap();
8094        request.set_payload(Some(encoded));
8095
8096        let response = self
8097            .sign_and_dispatch(request, GetInstanceProfileError::from_response)
8098            .await?;
8099        let mut response = response;
8100        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8101        proto::json::ResponsePayload::new(&response).deserialize::<GetInstanceProfileResult, _>()
8102    }
8103
8104    /// <p>Gets information about a job.</p>
8105    async fn get_job(
8106        &self,
8107        input: GetJobRequest,
8108    ) -> Result<GetJobResult, RusotoError<GetJobError>> {
8109        let mut request = self.new_signed_request("POST", "/");
8110        request.add_header("x-amz-target", "DeviceFarm_20150623.GetJob");
8111        let encoded = serde_json::to_string(&input).unwrap();
8112        request.set_payload(Some(encoded));
8113
8114        let response = self
8115            .sign_and_dispatch(request, GetJobError::from_response)
8116            .await?;
8117        let mut response = response;
8118        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8119        proto::json::ResponsePayload::new(&response).deserialize::<GetJobResult, _>()
8120    }
8121
8122    /// <p>Returns information about a network profile.</p>
8123    async fn get_network_profile(
8124        &self,
8125        input: GetNetworkProfileRequest,
8126    ) -> Result<GetNetworkProfileResult, RusotoError<GetNetworkProfileError>> {
8127        let mut request = self.new_signed_request("POST", "/");
8128        request.add_header("x-amz-target", "DeviceFarm_20150623.GetNetworkProfile");
8129        let encoded = serde_json::to_string(&input).unwrap();
8130        request.set_payload(Some(encoded));
8131
8132        let response = self
8133            .sign_and_dispatch(request, GetNetworkProfileError::from_response)
8134            .await?;
8135        let mut response = response;
8136        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8137        proto::json::ResponsePayload::new(&response).deserialize::<GetNetworkProfileResult, _>()
8138    }
8139
8140    /// <p>Gets the current status and future status of all offerings purchased by an AWS account. The response indicates how many offerings are currently available and the offerings that will be available in the next period. The API returns a <code>NotEligible</code> error if the user is not permitted to invoke the operation. If you must be able to invoke this operation, contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a>.</p>
8141    async fn get_offering_status(
8142        &self,
8143        input: GetOfferingStatusRequest,
8144    ) -> Result<GetOfferingStatusResult, RusotoError<GetOfferingStatusError>> {
8145        let mut request = self.new_signed_request("POST", "/");
8146        request.add_header("x-amz-target", "DeviceFarm_20150623.GetOfferingStatus");
8147        let encoded = serde_json::to_string(&input).unwrap();
8148        request.set_payload(Some(encoded));
8149
8150        let response = self
8151            .sign_and_dispatch(request, GetOfferingStatusError::from_response)
8152            .await?;
8153        let mut response = response;
8154        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8155        proto::json::ResponsePayload::new(&response).deserialize::<GetOfferingStatusResult, _>()
8156    }
8157
8158    /// <p>Gets information about a project.</p>
8159    async fn get_project(
8160        &self,
8161        input: GetProjectRequest,
8162    ) -> Result<GetProjectResult, RusotoError<GetProjectError>> {
8163        let mut request = self.new_signed_request("POST", "/");
8164        request.add_header("x-amz-target", "DeviceFarm_20150623.GetProject");
8165        let encoded = serde_json::to_string(&input).unwrap();
8166        request.set_payload(Some(encoded));
8167
8168        let response = self
8169            .sign_and_dispatch(request, GetProjectError::from_response)
8170            .await?;
8171        let mut response = response;
8172        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8173        proto::json::ResponsePayload::new(&response).deserialize::<GetProjectResult, _>()
8174    }
8175
8176    /// <p>Returns a link to a currently running remote access session.</p>
8177    async fn get_remote_access_session(
8178        &self,
8179        input: GetRemoteAccessSessionRequest,
8180    ) -> Result<GetRemoteAccessSessionResult, RusotoError<GetRemoteAccessSessionError>> {
8181        let mut request = self.new_signed_request("POST", "/");
8182        request.add_header("x-amz-target", "DeviceFarm_20150623.GetRemoteAccessSession");
8183        let encoded = serde_json::to_string(&input).unwrap();
8184        request.set_payload(Some(encoded));
8185
8186        let response = self
8187            .sign_and_dispatch(request, GetRemoteAccessSessionError::from_response)
8188            .await?;
8189        let mut response = response;
8190        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8191        proto::json::ResponsePayload::new(&response)
8192            .deserialize::<GetRemoteAccessSessionResult, _>()
8193    }
8194
8195    /// <p>Gets information about a run.</p>
8196    async fn get_run(
8197        &self,
8198        input: GetRunRequest,
8199    ) -> Result<GetRunResult, RusotoError<GetRunError>> {
8200        let mut request = self.new_signed_request("POST", "/");
8201        request.add_header("x-amz-target", "DeviceFarm_20150623.GetRun");
8202        let encoded = serde_json::to_string(&input).unwrap();
8203        request.set_payload(Some(encoded));
8204
8205        let response = self
8206            .sign_and_dispatch(request, GetRunError::from_response)
8207            .await?;
8208        let mut response = response;
8209        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8210        proto::json::ResponsePayload::new(&response).deserialize::<GetRunResult, _>()
8211    }
8212
8213    /// <p>Gets information about a suite.</p>
8214    async fn get_suite(
8215        &self,
8216        input: GetSuiteRequest,
8217    ) -> Result<GetSuiteResult, RusotoError<GetSuiteError>> {
8218        let mut request = self.new_signed_request("POST", "/");
8219        request.add_header("x-amz-target", "DeviceFarm_20150623.GetSuite");
8220        let encoded = serde_json::to_string(&input).unwrap();
8221        request.set_payload(Some(encoded));
8222
8223        let response = self
8224            .sign_and_dispatch(request, GetSuiteError::from_response)
8225            .await?;
8226        let mut response = response;
8227        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8228        proto::json::ResponsePayload::new(&response).deserialize::<GetSuiteResult, _>()
8229    }
8230
8231    /// <p>Gets information about a test.</p>
8232    async fn get_test(
8233        &self,
8234        input: GetTestRequest,
8235    ) -> Result<GetTestResult, RusotoError<GetTestError>> {
8236        let mut request = self.new_signed_request("POST", "/");
8237        request.add_header("x-amz-target", "DeviceFarm_20150623.GetTest");
8238        let encoded = serde_json::to_string(&input).unwrap();
8239        request.set_payload(Some(encoded));
8240
8241        let response = self
8242            .sign_and_dispatch(request, GetTestError::from_response)
8243            .await?;
8244        let mut response = response;
8245        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8246        proto::json::ResponsePayload::new(&response).deserialize::<GetTestResult, _>()
8247    }
8248
8249    /// <p>Retrieves information about a Selenium testing project.</p>
8250    async fn get_test_grid_project(
8251        &self,
8252        input: GetTestGridProjectRequest,
8253    ) -> Result<GetTestGridProjectResult, RusotoError<GetTestGridProjectError>> {
8254        let mut request = self.new_signed_request("POST", "/");
8255        request.add_header("x-amz-target", "DeviceFarm_20150623.GetTestGridProject");
8256        let encoded = serde_json::to_string(&input).unwrap();
8257        request.set_payload(Some(encoded));
8258
8259        let response = self
8260            .sign_and_dispatch(request, GetTestGridProjectError::from_response)
8261            .await?;
8262        let mut response = response;
8263        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8264        proto::json::ResponsePayload::new(&response).deserialize::<GetTestGridProjectResult, _>()
8265    }
8266
8267    /// <p><p>A session is an instance of a browser created through a <code>RemoteWebDriver</code> with the URL from <a>CreateTestGridUrlResult$url</a>. You can use the following to look up sessions:</p> <ul> <li> <p>The session ARN (<a>GetTestGridSessionRequest$sessionArn</a>).</p> </li> <li> <p>The project ARN and a session ID (<a>GetTestGridSessionRequest$projectArn</a> and <a>GetTestGridSessionRequest$sessionId</a>).</p> </li> </ul> <p/></p>
8268    async fn get_test_grid_session(
8269        &self,
8270        input: GetTestGridSessionRequest,
8271    ) -> Result<GetTestGridSessionResult, RusotoError<GetTestGridSessionError>> {
8272        let mut request = self.new_signed_request("POST", "/");
8273        request.add_header("x-amz-target", "DeviceFarm_20150623.GetTestGridSession");
8274        let encoded = serde_json::to_string(&input).unwrap();
8275        request.set_payload(Some(encoded));
8276
8277        let response = self
8278            .sign_and_dispatch(request, GetTestGridSessionError::from_response)
8279            .await?;
8280        let mut response = response;
8281        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8282        proto::json::ResponsePayload::new(&response).deserialize::<GetTestGridSessionResult, _>()
8283    }
8284
8285    /// <p>Gets information about an upload.</p>
8286    async fn get_upload(
8287        &self,
8288        input: GetUploadRequest,
8289    ) -> Result<GetUploadResult, RusotoError<GetUploadError>> {
8290        let mut request = self.new_signed_request("POST", "/");
8291        request.add_header("x-amz-target", "DeviceFarm_20150623.GetUpload");
8292        let encoded = serde_json::to_string(&input).unwrap();
8293        request.set_payload(Some(encoded));
8294
8295        let response = self
8296            .sign_and_dispatch(request, GetUploadError::from_response)
8297            .await?;
8298        let mut response = response;
8299        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8300        proto::json::ResponsePayload::new(&response).deserialize::<GetUploadResult, _>()
8301    }
8302
8303    /// <p>Returns information about the configuration settings for your Amazon Virtual Private Cloud (VPC) endpoint.</p>
8304    async fn get_vpce_configuration(
8305        &self,
8306        input: GetVPCEConfigurationRequest,
8307    ) -> Result<GetVPCEConfigurationResult, RusotoError<GetVPCEConfigurationError>> {
8308        let mut request = self.new_signed_request("POST", "/");
8309        request.add_header("x-amz-target", "DeviceFarm_20150623.GetVPCEConfiguration");
8310        let encoded = serde_json::to_string(&input).unwrap();
8311        request.set_payload(Some(encoded));
8312
8313        let response = self
8314            .sign_and_dispatch(request, GetVPCEConfigurationError::from_response)
8315            .await?;
8316        let mut response = response;
8317        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8318        proto::json::ResponsePayload::new(&response).deserialize::<GetVPCEConfigurationResult, _>()
8319    }
8320
8321    /// <p>Installs an application to the device in a remote access session. For Android applications, the file must be in .apk format. For iOS applications, the file must be in .ipa format.</p>
8322    async fn install_to_remote_access_session(
8323        &self,
8324        input: InstallToRemoteAccessSessionRequest,
8325    ) -> Result<InstallToRemoteAccessSessionResult, RusotoError<InstallToRemoteAccessSessionError>>
8326    {
8327        let mut request = self.new_signed_request("POST", "/");
8328        request.add_header(
8329            "x-amz-target",
8330            "DeviceFarm_20150623.InstallToRemoteAccessSession",
8331        );
8332        let encoded = serde_json::to_string(&input).unwrap();
8333        request.set_payload(Some(encoded));
8334
8335        let response = self
8336            .sign_and_dispatch(request, InstallToRemoteAccessSessionError::from_response)
8337            .await?;
8338        let mut response = response;
8339        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8340        proto::json::ResponsePayload::new(&response)
8341            .deserialize::<InstallToRemoteAccessSessionResult, _>()
8342    }
8343
8344    /// <p>Gets information about artifacts.</p>
8345    async fn list_artifacts(
8346        &self,
8347        input: ListArtifactsRequest,
8348    ) -> Result<ListArtifactsResult, RusotoError<ListArtifactsError>> {
8349        let mut request = self.new_signed_request("POST", "/");
8350        request.add_header("x-amz-target", "DeviceFarm_20150623.ListArtifacts");
8351        let encoded = serde_json::to_string(&input).unwrap();
8352        request.set_payload(Some(encoded));
8353
8354        let response = self
8355            .sign_and_dispatch(request, ListArtifactsError::from_response)
8356            .await?;
8357        let mut response = response;
8358        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8359        proto::json::ResponsePayload::new(&response).deserialize::<ListArtifactsResult, _>()
8360    }
8361
8362    /// <p>Returns information about the private device instances associated with one or more AWS accounts.</p>
8363    async fn list_device_instances(
8364        &self,
8365        input: ListDeviceInstancesRequest,
8366    ) -> Result<ListDeviceInstancesResult, RusotoError<ListDeviceInstancesError>> {
8367        let mut request = self.new_signed_request("POST", "/");
8368        request.add_header("x-amz-target", "DeviceFarm_20150623.ListDeviceInstances");
8369        let encoded = serde_json::to_string(&input).unwrap();
8370        request.set_payload(Some(encoded));
8371
8372        let response = self
8373            .sign_and_dispatch(request, ListDeviceInstancesError::from_response)
8374            .await?;
8375        let mut response = response;
8376        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8377        proto::json::ResponsePayload::new(&response).deserialize::<ListDeviceInstancesResult, _>()
8378    }
8379
8380    /// <p>Gets information about device pools.</p>
8381    async fn list_device_pools(
8382        &self,
8383        input: ListDevicePoolsRequest,
8384    ) -> Result<ListDevicePoolsResult, RusotoError<ListDevicePoolsError>> {
8385        let mut request = self.new_signed_request("POST", "/");
8386        request.add_header("x-amz-target", "DeviceFarm_20150623.ListDevicePools");
8387        let encoded = serde_json::to_string(&input).unwrap();
8388        request.set_payload(Some(encoded));
8389
8390        let response = self
8391            .sign_and_dispatch(request, ListDevicePoolsError::from_response)
8392            .await?;
8393        let mut response = response;
8394        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8395        proto::json::ResponsePayload::new(&response).deserialize::<ListDevicePoolsResult, _>()
8396    }
8397
8398    /// <p>Gets information about unique device types.</p>
8399    async fn list_devices(
8400        &self,
8401        input: ListDevicesRequest,
8402    ) -> Result<ListDevicesResult, RusotoError<ListDevicesError>> {
8403        let mut request = self.new_signed_request("POST", "/");
8404        request.add_header("x-amz-target", "DeviceFarm_20150623.ListDevices");
8405        let encoded = serde_json::to_string(&input).unwrap();
8406        request.set_payload(Some(encoded));
8407
8408        let response = self
8409            .sign_and_dispatch(request, ListDevicesError::from_response)
8410            .await?;
8411        let mut response = response;
8412        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8413        proto::json::ResponsePayload::new(&response).deserialize::<ListDevicesResult, _>()
8414    }
8415
8416    /// <p>Returns information about all the instance profiles in an AWS account.</p>
8417    async fn list_instance_profiles(
8418        &self,
8419        input: ListInstanceProfilesRequest,
8420    ) -> Result<ListInstanceProfilesResult, RusotoError<ListInstanceProfilesError>> {
8421        let mut request = self.new_signed_request("POST", "/");
8422        request.add_header("x-amz-target", "DeviceFarm_20150623.ListInstanceProfiles");
8423        let encoded = serde_json::to_string(&input).unwrap();
8424        request.set_payload(Some(encoded));
8425
8426        let response = self
8427            .sign_and_dispatch(request, ListInstanceProfilesError::from_response)
8428            .await?;
8429        let mut response = response;
8430        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8431        proto::json::ResponsePayload::new(&response).deserialize::<ListInstanceProfilesResult, _>()
8432    }
8433
8434    /// <p>Gets information about jobs for a given test run.</p>
8435    async fn list_jobs(
8436        &self,
8437        input: ListJobsRequest,
8438    ) -> Result<ListJobsResult, RusotoError<ListJobsError>> {
8439        let mut request = self.new_signed_request("POST", "/");
8440        request.add_header("x-amz-target", "DeviceFarm_20150623.ListJobs");
8441        let encoded = serde_json::to_string(&input).unwrap();
8442        request.set_payload(Some(encoded));
8443
8444        let response = self
8445            .sign_and_dispatch(request, ListJobsError::from_response)
8446            .await?;
8447        let mut response = response;
8448        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8449        proto::json::ResponsePayload::new(&response).deserialize::<ListJobsResult, _>()
8450    }
8451
8452    /// <p>Returns the list of available network profiles.</p>
8453    async fn list_network_profiles(
8454        &self,
8455        input: ListNetworkProfilesRequest,
8456    ) -> Result<ListNetworkProfilesResult, RusotoError<ListNetworkProfilesError>> {
8457        let mut request = self.new_signed_request("POST", "/");
8458        request.add_header("x-amz-target", "DeviceFarm_20150623.ListNetworkProfiles");
8459        let encoded = serde_json::to_string(&input).unwrap();
8460        request.set_payload(Some(encoded));
8461
8462        let response = self
8463            .sign_and_dispatch(request, ListNetworkProfilesError::from_response)
8464            .await?;
8465        let mut response = response;
8466        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8467        proto::json::ResponsePayload::new(&response).deserialize::<ListNetworkProfilesResult, _>()
8468    }
8469
8470    /// <p>Returns a list of offering promotions. Each offering promotion record contains the ID and description of the promotion. The API returns a <code>NotEligible</code> error if the caller is not permitted to invoke the operation. Contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a> if you must be able to invoke this operation.</p>
8471    async fn list_offering_promotions(
8472        &self,
8473        input: ListOfferingPromotionsRequest,
8474    ) -> Result<ListOfferingPromotionsResult, RusotoError<ListOfferingPromotionsError>> {
8475        let mut request = self.new_signed_request("POST", "/");
8476        request.add_header("x-amz-target", "DeviceFarm_20150623.ListOfferingPromotions");
8477        let encoded = serde_json::to_string(&input).unwrap();
8478        request.set_payload(Some(encoded));
8479
8480        let response = self
8481            .sign_and_dispatch(request, ListOfferingPromotionsError::from_response)
8482            .await?;
8483        let mut response = response;
8484        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8485        proto::json::ResponsePayload::new(&response)
8486            .deserialize::<ListOfferingPromotionsResult, _>()
8487    }
8488
8489    /// <p>Returns a list of all historical purchases, renewals, and system renewal transactions for an AWS account. The list is paginated and ordered by a descending timestamp (most recent transactions are first). The API returns a <code>NotEligible</code> error if the user is not permitted to invoke the operation. If you must be able to invoke this operation, contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a>.</p>
8490    async fn list_offering_transactions(
8491        &self,
8492        input: ListOfferingTransactionsRequest,
8493    ) -> Result<ListOfferingTransactionsResult, RusotoError<ListOfferingTransactionsError>> {
8494        let mut request = self.new_signed_request("POST", "/");
8495        request.add_header(
8496            "x-amz-target",
8497            "DeviceFarm_20150623.ListOfferingTransactions",
8498        );
8499        let encoded = serde_json::to_string(&input).unwrap();
8500        request.set_payload(Some(encoded));
8501
8502        let response = self
8503            .sign_and_dispatch(request, ListOfferingTransactionsError::from_response)
8504            .await?;
8505        let mut response = response;
8506        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8507        proto::json::ResponsePayload::new(&response)
8508            .deserialize::<ListOfferingTransactionsResult, _>()
8509    }
8510
8511    /// <p>Returns a list of products or offerings that the user can manage through the API. Each offering record indicates the recurring price per unit and the frequency for that offering. The API returns a <code>NotEligible</code> error if the user is not permitted to invoke the operation. If you must be able to invoke this operation, contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a>.</p>
8512    async fn list_offerings(
8513        &self,
8514        input: ListOfferingsRequest,
8515    ) -> Result<ListOfferingsResult, RusotoError<ListOfferingsError>> {
8516        let mut request = self.new_signed_request("POST", "/");
8517        request.add_header("x-amz-target", "DeviceFarm_20150623.ListOfferings");
8518        let encoded = serde_json::to_string(&input).unwrap();
8519        request.set_payload(Some(encoded));
8520
8521        let response = self
8522            .sign_and_dispatch(request, ListOfferingsError::from_response)
8523            .await?;
8524        let mut response = response;
8525        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8526        proto::json::ResponsePayload::new(&response).deserialize::<ListOfferingsResult, _>()
8527    }
8528
8529    /// <p>Gets information about projects.</p>
8530    async fn list_projects(
8531        &self,
8532        input: ListProjectsRequest,
8533    ) -> Result<ListProjectsResult, RusotoError<ListProjectsError>> {
8534        let mut request = self.new_signed_request("POST", "/");
8535        request.add_header("x-amz-target", "DeviceFarm_20150623.ListProjects");
8536        let encoded = serde_json::to_string(&input).unwrap();
8537        request.set_payload(Some(encoded));
8538
8539        let response = self
8540            .sign_and_dispatch(request, ListProjectsError::from_response)
8541            .await?;
8542        let mut response = response;
8543        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8544        proto::json::ResponsePayload::new(&response).deserialize::<ListProjectsResult, _>()
8545    }
8546
8547    /// <p>Returns a list of all currently running remote access sessions.</p>
8548    async fn list_remote_access_sessions(
8549        &self,
8550        input: ListRemoteAccessSessionsRequest,
8551    ) -> Result<ListRemoteAccessSessionsResult, RusotoError<ListRemoteAccessSessionsError>> {
8552        let mut request = self.new_signed_request("POST", "/");
8553        request.add_header(
8554            "x-amz-target",
8555            "DeviceFarm_20150623.ListRemoteAccessSessions",
8556        );
8557        let encoded = serde_json::to_string(&input).unwrap();
8558        request.set_payload(Some(encoded));
8559
8560        let response = self
8561            .sign_and_dispatch(request, ListRemoteAccessSessionsError::from_response)
8562            .await?;
8563        let mut response = response;
8564        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8565        proto::json::ResponsePayload::new(&response)
8566            .deserialize::<ListRemoteAccessSessionsResult, _>()
8567    }
8568
8569    /// <p>Gets information about runs, given an AWS Device Farm project ARN.</p>
8570    async fn list_runs(
8571        &self,
8572        input: ListRunsRequest,
8573    ) -> Result<ListRunsResult, RusotoError<ListRunsError>> {
8574        let mut request = self.new_signed_request("POST", "/");
8575        request.add_header("x-amz-target", "DeviceFarm_20150623.ListRuns");
8576        let encoded = serde_json::to_string(&input).unwrap();
8577        request.set_payload(Some(encoded));
8578
8579        let response = self
8580            .sign_and_dispatch(request, ListRunsError::from_response)
8581            .await?;
8582        let mut response = response;
8583        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8584        proto::json::ResponsePayload::new(&response).deserialize::<ListRunsResult, _>()
8585    }
8586
8587    /// <p>Gets information about samples, given an AWS Device Farm job ARN.</p>
8588    async fn list_samples(
8589        &self,
8590        input: ListSamplesRequest,
8591    ) -> Result<ListSamplesResult, RusotoError<ListSamplesError>> {
8592        let mut request = self.new_signed_request("POST", "/");
8593        request.add_header("x-amz-target", "DeviceFarm_20150623.ListSamples");
8594        let encoded = serde_json::to_string(&input).unwrap();
8595        request.set_payload(Some(encoded));
8596
8597        let response = self
8598            .sign_and_dispatch(request, ListSamplesError::from_response)
8599            .await?;
8600        let mut response = response;
8601        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8602        proto::json::ResponsePayload::new(&response).deserialize::<ListSamplesResult, _>()
8603    }
8604
8605    /// <p>Gets information about test suites for a given job.</p>
8606    async fn list_suites(
8607        &self,
8608        input: ListSuitesRequest,
8609    ) -> Result<ListSuitesResult, RusotoError<ListSuitesError>> {
8610        let mut request = self.new_signed_request("POST", "/");
8611        request.add_header("x-amz-target", "DeviceFarm_20150623.ListSuites");
8612        let encoded = serde_json::to_string(&input).unwrap();
8613        request.set_payload(Some(encoded));
8614
8615        let response = self
8616            .sign_and_dispatch(request, ListSuitesError::from_response)
8617            .await?;
8618        let mut response = response;
8619        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8620        proto::json::ResponsePayload::new(&response).deserialize::<ListSuitesResult, _>()
8621    }
8622
8623    /// <p>List the tags for an AWS Device Farm resource.</p>
8624    async fn list_tags_for_resource(
8625        &self,
8626        input: ListTagsForResourceRequest,
8627    ) -> Result<ListTagsForResourceResponse, RusotoError<ListTagsForResourceError>> {
8628        let mut request = self.new_signed_request("POST", "/");
8629        request.add_header("x-amz-target", "DeviceFarm_20150623.ListTagsForResource");
8630        let encoded = serde_json::to_string(&input).unwrap();
8631        request.set_payload(Some(encoded));
8632
8633        let response = self
8634            .sign_and_dispatch(request, ListTagsForResourceError::from_response)
8635            .await?;
8636        let mut response = response;
8637        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8638        proto::json::ResponsePayload::new(&response).deserialize::<ListTagsForResourceResponse, _>()
8639    }
8640
8641    /// <p>Gets a list of all Selenium testing projects in your account.</p>
8642    async fn list_test_grid_projects(
8643        &self,
8644        input: ListTestGridProjectsRequest,
8645    ) -> Result<ListTestGridProjectsResult, RusotoError<ListTestGridProjectsError>> {
8646        let mut request = self.new_signed_request("POST", "/");
8647        request.add_header("x-amz-target", "DeviceFarm_20150623.ListTestGridProjects");
8648        let encoded = serde_json::to_string(&input).unwrap();
8649        request.set_payload(Some(encoded));
8650
8651        let response = self
8652            .sign_and_dispatch(request, ListTestGridProjectsError::from_response)
8653            .await?;
8654        let mut response = response;
8655        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8656        proto::json::ResponsePayload::new(&response).deserialize::<ListTestGridProjectsResult, _>()
8657    }
8658
8659    /// <p>Returns a list of the actions taken in a <a>TestGridSession</a>.</p>
8660    async fn list_test_grid_session_actions(
8661        &self,
8662        input: ListTestGridSessionActionsRequest,
8663    ) -> Result<ListTestGridSessionActionsResult, RusotoError<ListTestGridSessionActionsError>>
8664    {
8665        let mut request = self.new_signed_request("POST", "/");
8666        request.add_header(
8667            "x-amz-target",
8668            "DeviceFarm_20150623.ListTestGridSessionActions",
8669        );
8670        let encoded = serde_json::to_string(&input).unwrap();
8671        request.set_payload(Some(encoded));
8672
8673        let response = self
8674            .sign_and_dispatch(request, ListTestGridSessionActionsError::from_response)
8675            .await?;
8676        let mut response = response;
8677        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8678        proto::json::ResponsePayload::new(&response)
8679            .deserialize::<ListTestGridSessionActionsResult, _>()
8680    }
8681
8682    /// <p>Retrieves a list of artifacts created during the session.</p>
8683    async fn list_test_grid_session_artifacts(
8684        &self,
8685        input: ListTestGridSessionArtifactsRequest,
8686    ) -> Result<ListTestGridSessionArtifactsResult, RusotoError<ListTestGridSessionArtifactsError>>
8687    {
8688        let mut request = self.new_signed_request("POST", "/");
8689        request.add_header(
8690            "x-amz-target",
8691            "DeviceFarm_20150623.ListTestGridSessionArtifacts",
8692        );
8693        let encoded = serde_json::to_string(&input).unwrap();
8694        request.set_payload(Some(encoded));
8695
8696        let response = self
8697            .sign_and_dispatch(request, ListTestGridSessionArtifactsError::from_response)
8698            .await?;
8699        let mut response = response;
8700        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8701        proto::json::ResponsePayload::new(&response)
8702            .deserialize::<ListTestGridSessionArtifactsResult, _>()
8703    }
8704
8705    /// <p>Retrieves a list of sessions for a <a>TestGridProject</a>.</p>
8706    async fn list_test_grid_sessions(
8707        &self,
8708        input: ListTestGridSessionsRequest,
8709    ) -> Result<ListTestGridSessionsResult, RusotoError<ListTestGridSessionsError>> {
8710        let mut request = self.new_signed_request("POST", "/");
8711        request.add_header("x-amz-target", "DeviceFarm_20150623.ListTestGridSessions");
8712        let encoded = serde_json::to_string(&input).unwrap();
8713        request.set_payload(Some(encoded));
8714
8715        let response = self
8716            .sign_and_dispatch(request, ListTestGridSessionsError::from_response)
8717            .await?;
8718        let mut response = response;
8719        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8720        proto::json::ResponsePayload::new(&response).deserialize::<ListTestGridSessionsResult, _>()
8721    }
8722
8723    /// <p>Gets information about tests in a given test suite.</p>
8724    async fn list_tests(
8725        &self,
8726        input: ListTestsRequest,
8727    ) -> Result<ListTestsResult, RusotoError<ListTestsError>> {
8728        let mut request = self.new_signed_request("POST", "/");
8729        request.add_header("x-amz-target", "DeviceFarm_20150623.ListTests");
8730        let encoded = serde_json::to_string(&input).unwrap();
8731        request.set_payload(Some(encoded));
8732
8733        let response = self
8734            .sign_and_dispatch(request, ListTestsError::from_response)
8735            .await?;
8736        let mut response = response;
8737        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8738        proto::json::ResponsePayload::new(&response).deserialize::<ListTestsResult, _>()
8739    }
8740
8741    /// <p>Gets information about unique problems, such as exceptions or crashes.</p> <p>Unique problems are defined as a single instance of an error across a run, job, or suite. For example, if a call in your application consistently raises an exception (<code>OutOfBoundsException in MyActivity.java:386</code>), <code>ListUniqueProblems</code> returns a single entry instead of many individual entries for that exception.</p>
8742    async fn list_unique_problems(
8743        &self,
8744        input: ListUniqueProblemsRequest,
8745    ) -> Result<ListUniqueProblemsResult, RusotoError<ListUniqueProblemsError>> {
8746        let mut request = self.new_signed_request("POST", "/");
8747        request.add_header("x-amz-target", "DeviceFarm_20150623.ListUniqueProblems");
8748        let encoded = serde_json::to_string(&input).unwrap();
8749        request.set_payload(Some(encoded));
8750
8751        let response = self
8752            .sign_and_dispatch(request, ListUniqueProblemsError::from_response)
8753            .await?;
8754        let mut response = response;
8755        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8756        proto::json::ResponsePayload::new(&response).deserialize::<ListUniqueProblemsResult, _>()
8757    }
8758
8759    /// <p>Gets information about uploads, given an AWS Device Farm project ARN.</p>
8760    async fn list_uploads(
8761        &self,
8762        input: ListUploadsRequest,
8763    ) -> Result<ListUploadsResult, RusotoError<ListUploadsError>> {
8764        let mut request = self.new_signed_request("POST", "/");
8765        request.add_header("x-amz-target", "DeviceFarm_20150623.ListUploads");
8766        let encoded = serde_json::to_string(&input).unwrap();
8767        request.set_payload(Some(encoded));
8768
8769        let response = self
8770            .sign_and_dispatch(request, ListUploadsError::from_response)
8771            .await?;
8772        let mut response = response;
8773        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8774        proto::json::ResponsePayload::new(&response).deserialize::<ListUploadsResult, _>()
8775    }
8776
8777    /// <p>Returns information about all Amazon Virtual Private Cloud (VPC) endpoint configurations in the AWS account.</p>
8778    async fn list_vpce_configurations(
8779        &self,
8780        input: ListVPCEConfigurationsRequest,
8781    ) -> Result<ListVPCEConfigurationsResult, RusotoError<ListVPCEConfigurationsError>> {
8782        let mut request = self.new_signed_request("POST", "/");
8783        request.add_header("x-amz-target", "DeviceFarm_20150623.ListVPCEConfigurations");
8784        let encoded = serde_json::to_string(&input).unwrap();
8785        request.set_payload(Some(encoded));
8786
8787        let response = self
8788            .sign_and_dispatch(request, ListVPCEConfigurationsError::from_response)
8789            .await?;
8790        let mut response = response;
8791        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8792        proto::json::ResponsePayload::new(&response)
8793            .deserialize::<ListVPCEConfigurationsResult, _>()
8794    }
8795
8796    /// <p>Immediately purchases offerings for an AWS account. Offerings renew with the latest total purchased quantity for an offering, unless the renewal was overridden. The API returns a <code>NotEligible</code> error if the user is not permitted to invoke the operation. If you must be able to invoke this operation, contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a>.</p>
8797    async fn purchase_offering(
8798        &self,
8799        input: PurchaseOfferingRequest,
8800    ) -> Result<PurchaseOfferingResult, RusotoError<PurchaseOfferingError>> {
8801        let mut request = self.new_signed_request("POST", "/");
8802        request.add_header("x-amz-target", "DeviceFarm_20150623.PurchaseOffering");
8803        let encoded = serde_json::to_string(&input).unwrap();
8804        request.set_payload(Some(encoded));
8805
8806        let response = self
8807            .sign_and_dispatch(request, PurchaseOfferingError::from_response)
8808            .await?;
8809        let mut response = response;
8810        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8811        proto::json::ResponsePayload::new(&response).deserialize::<PurchaseOfferingResult, _>()
8812    }
8813
8814    /// <p>Explicitly sets the quantity of devices to renew for an offering, starting from the <code>effectiveDate</code> of the next period. The API returns a <code>NotEligible</code> error if the user is not permitted to invoke the operation. If you must be able to invoke this operation, contact <a href="mailto:aws-devicefarm-support@amazon.com">aws-devicefarm-support@amazon.com</a>.</p>
8815    async fn renew_offering(
8816        &self,
8817        input: RenewOfferingRequest,
8818    ) -> Result<RenewOfferingResult, RusotoError<RenewOfferingError>> {
8819        let mut request = self.new_signed_request("POST", "/");
8820        request.add_header("x-amz-target", "DeviceFarm_20150623.RenewOffering");
8821        let encoded = serde_json::to_string(&input).unwrap();
8822        request.set_payload(Some(encoded));
8823
8824        let response = self
8825            .sign_and_dispatch(request, RenewOfferingError::from_response)
8826            .await?;
8827        let mut response = response;
8828        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8829        proto::json::ResponsePayload::new(&response).deserialize::<RenewOfferingResult, _>()
8830    }
8831
8832    /// <p>Schedules a run.</p>
8833    async fn schedule_run(
8834        &self,
8835        input: ScheduleRunRequest,
8836    ) -> Result<ScheduleRunResult, RusotoError<ScheduleRunError>> {
8837        let mut request = self.new_signed_request("POST", "/");
8838        request.add_header("x-amz-target", "DeviceFarm_20150623.ScheduleRun");
8839        let encoded = serde_json::to_string(&input).unwrap();
8840        request.set_payload(Some(encoded));
8841
8842        let response = self
8843            .sign_and_dispatch(request, ScheduleRunError::from_response)
8844            .await?;
8845        let mut response = response;
8846        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8847        proto::json::ResponsePayload::new(&response).deserialize::<ScheduleRunResult, _>()
8848    }
8849
8850    /// <p>Initiates a stop request for the current job. AWS Device Farm immediately stops the job on the device where tests have not started. You are not billed for this device. On the device where tests have started, setup suite and teardown suite tests run to completion on the device. You are billed for setup, teardown, and any tests that were in progress or already completed.</p>
8851    async fn stop_job(
8852        &self,
8853        input: StopJobRequest,
8854    ) -> Result<StopJobResult, RusotoError<StopJobError>> {
8855        let mut request = self.new_signed_request("POST", "/");
8856        request.add_header("x-amz-target", "DeviceFarm_20150623.StopJob");
8857        let encoded = serde_json::to_string(&input).unwrap();
8858        request.set_payload(Some(encoded));
8859
8860        let response = self
8861            .sign_and_dispatch(request, StopJobError::from_response)
8862            .await?;
8863        let mut response = response;
8864        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8865        proto::json::ResponsePayload::new(&response).deserialize::<StopJobResult, _>()
8866    }
8867
8868    /// <p>Ends a specified remote access session.</p>
8869    async fn stop_remote_access_session(
8870        &self,
8871        input: StopRemoteAccessSessionRequest,
8872    ) -> Result<StopRemoteAccessSessionResult, RusotoError<StopRemoteAccessSessionError>> {
8873        let mut request = self.new_signed_request("POST", "/");
8874        request.add_header(
8875            "x-amz-target",
8876            "DeviceFarm_20150623.StopRemoteAccessSession",
8877        );
8878        let encoded = serde_json::to_string(&input).unwrap();
8879        request.set_payload(Some(encoded));
8880
8881        let response = self
8882            .sign_and_dispatch(request, StopRemoteAccessSessionError::from_response)
8883            .await?;
8884        let mut response = response;
8885        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8886        proto::json::ResponsePayload::new(&response)
8887            .deserialize::<StopRemoteAccessSessionResult, _>()
8888    }
8889
8890    /// <p>Initiates a stop request for the current test run. AWS Device Farm immediately stops the run on devices where tests have not started. You are not billed for these devices. On devices where tests have started executing, setup suite and teardown suite tests run to completion on those devices. You are billed for setup, teardown, and any tests that were in progress or already completed.</p>
8891    async fn stop_run(
8892        &self,
8893        input: StopRunRequest,
8894    ) -> Result<StopRunResult, RusotoError<StopRunError>> {
8895        let mut request = self.new_signed_request("POST", "/");
8896        request.add_header("x-amz-target", "DeviceFarm_20150623.StopRun");
8897        let encoded = serde_json::to_string(&input).unwrap();
8898        request.set_payload(Some(encoded));
8899
8900        let response = self
8901            .sign_and_dispatch(request, StopRunError::from_response)
8902            .await?;
8903        let mut response = response;
8904        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8905        proto::json::ResponsePayload::new(&response).deserialize::<StopRunResult, _>()
8906    }
8907
8908    /// <p>Associates the specified tags to a resource with the specified <code>resourceArn</code>. If existing tags on a resource are not specified in the request parameters, they are not changed. When a resource is deleted, the tags associated with that resource are also deleted.</p>
8909    async fn tag_resource(
8910        &self,
8911        input: TagResourceRequest,
8912    ) -> Result<TagResourceResponse, RusotoError<TagResourceError>> {
8913        let mut request = self.new_signed_request("POST", "/");
8914        request.add_header("x-amz-target", "DeviceFarm_20150623.TagResource");
8915        let encoded = serde_json::to_string(&input).unwrap();
8916        request.set_payload(Some(encoded));
8917
8918        let response = self
8919            .sign_and_dispatch(request, TagResourceError::from_response)
8920            .await?;
8921        let mut response = response;
8922        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8923        proto::json::ResponsePayload::new(&response).deserialize::<TagResourceResponse, _>()
8924    }
8925
8926    /// <p>Deletes the specified tags from a resource.</p>
8927    async fn untag_resource(
8928        &self,
8929        input: UntagResourceRequest,
8930    ) -> Result<UntagResourceResponse, RusotoError<UntagResourceError>> {
8931        let mut request = self.new_signed_request("POST", "/");
8932        request.add_header("x-amz-target", "DeviceFarm_20150623.UntagResource");
8933        let encoded = serde_json::to_string(&input).unwrap();
8934        request.set_payload(Some(encoded));
8935
8936        let response = self
8937            .sign_and_dispatch(request, UntagResourceError::from_response)
8938            .await?;
8939        let mut response = response;
8940        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8941        proto::json::ResponsePayload::new(&response).deserialize::<UntagResourceResponse, _>()
8942    }
8943
8944    /// <p>Updates information about a private device instance.</p>
8945    async fn update_device_instance(
8946        &self,
8947        input: UpdateDeviceInstanceRequest,
8948    ) -> Result<UpdateDeviceInstanceResult, RusotoError<UpdateDeviceInstanceError>> {
8949        let mut request = self.new_signed_request("POST", "/");
8950        request.add_header("x-amz-target", "DeviceFarm_20150623.UpdateDeviceInstance");
8951        let encoded = serde_json::to_string(&input).unwrap();
8952        request.set_payload(Some(encoded));
8953
8954        let response = self
8955            .sign_and_dispatch(request, UpdateDeviceInstanceError::from_response)
8956            .await?;
8957        let mut response = response;
8958        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8959        proto::json::ResponsePayload::new(&response).deserialize::<UpdateDeviceInstanceResult, _>()
8960    }
8961
8962    /// <p>Modifies the name, description, and rules in a device pool given the attributes and the pool ARN. Rule updates are all-or-nothing, meaning they can only be updated as a whole (or not at all).</p>
8963    async fn update_device_pool(
8964        &self,
8965        input: UpdateDevicePoolRequest,
8966    ) -> Result<UpdateDevicePoolResult, RusotoError<UpdateDevicePoolError>> {
8967        let mut request = self.new_signed_request("POST", "/");
8968        request.add_header("x-amz-target", "DeviceFarm_20150623.UpdateDevicePool");
8969        let encoded = serde_json::to_string(&input).unwrap();
8970        request.set_payload(Some(encoded));
8971
8972        let response = self
8973            .sign_and_dispatch(request, UpdateDevicePoolError::from_response)
8974            .await?;
8975        let mut response = response;
8976        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8977        proto::json::ResponsePayload::new(&response).deserialize::<UpdateDevicePoolResult, _>()
8978    }
8979
8980    /// <p>Updates information about an existing private device instance profile.</p>
8981    async fn update_instance_profile(
8982        &self,
8983        input: UpdateInstanceProfileRequest,
8984    ) -> Result<UpdateInstanceProfileResult, RusotoError<UpdateInstanceProfileError>> {
8985        let mut request = self.new_signed_request("POST", "/");
8986        request.add_header("x-amz-target", "DeviceFarm_20150623.UpdateInstanceProfile");
8987        let encoded = serde_json::to_string(&input).unwrap();
8988        request.set_payload(Some(encoded));
8989
8990        let response = self
8991            .sign_and_dispatch(request, UpdateInstanceProfileError::from_response)
8992            .await?;
8993        let mut response = response;
8994        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
8995        proto::json::ResponsePayload::new(&response).deserialize::<UpdateInstanceProfileResult, _>()
8996    }
8997
8998    /// <p>Updates the network profile.</p>
8999    async fn update_network_profile(
9000        &self,
9001        input: UpdateNetworkProfileRequest,
9002    ) -> Result<UpdateNetworkProfileResult, RusotoError<UpdateNetworkProfileError>> {
9003        let mut request = self.new_signed_request("POST", "/");
9004        request.add_header("x-amz-target", "DeviceFarm_20150623.UpdateNetworkProfile");
9005        let encoded = serde_json::to_string(&input).unwrap();
9006        request.set_payload(Some(encoded));
9007
9008        let response = self
9009            .sign_and_dispatch(request, UpdateNetworkProfileError::from_response)
9010            .await?;
9011        let mut response = response;
9012        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
9013        proto::json::ResponsePayload::new(&response).deserialize::<UpdateNetworkProfileResult, _>()
9014    }
9015
9016    /// <p>Modifies the specified project name, given the project ARN and a new name.</p>
9017    async fn update_project(
9018        &self,
9019        input: UpdateProjectRequest,
9020    ) -> Result<UpdateProjectResult, RusotoError<UpdateProjectError>> {
9021        let mut request = self.new_signed_request("POST", "/");
9022        request.add_header("x-amz-target", "DeviceFarm_20150623.UpdateProject");
9023        let encoded = serde_json::to_string(&input).unwrap();
9024        request.set_payload(Some(encoded));
9025
9026        let response = self
9027            .sign_and_dispatch(request, UpdateProjectError::from_response)
9028            .await?;
9029        let mut response = response;
9030        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
9031        proto::json::ResponsePayload::new(&response).deserialize::<UpdateProjectResult, _>()
9032    }
9033
9034    /// <p>Change details of a project.</p>
9035    async fn update_test_grid_project(
9036        &self,
9037        input: UpdateTestGridProjectRequest,
9038    ) -> Result<UpdateTestGridProjectResult, RusotoError<UpdateTestGridProjectError>> {
9039        let mut request = self.new_signed_request("POST", "/");
9040        request.add_header("x-amz-target", "DeviceFarm_20150623.UpdateTestGridProject");
9041        let encoded = serde_json::to_string(&input).unwrap();
9042        request.set_payload(Some(encoded));
9043
9044        let response = self
9045            .sign_and_dispatch(request, UpdateTestGridProjectError::from_response)
9046            .await?;
9047        let mut response = response;
9048        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
9049        proto::json::ResponsePayload::new(&response).deserialize::<UpdateTestGridProjectResult, _>()
9050    }
9051
9052    /// <p>Updates an uploaded test spec.</p>
9053    async fn update_upload(
9054        &self,
9055        input: UpdateUploadRequest,
9056    ) -> Result<UpdateUploadResult, RusotoError<UpdateUploadError>> {
9057        let mut request = self.new_signed_request("POST", "/");
9058        request.add_header("x-amz-target", "DeviceFarm_20150623.UpdateUpload");
9059        let encoded = serde_json::to_string(&input).unwrap();
9060        request.set_payload(Some(encoded));
9061
9062        let response = self
9063            .sign_and_dispatch(request, UpdateUploadError::from_response)
9064            .await?;
9065        let mut response = response;
9066        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
9067        proto::json::ResponsePayload::new(&response).deserialize::<UpdateUploadResult, _>()
9068    }
9069
9070    /// <p>Updates information about an Amazon Virtual Private Cloud (VPC) endpoint configuration.</p>
9071    async fn update_vpce_configuration(
9072        &self,
9073        input: UpdateVPCEConfigurationRequest,
9074    ) -> Result<UpdateVPCEConfigurationResult, RusotoError<UpdateVPCEConfigurationError>> {
9075        let mut request = self.new_signed_request("POST", "/");
9076        request.add_header(
9077            "x-amz-target",
9078            "DeviceFarm_20150623.UpdateVPCEConfiguration",
9079        );
9080        let encoded = serde_json::to_string(&input).unwrap();
9081        request.set_payload(Some(encoded));
9082
9083        let response = self
9084            .sign_and_dispatch(request, UpdateVPCEConfigurationError::from_response)
9085            .await?;
9086        let mut response = response;
9087        let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
9088        proto::json::ResponsePayload::new(&response)
9089            .deserialize::<UpdateVPCEConfigurationResult, _>()
9090    }
9091}