rusoto_appmesh/
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::param::{Params, ServiceParams};
23use rusoto_core::proto;
24use rusoto_core::signature::SignedRequest;
25#[allow(unused_imports)]
26use serde::{Deserialize, Serialize};
27use serde_json;
28/// <p>An object that represents the access logging information for a virtual node.</p>
29#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
30pub struct AccessLog {
31    /// <p>The file object to send virtual node access logs to.</p>
32    #[serde(rename = "file")]
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub file: Option<FileAccessLog>,
35}
36
37/// <p>An object that represents the AWS Cloud Map attribute information for your virtual
38/// node.</p>
39#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
40pub struct AwsCloudMapInstanceAttribute {
41    /// <p>The name of an AWS Cloud Map service instance attribute key. Any AWS Cloud Map service
42    /// instance that contains the specified key and value is returned.</p>
43    #[serde(rename = "key")]
44    pub key: String,
45    /// <p>The value of an AWS Cloud Map service instance attribute key. Any AWS Cloud Map service
46    /// instance that contains the specified key and value is returned.</p>
47    #[serde(rename = "value")]
48    pub value: String,
49}
50
51/// <p>An object that represents the AWS Cloud Map service discovery information for your virtual
52/// node.</p>
53#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
54pub struct AwsCloudMapServiceDiscovery {
55    /// <p>A string map that contains attributes with values that you can use to filter instances
56    /// by any custom attribute that you specified when you registered the instance. Only instances
57    /// that match all of the specified key/value pairs will be returned.</p>
58    #[serde(rename = "attributes")]
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub attributes: Option<Vec<AwsCloudMapInstanceAttribute>>,
61    /// <p>The name of the AWS Cloud Map namespace to use.</p>
62    #[serde(rename = "namespaceName")]
63    pub namespace_name: String,
64    /// <p>The name of the AWS Cloud Map service to use.</p>
65    #[serde(rename = "serviceName")]
66    pub service_name: String,
67}
68
69/// <p>An object that represents the backends that a virtual node is expected to send outbound
70/// traffic to. </p>
71#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
72pub struct Backend {
73    /// <p>Specifies a virtual service to use as a backend for a virtual node. </p>
74    #[serde(rename = "virtualService")]
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub virtual_service: Option<VirtualServiceBackend>,
77}
78
79/// <p>An object that represents the default properties for a backend.</p>
80#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
81pub struct BackendDefaults {
82    /// <p>A reference to an object that represents a client policy.</p>
83    #[serde(rename = "clientPolicy")]
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub client_policy: Option<ClientPolicy>,
86}
87
88/// <p>An object that represents a client policy.</p>
89#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
90pub struct ClientPolicy {
91    /// <p>A reference to an object that represents a Transport Layer Security (TLS) client policy.</p>
92    #[serde(rename = "tls")]
93    #[serde(skip_serializing_if = "Option::is_none")]
94    pub tls: Option<ClientPolicyTls>,
95}
96
97/// <p>An object that represents a Transport Layer Security (TLS) client policy.</p>
98#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
99pub struct ClientPolicyTls {
100    /// <p>Whether the policy is enforced. The default is <code>True</code>, if a value isn't
101    /// specified.</p>
102    #[serde(rename = "enforce")]
103    #[serde(skip_serializing_if = "Option::is_none")]
104    pub enforce: Option<bool>,
105    /// <p>One or more ports that the policy is enforced for.</p>
106    #[serde(rename = "ports")]
107    #[serde(skip_serializing_if = "Option::is_none")]
108    pub ports: Option<Vec<i64>>,
109    /// <p>A reference to an object that represents a TLS validation context.</p>
110    #[serde(rename = "validation")]
111    pub validation: TlsValidationContext,
112}
113
114#[derive(Clone, Debug, Default, PartialEq, Serialize)]
115#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
116pub struct CreateGatewayRouteInput {
117    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
118    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
119    #[serde(rename = "clientToken")]
120    #[serde(skip_serializing_if = "Option::is_none")]
121    pub client_token: Option<String>,
122    /// <p>The name to use for the gateway route.</p>
123    #[serde(rename = "gatewayRouteName")]
124    pub gateway_route_name: String,
125    /// <p>The name of the service mesh to create the gateway route in.</p>
126    #[serde(rename = "meshName")]
127    pub mesh_name: String,
128    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then
129    /// the account that you specify must share the mesh with your account before you can create
130    /// the resource in the service mesh. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
131    #[serde(rename = "meshOwner")]
132    #[serde(skip_serializing_if = "Option::is_none")]
133    pub mesh_owner: Option<String>,
134    /// <p>The gateway route specification to apply.</p>
135    #[serde(rename = "spec")]
136    pub spec: GatewayRouteSpec,
137    /// <p>Optional metadata that you can apply to the gateway route to assist with categorization
138    /// and organization. Each tag consists of a key and an optional value, both of which you
139    /// define. Tag keys can have a maximum character length of 128 characters, and tag values can have
140    /// a maximum length of 256 characters.</p>
141    #[serde(rename = "tags")]
142    #[serde(skip_serializing_if = "Option::is_none")]
143    pub tags: Option<Vec<TagRef>>,
144    /// <p>The name of the virtual gateway to associate the gateway route with. If the virtual
145    /// gateway is in a shared mesh, then you must be the owner of the virtual gateway
146    /// resource.</p>
147    #[serde(rename = "virtualGatewayName")]
148    pub virtual_gateway_name: String,
149}
150
151#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
152#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
153pub struct CreateGatewayRouteOutput {
154    /// <p>The full description of your gateway route following the create call.</p>
155    #[serde(rename = "gatewayRoute")]
156    pub gateway_route: GatewayRouteData,
157}
158
159#[derive(Clone, Debug, Default, PartialEq, Serialize)]
160#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
161pub struct CreateMeshInput {
162    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
163    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
164    #[serde(rename = "clientToken")]
165    #[serde(skip_serializing_if = "Option::is_none")]
166    pub client_token: Option<String>,
167    /// <p>The name to use for the service mesh.</p>
168    #[serde(rename = "meshName")]
169    pub mesh_name: String,
170    /// <p>The service mesh specification to apply.</p>
171    #[serde(rename = "spec")]
172    #[serde(skip_serializing_if = "Option::is_none")]
173    pub spec: Option<MeshSpec>,
174    /// <p>Optional metadata that you can apply to the service mesh to assist with categorization
175    /// and organization. Each tag consists of a key and an optional value, both of which you
176    /// define. Tag keys can have a maximum character length of 128 characters, and tag values can have
177    /// a maximum length of 256 characters.</p>
178    #[serde(rename = "tags")]
179    #[serde(skip_serializing_if = "Option::is_none")]
180    pub tags: Option<Vec<TagRef>>,
181}
182
183#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
184#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
185pub struct CreateMeshOutput {
186    /// <p>The full description of your service mesh following the create call.</p>
187    #[serde(rename = "mesh")]
188    pub mesh: MeshData,
189}
190
191#[derive(Clone, Debug, Default, PartialEq, Serialize)]
192#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
193pub struct CreateRouteInput {
194    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
195    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
196    #[serde(rename = "clientToken")]
197    #[serde(skip_serializing_if = "Option::is_none")]
198    pub client_token: Option<String>,
199    /// <p>The name of the service mesh to create the route in.</p>
200    #[serde(rename = "meshName")]
201    pub mesh_name: String,
202    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then
203    /// the account that you specify must share the mesh with your account before you can create
204    /// the resource in the service mesh. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
205    #[serde(rename = "meshOwner")]
206    #[serde(skip_serializing_if = "Option::is_none")]
207    pub mesh_owner: Option<String>,
208    /// <p>The name to use for the route.</p>
209    #[serde(rename = "routeName")]
210    pub route_name: String,
211    /// <p>The route specification to apply.</p>
212    #[serde(rename = "spec")]
213    pub spec: RouteSpec,
214    /// <p>Optional metadata that you can apply to the route to assist with categorization and
215    /// organization. Each tag consists of a key and an optional value, both of which you define.
216    /// Tag keys can have a maximum character length of 128 characters, and tag values can have
217    /// a maximum length of 256 characters.</p>
218    #[serde(rename = "tags")]
219    #[serde(skip_serializing_if = "Option::is_none")]
220    pub tags: Option<Vec<TagRef>>,
221    /// <p>The name of the virtual router in which to create the route. If the virtual router is in
222    /// a shared mesh, then you must be the owner of the virtual router resource.</p>
223    #[serde(rename = "virtualRouterName")]
224    pub virtual_router_name: String,
225}
226
227#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
228#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
229pub struct CreateRouteOutput {
230    /// <p>The full description of your mesh following the create call.</p>
231    #[serde(rename = "route")]
232    pub route: RouteData,
233}
234
235#[derive(Clone, Debug, Default, PartialEq, Serialize)]
236#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
237pub struct CreateVirtualGatewayInput {
238    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
239    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
240    #[serde(rename = "clientToken")]
241    #[serde(skip_serializing_if = "Option::is_none")]
242    pub client_token: Option<String>,
243    /// <p>The name of the service mesh to create the virtual gateway in.</p>
244    #[serde(rename = "meshName")]
245    pub mesh_name: String,
246    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then
247    /// the account that you specify must share the mesh with your account before you can create
248    /// the resource in the service mesh. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
249    #[serde(rename = "meshOwner")]
250    #[serde(skip_serializing_if = "Option::is_none")]
251    pub mesh_owner: Option<String>,
252    /// <p>The virtual gateway specification to apply.</p>
253    #[serde(rename = "spec")]
254    pub spec: VirtualGatewaySpec,
255    /// <p>Optional metadata that you can apply to the virtual gateway to assist with
256    /// categorization and organization. Each tag consists of a key and an optional value, both of
257    /// which you define. Tag keys can have a maximum character length of 128 characters, and tag values can have
258    /// a maximum length of 256 characters.</p>
259    #[serde(rename = "tags")]
260    #[serde(skip_serializing_if = "Option::is_none")]
261    pub tags: Option<Vec<TagRef>>,
262    /// <p>The name to use for the virtual gateway.</p>
263    #[serde(rename = "virtualGatewayName")]
264    pub virtual_gateway_name: String,
265}
266
267#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
268#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
269pub struct CreateVirtualGatewayOutput {
270    /// <p>The full description of your virtual gateway following the create call.</p>
271    #[serde(rename = "virtualGateway")]
272    pub virtual_gateway: VirtualGatewayData,
273}
274
275#[derive(Clone, Debug, Default, PartialEq, Serialize)]
276#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
277pub struct CreateVirtualNodeInput {
278    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
279    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
280    #[serde(rename = "clientToken")]
281    #[serde(skip_serializing_if = "Option::is_none")]
282    pub client_token: Option<String>,
283    /// <p>The name of the service mesh to create the virtual node in.</p>
284    #[serde(rename = "meshName")]
285    pub mesh_name: String,
286    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then
287    /// the account that you specify must share the mesh with your account before you can create
288    /// the resource in the service mesh. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
289    #[serde(rename = "meshOwner")]
290    #[serde(skip_serializing_if = "Option::is_none")]
291    pub mesh_owner: Option<String>,
292    /// <p>The virtual node specification to apply.</p>
293    #[serde(rename = "spec")]
294    pub spec: VirtualNodeSpec,
295    /// <p>Optional metadata that you can apply to the virtual node to assist with categorization
296    /// and organization. Each tag consists of a key and an optional value, both of which you
297    /// define. Tag keys can have a maximum character length of 128 characters, and tag values can have
298    /// a maximum length of 256 characters.</p>
299    #[serde(rename = "tags")]
300    #[serde(skip_serializing_if = "Option::is_none")]
301    pub tags: Option<Vec<TagRef>>,
302    /// <p>The name to use for the virtual node.</p>
303    #[serde(rename = "virtualNodeName")]
304    pub virtual_node_name: String,
305}
306
307#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
308#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
309pub struct CreateVirtualNodeOutput {
310    /// <p>The full description of your virtual node following the create call.</p>
311    #[serde(rename = "virtualNode")]
312    pub virtual_node: VirtualNodeData,
313}
314
315#[derive(Clone, Debug, Default, PartialEq, Serialize)]
316#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
317pub struct CreateVirtualRouterInput {
318    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
319    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
320    #[serde(rename = "clientToken")]
321    #[serde(skip_serializing_if = "Option::is_none")]
322    pub client_token: Option<String>,
323    /// <p>The name of the service mesh to create the virtual router in.</p>
324    #[serde(rename = "meshName")]
325    pub mesh_name: String,
326    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then
327    /// the account that you specify must share the mesh with your account before you can create
328    /// the resource in the service mesh. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
329    #[serde(rename = "meshOwner")]
330    #[serde(skip_serializing_if = "Option::is_none")]
331    pub mesh_owner: Option<String>,
332    /// <p>The virtual router specification to apply.</p>
333    #[serde(rename = "spec")]
334    pub spec: VirtualRouterSpec,
335    /// <p>Optional metadata that you can apply to the virtual router to assist with categorization
336    /// and organization. Each tag consists of a key and an optional value, both of which you
337    /// define. Tag keys can have a maximum character length of 128 characters, and tag values can have
338    /// a maximum length of 256 characters.</p>
339    #[serde(rename = "tags")]
340    #[serde(skip_serializing_if = "Option::is_none")]
341    pub tags: Option<Vec<TagRef>>,
342    /// <p>The name to use for the virtual router.</p>
343    #[serde(rename = "virtualRouterName")]
344    pub virtual_router_name: String,
345}
346
347#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
348#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
349pub struct CreateVirtualRouterOutput {
350    /// <p>The full description of your virtual router following the create call.</p>
351    #[serde(rename = "virtualRouter")]
352    pub virtual_router: VirtualRouterData,
353}
354
355#[derive(Clone, Debug, Default, PartialEq, Serialize)]
356#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
357pub struct CreateVirtualServiceInput {
358    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
359    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
360    #[serde(rename = "clientToken")]
361    #[serde(skip_serializing_if = "Option::is_none")]
362    pub client_token: Option<String>,
363    /// <p>The name of the service mesh to create the virtual service in.</p>
364    #[serde(rename = "meshName")]
365    pub mesh_name: String,
366    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then
367    /// the account that you specify must share the mesh with your account before you can create
368    /// the resource in the service mesh. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
369    #[serde(rename = "meshOwner")]
370    #[serde(skip_serializing_if = "Option::is_none")]
371    pub mesh_owner: Option<String>,
372    /// <p>The virtual service specification to apply.</p>
373    #[serde(rename = "spec")]
374    pub spec: VirtualServiceSpec,
375    /// <p>Optional metadata that you can apply to the virtual service to assist with
376    /// categorization and organization. Each tag consists of a key and an optional value, both of
377    /// which you define. Tag keys can have a maximum character length of 128 characters, and tag values can have
378    /// a maximum length of 256 characters.</p>
379    #[serde(rename = "tags")]
380    #[serde(skip_serializing_if = "Option::is_none")]
381    pub tags: Option<Vec<TagRef>>,
382    /// <p>The name to use for the virtual service.</p>
383    #[serde(rename = "virtualServiceName")]
384    pub virtual_service_name: String,
385}
386
387#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
388#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
389pub struct CreateVirtualServiceOutput {
390    /// <p>The full description of your virtual service following the create call.</p>
391    #[serde(rename = "virtualService")]
392    pub virtual_service: VirtualServiceData,
393}
394
395#[derive(Clone, Debug, Default, PartialEq, Serialize)]
396#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
397pub struct DeleteGatewayRouteInput {
398    /// <p>The name of the gateway route to delete.</p>
399    #[serde(rename = "gatewayRouteName")]
400    pub gateway_route_name: String,
401    /// <p>The name of the service mesh to delete the gateway route from.</p>
402    #[serde(rename = "meshName")]
403    pub mesh_name: String,
404    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
405    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
406    #[serde(rename = "meshOwner")]
407    #[serde(skip_serializing_if = "Option::is_none")]
408    pub mesh_owner: Option<String>,
409    /// <p>The name of the virtual gateway to delete the route from.</p>
410    #[serde(rename = "virtualGatewayName")]
411    pub virtual_gateway_name: String,
412}
413
414#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
415#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
416pub struct DeleteGatewayRouteOutput {
417    /// <p>The gateway route that was deleted.</p>
418    #[serde(rename = "gatewayRoute")]
419    pub gateway_route: GatewayRouteData,
420}
421
422#[derive(Clone, Debug, Default, PartialEq, Serialize)]
423#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
424pub struct DeleteMeshInput {
425    /// <p>The name of the service mesh to delete.</p>
426    #[serde(rename = "meshName")]
427    pub mesh_name: String,
428}
429
430#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
431#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
432pub struct DeleteMeshOutput {
433    /// <p>The service mesh that was deleted.</p>
434    #[serde(rename = "mesh")]
435    pub mesh: MeshData,
436}
437
438#[derive(Clone, Debug, Default, PartialEq, Serialize)]
439#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
440pub struct DeleteRouteInput {
441    /// <p>The name of the service mesh to delete the route in.</p>
442    #[serde(rename = "meshName")]
443    pub mesh_name: String,
444    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
445    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
446    #[serde(rename = "meshOwner")]
447    #[serde(skip_serializing_if = "Option::is_none")]
448    pub mesh_owner: Option<String>,
449    /// <p>The name of the route to delete.</p>
450    #[serde(rename = "routeName")]
451    pub route_name: String,
452    /// <p>The name of the virtual router to delete the route in.</p>
453    #[serde(rename = "virtualRouterName")]
454    pub virtual_router_name: String,
455}
456
457#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
458#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
459pub struct DeleteRouteOutput {
460    /// <p>The route that was deleted.</p>
461    #[serde(rename = "route")]
462    pub route: RouteData,
463}
464
465#[derive(Clone, Debug, Default, PartialEq, Serialize)]
466#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
467pub struct DeleteVirtualGatewayInput {
468    /// <p>The name of the service mesh to delete the virtual gateway from.</p>
469    #[serde(rename = "meshName")]
470    pub mesh_name: String,
471    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
472    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
473    #[serde(rename = "meshOwner")]
474    #[serde(skip_serializing_if = "Option::is_none")]
475    pub mesh_owner: Option<String>,
476    /// <p>The name of the virtual gateway to delete.</p>
477    #[serde(rename = "virtualGatewayName")]
478    pub virtual_gateway_name: String,
479}
480
481#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
482#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
483pub struct DeleteVirtualGatewayOutput {
484    /// <p>The virtual gateway that was deleted.</p>
485    #[serde(rename = "virtualGateway")]
486    pub virtual_gateway: VirtualGatewayData,
487}
488
489#[derive(Clone, Debug, Default, PartialEq, Serialize)]
490#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
491pub struct DeleteVirtualNodeInput {
492    /// <p>The name of the service mesh to delete the virtual node in.</p>
493    #[serde(rename = "meshName")]
494    pub mesh_name: String,
495    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
496    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
497    #[serde(rename = "meshOwner")]
498    #[serde(skip_serializing_if = "Option::is_none")]
499    pub mesh_owner: Option<String>,
500    /// <p>The name of the virtual node to delete.</p>
501    #[serde(rename = "virtualNodeName")]
502    pub virtual_node_name: String,
503}
504
505#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
506#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
507pub struct DeleteVirtualNodeOutput {
508    /// <p>The virtual node that was deleted.</p>
509    #[serde(rename = "virtualNode")]
510    pub virtual_node: VirtualNodeData,
511}
512
513#[derive(Clone, Debug, Default, PartialEq, Serialize)]
514#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
515pub struct DeleteVirtualRouterInput {
516    /// <p>The name of the service mesh to delete the virtual router in.</p>
517    #[serde(rename = "meshName")]
518    pub mesh_name: String,
519    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
520    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
521    #[serde(rename = "meshOwner")]
522    #[serde(skip_serializing_if = "Option::is_none")]
523    pub mesh_owner: Option<String>,
524    /// <p>The name of the virtual router to delete.</p>
525    #[serde(rename = "virtualRouterName")]
526    pub virtual_router_name: String,
527}
528
529#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
530#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
531pub struct DeleteVirtualRouterOutput {
532    /// <p>The virtual router that was deleted.</p>
533    #[serde(rename = "virtualRouter")]
534    pub virtual_router: VirtualRouterData,
535}
536
537#[derive(Clone, Debug, Default, PartialEq, Serialize)]
538#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
539pub struct DeleteVirtualServiceInput {
540    /// <p>The name of the service mesh to delete the virtual service in.</p>
541    #[serde(rename = "meshName")]
542    pub mesh_name: String,
543    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
544    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
545    #[serde(rename = "meshOwner")]
546    #[serde(skip_serializing_if = "Option::is_none")]
547    pub mesh_owner: Option<String>,
548    /// <p>The name of the virtual service to delete.</p>
549    #[serde(rename = "virtualServiceName")]
550    pub virtual_service_name: String,
551}
552
553#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
554#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
555pub struct DeleteVirtualServiceOutput {
556    /// <p>The virtual service that was deleted.</p>
557    #[serde(rename = "virtualService")]
558    pub virtual_service: VirtualServiceData,
559}
560
561#[derive(Clone, Debug, Default, PartialEq, Serialize)]
562#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
563pub struct DescribeGatewayRouteInput {
564    /// <p>The name of the gateway route to describe.</p>
565    #[serde(rename = "gatewayRouteName")]
566    pub gateway_route_name: String,
567    /// <p>The name of the service mesh that the gateway route resides in.</p>
568    #[serde(rename = "meshName")]
569    pub mesh_name: String,
570    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
571    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
572    #[serde(rename = "meshOwner")]
573    #[serde(skip_serializing_if = "Option::is_none")]
574    pub mesh_owner: Option<String>,
575    /// <p>The name of the virtual gateway that the gateway route is associated with.</p>
576    #[serde(rename = "virtualGatewayName")]
577    pub virtual_gateway_name: String,
578}
579
580#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
581#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
582pub struct DescribeGatewayRouteOutput {
583    /// <p>The full description of your gateway route.</p>
584    #[serde(rename = "gatewayRoute")]
585    pub gateway_route: GatewayRouteData,
586}
587
588#[derive(Clone, Debug, Default, PartialEq, Serialize)]
589#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
590pub struct DescribeMeshInput {
591    /// <p>The name of the service mesh to describe.</p>
592    #[serde(rename = "meshName")]
593    pub mesh_name: String,
594    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
595    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
596    #[serde(rename = "meshOwner")]
597    #[serde(skip_serializing_if = "Option::is_none")]
598    pub mesh_owner: Option<String>,
599}
600
601#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
602#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
603pub struct DescribeMeshOutput {
604    /// <p>The full description of your service mesh.</p>
605    #[serde(rename = "mesh")]
606    pub mesh: MeshData,
607}
608
609#[derive(Clone, Debug, Default, PartialEq, Serialize)]
610#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
611pub struct DescribeRouteInput {
612    /// <p>The name of the service mesh that the route resides in.</p>
613    #[serde(rename = "meshName")]
614    pub mesh_name: String,
615    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
616    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
617    #[serde(rename = "meshOwner")]
618    #[serde(skip_serializing_if = "Option::is_none")]
619    pub mesh_owner: Option<String>,
620    /// <p>The name of the route to describe.</p>
621    #[serde(rename = "routeName")]
622    pub route_name: String,
623    /// <p>The name of the virtual router that the route is associated with.</p>
624    #[serde(rename = "virtualRouterName")]
625    pub virtual_router_name: String,
626}
627
628#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
629#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
630pub struct DescribeRouteOutput {
631    /// <p>The full description of your route.</p>
632    #[serde(rename = "route")]
633    pub route: RouteData,
634}
635
636#[derive(Clone, Debug, Default, PartialEq, Serialize)]
637#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
638pub struct DescribeVirtualGatewayInput {
639    /// <p>The name of the service mesh that the gateway route resides in.</p>
640    #[serde(rename = "meshName")]
641    pub mesh_name: String,
642    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
643    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
644    #[serde(rename = "meshOwner")]
645    #[serde(skip_serializing_if = "Option::is_none")]
646    pub mesh_owner: Option<String>,
647    /// <p>The name of the virtual gateway to describe.</p>
648    #[serde(rename = "virtualGatewayName")]
649    pub virtual_gateway_name: String,
650}
651
652#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
653#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
654pub struct DescribeVirtualGatewayOutput {
655    /// <p>The full description of your virtual gateway.</p>
656    #[serde(rename = "virtualGateway")]
657    pub virtual_gateway: VirtualGatewayData,
658}
659
660#[derive(Clone, Debug, Default, PartialEq, Serialize)]
661#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
662pub struct DescribeVirtualNodeInput {
663    /// <p>The name of the service mesh that the virtual node resides in.</p>
664    #[serde(rename = "meshName")]
665    pub mesh_name: String,
666    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
667    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
668    #[serde(rename = "meshOwner")]
669    #[serde(skip_serializing_if = "Option::is_none")]
670    pub mesh_owner: Option<String>,
671    /// <p>The name of the virtual node to describe.</p>
672    #[serde(rename = "virtualNodeName")]
673    pub virtual_node_name: String,
674}
675
676#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
677#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
678pub struct DescribeVirtualNodeOutput {
679    /// <p>The full description of your virtual node.</p>
680    #[serde(rename = "virtualNode")]
681    pub virtual_node: VirtualNodeData,
682}
683
684#[derive(Clone, Debug, Default, PartialEq, Serialize)]
685#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
686pub struct DescribeVirtualRouterInput {
687    /// <p>The name of the service mesh that the virtual router resides in.</p>
688    #[serde(rename = "meshName")]
689    pub mesh_name: String,
690    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
691    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
692    #[serde(rename = "meshOwner")]
693    #[serde(skip_serializing_if = "Option::is_none")]
694    pub mesh_owner: Option<String>,
695    /// <p>The name of the virtual router to describe.</p>
696    #[serde(rename = "virtualRouterName")]
697    pub virtual_router_name: String,
698}
699
700#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
701#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
702pub struct DescribeVirtualRouterOutput {
703    /// <p>The full description of your virtual router.</p>
704    #[serde(rename = "virtualRouter")]
705    pub virtual_router: VirtualRouterData,
706}
707
708#[derive(Clone, Debug, Default, PartialEq, Serialize)]
709#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
710pub struct DescribeVirtualServiceInput {
711    /// <p>The name of the service mesh that the virtual service resides in.</p>
712    #[serde(rename = "meshName")]
713    pub mesh_name: String,
714    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
715    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
716    #[serde(rename = "meshOwner")]
717    #[serde(skip_serializing_if = "Option::is_none")]
718    pub mesh_owner: Option<String>,
719    /// <p>The name of the virtual service to describe.</p>
720    #[serde(rename = "virtualServiceName")]
721    pub virtual_service_name: String,
722}
723
724#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
725#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
726pub struct DescribeVirtualServiceOutput {
727    /// <p>The full description of your virtual service.</p>
728    #[serde(rename = "virtualService")]
729    pub virtual_service: VirtualServiceData,
730}
731
732/// <p>An object that represents the DNS service discovery information for your virtual
733/// node.</p>
734#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
735pub struct DnsServiceDiscovery {
736    /// <p>Specifies the DNS service discovery hostname for the virtual node. </p>
737    #[serde(rename = "hostname")]
738    pub hostname: String,
739}
740
741/// <p>An object that represents a duration of time.</p>
742#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
743pub struct Duration {
744    /// <p>A unit of time.</p>
745    #[serde(rename = "unit")]
746    #[serde(skip_serializing_if = "Option::is_none")]
747    pub unit: Option<String>,
748    /// <p>A number of time units.</p>
749    #[serde(rename = "value")]
750    #[serde(skip_serializing_if = "Option::is_none")]
751    pub value: Option<i64>,
752}
753
754/// <p>An object that represents the egress filter rules for a service mesh.</p>
755#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
756pub struct EgressFilter {
757    /// <p>The egress filter type. By default, the type is <code>DROP_ALL</code>, which allows
758    /// egress only from virtual nodes to other defined resources in the service mesh (and any
759    /// traffic to <code>*.amazonaws.com</code> for AWS API calls). You can set the egress filter
760    /// type to <code>ALLOW_ALL</code> to allow egress to any endpoint inside or outside of the
761    /// service mesh.</p>
762    #[serde(rename = "type")]
763    pub type_: String,
764}
765
766/// <p>An object that represents an access log file.</p>
767#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
768pub struct FileAccessLog {
769    /// <p>The file path to write access logs to. You can use <code>/dev/stdout</code> to send
770    /// access logs to standard out and configure your Envoy container to use a log driver, such as
771    /// <code>awslogs</code>, to export the access logs to a log storage service such as Amazon
772    /// CloudWatch Logs. You can also specify a path in the Envoy container's file system to write
773    /// the files to disk.</p>
774    ///
775    /// <pre><code>     &lt;note&gt;
776    /// &lt;p&gt;The Envoy process must have write permissions to the path that you specify here.
777    /// Otherwise, Envoy fails to bootstrap properly.&lt;/p&gt;
778    /// &lt;/note&gt;
779    /// </code></pre>
780    #[serde(rename = "path")]
781    pub path: String,
782}
783
784/// <p>An object that represents a gateway route returned by a describe operation.</p>
785#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
786#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
787pub struct GatewayRouteData {
788    /// <p>The name of the gateway route.</p>
789    #[serde(rename = "gatewayRouteName")]
790    pub gateway_route_name: String,
791    /// <p>The name of the service mesh that the resource resides in. </p>
792    #[serde(rename = "meshName")]
793    pub mesh_name: String,
794    #[serde(rename = "metadata")]
795    pub metadata: ResourceMetadata,
796    /// <p>The specifications of the gateway route.</p>
797    #[serde(rename = "spec")]
798    pub spec: GatewayRouteSpec,
799    /// <p>The status of the gateway route.</p>
800    #[serde(rename = "status")]
801    pub status: GatewayRouteStatus,
802    /// <p>The virtual gateway that the gateway route is associated with.</p>
803    #[serde(rename = "virtualGatewayName")]
804    pub virtual_gateway_name: String,
805}
806
807/// <p>An object that represents a gateway route returned by a list operation.</p>
808#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
809#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
810pub struct GatewayRouteRef {
811    /// <p>The full Amazon Resource Name (ARN) for the gateway route.</p>
812    #[serde(rename = "arn")]
813    pub arn: String,
814    /// <p>The Unix epoch timestamp in seconds for when the resource was created.</p>
815    #[serde(rename = "createdAt")]
816    pub created_at: f64,
817    /// <p>The name of the gateway route.</p>
818    #[serde(rename = "gatewayRouteName")]
819    pub gateway_route_name: String,
820    /// <p>The Unix epoch timestamp in seconds for when the resource was last updated.</p>
821    #[serde(rename = "lastUpdatedAt")]
822    pub last_updated_at: f64,
823    /// <p>The name of the service mesh that the resource resides in. </p>
824    #[serde(rename = "meshName")]
825    pub mesh_name: String,
826    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
827    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
828    #[serde(rename = "meshOwner")]
829    pub mesh_owner: String,
830    /// <p>The AWS IAM account ID of the resource owner. If the account ID is not your own, then it's
831    /// the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
832    #[serde(rename = "resourceOwner")]
833    pub resource_owner: String,
834    /// <p>The version of the resource. Resources are created at version 1, and this version is incremented each time that they're updated.</p>
835    #[serde(rename = "version")]
836    pub version: i64,
837    /// <p>The virtual gateway that the gateway route is associated with.</p>
838    #[serde(rename = "virtualGatewayName")]
839    pub virtual_gateway_name: String,
840}
841
842/// <p>An object that represents a gateway route specification. Specify one gateway route
843/// type.</p>
844#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
845pub struct GatewayRouteSpec {
846    /// <p>An object that represents the specification of a gRPC gateway route.</p>
847    #[serde(rename = "grpcRoute")]
848    #[serde(skip_serializing_if = "Option::is_none")]
849    pub grpc_route: Option<GrpcGatewayRoute>,
850    /// <p>An object that represents the specification of an HTTP/2 gateway route.</p>
851    #[serde(rename = "http2Route")]
852    #[serde(skip_serializing_if = "Option::is_none")]
853    pub http_2_route: Option<HttpGatewayRoute>,
854    /// <p>An object that represents the specification of an HTTP gateway route.</p>
855    #[serde(rename = "httpRoute")]
856    #[serde(skip_serializing_if = "Option::is_none")]
857    pub http_route: Option<HttpGatewayRoute>,
858}
859
860/// <p>An object that represents the current status of a gateway route.</p>
861#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
862#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
863pub struct GatewayRouteStatus {
864    /// <p>The current status for the gateway route.</p>
865    #[serde(rename = "status")]
866    pub status: String,
867}
868
869/// <p>An object that represents a gateway route target.</p>
870#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
871pub struct GatewayRouteTarget {
872    /// <p>An object that represents a virtual service gateway route target.</p>
873    #[serde(rename = "virtualService")]
874    pub virtual_service: GatewayRouteVirtualService,
875}
876
877/// <p>An object that represents the virtual service that traffic is routed to.</p>
878#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
879pub struct GatewayRouteVirtualService {
880    /// <p>The name of the virtual service that traffic is routed to.</p>
881    #[serde(rename = "virtualServiceName")]
882    pub virtual_service_name: String,
883}
884
885/// <p>An object that represents a gRPC gateway route.</p>
886#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
887pub struct GrpcGatewayRoute {
888    /// <p>An object that represents the action to take if a match is determined.</p>
889    #[serde(rename = "action")]
890    pub action: GrpcGatewayRouteAction,
891    /// <p>An object that represents the criteria for determining a request match.</p>
892    #[serde(rename = "match")]
893    pub route_match: Option<GrpcGatewayRouteMatch>,
894}
895
896/// <p>An object that represents the action to take if a match is determined.</p>
897#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
898pub struct GrpcGatewayRouteAction {
899    /// <p>An object that represents the target that traffic is routed to when a request matches the gateway route.</p>
900    #[serde(rename = "target")]
901    pub target: GatewayRouteTarget,
902}
903
904/// <p>An object that represents the criteria for determining a request match.</p>
905#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
906pub struct GrpcGatewayRouteMatch {
907    /// <p>The fully qualified domain name for the service to match from the request.</p>
908    #[serde(rename = "serviceName")]
909    #[serde(skip_serializing_if = "Option::is_none")]
910    pub service_name: Option<String>,
911}
912
913/// <p>An object that represents a retry policy. Specify at least one value for at least one of the types of <code>RetryEvents</code>, a value for <code>maxRetries</code>, and a value for <code>perRetryTimeout</code>.</p>
914#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
915pub struct GrpcRetryPolicy {
916    /// <p>Specify at least one of the valid values.</p>
917    #[serde(rename = "grpcRetryEvents")]
918    #[serde(skip_serializing_if = "Option::is_none")]
919    pub grpc_retry_events: Option<Vec<String>>,
920    /// <p>Specify at least one of the following values.</p>
921    ///
922    /// <pre><code>     &lt;ul&gt;
923    /// &lt;li&gt;
924    /// &lt;p&gt;
925    /// &lt;b&gt;server-error&lt;/b&gt; – HTTP status codes 500, 501,
926    /// 502, 503, 504, 505, 506, 507, 508, 510, and 511&lt;/p&gt;
927    /// &lt;/li&gt;
928    /// &lt;li&gt;
929    /// &lt;p&gt;
930    /// &lt;b&gt;gateway-error&lt;/b&gt; – HTTP status codes 502,
931    /// 503, and 504&lt;/p&gt;
932    /// &lt;/li&gt;
933    /// &lt;li&gt;
934    /// &lt;p&gt;
935    /// &lt;b&gt;client-error&lt;/b&gt; – HTTP status code 409&lt;/p&gt;
936    /// &lt;/li&gt;
937    /// &lt;li&gt;
938    /// &lt;p&gt;
939    /// &lt;b&gt;stream-error&lt;/b&gt; – Retry on refused
940    /// stream&lt;/p&gt;
941    /// &lt;/li&gt;
942    /// &lt;/ul&gt;
943    /// </code></pre>
944    #[serde(rename = "httpRetryEvents")]
945    #[serde(skip_serializing_if = "Option::is_none")]
946    pub http_retry_events: Option<Vec<String>>,
947    /// <p>The maximum number of retry attempts.</p>
948    #[serde(rename = "maxRetries")]
949    pub max_retries: i64,
950    /// <p>An object that represents a duration of time.</p>
951    #[serde(rename = "perRetryTimeout")]
952    pub per_retry_timeout: Duration,
953    /// <p>Specify a valid value.</p>
954    #[serde(rename = "tcpRetryEvents")]
955    #[serde(skip_serializing_if = "Option::is_none")]
956    pub tcp_retry_events: Option<Vec<String>>,
957}
958
959/// <p>An object that represents a gRPC route type.</p>
960#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
961pub struct GrpcRoute {
962    /// <p>An object that represents the action to take if a match is determined.</p>
963    #[serde(rename = "action")]
964    pub action: GrpcRouteAction,
965    /// <p>An object that represents the criteria for determining a request match.</p>
966    #[serde(rename = "match")]
967    pub route_match: Option<GrpcRouteMatch>,
968    /// <p>An object that represents a retry policy.</p>
969    #[serde(rename = "retryPolicy")]
970    #[serde(skip_serializing_if = "Option::is_none")]
971    pub retry_policy: Option<GrpcRetryPolicy>,
972    /// <p>An object that represents types of timeouts. </p>
973    #[serde(rename = "timeout")]
974    #[serde(skip_serializing_if = "Option::is_none")]
975    pub timeout: Option<GrpcTimeout>,
976}
977
978/// <p>An object that represents the action to take if a match is determined.</p>
979#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
980pub struct GrpcRouteAction {
981    /// <p>An object that represents the targets that traffic is routed to when a request matches the route.</p>
982    #[serde(rename = "weightedTargets")]
983    pub weighted_targets: Vec<WeightedTarget>,
984}
985
986/// <p>An object that represents the criteria for determining a request match.</p>
987#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
988pub struct GrpcRouteMatch {
989    /// <p>An object that represents the data to match from the request.</p>
990    #[serde(rename = "metadata")]
991    #[serde(skip_serializing_if = "Option::is_none")]
992    pub metadata: Option<Vec<GrpcRouteMetadata>>,
993    /// <p>The method name to match from the request. If you specify a name, you must also specify
994    /// a <code>serviceName</code>.</p>
995    #[serde(rename = "methodName")]
996    #[serde(skip_serializing_if = "Option::is_none")]
997    pub method_name: Option<String>,
998    /// <p>The fully qualified domain name for the service to match from the request.</p>
999    #[serde(rename = "serviceName")]
1000    #[serde(skip_serializing_if = "Option::is_none")]
1001    pub service_name: Option<String>,
1002}
1003
1004/// <p>An object that represents the match metadata for the route.</p>
1005#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1006pub struct GrpcRouteMetadata {
1007    /// <p>Specify <code>True</code> to match anything except the match criteria. The default value is <code>False</code>.</p>
1008    #[serde(rename = "invert")]
1009    #[serde(skip_serializing_if = "Option::is_none")]
1010    pub invert: Option<bool>,
1011    /// <p>An object that represents the data to match from the request.</p>
1012    #[serde(rename = "match")]
1013    #[serde(skip_serializing_if = "Option::is_none")]
1014    pub route_match: Option<GrpcRouteMetadataMatchMethod>,
1015    /// <p>The name of the route.</p>
1016    #[serde(rename = "name")]
1017    pub name: String,
1018}
1019
1020/// <p>An object that represents the match method. Specify one of the match values.</p>
1021#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1022pub struct GrpcRouteMetadataMatchMethod {
1023    /// <p>The value sent by the client must match the specified value exactly.</p>
1024    #[serde(rename = "exact")]
1025    #[serde(skip_serializing_if = "Option::is_none")]
1026    pub exact: Option<String>,
1027    /// <p>The value sent by the client must begin with the specified characters.</p>
1028    #[serde(rename = "prefix")]
1029    #[serde(skip_serializing_if = "Option::is_none")]
1030    pub prefix: Option<String>,
1031    /// <p>An object that represents the range of values to match on.</p>
1032    #[serde(rename = "range")]
1033    #[serde(skip_serializing_if = "Option::is_none")]
1034    pub range: Option<MatchRange>,
1035    /// <p>The value sent by the client must include the specified characters.</p>
1036    #[serde(rename = "regex")]
1037    #[serde(skip_serializing_if = "Option::is_none")]
1038    pub regex: Option<String>,
1039    /// <p>The value sent by the client must end with the specified characters.</p>
1040    #[serde(rename = "suffix")]
1041    #[serde(skip_serializing_if = "Option::is_none")]
1042    pub suffix: Option<String>,
1043}
1044
1045/// <p>An object that represents types of timeouts. </p>
1046#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1047pub struct GrpcTimeout {
1048    /// <p>An object that represents an idle timeout. An idle timeout bounds the amount of time that a connection may be idle. The default value is none.</p>
1049    #[serde(rename = "idle")]
1050    #[serde(skip_serializing_if = "Option::is_none")]
1051    pub idle: Option<Duration>,
1052    /// <p>An object that represents a per request timeout. The default value is 15 seconds. If you set a higher timeout, then make sure that the higher value is set for each App Mesh resource in a conversation. For example, if a virtual node backend uses a virtual router provider to route to another virtual node, then the timeout should be greater than 15 seconds for the source and destination virtual node and the route.</p>
1053    #[serde(rename = "perRequest")]
1054    #[serde(skip_serializing_if = "Option::is_none")]
1055    pub per_request: Option<Duration>,
1056}
1057
1058/// <p>An object that represents the method and value to match with the header value sent in a
1059/// request. Specify one match method.</p>
1060#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1061pub struct HeaderMatchMethod {
1062    /// <p>The value sent by the client must match the specified value exactly.</p>
1063    #[serde(rename = "exact")]
1064    #[serde(skip_serializing_if = "Option::is_none")]
1065    pub exact: Option<String>,
1066    /// <p>The value sent by the client must begin with the specified characters.</p>
1067    #[serde(rename = "prefix")]
1068    #[serde(skip_serializing_if = "Option::is_none")]
1069    pub prefix: Option<String>,
1070    /// <p>An object that represents the range of values to match on.</p>
1071    #[serde(rename = "range")]
1072    #[serde(skip_serializing_if = "Option::is_none")]
1073    pub range: Option<MatchRange>,
1074    /// <p>The value sent by the client must include the specified characters.</p>
1075    #[serde(rename = "regex")]
1076    #[serde(skip_serializing_if = "Option::is_none")]
1077    pub regex: Option<String>,
1078    /// <p>The value sent by the client must end with the specified characters.</p>
1079    #[serde(rename = "suffix")]
1080    #[serde(skip_serializing_if = "Option::is_none")]
1081    pub suffix: Option<String>,
1082}
1083
1084/// <p>An object that represents the health check policy for a virtual node's listener.</p>
1085#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1086pub struct HealthCheckPolicy {
1087    /// <p>The number of consecutive successful health checks that must occur before declaring
1088    /// listener healthy.</p>
1089    #[serde(rename = "healthyThreshold")]
1090    pub healthy_threshold: i64,
1091    /// <p>The time period in milliseconds between each health check execution.</p>
1092    #[serde(rename = "intervalMillis")]
1093    pub interval_millis: i64,
1094    /// <p>The destination path for the health check request. This value is only used if the
1095    /// specified protocol is HTTP or HTTP/2. For any other protocol, this value is ignored.</p>
1096    #[serde(rename = "path")]
1097    #[serde(skip_serializing_if = "Option::is_none")]
1098    pub path: Option<String>,
1099    /// <p>The destination port for the health check request. This port must match the port defined
1100    /// in the <a>PortMapping</a> for the listener.</p>
1101    #[serde(rename = "port")]
1102    #[serde(skip_serializing_if = "Option::is_none")]
1103    pub port: Option<i64>,
1104    /// <p>The protocol for the health check request. If you specify <code>grpc</code>, then your
1105    /// service must conform to the <a href="https://github.com/grpc/grpc/blob/master/doc/health-checking.md">GRPC Health
1106    /// Checking Protocol</a>.</p>
1107    #[serde(rename = "protocol")]
1108    pub protocol: String,
1109    /// <p>The amount of time to wait when receiving a response from the health check, in
1110    /// milliseconds.</p>
1111    #[serde(rename = "timeoutMillis")]
1112    pub timeout_millis: i64,
1113    /// <p>The number of consecutive failed health checks that must occur before declaring a
1114    /// virtual node unhealthy. </p>
1115    #[serde(rename = "unhealthyThreshold")]
1116    pub unhealthy_threshold: i64,
1117}
1118
1119/// <p>An object that represents an HTTP gateway route.</p>
1120#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1121pub struct HttpGatewayRoute {
1122    /// <p>An object that represents the action to take if a match is determined.</p>
1123    #[serde(rename = "action")]
1124    pub action: HttpGatewayRouteAction,
1125    /// <p>An object that represents the criteria for determining a request match.</p>
1126    #[serde(rename = "match")]
1127    pub route_match: Option<HttpGatewayRouteMatch>,
1128}
1129
1130/// <p>An object that represents the action to take if a match is determined.</p>
1131#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1132pub struct HttpGatewayRouteAction {
1133    /// <p>An object that represents the target that traffic is routed to when a request matches the gateway route.</p>
1134    #[serde(rename = "target")]
1135    pub target: GatewayRouteTarget,
1136}
1137
1138/// <p>An object that represents the criteria for determining a request match.</p>
1139#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1140pub struct HttpGatewayRouteMatch {
1141    /// <p>Specifies the path to match requests with. This parameter must always start with
1142    /// <code>/</code>, which by itself matches all requests to the virtual service name. You
1143    /// can also match for path-based routing of requests. For example, if your virtual service
1144    /// name is <code>my-service.local</code> and you want the route to match requests to
1145    /// <code>my-service.local/metrics</code>, your prefix should be
1146    /// <code>/metrics</code>.</p>
1147    #[serde(rename = "prefix")]
1148    pub prefix: String,
1149}
1150
1151/// <p>An object that represents a retry policy. Specify at least one value for at least one of the types of <code>RetryEvents</code>, a value for <code>maxRetries</code>, and a value for <code>perRetryTimeout</code>.</p>
1152#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1153pub struct HttpRetryPolicy {
1154    /// <p>Specify at least one of the following values.</p>
1155    ///
1156    /// <pre><code>     &lt;ul&gt;
1157    /// &lt;li&gt;
1158    /// &lt;p&gt;
1159    /// &lt;b&gt;server-error&lt;/b&gt; – HTTP status codes 500, 501,
1160    /// 502, 503, 504, 505, 506, 507, 508, 510, and 511&lt;/p&gt;
1161    /// &lt;/li&gt;
1162    /// &lt;li&gt;
1163    /// &lt;p&gt;
1164    /// &lt;b&gt;gateway-error&lt;/b&gt; – HTTP status codes 502,
1165    /// 503, and 504&lt;/p&gt;
1166    /// &lt;/li&gt;
1167    /// &lt;li&gt;
1168    /// &lt;p&gt;
1169    /// &lt;b&gt;client-error&lt;/b&gt; – HTTP status code 409&lt;/p&gt;
1170    /// &lt;/li&gt;
1171    /// &lt;li&gt;
1172    /// &lt;p&gt;
1173    /// &lt;b&gt;stream-error&lt;/b&gt; – Retry on refused
1174    /// stream&lt;/p&gt;
1175    /// &lt;/li&gt;
1176    /// &lt;/ul&gt;
1177    /// </code></pre>
1178    #[serde(rename = "httpRetryEvents")]
1179    #[serde(skip_serializing_if = "Option::is_none")]
1180    pub http_retry_events: Option<Vec<String>>,
1181    /// <p>The maximum number of retry attempts.</p>
1182    #[serde(rename = "maxRetries")]
1183    pub max_retries: i64,
1184    /// <p>An object that represents a duration of time.</p>
1185    #[serde(rename = "perRetryTimeout")]
1186    pub per_retry_timeout: Duration,
1187    /// <p>Specify a valid value.</p>
1188    #[serde(rename = "tcpRetryEvents")]
1189    #[serde(skip_serializing_if = "Option::is_none")]
1190    pub tcp_retry_events: Option<Vec<String>>,
1191}
1192
1193/// <p>An object that represents an HTTP or HTTP/2 route type.</p>
1194#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1195pub struct HttpRoute {
1196    /// <p>An object that represents the action to take if a match is determined.</p>
1197    #[serde(rename = "action")]
1198    pub action: HttpRouteAction,
1199    /// <p>An object that represents the criteria for determining a request match.</p>
1200    #[serde(rename = "match")]
1201    pub route_match: Option<HttpRouteMatch>,
1202    /// <p>An object that represents a retry policy.</p>
1203    #[serde(rename = "retryPolicy")]
1204    #[serde(skip_serializing_if = "Option::is_none")]
1205    pub retry_policy: Option<HttpRetryPolicy>,
1206    /// <p>An object that represents types of timeouts. </p>
1207    #[serde(rename = "timeout")]
1208    #[serde(skip_serializing_if = "Option::is_none")]
1209    pub timeout: Option<HttpTimeout>,
1210}
1211
1212/// <p>An object that represents the action to take if a match is determined.</p>
1213#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1214pub struct HttpRouteAction {
1215    /// <p>An object that represents the targets that traffic is routed to when a request matches the route.</p>
1216    #[serde(rename = "weightedTargets")]
1217    pub weighted_targets: Vec<WeightedTarget>,
1218}
1219
1220/// <p>An object that represents the HTTP header in the request.</p>
1221#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1222pub struct HttpRouteHeader {
1223    /// <p>Specify <code>True</code> to match anything except the match criteria. The default value is <code>False</code>.</p>
1224    #[serde(rename = "invert")]
1225    #[serde(skip_serializing_if = "Option::is_none")]
1226    pub invert: Option<bool>,
1227    /// <p>The <code>HeaderMatchMethod</code> object.</p>
1228    #[serde(rename = "match")]
1229    #[serde(skip_serializing_if = "Option::is_none")]
1230    pub route_match: Option<HeaderMatchMethod>,
1231    /// <p>A name for the HTTP header in the client request that will be matched on.</p>
1232    #[serde(rename = "name")]
1233    pub name: String,
1234}
1235
1236/// <p>An object that represents the requirements for a route to match HTTP requests for a
1237/// virtual router.</p>
1238#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1239pub struct HttpRouteMatch {
1240    /// <p>An object that represents the client request headers to match on.</p>
1241    #[serde(rename = "headers")]
1242    #[serde(skip_serializing_if = "Option::is_none")]
1243    pub headers: Option<Vec<HttpRouteHeader>>,
1244    /// <p>The client request method to match on. Specify only one.</p>
1245    #[serde(rename = "method")]
1246    #[serde(skip_serializing_if = "Option::is_none")]
1247    pub method: Option<String>,
1248    /// <p>Specifies the path to match requests with. This parameter must always start with
1249    /// <code>/</code>, which by itself matches all requests to the virtual service name. You
1250    /// can also match for path-based routing of requests. For example, if your virtual service
1251    /// name is <code>my-service.local</code> and you want the route to match requests to
1252    /// <code>my-service.local/metrics</code>, your prefix should be
1253    /// <code>/metrics</code>.</p>
1254    #[serde(rename = "prefix")]
1255    pub prefix: String,
1256    /// <p>The client request scheme to match on. Specify only one.</p>
1257    #[serde(rename = "scheme")]
1258    #[serde(skip_serializing_if = "Option::is_none")]
1259    pub scheme: Option<String>,
1260}
1261
1262/// <p>An object that represents types of timeouts. </p>
1263#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1264pub struct HttpTimeout {
1265    #[serde(rename = "idle")]
1266    #[serde(skip_serializing_if = "Option::is_none")]
1267    pub idle: Option<Duration>,
1268    #[serde(rename = "perRequest")]
1269    #[serde(skip_serializing_if = "Option::is_none")]
1270    pub per_request: Option<Duration>,
1271}
1272
1273#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1274#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1275pub struct ListGatewayRoutesInput {
1276    /// <p>The maximum number of results returned by <code>ListGatewayRoutes</code> in paginated
1277    /// output. When you use this parameter, <code>ListGatewayRoutes</code> returns only
1278    /// <code>limit</code> results in a single page along with a <code>nextToken</code> response
1279    /// element. You can see the remaining results of the initial request by sending another
1280    /// <code>ListGatewayRoutes</code> request with the returned <code>nextToken</code> value.
1281    /// This value can be between 1 and 100. If you don't use this
1282    /// parameter, <code>ListGatewayRoutes</code> returns up to 100 results and a
1283    /// <code>nextToken</code> value if applicable.</p>
1284    #[serde(rename = "limit")]
1285    #[serde(skip_serializing_if = "Option::is_none")]
1286    pub limit: Option<i64>,
1287    /// <p>The name of the service mesh to list gateway routes in.</p>
1288    #[serde(rename = "meshName")]
1289    pub mesh_name: String,
1290    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
1291    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
1292    #[serde(rename = "meshOwner")]
1293    #[serde(skip_serializing_if = "Option::is_none")]
1294    pub mesh_owner: Option<String>,
1295    /// <p>The <code>nextToken</code> value returned from a previous paginated
1296    /// <code>ListGatewayRoutes</code> request where <code>limit</code> was used and the results
1297    /// exceeded the value of that parameter. Pagination continues from the end of the previous
1298    /// results that returned the <code>nextToken</code> value.</p>
1299    #[serde(rename = "nextToken")]
1300    #[serde(skip_serializing_if = "Option::is_none")]
1301    pub next_token: Option<String>,
1302    /// <p>The name of the virtual gateway to list gateway routes in.</p>
1303    #[serde(rename = "virtualGatewayName")]
1304    pub virtual_gateway_name: String,
1305}
1306
1307#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1308#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1309pub struct ListGatewayRoutesOutput {
1310    /// <p>The list of existing gateway routes for the specified service mesh and virtual
1311    /// gateway.</p>
1312    #[serde(rename = "gatewayRoutes")]
1313    pub gateway_routes: Vec<GatewayRouteRef>,
1314    /// <p>The <code>nextToken</code> value to include in a future <code>ListGatewayRoutes</code>
1315    /// request. When the results of a <code>ListGatewayRoutes</code> request exceed
1316    /// <code>limit</code>, you can use this value to retrieve the next page of results. This
1317    /// value is <code>null</code> when there are no more results to return.</p>
1318    #[serde(rename = "nextToken")]
1319    #[serde(skip_serializing_if = "Option::is_none")]
1320    pub next_token: Option<String>,
1321}
1322
1323#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1324#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1325pub struct ListMeshesInput {
1326    /// <p>The maximum number of results returned by <code>ListMeshes</code> in paginated output.
1327    /// When you use this parameter, <code>ListMeshes</code> returns only <code>limit</code>
1328    /// results in a single page along with a <code>nextToken</code> response element. You can see
1329    /// the remaining results of the initial request by sending another <code>ListMeshes</code>
1330    /// request with the returned <code>nextToken</code> value. This value can be between
1331    /// 1 and 100. If you don't use this parameter,
1332    /// <code>ListMeshes</code> returns up to 100 results and a
1333    /// <code>nextToken</code> value if applicable.</p>
1334    #[serde(rename = "limit")]
1335    #[serde(skip_serializing_if = "Option::is_none")]
1336    pub limit: Option<i64>,
1337    /// <p>The <code>nextToken</code> value returned from a previous paginated
1338    /// <code>ListMeshes</code> request where <code>limit</code> was used and the results
1339    /// exceeded the value of that parameter. Pagination continues from the end of the previous
1340    /// results that returned the <code>nextToken</code> value.</p>
1341    ///
1342    /// <pre><code>     &lt;note&gt;
1343    /// &lt;p&gt;This token should be treated as an opaque identifier that is used only to
1344    /// retrieve the next items in a list and not for other programmatic purposes.&lt;/p&gt;
1345    /// &lt;/note&gt;
1346    /// </code></pre>
1347    #[serde(rename = "nextToken")]
1348    #[serde(skip_serializing_if = "Option::is_none")]
1349    pub next_token: Option<String>,
1350}
1351
1352#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1353#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1354pub struct ListMeshesOutput {
1355    /// <p>The list of existing service meshes.</p>
1356    #[serde(rename = "meshes")]
1357    pub meshes: Vec<MeshRef>,
1358    /// <p>The <code>nextToken</code> value to include in a future <code>ListMeshes</code> request.
1359    /// When the results of a <code>ListMeshes</code> request exceed <code>limit</code>, you can
1360    /// use this value to retrieve the next page of results. This value is <code>null</code> when
1361    /// there are no more results to return.</p>
1362    #[serde(rename = "nextToken")]
1363    #[serde(skip_serializing_if = "Option::is_none")]
1364    pub next_token: Option<String>,
1365}
1366
1367#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1368#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1369pub struct ListRoutesInput {
1370    /// <p>The maximum number of results returned by <code>ListRoutes</code> in paginated output.
1371    /// When you use this parameter, <code>ListRoutes</code> returns only <code>limit</code>
1372    /// results in a single page along with a <code>nextToken</code> response element. You can see
1373    /// the remaining results of the initial request by sending another <code>ListRoutes</code>
1374    /// request with the returned <code>nextToken</code> value. This value can be between
1375    /// 1 and 100. If you don't use this parameter,
1376    /// <code>ListRoutes</code> returns up to 100 results and a
1377    /// <code>nextToken</code> value if applicable.</p>
1378    #[serde(rename = "limit")]
1379    #[serde(skip_serializing_if = "Option::is_none")]
1380    pub limit: Option<i64>,
1381    /// <p>The name of the service mesh to list routes in.</p>
1382    #[serde(rename = "meshName")]
1383    pub mesh_name: String,
1384    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
1385    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
1386    #[serde(rename = "meshOwner")]
1387    #[serde(skip_serializing_if = "Option::is_none")]
1388    pub mesh_owner: Option<String>,
1389    /// <p>The <code>nextToken</code> value returned from a previous paginated
1390    /// <code>ListRoutes</code> request where <code>limit</code> was used and the results
1391    /// exceeded the value of that parameter. Pagination continues from the end of the previous
1392    /// results that returned the <code>nextToken</code> value.</p>
1393    #[serde(rename = "nextToken")]
1394    #[serde(skip_serializing_if = "Option::is_none")]
1395    pub next_token: Option<String>,
1396    /// <p>The name of the virtual router to list routes in.</p>
1397    #[serde(rename = "virtualRouterName")]
1398    pub virtual_router_name: String,
1399}
1400
1401#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1402#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1403pub struct ListRoutesOutput {
1404    /// <p>The <code>nextToken</code> value to include in a future <code>ListRoutes</code> request.
1405    /// When the results of a <code>ListRoutes</code> request exceed <code>limit</code>, you can
1406    /// use this value to retrieve the next page of results. This value is <code>null</code> when
1407    /// there are no more results to return.</p>
1408    #[serde(rename = "nextToken")]
1409    #[serde(skip_serializing_if = "Option::is_none")]
1410    pub next_token: Option<String>,
1411    /// <p>The list of existing routes for the specified service mesh and virtual router.</p>
1412    #[serde(rename = "routes")]
1413    pub routes: Vec<RouteRef>,
1414}
1415
1416#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1417#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1418pub struct ListTagsForResourceInput {
1419    /// <p>The maximum number of tag results returned by <code>ListTagsForResource</code> in
1420    /// paginated output. When this parameter is used, <code>ListTagsForResource</code> returns
1421    /// only <code>limit</code> results in a single page along with a <code>nextToken</code>
1422    /// response element. You can see the remaining results of the initial request by sending
1423    /// another <code>ListTagsForResource</code> request with the returned <code>nextToken</code>
1424    /// value. This value can be between 1 and 100. If you don't use
1425    /// this parameter, <code>ListTagsForResource</code> returns up to 100
1426    /// results and a <code>nextToken</code> value if applicable.</p>
1427    #[serde(rename = "limit")]
1428    #[serde(skip_serializing_if = "Option::is_none")]
1429    pub limit: Option<i64>,
1430    /// <p>The <code>nextToken</code> value returned from a previous paginated
1431    /// <code>ListTagsForResource</code> request where <code>limit</code> was used and the
1432    /// results exceeded the value of that parameter. Pagination continues from the end of the
1433    /// previous results that returned the <code>nextToken</code> value.</p>
1434    #[serde(rename = "nextToken")]
1435    #[serde(skip_serializing_if = "Option::is_none")]
1436    pub next_token: Option<String>,
1437    /// <p>The Amazon Resource Name (ARN) that identifies the resource to list the tags for.</p>
1438    #[serde(rename = "resourceArn")]
1439    pub resource_arn: String,
1440}
1441
1442#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1443#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1444pub struct ListTagsForResourceOutput {
1445    /// <p>The <code>nextToken</code> value to include in a future <code>ListTagsForResource</code>
1446    /// request. When the results of a <code>ListTagsForResource</code> request exceed
1447    /// <code>limit</code>, you can use this value to retrieve the next page of results. This
1448    /// value is <code>null</code> when there are no more results to return.</p>
1449    #[serde(rename = "nextToken")]
1450    #[serde(skip_serializing_if = "Option::is_none")]
1451    pub next_token: Option<String>,
1452    /// <p>The tags for the resource.</p>
1453    #[serde(rename = "tags")]
1454    pub tags: Vec<TagRef>,
1455}
1456
1457#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1458#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1459pub struct ListVirtualGatewaysInput {
1460    /// <p>The maximum number of results returned by <code>ListVirtualGateways</code> in paginated
1461    /// output. When you use this parameter, <code>ListVirtualGateways</code> returns only
1462    /// <code>limit</code> results in a single page along with a <code>nextToken</code> response
1463    /// element. You can see the remaining results of the initial request by sending another
1464    /// <code>ListVirtualGateways</code> request with the returned <code>nextToken</code> value.
1465    /// This value can be between 1 and 100. If you don't use this
1466    /// parameter, <code>ListVirtualGateways</code> returns up to 100 results and
1467    /// a <code>nextToken</code> value if applicable.</p>
1468    #[serde(rename = "limit")]
1469    #[serde(skip_serializing_if = "Option::is_none")]
1470    pub limit: Option<i64>,
1471    /// <p>The name of the service mesh to list virtual gateways in.</p>
1472    #[serde(rename = "meshName")]
1473    pub mesh_name: String,
1474    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
1475    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
1476    #[serde(rename = "meshOwner")]
1477    #[serde(skip_serializing_if = "Option::is_none")]
1478    pub mesh_owner: Option<String>,
1479    /// <p>The <code>nextToken</code> value returned from a previous paginated
1480    /// <code>ListVirtualGateways</code> request where <code>limit</code> was used and the
1481    /// results exceeded the value of that parameter. Pagination continues from the end of the
1482    /// previous results that returned the <code>nextToken</code> value.</p>
1483    #[serde(rename = "nextToken")]
1484    #[serde(skip_serializing_if = "Option::is_none")]
1485    pub next_token: Option<String>,
1486}
1487
1488#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1489#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1490pub struct ListVirtualGatewaysOutput {
1491    /// <p>The <code>nextToken</code> value to include in a future <code>ListVirtualGateways</code>
1492    /// request. When the results of a <code>ListVirtualGateways</code> request exceed
1493    /// <code>limit</code>, you can use this value to retrieve the next page of results. This
1494    /// value is <code>null</code> when there are no more results to return.</p>
1495    #[serde(rename = "nextToken")]
1496    #[serde(skip_serializing_if = "Option::is_none")]
1497    pub next_token: Option<String>,
1498    /// <p>The list of existing virtual gateways for the specified service mesh.</p>
1499    #[serde(rename = "virtualGateways")]
1500    pub virtual_gateways: Vec<VirtualGatewayRef>,
1501}
1502
1503#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1504#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1505pub struct ListVirtualNodesInput {
1506    /// <p>The maximum number of results returned by <code>ListVirtualNodes</code> in paginated
1507    /// output. When you use this parameter, <code>ListVirtualNodes</code> returns only
1508    /// <code>limit</code> results in a single page along with a <code>nextToken</code> response
1509    /// element. You can see the remaining results of the initial request by sending another
1510    /// <code>ListVirtualNodes</code> request with the returned <code>nextToken</code> value.
1511    /// This value can be between 1 and 100. If you don't use this
1512    /// parameter, <code>ListVirtualNodes</code> returns up to 100 results and a
1513    /// <code>nextToken</code> value if applicable.</p>
1514    #[serde(rename = "limit")]
1515    #[serde(skip_serializing_if = "Option::is_none")]
1516    pub limit: Option<i64>,
1517    /// <p>The name of the service mesh to list virtual nodes in.</p>
1518    #[serde(rename = "meshName")]
1519    pub mesh_name: String,
1520    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
1521    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
1522    #[serde(rename = "meshOwner")]
1523    #[serde(skip_serializing_if = "Option::is_none")]
1524    pub mesh_owner: Option<String>,
1525    /// <p>The <code>nextToken</code> value returned from a previous paginated
1526    /// <code>ListVirtualNodes</code> request where <code>limit</code> was used and the results
1527    /// exceeded the value of that parameter. Pagination continues from the end of the previous
1528    /// results that returned the <code>nextToken</code> value.</p>
1529    #[serde(rename = "nextToken")]
1530    #[serde(skip_serializing_if = "Option::is_none")]
1531    pub next_token: Option<String>,
1532}
1533
1534#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1535#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1536pub struct ListVirtualNodesOutput {
1537    /// <p>The <code>nextToken</code> value to include in a future <code>ListVirtualNodes</code>
1538    /// request. When the results of a <code>ListVirtualNodes</code> request exceed
1539    /// <code>limit</code>, you can use this value to retrieve the next page of results. This
1540    /// value is <code>null</code> when there are no more results to return.</p>
1541    #[serde(rename = "nextToken")]
1542    #[serde(skip_serializing_if = "Option::is_none")]
1543    pub next_token: Option<String>,
1544    /// <p>The list of existing virtual nodes for the specified service mesh.</p>
1545    #[serde(rename = "virtualNodes")]
1546    pub virtual_nodes: Vec<VirtualNodeRef>,
1547}
1548
1549#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1550#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1551pub struct ListVirtualRoutersInput {
1552    /// <p>The maximum number of results returned by <code>ListVirtualRouters</code> in paginated
1553    /// output. When you use this parameter, <code>ListVirtualRouters</code> returns only
1554    /// <code>limit</code> results in a single page along with a <code>nextToken</code> response
1555    /// element. You can see the remaining results of the initial request by sending another
1556    /// <code>ListVirtualRouters</code> request with the returned <code>nextToken</code> value.
1557    /// This value can be between 1 and 100. If you don't use this
1558    /// parameter, <code>ListVirtualRouters</code> returns up to 100 results and
1559    /// a <code>nextToken</code> value if applicable.</p>
1560    #[serde(rename = "limit")]
1561    #[serde(skip_serializing_if = "Option::is_none")]
1562    pub limit: Option<i64>,
1563    /// <p>The name of the service mesh to list virtual routers in.</p>
1564    #[serde(rename = "meshName")]
1565    pub mesh_name: String,
1566    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
1567    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
1568    #[serde(rename = "meshOwner")]
1569    #[serde(skip_serializing_if = "Option::is_none")]
1570    pub mesh_owner: Option<String>,
1571    /// <p>The <code>nextToken</code> value returned from a previous paginated
1572    /// <code>ListVirtualRouters</code> request where <code>limit</code> was used and the
1573    /// results exceeded the value of that parameter. Pagination continues from the end of the
1574    /// previous results that returned the <code>nextToken</code> value.</p>
1575    #[serde(rename = "nextToken")]
1576    #[serde(skip_serializing_if = "Option::is_none")]
1577    pub next_token: Option<String>,
1578}
1579
1580#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1581#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1582pub struct ListVirtualRoutersOutput {
1583    /// <p>The <code>nextToken</code> value to include in a future <code>ListVirtualRouters</code>
1584    /// request. When the results of a <code>ListVirtualRouters</code> request exceed
1585    /// <code>limit</code>, you can use this value to retrieve the next page of results. This
1586    /// value is <code>null</code> when there are no more results to return.</p>
1587    #[serde(rename = "nextToken")]
1588    #[serde(skip_serializing_if = "Option::is_none")]
1589    pub next_token: Option<String>,
1590    /// <p>The list of existing virtual routers for the specified service mesh.</p>
1591    #[serde(rename = "virtualRouters")]
1592    pub virtual_routers: Vec<VirtualRouterRef>,
1593}
1594
1595#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1596#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1597pub struct ListVirtualServicesInput {
1598    /// <p>The maximum number of results returned by <code>ListVirtualServices</code> in paginated
1599    /// output. When you use this parameter, <code>ListVirtualServices</code> returns only
1600    /// <code>limit</code> results in a single page along with a <code>nextToken</code> response
1601    /// element. You can see the remaining results of the initial request by sending another
1602    /// <code>ListVirtualServices</code> request with the returned <code>nextToken</code> value.
1603    /// This value can be between 1 and 100. If you don't use this
1604    /// parameter, <code>ListVirtualServices</code> returns up to 100 results and
1605    /// a <code>nextToken</code> value if applicable.</p>
1606    #[serde(rename = "limit")]
1607    #[serde(skip_serializing_if = "Option::is_none")]
1608    pub limit: Option<i64>,
1609    /// <p>The name of the service mesh to list virtual services in.</p>
1610    #[serde(rename = "meshName")]
1611    pub mesh_name: String,
1612    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
1613    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
1614    #[serde(rename = "meshOwner")]
1615    #[serde(skip_serializing_if = "Option::is_none")]
1616    pub mesh_owner: Option<String>,
1617    /// <p>The <code>nextToken</code> value returned from a previous paginated
1618    /// <code>ListVirtualServices</code> request where <code>limit</code> was used and the
1619    /// results exceeded the value of that parameter. Pagination continues from the end of the
1620    /// previous results that returned the <code>nextToken</code> value.</p>
1621    #[serde(rename = "nextToken")]
1622    #[serde(skip_serializing_if = "Option::is_none")]
1623    pub next_token: Option<String>,
1624}
1625
1626#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1627#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1628pub struct ListVirtualServicesOutput {
1629    /// <p>The <code>nextToken</code> value to include in a future <code>ListVirtualServices</code>
1630    /// request. When the results of a <code>ListVirtualServices</code> request exceed
1631    /// <code>limit</code>, you can use this value to retrieve the next page of results. This
1632    /// value is <code>null</code> when there are no more results to return.</p>
1633    #[serde(rename = "nextToken")]
1634    #[serde(skip_serializing_if = "Option::is_none")]
1635    pub next_token: Option<String>,
1636    /// <p>The list of existing virtual services for the specified service mesh.</p>
1637    #[serde(rename = "virtualServices")]
1638    pub virtual_services: Vec<VirtualServiceRef>,
1639}
1640
1641/// <p>An object that represents a listener for a virtual node.</p>
1642#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1643pub struct Listener {
1644    /// <p>The health check information for the listener.</p>
1645    #[serde(rename = "healthCheck")]
1646    #[serde(skip_serializing_if = "Option::is_none")]
1647    pub health_check: Option<HealthCheckPolicy>,
1648    /// <p>The port mapping information for the listener.</p>
1649    #[serde(rename = "portMapping")]
1650    pub port_mapping: PortMapping,
1651    /// <p>An object that represents timeouts for different protocols.</p>
1652    #[serde(rename = "timeout")]
1653    #[serde(skip_serializing_if = "Option::is_none")]
1654    pub timeout: Option<ListenerTimeout>,
1655    /// <p>A reference to an object that represents the Transport Layer Security (TLS) properties for a listener.</p>
1656    #[serde(rename = "tls")]
1657    #[serde(skip_serializing_if = "Option::is_none")]
1658    pub tls: Option<ListenerTls>,
1659}
1660
1661/// <p>An object that represents timeouts for different protocols.</p>
1662#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1663pub struct ListenerTimeout {
1664    #[serde(rename = "grpc")]
1665    #[serde(skip_serializing_if = "Option::is_none")]
1666    pub grpc: Option<GrpcTimeout>,
1667    /// <p>An object that represents types of timeouts. </p>
1668    #[serde(rename = "http")]
1669    #[serde(skip_serializing_if = "Option::is_none")]
1670    pub http: Option<HttpTimeout>,
1671    /// <p>An object that represents types of timeouts. </p>
1672    #[serde(rename = "http2")]
1673    #[serde(skip_serializing_if = "Option::is_none")]
1674    pub http_2: Option<HttpTimeout>,
1675    /// <p>An object that represents types of timeouts. </p>
1676    #[serde(rename = "tcp")]
1677    #[serde(skip_serializing_if = "Option::is_none")]
1678    pub tcp: Option<TcpTimeout>,
1679}
1680
1681/// <p>An object that represents the Transport Layer Security (TLS) properties for a listener.</p>
1682#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1683pub struct ListenerTls {
1684    /// <p>A reference to an object that represents a listener's TLS certificate.</p>
1685    #[serde(rename = "certificate")]
1686    pub certificate: ListenerTlsCertificate,
1687    /// <p>Specify one of the following modes.</p>
1688    ///
1689    /// <pre><code>     &lt;ul&gt;
1690    /// &lt;li&gt;
1691    /// &lt;p&gt;
1692    /// &lt;b/&gt;STRICT – Listener only accepts connections with TLS
1693    /// enabled. &lt;/p&gt;
1694    /// &lt;/li&gt;
1695    /// &lt;li&gt;
1696    /// &lt;p&gt;
1697    /// &lt;b/&gt;PERMISSIVE – Listener accepts connections with or
1698    /// without TLS enabled.&lt;/p&gt;
1699    /// &lt;/li&gt;
1700    /// &lt;li&gt;
1701    /// &lt;p&gt;
1702    /// &lt;b/&gt;DISABLED – Listener only accepts connections without
1703    /// TLS. &lt;/p&gt;
1704    /// &lt;/li&gt;
1705    /// &lt;/ul&gt;
1706    /// </code></pre>
1707    #[serde(rename = "mode")]
1708    pub mode: String,
1709}
1710
1711/// <p>An object that represents an AWS Certicate Manager (ACM) certificate.</p>
1712#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1713pub struct ListenerTlsAcmCertificate {
1714    /// <p>The Amazon Resource Name (ARN) for the certificate. The certificate must meet specific requirements and you must have proxy authorization enabled. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html#virtual-node-tls-prerequisites">Transport Layer Security (TLS)</a>.</p>
1715    #[serde(rename = "certificateArn")]
1716    pub certificate_arn: String,
1717}
1718
1719/// <p>An object that represents a listener's Transport Layer Security (TLS) certificate.</p>
1720#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1721pub struct ListenerTlsCertificate {
1722    /// <p>A reference to an object that represents an AWS Certicate Manager (ACM) certificate.</p>
1723    #[serde(rename = "acm")]
1724    #[serde(skip_serializing_if = "Option::is_none")]
1725    pub acm: Option<ListenerTlsAcmCertificate>,
1726    /// <p>A reference to an object that represents a local file certificate.</p>
1727    #[serde(rename = "file")]
1728    #[serde(skip_serializing_if = "Option::is_none")]
1729    pub file: Option<ListenerTlsFileCertificate>,
1730}
1731
1732/// <p>An object that represents a local file certificate.
1733/// The certificate must meet specific requirements and you must have proxy authorization enabled. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html#virtual-node-tls-prerequisites">Transport Layer Security (TLS)</a>.</p>
1734#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1735pub struct ListenerTlsFileCertificate {
1736    /// <p>The certificate chain for the certificate.</p>
1737    #[serde(rename = "certificateChain")]
1738    pub certificate_chain: String,
1739    /// <p>The private key for a certificate stored on the file system of the virtual node that the
1740    /// proxy is running on.</p>
1741    #[serde(rename = "privateKey")]
1742    pub private_key: String,
1743}
1744
1745/// <p>An object that represents the logging information for a virtual node.</p>
1746#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1747pub struct Logging {
1748    /// <p>The access log configuration for a virtual node.</p>
1749    #[serde(rename = "accessLog")]
1750    #[serde(skip_serializing_if = "Option::is_none")]
1751    pub access_log: Option<AccessLog>,
1752}
1753
1754/// <p>An object that represents the range of values to match on. The first character of the range is included in the range, though the last character is not. For example, if the range specified were 1-100, only values 1-99 would be matched.</p>
1755#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1756pub struct MatchRange {
1757    /// <p>The end of the range.</p>
1758    #[serde(rename = "end")]
1759    pub end: i64,
1760    /// <p>The start of the range.</p>
1761    #[serde(rename = "start")]
1762    pub start: i64,
1763}
1764
1765/// <p>An object that represents a service mesh returned by a describe operation.</p>
1766#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1767#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1768pub struct MeshData {
1769    /// <p>The name of the service mesh.</p>
1770    #[serde(rename = "meshName")]
1771    pub mesh_name: String,
1772    /// <p>The associated metadata for the service mesh.</p>
1773    #[serde(rename = "metadata")]
1774    pub metadata: ResourceMetadata,
1775    /// <p>The associated specification for the service mesh.</p>
1776    #[serde(rename = "spec")]
1777    pub spec: MeshSpec,
1778    /// <p>The status of the service mesh.</p>
1779    #[serde(rename = "status")]
1780    pub status: MeshStatus,
1781}
1782
1783/// <p>An object that represents a service mesh returned by a list operation.</p>
1784#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1785#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1786pub struct MeshRef {
1787    /// <p>The full Amazon Resource Name (ARN) of the service mesh.</p>
1788    #[serde(rename = "arn")]
1789    pub arn: String,
1790    /// <p>The Unix epoch timestamp in seconds for when the resource was created.</p>
1791    #[serde(rename = "createdAt")]
1792    pub created_at: f64,
1793    /// <p>The Unix epoch timestamp in seconds for when the resource was last updated.</p>
1794    #[serde(rename = "lastUpdatedAt")]
1795    pub last_updated_at: f64,
1796    /// <p>The name of the service mesh.</p>
1797    #[serde(rename = "meshName")]
1798    pub mesh_name: String,
1799    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
1800    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
1801    #[serde(rename = "meshOwner")]
1802    pub mesh_owner: String,
1803    /// <p>The AWS IAM account ID of the resource owner. If the account ID is not your own, then it's
1804    /// the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
1805    #[serde(rename = "resourceOwner")]
1806    pub resource_owner: String,
1807    /// <p>The version of the resource. Resources are created at version 1, and this version is incremented each time that they're updated.</p>
1808    #[serde(rename = "version")]
1809    pub version: i64,
1810}
1811
1812/// <p>An object that represents the specification of a service mesh.</p>
1813#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1814pub struct MeshSpec {
1815    /// <p>The egress filter rules for the service mesh.</p>
1816    #[serde(rename = "egressFilter")]
1817    #[serde(skip_serializing_if = "Option::is_none")]
1818    pub egress_filter: Option<EgressFilter>,
1819}
1820
1821/// <p>An object that represents the status of a service mesh.</p>
1822#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1823#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1824pub struct MeshStatus {
1825    /// <p>The current mesh status.</p>
1826    #[serde(rename = "status")]
1827    #[serde(skip_serializing_if = "Option::is_none")]
1828    pub status: Option<String>,
1829}
1830
1831/// <p>An object that represents a port mapping.</p>
1832#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1833pub struct PortMapping {
1834    /// <p>The port used for the port mapping.</p>
1835    #[serde(rename = "port")]
1836    pub port: i64,
1837    /// <p>The protocol used for the port mapping. Specify one protocol.</p>
1838    #[serde(rename = "protocol")]
1839    pub protocol: String,
1840}
1841
1842/// <p>An object that represents metadata for a resource.</p>
1843#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1844#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1845pub struct ResourceMetadata {
1846    /// <p>The full Amazon Resource Name (ARN) for the resource.</p>
1847    #[serde(rename = "arn")]
1848    pub arn: String,
1849    /// <p>The Unix epoch timestamp in seconds for when the resource was created.</p>
1850    #[serde(rename = "createdAt")]
1851    pub created_at: f64,
1852    /// <p>The Unix epoch timestamp in seconds for when the resource was last updated.</p>
1853    #[serde(rename = "lastUpdatedAt")]
1854    pub last_updated_at: f64,
1855    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
1856    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
1857    #[serde(rename = "meshOwner")]
1858    pub mesh_owner: String,
1859    /// <p>The AWS IAM account ID of the resource owner. If the account ID is not your own, then it's
1860    /// the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
1861    #[serde(rename = "resourceOwner")]
1862    pub resource_owner: String,
1863    /// <p>The unique identifier for the resource.</p>
1864    #[serde(rename = "uid")]
1865    pub uid: String,
1866    /// <p>The version of the resource. Resources are created at version 1, and this version is incremented each time that they're updated.</p>
1867    #[serde(rename = "version")]
1868    pub version: i64,
1869}
1870
1871/// <p>An object that represents a route returned by a describe operation.</p>
1872#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1873#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1874pub struct RouteData {
1875    /// <p>The name of the service mesh that the route resides in.</p>
1876    #[serde(rename = "meshName")]
1877    pub mesh_name: String,
1878    /// <p>The associated metadata for the route.</p>
1879    #[serde(rename = "metadata")]
1880    pub metadata: ResourceMetadata,
1881    /// <p>The name of the route.</p>
1882    #[serde(rename = "routeName")]
1883    pub route_name: String,
1884    /// <p>The specifications of the route.</p>
1885    #[serde(rename = "spec")]
1886    pub spec: RouteSpec,
1887    /// <p>The status of the route.</p>
1888    #[serde(rename = "status")]
1889    pub status: RouteStatus,
1890    /// <p>The virtual router that the route is associated with.</p>
1891    #[serde(rename = "virtualRouterName")]
1892    pub virtual_router_name: String,
1893}
1894
1895/// <p>An object that represents a route returned by a list operation.</p>
1896#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1897#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1898pub struct RouteRef {
1899    /// <p>The full Amazon Resource Name (ARN) for the route.</p>
1900    #[serde(rename = "arn")]
1901    pub arn: String,
1902    /// <p>The Unix epoch timestamp in seconds for when the resource was created.</p>
1903    #[serde(rename = "createdAt")]
1904    pub created_at: f64,
1905    /// <p>The Unix epoch timestamp in seconds for when the resource was last updated.</p>
1906    #[serde(rename = "lastUpdatedAt")]
1907    pub last_updated_at: f64,
1908    /// <p>The name of the service mesh that the route resides in.</p>
1909    #[serde(rename = "meshName")]
1910    pub mesh_name: String,
1911    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
1912    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
1913    #[serde(rename = "meshOwner")]
1914    pub mesh_owner: String,
1915    /// <p>The AWS IAM account ID of the resource owner. If the account ID is not your own, then it's
1916    /// the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
1917    #[serde(rename = "resourceOwner")]
1918    pub resource_owner: String,
1919    /// <p>The name of the route.</p>
1920    #[serde(rename = "routeName")]
1921    pub route_name: String,
1922    /// <p>The version of the resource. Resources are created at version 1, and this version is incremented each time that they're updated.</p>
1923    #[serde(rename = "version")]
1924    pub version: i64,
1925    /// <p>The virtual router that the route is associated with.</p>
1926    #[serde(rename = "virtualRouterName")]
1927    pub virtual_router_name: String,
1928}
1929
1930/// <p>An object that represents a route specification. Specify one route type.</p>
1931#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1932pub struct RouteSpec {
1933    /// <p>An object that represents the specification of a gRPC route.</p>
1934    #[serde(rename = "grpcRoute")]
1935    #[serde(skip_serializing_if = "Option::is_none")]
1936    pub grpc_route: Option<GrpcRoute>,
1937    /// <p>An object that represents the specification of an HTTP/2 route.</p>
1938    #[serde(rename = "http2Route")]
1939    #[serde(skip_serializing_if = "Option::is_none")]
1940    pub http_2_route: Option<HttpRoute>,
1941    /// <p>An object that represents the specification of an HTTP route.</p>
1942    #[serde(rename = "httpRoute")]
1943    #[serde(skip_serializing_if = "Option::is_none")]
1944    pub http_route: Option<HttpRoute>,
1945    /// <p>The priority for the route. Routes are matched based on the specified value, where 0 is
1946    /// the highest priority.</p>
1947    #[serde(rename = "priority")]
1948    #[serde(skip_serializing_if = "Option::is_none")]
1949    pub priority: Option<i64>,
1950    /// <p>An object that represents the specification of a TCP route.</p>
1951    #[serde(rename = "tcpRoute")]
1952    #[serde(skip_serializing_if = "Option::is_none")]
1953    pub tcp_route: Option<TcpRoute>,
1954}
1955
1956/// <p>An object that represents the current status of a route.</p>
1957#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1958#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1959pub struct RouteStatus {
1960    /// <p>The current status for the route.</p>
1961    #[serde(rename = "status")]
1962    pub status: String,
1963}
1964
1965/// <p>An object that represents the service discovery information for a virtual node.</p>
1966#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1967pub struct ServiceDiscovery {
1968    /// <p>Specifies any AWS Cloud Map information for the virtual node.</p>
1969    #[serde(rename = "awsCloudMap")]
1970    #[serde(skip_serializing_if = "Option::is_none")]
1971    pub aws_cloud_map: Option<AwsCloudMapServiceDiscovery>,
1972    /// <p>Specifies the DNS information for the virtual node.</p>
1973    #[serde(rename = "dns")]
1974    #[serde(skip_serializing_if = "Option::is_none")]
1975    pub dns: Option<DnsServiceDiscovery>,
1976}
1977
1978/// <p>Optional metadata that you apply to a resource to assist with categorization and
1979/// organization. Each tag consists of a key and an optional value, both of which you define.
1980/// Tag keys can have a maximum character length of 128 characters, and tag values can have
1981/// a maximum length of 256 characters.</p>
1982#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1983pub struct TagRef {
1984    /// <p>One part of a key-value pair that make up a tag. A <code>key</code> is a general label
1985    /// that acts like a category for more specific tag values.</p>
1986    #[serde(rename = "key")]
1987    pub key: String,
1988    /// <p>The optional part of a key-value pair that make up a tag. A <code>value</code> acts as a
1989    /// descriptor within a tag category (key).</p>
1990    #[serde(rename = "value")]
1991    #[serde(skip_serializing_if = "Option::is_none")]
1992    pub value: Option<String>,
1993}
1994
1995#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1996#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1997pub struct TagResourceInput {
1998    /// <p>The Amazon Resource Name (ARN) of the resource to add tags to.</p>
1999    #[serde(rename = "resourceArn")]
2000    pub resource_arn: String,
2001    /// <p>The tags to add to the resource. A tag is an array of key-value pairs.
2002    /// Tag keys can have a maximum character length of 128 characters, and tag values can have
2003    /// a maximum length of 256 characters.</p>
2004    #[serde(rename = "tags")]
2005    pub tags: Vec<TagRef>,
2006}
2007
2008#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2009#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2010pub struct TagResourceOutput {}
2011
2012/// <p>An object that represents a TCP route type.</p>
2013#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2014pub struct TcpRoute {
2015    /// <p>The action to take if a match is determined.</p>
2016    #[serde(rename = "action")]
2017    pub action: TcpRouteAction,
2018    /// <p>An object that represents types of timeouts. </p>
2019    #[serde(rename = "timeout")]
2020    #[serde(skip_serializing_if = "Option::is_none")]
2021    pub timeout: Option<TcpTimeout>,
2022}
2023
2024/// <p>An object that represents the action to take if a match is determined.</p>
2025#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2026pub struct TcpRouteAction {
2027    /// <p>An object that represents the targets that traffic is routed to when a request matches the route.</p>
2028    #[serde(rename = "weightedTargets")]
2029    pub weighted_targets: Vec<WeightedTarget>,
2030}
2031
2032/// <p>An object that represents types of timeouts. </p>
2033#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2034pub struct TcpTimeout {
2035    #[serde(rename = "idle")]
2036    #[serde(skip_serializing_if = "Option::is_none")]
2037    pub idle: Option<Duration>,
2038}
2039
2040/// <p>An object that represents a Transport Layer Security (TLS) validation context.</p>
2041#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2042pub struct TlsValidationContext {
2043    /// <p>A reference to an object that represents a TLS validation context trust.</p>
2044    #[serde(rename = "trust")]
2045    pub trust: TlsValidationContextTrust,
2046}
2047
2048/// <p>An object that represents a TLS validation context trust for an AWS Certicate Manager (ACM)
2049/// certificate.</p>
2050#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2051pub struct TlsValidationContextAcmTrust {
2052    /// <p>One or more ACM Amazon Resource Name (ARN)s.</p>
2053    #[serde(rename = "certificateAuthorityArns")]
2054    pub certificate_authority_arns: Vec<String>,
2055}
2056
2057/// <p>An object that represents a Transport Layer Security (TLS) validation context trust for a local file.</p>
2058#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2059pub struct TlsValidationContextFileTrust {
2060    /// <p>The certificate trust chain for a certificate stored on the file system of the virtual
2061    /// node that the proxy is running on.</p>
2062    #[serde(rename = "certificateChain")]
2063    pub certificate_chain: String,
2064}
2065
2066/// <p>An object that represents a Transport Layer Security (TLS) validation context trust.</p>
2067#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2068pub struct TlsValidationContextTrust {
2069    /// <p>A reference to an object that represents a TLS validation context trust for an AWS Certicate Manager (ACM)
2070    /// certificate.</p>
2071    #[serde(rename = "acm")]
2072    #[serde(skip_serializing_if = "Option::is_none")]
2073    pub acm: Option<TlsValidationContextAcmTrust>,
2074    /// <p>An object that represents a TLS validation context trust for a local file.</p>
2075    #[serde(rename = "file")]
2076    #[serde(skip_serializing_if = "Option::is_none")]
2077    pub file: Option<TlsValidationContextFileTrust>,
2078}
2079
2080#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2081#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2082pub struct UntagResourceInput {
2083    /// <p>The Amazon Resource Name (ARN) of the resource to delete tags from.</p>
2084    #[serde(rename = "resourceArn")]
2085    pub resource_arn: String,
2086    /// <p>The keys of the tags to be removed.</p>
2087    #[serde(rename = "tagKeys")]
2088    pub tag_keys: Vec<String>,
2089}
2090
2091#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2092#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2093pub struct UntagResourceOutput {}
2094
2095#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2096#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2097pub struct UpdateGatewayRouteInput {
2098    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
2099    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
2100    #[serde(rename = "clientToken")]
2101    #[serde(skip_serializing_if = "Option::is_none")]
2102    pub client_token: Option<String>,
2103    /// <p>The name of the gateway route to update.</p>
2104    #[serde(rename = "gatewayRouteName")]
2105    pub gateway_route_name: String,
2106    /// <p>The name of the service mesh that the gateway route resides in.</p>
2107    #[serde(rename = "meshName")]
2108    pub mesh_name: String,
2109    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
2110    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2111    #[serde(rename = "meshOwner")]
2112    #[serde(skip_serializing_if = "Option::is_none")]
2113    pub mesh_owner: Option<String>,
2114    /// <p>The new gateway route specification to apply. This overwrites the existing data.</p>
2115    #[serde(rename = "spec")]
2116    pub spec: GatewayRouteSpec,
2117    /// <p>The name of the virtual gateway that the gateway route is associated with.</p>
2118    #[serde(rename = "virtualGatewayName")]
2119    pub virtual_gateway_name: String,
2120}
2121
2122#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2123#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2124pub struct UpdateGatewayRouteOutput {
2125    /// <p>A full description of the gateway route that was updated.</p>
2126    #[serde(rename = "gatewayRoute")]
2127    pub gateway_route: GatewayRouteData,
2128}
2129
2130#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2131#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2132pub struct UpdateMeshInput {
2133    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
2134    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
2135    #[serde(rename = "clientToken")]
2136    #[serde(skip_serializing_if = "Option::is_none")]
2137    pub client_token: Option<String>,
2138    /// <p>The name of the service mesh to update.</p>
2139    #[serde(rename = "meshName")]
2140    pub mesh_name: String,
2141    /// <p>The service mesh specification to apply.</p>
2142    #[serde(rename = "spec")]
2143    #[serde(skip_serializing_if = "Option::is_none")]
2144    pub spec: Option<MeshSpec>,
2145}
2146
2147#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2148#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2149pub struct UpdateMeshOutput {
2150    #[serde(rename = "mesh")]
2151    pub mesh: MeshData,
2152}
2153
2154#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2155#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2156pub struct UpdateRouteInput {
2157    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
2158    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
2159    #[serde(rename = "clientToken")]
2160    #[serde(skip_serializing_if = "Option::is_none")]
2161    pub client_token: Option<String>,
2162    /// <p>The name of the service mesh that the route resides in.</p>
2163    #[serde(rename = "meshName")]
2164    pub mesh_name: String,
2165    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
2166    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2167    #[serde(rename = "meshOwner")]
2168    #[serde(skip_serializing_if = "Option::is_none")]
2169    pub mesh_owner: Option<String>,
2170    /// <p>The name of the route to update.</p>
2171    #[serde(rename = "routeName")]
2172    pub route_name: String,
2173    /// <p>The new route specification to apply. This overwrites the existing data.</p>
2174    #[serde(rename = "spec")]
2175    pub spec: RouteSpec,
2176    /// <p>The name of the virtual router that the route is associated with.</p>
2177    #[serde(rename = "virtualRouterName")]
2178    pub virtual_router_name: String,
2179}
2180
2181#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2182#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2183pub struct UpdateRouteOutput {
2184    /// <p>A full description of the route that was updated.</p>
2185    #[serde(rename = "route")]
2186    pub route: RouteData,
2187}
2188
2189#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2190#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2191pub struct UpdateVirtualGatewayInput {
2192    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
2193    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
2194    #[serde(rename = "clientToken")]
2195    #[serde(skip_serializing_if = "Option::is_none")]
2196    pub client_token: Option<String>,
2197    /// <p>The name of the service mesh that the virtual gateway resides in.</p>
2198    #[serde(rename = "meshName")]
2199    pub mesh_name: String,
2200    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
2201    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2202    #[serde(rename = "meshOwner")]
2203    #[serde(skip_serializing_if = "Option::is_none")]
2204    pub mesh_owner: Option<String>,
2205    /// <p>The new virtual gateway specification to apply. This overwrites the existing
2206    /// data.</p>
2207    #[serde(rename = "spec")]
2208    pub spec: VirtualGatewaySpec,
2209    /// <p>The name of the virtual gateway to update.</p>
2210    #[serde(rename = "virtualGatewayName")]
2211    pub virtual_gateway_name: String,
2212}
2213
2214#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2215#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2216pub struct UpdateVirtualGatewayOutput {
2217    /// <p>A full description of the virtual gateway that was updated.</p>
2218    #[serde(rename = "virtualGateway")]
2219    pub virtual_gateway: VirtualGatewayData,
2220}
2221
2222#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2223#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2224pub struct UpdateVirtualNodeInput {
2225    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
2226    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
2227    #[serde(rename = "clientToken")]
2228    #[serde(skip_serializing_if = "Option::is_none")]
2229    pub client_token: Option<String>,
2230    /// <p>The name of the service mesh that the virtual node resides in.</p>
2231    #[serde(rename = "meshName")]
2232    pub mesh_name: String,
2233    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
2234    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2235    #[serde(rename = "meshOwner")]
2236    #[serde(skip_serializing_if = "Option::is_none")]
2237    pub mesh_owner: Option<String>,
2238    /// <p>The new virtual node specification to apply. This overwrites the existing data.</p>
2239    #[serde(rename = "spec")]
2240    pub spec: VirtualNodeSpec,
2241    /// <p>The name of the virtual node to update.</p>
2242    #[serde(rename = "virtualNodeName")]
2243    pub virtual_node_name: String,
2244}
2245
2246#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2247#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2248pub struct UpdateVirtualNodeOutput {
2249    /// <p>A full description of the virtual node that was updated.</p>
2250    #[serde(rename = "virtualNode")]
2251    pub virtual_node: VirtualNodeData,
2252}
2253
2254#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2255#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2256pub struct UpdateVirtualRouterInput {
2257    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
2258    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
2259    #[serde(rename = "clientToken")]
2260    #[serde(skip_serializing_if = "Option::is_none")]
2261    pub client_token: Option<String>,
2262    /// <p>The name of the service mesh that the virtual router resides in.</p>
2263    #[serde(rename = "meshName")]
2264    pub mesh_name: String,
2265    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
2266    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2267    #[serde(rename = "meshOwner")]
2268    #[serde(skip_serializing_if = "Option::is_none")]
2269    pub mesh_owner: Option<String>,
2270    /// <p>The new virtual router specification to apply. This overwrites the existing data.</p>
2271    #[serde(rename = "spec")]
2272    pub spec: VirtualRouterSpec,
2273    /// <p>The name of the virtual router to update.</p>
2274    #[serde(rename = "virtualRouterName")]
2275    pub virtual_router_name: String,
2276}
2277
2278#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2279#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2280pub struct UpdateVirtualRouterOutput {
2281    /// <p>A full description of the virtual router that was updated.</p>
2282    #[serde(rename = "virtualRouter")]
2283    pub virtual_router: VirtualRouterData,
2284}
2285
2286#[derive(Clone, Debug, Default, PartialEq, Serialize)]
2287#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
2288pub struct UpdateVirtualServiceInput {
2289    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the
2290    /// request. Up to 36 letters, numbers, hyphens, and underscores are allowed.</p>
2291    #[serde(rename = "clientToken")]
2292    #[serde(skip_serializing_if = "Option::is_none")]
2293    pub client_token: Option<String>,
2294    /// <p>The name of the service mesh that the virtual service resides in.</p>
2295    #[serde(rename = "meshName")]
2296    pub mesh_name: String,
2297    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
2298    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2299    #[serde(rename = "meshOwner")]
2300    #[serde(skip_serializing_if = "Option::is_none")]
2301    pub mesh_owner: Option<String>,
2302    /// <p>The new virtual service specification to apply. This overwrites the existing
2303    /// data.</p>
2304    #[serde(rename = "spec")]
2305    pub spec: VirtualServiceSpec,
2306    /// <p>The name of the virtual service to update.</p>
2307    #[serde(rename = "virtualServiceName")]
2308    pub virtual_service_name: String,
2309}
2310
2311#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2312#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2313pub struct UpdateVirtualServiceOutput {
2314    /// <p>A full description of the virtual service that was updated.</p>
2315    #[serde(rename = "virtualService")]
2316    pub virtual_service: VirtualServiceData,
2317}
2318
2319/// <p>The access log configuration for a virtual gateway.</p>
2320#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2321pub struct VirtualGatewayAccessLog {
2322    /// <p>The file object to send virtual gateway access logs to.</p>
2323    #[serde(rename = "file")]
2324    #[serde(skip_serializing_if = "Option::is_none")]
2325    pub file: Option<VirtualGatewayFileAccessLog>,
2326}
2327
2328/// <p>An object that represents the default properties for a backend.</p>
2329#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2330pub struct VirtualGatewayBackendDefaults {
2331    /// <p>A reference to an object that represents a client policy.</p>
2332    #[serde(rename = "clientPolicy")]
2333    #[serde(skip_serializing_if = "Option::is_none")]
2334    pub client_policy: Option<VirtualGatewayClientPolicy>,
2335}
2336
2337/// <p>An object that represents a client policy.</p>
2338#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2339pub struct VirtualGatewayClientPolicy {
2340    /// <p>A reference to an object that represents a Transport Layer Security (TLS) client policy.</p>
2341    #[serde(rename = "tls")]
2342    #[serde(skip_serializing_if = "Option::is_none")]
2343    pub tls: Option<VirtualGatewayClientPolicyTls>,
2344}
2345
2346/// <p>An object that represents a Transport Layer Security (TLS) client policy.</p>
2347#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2348pub struct VirtualGatewayClientPolicyTls {
2349    /// <p>Whether the policy is enforced. The default is <code>True</code>, if a value isn't
2350    /// specified.</p>
2351    #[serde(rename = "enforce")]
2352    #[serde(skip_serializing_if = "Option::is_none")]
2353    pub enforce: Option<bool>,
2354    /// <p>One or more ports that the policy is enforced for.</p>
2355    #[serde(rename = "ports")]
2356    #[serde(skip_serializing_if = "Option::is_none")]
2357    pub ports: Option<Vec<i64>>,
2358    /// <p>A reference to an object that represents a TLS validation context.</p>
2359    #[serde(rename = "validation")]
2360    pub validation: VirtualGatewayTlsValidationContext,
2361}
2362
2363/// <p>An object that represents a virtual gateway returned by a describe operation.</p>
2364#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2365#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2366pub struct VirtualGatewayData {
2367    /// <p>The name of the service mesh that the virtual gateway resides in.</p>
2368    #[serde(rename = "meshName")]
2369    pub mesh_name: String,
2370    #[serde(rename = "metadata")]
2371    pub metadata: ResourceMetadata,
2372    /// <p>The specifications of the virtual gateway.</p>
2373    #[serde(rename = "spec")]
2374    pub spec: VirtualGatewaySpec,
2375    /// <p>The current status of the virtual gateway.</p>
2376    #[serde(rename = "status")]
2377    pub status: VirtualGatewayStatus,
2378    /// <p>The name of the virtual gateway.</p>
2379    #[serde(rename = "virtualGatewayName")]
2380    pub virtual_gateway_name: String,
2381}
2382
2383/// <p>An object that represents an access log file.</p>
2384#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2385pub struct VirtualGatewayFileAccessLog {
2386    /// <p>The file path to write access logs to. You can use <code>/dev/stdout</code> to send
2387    /// access logs to standard out and configure your Envoy container to use a log driver, such as
2388    /// <code>awslogs</code>, to export the access logs to a log storage service such as Amazon
2389    /// CloudWatch Logs. You can also specify a path in the Envoy container's file system to write
2390    /// the files to disk.</p>
2391    #[serde(rename = "path")]
2392    pub path: String,
2393}
2394
2395/// <p>An object that represents the health check policy for a virtual gateway's
2396/// listener.</p>
2397#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2398pub struct VirtualGatewayHealthCheckPolicy {
2399    /// <p>The number of consecutive successful health checks that must occur before declaring the
2400    /// listener healthy.</p>
2401    #[serde(rename = "healthyThreshold")]
2402    pub healthy_threshold: i64,
2403    /// <p>The time period in milliseconds between each health check execution.</p>
2404    #[serde(rename = "intervalMillis")]
2405    pub interval_millis: i64,
2406    /// <p>The destination path for the health check request. This value is only used if the
2407    /// specified protocol is HTTP or HTTP/2. For any other protocol, this value is ignored.</p>
2408    #[serde(rename = "path")]
2409    #[serde(skip_serializing_if = "Option::is_none")]
2410    pub path: Option<String>,
2411    /// <p>The destination port for the health check request. This port must match the port defined
2412    /// in the <a>PortMapping</a> for the listener.</p>
2413    #[serde(rename = "port")]
2414    #[serde(skip_serializing_if = "Option::is_none")]
2415    pub port: Option<i64>,
2416    /// <p>The protocol for the health check request. If you specify <code>grpc</code>, then your
2417    /// service must conform to the <a href="https://github.com/grpc/grpc/blob/master/doc/health-checking.md">GRPC Health
2418    /// Checking Protocol</a>.</p>
2419    #[serde(rename = "protocol")]
2420    pub protocol: String,
2421    /// <p>The amount of time to wait when receiving a response from the health check, in
2422    /// milliseconds.</p>
2423    #[serde(rename = "timeoutMillis")]
2424    pub timeout_millis: i64,
2425    /// <p>The number of consecutive failed health checks that must occur before declaring a
2426    /// virtual gateway unhealthy.</p>
2427    #[serde(rename = "unhealthyThreshold")]
2428    pub unhealthy_threshold: i64,
2429}
2430
2431/// <p>An object that represents a listener for a virtual gateway.</p>
2432#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2433pub struct VirtualGatewayListener {
2434    /// <p>The health check information for the listener.</p>
2435    #[serde(rename = "healthCheck")]
2436    #[serde(skip_serializing_if = "Option::is_none")]
2437    pub health_check: Option<VirtualGatewayHealthCheckPolicy>,
2438    /// <p>The port mapping information for the listener.</p>
2439    #[serde(rename = "portMapping")]
2440    pub port_mapping: VirtualGatewayPortMapping,
2441    /// <p>A reference to an object that represents the Transport Layer Security (TLS) properties for the listener.</p>
2442    #[serde(rename = "tls")]
2443    #[serde(skip_serializing_if = "Option::is_none")]
2444    pub tls: Option<VirtualGatewayListenerTls>,
2445}
2446
2447/// <p>An object that represents the Transport Layer Security (TLS) properties for a listener.</p>
2448#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2449pub struct VirtualGatewayListenerTls {
2450    /// <p>An object that represents a Transport Layer Security (TLS) certificate.</p>
2451    #[serde(rename = "certificate")]
2452    pub certificate: VirtualGatewayListenerTlsCertificate,
2453    /// <p>Specify one of the following modes.</p>
2454    ///
2455    /// <pre><code>     &lt;ul&gt;
2456    /// &lt;li&gt;
2457    /// &lt;p&gt;
2458    /// &lt;b/&gt;STRICT – Listener only accepts connections with TLS
2459    /// enabled. &lt;/p&gt;
2460    /// &lt;/li&gt;
2461    /// &lt;li&gt;
2462    /// &lt;p&gt;
2463    /// &lt;b/&gt;PERMISSIVE – Listener accepts connections with or
2464    /// without TLS enabled.&lt;/p&gt;
2465    /// &lt;/li&gt;
2466    /// &lt;li&gt;
2467    /// &lt;p&gt;
2468    /// &lt;b/&gt;DISABLED – Listener only accepts connections without
2469    /// TLS. &lt;/p&gt;
2470    /// &lt;/li&gt;
2471    /// &lt;/ul&gt;
2472    /// </code></pre>
2473    #[serde(rename = "mode")]
2474    pub mode: String,
2475}
2476
2477/// <p>An object that represents an AWS Certicate Manager (ACM) certificate.</p>
2478#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2479pub struct VirtualGatewayListenerTlsAcmCertificate {
2480    /// <p>The Amazon Resource Name (ARN) for the certificate. The certificate must meet specific requirements and you must have proxy authorization enabled. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html#virtual-node-tls-prerequisites">Transport Layer Security (TLS)</a>.</p>
2481    #[serde(rename = "certificateArn")]
2482    pub certificate_arn: String,
2483}
2484
2485/// <p>An object that represents a listener's Transport Layer Security (TLS) certificate.</p>
2486#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2487pub struct VirtualGatewayListenerTlsCertificate {
2488    /// <p>A reference to an object that represents an AWS Certicate Manager (ACM) certificate.</p>
2489    #[serde(rename = "acm")]
2490    #[serde(skip_serializing_if = "Option::is_none")]
2491    pub acm: Option<VirtualGatewayListenerTlsAcmCertificate>,
2492    /// <p>A reference to an object that represents a local file certificate.</p>
2493    #[serde(rename = "file")]
2494    #[serde(skip_serializing_if = "Option::is_none")]
2495    pub file: Option<VirtualGatewayListenerTlsFileCertificate>,
2496}
2497
2498/// <p>An object that represents a local file certificate.
2499/// The certificate must meet specific requirements and you must have proxy authorization enabled. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html#virtual-node-tls-prerequisites">Transport Layer Security (TLS)</a>.</p>
2500#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2501pub struct VirtualGatewayListenerTlsFileCertificate {
2502    /// <p>The certificate chain for the certificate.</p>
2503    #[serde(rename = "certificateChain")]
2504    pub certificate_chain: String,
2505    /// <p>The private key for a certificate stored on the file system of the mesh endpoint that
2506    /// the proxy is running on.</p>
2507    #[serde(rename = "privateKey")]
2508    pub private_key: String,
2509}
2510
2511/// <p>An object that represents logging information.</p>
2512#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2513pub struct VirtualGatewayLogging {
2514    /// <p>The access log configuration.</p>
2515    #[serde(rename = "accessLog")]
2516    #[serde(skip_serializing_if = "Option::is_none")]
2517    pub access_log: Option<VirtualGatewayAccessLog>,
2518}
2519
2520/// <p>An object that represents a port mapping.</p>
2521#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2522pub struct VirtualGatewayPortMapping {
2523    /// <p>The port used for the port mapping. Specify one protocol.</p>
2524    #[serde(rename = "port")]
2525    pub port: i64,
2526    /// <p>The protocol used for the port mapping.</p>
2527    #[serde(rename = "protocol")]
2528    pub protocol: String,
2529}
2530
2531/// <p>An object that represents a virtual gateway returned by a list operation.</p>
2532#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2533#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2534pub struct VirtualGatewayRef {
2535    /// <p>The full Amazon Resource Name (ARN) for the resource.</p>
2536    #[serde(rename = "arn")]
2537    pub arn: String,
2538    /// <p>The Unix epoch timestamp in seconds for when the resource was created.</p>
2539    #[serde(rename = "createdAt")]
2540    pub created_at: f64,
2541    /// <p>The Unix epoch timestamp in seconds for when the resource was last updated.</p>
2542    #[serde(rename = "lastUpdatedAt")]
2543    pub last_updated_at: f64,
2544    /// <p>The name of the service mesh that the resource resides in.</p>
2545    #[serde(rename = "meshName")]
2546    pub mesh_name: String,
2547    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
2548    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2549    #[serde(rename = "meshOwner")]
2550    pub mesh_owner: String,
2551    /// <p>The AWS IAM account ID of the resource owner. If the account ID is not your own, then it's
2552    /// the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2553    #[serde(rename = "resourceOwner")]
2554    pub resource_owner: String,
2555    /// <p>The version of the resource. Resources are created at version 1, and this version is incremented each time that they're updated.</p>
2556    #[serde(rename = "version")]
2557    pub version: i64,
2558    /// <p>The name of the resource.</p>
2559    #[serde(rename = "virtualGatewayName")]
2560    pub virtual_gateway_name: String,
2561}
2562
2563/// <p>An object that represents the specification of a service mesh resource.</p>
2564#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2565pub struct VirtualGatewaySpec {
2566    /// <p>A reference to an object that represents the defaults for backends.</p>
2567    #[serde(rename = "backendDefaults")]
2568    #[serde(skip_serializing_if = "Option::is_none")]
2569    pub backend_defaults: Option<VirtualGatewayBackendDefaults>,
2570    /// <p>The listeners that the mesh endpoint is expected to receive inbound traffic from. You
2571    /// can specify one listener.</p>
2572    #[serde(rename = "listeners")]
2573    pub listeners: Vec<VirtualGatewayListener>,
2574    #[serde(rename = "logging")]
2575    #[serde(skip_serializing_if = "Option::is_none")]
2576    pub logging: Option<VirtualGatewayLogging>,
2577}
2578
2579/// <p>An object that represents the status of the mesh resource.</p>
2580#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2581#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2582pub struct VirtualGatewayStatus {
2583    /// <p>The current status.</p>
2584    #[serde(rename = "status")]
2585    pub status: String,
2586}
2587
2588/// <p>An object that represents a Transport Layer Security (TLS) validation context.</p>
2589#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2590pub struct VirtualGatewayTlsValidationContext {
2591    /// <p>A reference to an object that represents a TLS validation context trust.</p>
2592    #[serde(rename = "trust")]
2593    pub trust: VirtualGatewayTlsValidationContextTrust,
2594}
2595
2596/// <p>An object that represents a TLS validation context trust for an AWS Certicate Manager (ACM)
2597/// certificate.</p>
2598#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2599pub struct VirtualGatewayTlsValidationContextAcmTrust {
2600    /// <p>One or more ACM Amazon Resource Name (ARN)s.</p>
2601    #[serde(rename = "certificateAuthorityArns")]
2602    pub certificate_authority_arns: Vec<String>,
2603}
2604
2605/// <p>An object that represents a Transport Layer Security (TLS) validation context trust for a local file.</p>
2606#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2607pub struct VirtualGatewayTlsValidationContextFileTrust {
2608    /// <p>The certificate trust chain for a certificate stored on the file system of the virtual
2609    /// node that the proxy is running on.</p>
2610    #[serde(rename = "certificateChain")]
2611    pub certificate_chain: String,
2612}
2613
2614/// <p>An object that represents a Transport Layer Security (TLS) validation context trust.</p>
2615#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2616pub struct VirtualGatewayTlsValidationContextTrust {
2617    /// <p>A reference to an object that represents a TLS validation context trust for an AWS Certicate Manager (ACM)
2618    /// certificate.</p>
2619    #[serde(rename = "acm")]
2620    #[serde(skip_serializing_if = "Option::is_none")]
2621    pub acm: Option<VirtualGatewayTlsValidationContextAcmTrust>,
2622    /// <p>An object that represents a TLS validation context trust for a local file.</p>
2623    #[serde(rename = "file")]
2624    #[serde(skip_serializing_if = "Option::is_none")]
2625    pub file: Option<VirtualGatewayTlsValidationContextFileTrust>,
2626}
2627
2628/// <p>An object that represents a virtual node returned by a describe operation.</p>
2629#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2630#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2631pub struct VirtualNodeData {
2632    /// <p>The name of the service mesh that the virtual node resides in.</p>
2633    #[serde(rename = "meshName")]
2634    pub mesh_name: String,
2635    /// <p>The associated metadata for the virtual node.</p>
2636    #[serde(rename = "metadata")]
2637    pub metadata: ResourceMetadata,
2638    /// <p>The specifications of the virtual node.</p>
2639    #[serde(rename = "spec")]
2640    pub spec: VirtualNodeSpec,
2641    /// <p>The current status for the virtual node.</p>
2642    #[serde(rename = "status")]
2643    pub status: VirtualNodeStatus,
2644    /// <p>The name of the virtual node.</p>
2645    #[serde(rename = "virtualNodeName")]
2646    pub virtual_node_name: String,
2647}
2648
2649/// <p>An object that represents a virtual node returned by a list operation.</p>
2650#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2651#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2652pub struct VirtualNodeRef {
2653    /// <p>The full Amazon Resource Name (ARN) for the virtual node.</p>
2654    #[serde(rename = "arn")]
2655    pub arn: String,
2656    /// <p>The Unix epoch timestamp in seconds for when the resource was created.</p>
2657    #[serde(rename = "createdAt")]
2658    pub created_at: f64,
2659    /// <p>The Unix epoch timestamp in seconds for when the resource was last updated.</p>
2660    #[serde(rename = "lastUpdatedAt")]
2661    pub last_updated_at: f64,
2662    /// <p>The name of the service mesh that the virtual node resides in.</p>
2663    #[serde(rename = "meshName")]
2664    pub mesh_name: String,
2665    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
2666    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2667    #[serde(rename = "meshOwner")]
2668    pub mesh_owner: String,
2669    /// <p>The AWS IAM account ID of the resource owner. If the account ID is not your own, then it's
2670    /// the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2671    #[serde(rename = "resourceOwner")]
2672    pub resource_owner: String,
2673    /// <p>The version of the resource. Resources are created at version 1, and this version is incremented each time that they're updated.</p>
2674    #[serde(rename = "version")]
2675    pub version: i64,
2676    /// <p>The name of the virtual node.</p>
2677    #[serde(rename = "virtualNodeName")]
2678    pub virtual_node_name: String,
2679}
2680
2681/// <p>An object that represents a virtual node service provider.</p>
2682#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2683pub struct VirtualNodeServiceProvider {
2684    /// <p>The name of the virtual node that is acting as a service provider.</p>
2685    #[serde(rename = "virtualNodeName")]
2686    pub virtual_node_name: String,
2687}
2688
2689/// <p>An object that represents the specification of a virtual node.</p>
2690#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2691pub struct VirtualNodeSpec {
2692    /// <p>A reference to an object that represents the defaults for backends.</p>
2693    #[serde(rename = "backendDefaults")]
2694    #[serde(skip_serializing_if = "Option::is_none")]
2695    pub backend_defaults: Option<BackendDefaults>,
2696    /// <p>The backends that the virtual node is expected to send outbound traffic to.</p>
2697    #[serde(rename = "backends")]
2698    #[serde(skip_serializing_if = "Option::is_none")]
2699    pub backends: Option<Vec<Backend>>,
2700    /// <p>The listener that the virtual node is expected to receive inbound traffic from. You can
2701    /// specify one listener.</p>
2702    #[serde(rename = "listeners")]
2703    #[serde(skip_serializing_if = "Option::is_none")]
2704    pub listeners: Option<Vec<Listener>>,
2705    /// <p>The inbound and outbound access logging information for the virtual node.</p>
2706    #[serde(rename = "logging")]
2707    #[serde(skip_serializing_if = "Option::is_none")]
2708    pub logging: Option<Logging>,
2709    /// <p>The service discovery information for the virtual node. If your virtual node does not
2710    /// expect ingress traffic, you can omit this parameter. If you specify a
2711    /// <code>listener</code>, then you must specify service discovery information.</p>
2712    #[serde(rename = "serviceDiscovery")]
2713    #[serde(skip_serializing_if = "Option::is_none")]
2714    pub service_discovery: Option<ServiceDiscovery>,
2715}
2716
2717/// <p>An object that represents the current status of the virtual node.</p>
2718#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2719#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2720pub struct VirtualNodeStatus {
2721    /// <p>The current status of the virtual node.</p>
2722    #[serde(rename = "status")]
2723    pub status: String,
2724}
2725
2726/// <p>An object that represents a virtual router returned by a describe operation.</p>
2727#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2728#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2729pub struct VirtualRouterData {
2730    /// <p>The name of the service mesh that the virtual router resides in.</p>
2731    #[serde(rename = "meshName")]
2732    pub mesh_name: String,
2733    /// <p>The associated metadata for the virtual router.</p>
2734    #[serde(rename = "metadata")]
2735    pub metadata: ResourceMetadata,
2736    /// <p>The specifications of the virtual router.</p>
2737    #[serde(rename = "spec")]
2738    pub spec: VirtualRouterSpec,
2739    /// <p>The current status of the virtual router.</p>
2740    #[serde(rename = "status")]
2741    pub status: VirtualRouterStatus,
2742    /// <p>The name of the virtual router.</p>
2743    #[serde(rename = "virtualRouterName")]
2744    pub virtual_router_name: String,
2745}
2746
2747/// <p>An object that represents a virtual router listener.</p>
2748#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2749pub struct VirtualRouterListener {
2750    #[serde(rename = "portMapping")]
2751    pub port_mapping: PortMapping,
2752}
2753
2754/// <p>An object that represents a virtual router returned by a list operation.</p>
2755#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2756#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2757pub struct VirtualRouterRef {
2758    /// <p>The full Amazon Resource Name (ARN) for the virtual router.</p>
2759    #[serde(rename = "arn")]
2760    pub arn: String,
2761    /// <p>The Unix epoch timestamp in seconds for when the resource was created.</p>
2762    #[serde(rename = "createdAt")]
2763    pub created_at: f64,
2764    /// <p>The Unix epoch timestamp in seconds for when the resource was last updated.</p>
2765    #[serde(rename = "lastUpdatedAt")]
2766    pub last_updated_at: f64,
2767    /// <p>The name of the service mesh that the virtual router resides in.</p>
2768    #[serde(rename = "meshName")]
2769    pub mesh_name: String,
2770    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
2771    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2772    #[serde(rename = "meshOwner")]
2773    pub mesh_owner: String,
2774    /// <p>The AWS IAM account ID of the resource owner. If the account ID is not your own, then it's
2775    /// the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2776    #[serde(rename = "resourceOwner")]
2777    pub resource_owner: String,
2778    /// <p>The version of the resource. Resources are created at version 1, and this version is incremented each time that they're updated.</p>
2779    #[serde(rename = "version")]
2780    pub version: i64,
2781    /// <p>The name of the virtual router.</p>
2782    #[serde(rename = "virtualRouterName")]
2783    pub virtual_router_name: String,
2784}
2785
2786/// <p>An object that represents a virtual node service provider.</p>
2787#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2788pub struct VirtualRouterServiceProvider {
2789    /// <p>The name of the virtual router that is acting as a service provider.</p>
2790    #[serde(rename = "virtualRouterName")]
2791    pub virtual_router_name: String,
2792}
2793
2794/// <p>An object that represents the specification of a virtual router.</p>
2795#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2796pub struct VirtualRouterSpec {
2797    /// <p>The listeners that the virtual router is expected to receive inbound traffic from. You
2798    /// can specify one listener.</p>
2799    #[serde(rename = "listeners")]
2800    #[serde(skip_serializing_if = "Option::is_none")]
2801    pub listeners: Option<Vec<VirtualRouterListener>>,
2802}
2803
2804/// <p>An object that represents the status of a virtual router. </p>
2805#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2806#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2807pub struct VirtualRouterStatus {
2808    /// <p>The current status of the virtual router.</p>
2809    #[serde(rename = "status")]
2810    pub status: String,
2811}
2812
2813/// <p>An object that represents a virtual service backend for a virtual node.</p>
2814#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2815pub struct VirtualServiceBackend {
2816    /// <p>A reference to an object that represents the client policy for a backend.</p>
2817    #[serde(rename = "clientPolicy")]
2818    #[serde(skip_serializing_if = "Option::is_none")]
2819    pub client_policy: Option<ClientPolicy>,
2820    /// <p>The name of the virtual service that is acting as a virtual node backend.</p>
2821    #[serde(rename = "virtualServiceName")]
2822    pub virtual_service_name: String,
2823}
2824
2825/// <p>An object that represents a virtual service returned by a describe operation.</p>
2826#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2827#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2828pub struct VirtualServiceData {
2829    /// <p>The name of the service mesh that the virtual service resides in.</p>
2830    #[serde(rename = "meshName")]
2831    pub mesh_name: String,
2832    #[serde(rename = "metadata")]
2833    pub metadata: ResourceMetadata,
2834    /// <p>The specifications of the virtual service.</p>
2835    #[serde(rename = "spec")]
2836    pub spec: VirtualServiceSpec,
2837    /// <p>The current status of the virtual service.</p>
2838    #[serde(rename = "status")]
2839    pub status: VirtualServiceStatus,
2840    /// <p>The name of the virtual service.</p>
2841    #[serde(rename = "virtualServiceName")]
2842    pub virtual_service_name: String,
2843}
2844
2845/// <p>An object that represents the provider for a virtual service.</p>
2846#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2847pub struct VirtualServiceProvider {
2848    /// <p>The virtual node associated with a virtual service.</p>
2849    #[serde(rename = "virtualNode")]
2850    #[serde(skip_serializing_if = "Option::is_none")]
2851    pub virtual_node: Option<VirtualNodeServiceProvider>,
2852    /// <p>The virtual router associated with a virtual service.</p>
2853    #[serde(rename = "virtualRouter")]
2854    #[serde(skip_serializing_if = "Option::is_none")]
2855    pub virtual_router: Option<VirtualRouterServiceProvider>,
2856}
2857
2858/// <p>An object that represents a virtual service returned by a list operation.</p>
2859#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2860#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2861pub struct VirtualServiceRef {
2862    /// <p>The full Amazon Resource Name (ARN) for the virtual service.</p>
2863    #[serde(rename = "arn")]
2864    pub arn: String,
2865    /// <p>The Unix epoch timestamp in seconds for when the resource was created.</p>
2866    #[serde(rename = "createdAt")]
2867    pub created_at: f64,
2868    /// <p>The Unix epoch timestamp in seconds for when the resource was last updated.</p>
2869    #[serde(rename = "lastUpdatedAt")]
2870    pub last_updated_at: f64,
2871    /// <p>The name of the service mesh that the virtual service resides in.</p>
2872    #[serde(rename = "meshName")]
2873    pub mesh_name: String,
2874    /// <p>The AWS IAM account ID of the service mesh owner. If the account ID is not your own, then it's
2875    /// the ID of the account that shared the mesh with your account. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2876    #[serde(rename = "meshOwner")]
2877    pub mesh_owner: String,
2878    /// <p>The AWS IAM account ID of the resource owner. If the account ID is not your own, then it's
2879    /// the ID of the mesh owner or of another account that the mesh is shared with. For more information about mesh sharing, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html">Working with shared meshes</a>.</p>
2880    #[serde(rename = "resourceOwner")]
2881    pub resource_owner: String,
2882    /// <p>The version of the resource. Resources are created at version 1, and this version is incremented each time that they're updated.</p>
2883    #[serde(rename = "version")]
2884    pub version: i64,
2885    /// <p>The name of the virtual service.</p>
2886    #[serde(rename = "virtualServiceName")]
2887    pub virtual_service_name: String,
2888}
2889
2890/// <p>An object that represents the specification of a virtual service.</p>
2891#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2892pub struct VirtualServiceSpec {
2893    /// <p>The App Mesh object that is acting as the provider for a virtual service. You can specify
2894    /// a single virtual node or virtual router.</p>
2895    #[serde(rename = "provider")]
2896    #[serde(skip_serializing_if = "Option::is_none")]
2897    pub provider: Option<VirtualServiceProvider>,
2898}
2899
2900/// <p>An object that represents the status of a virtual service.</p>
2901#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
2902#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
2903pub struct VirtualServiceStatus {
2904    /// <p>The current status of the virtual service.</p>
2905    #[serde(rename = "status")]
2906    pub status: String,
2907}
2908
2909/// <p>An object that represents a target and its relative weight. Traffic is distributed
2910/// across targets according to their relative weight. For example, a weighted target with a
2911/// relative weight of 50 receives five times as much traffic as one with a relative weight of
2912/// 10. The total weight for all targets combined must be less than or equal to 100.</p>
2913#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
2914pub struct WeightedTarget {
2915    /// <p>The virtual node to associate with the weighted target.</p>
2916    #[serde(rename = "virtualNode")]
2917    pub virtual_node: String,
2918    /// <p>The relative weight of the weighted target.</p>
2919    #[serde(rename = "weight")]
2920    pub weight: i64,
2921}
2922
2923/// Errors returned by CreateGatewayRoute
2924#[derive(Debug, PartialEq)]
2925pub enum CreateGatewayRouteError {
2926    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
2927    BadRequest(String),
2928    /// <p>The request contains a client token that was used for a previous update resource call
2929    /// with different specifications. Try the request again with a new client token.</p>
2930    Conflict(String),
2931    /// <p>You don't have permissions to perform this action.</p>
2932    Forbidden(String),
2933    /// <p>The request processing has failed because of an unknown error, exception, or
2934    /// failure.</p>
2935    InternalServerError(String),
2936    /// <p>You have exceeded a service limit for your account. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/service-quotas.html">Service
2937    /// Limits</a> in the <i>AWS App Mesh User Guide</i>.</p>
2938    LimitExceeded(String),
2939    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
2940    NotFound(String),
2941    /// <p>The request has failed due to a temporary failure of the service.</p>
2942    ServiceUnavailable(String),
2943    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
2944    /// account. For best results, use an increasing or variable sleep interval between
2945    /// requests.</p>
2946    TooManyRequests(String),
2947}
2948
2949impl CreateGatewayRouteError {
2950    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateGatewayRouteError> {
2951        if let Some(err) = proto::json::Error::parse_rest(&res) {
2952            match err.typ.as_str() {
2953                "BadRequestException" => {
2954                    return RusotoError::Service(CreateGatewayRouteError::BadRequest(err.msg))
2955                }
2956                "ConflictException" => {
2957                    return RusotoError::Service(CreateGatewayRouteError::Conflict(err.msg))
2958                }
2959                "ForbiddenException" => {
2960                    return RusotoError::Service(CreateGatewayRouteError::Forbidden(err.msg))
2961                }
2962                "InternalServerErrorException" => {
2963                    return RusotoError::Service(CreateGatewayRouteError::InternalServerError(
2964                        err.msg,
2965                    ))
2966                }
2967                "LimitExceededException" => {
2968                    return RusotoError::Service(CreateGatewayRouteError::LimitExceeded(err.msg))
2969                }
2970                "NotFoundException" => {
2971                    return RusotoError::Service(CreateGatewayRouteError::NotFound(err.msg))
2972                }
2973                "ServiceUnavailableException" => {
2974                    return RusotoError::Service(CreateGatewayRouteError::ServiceUnavailable(
2975                        err.msg,
2976                    ))
2977                }
2978                "TooManyRequestsException" => {
2979                    return RusotoError::Service(CreateGatewayRouteError::TooManyRequests(err.msg))
2980                }
2981                "ValidationException" => return RusotoError::Validation(err.msg),
2982                _ => {}
2983            }
2984        }
2985        RusotoError::Unknown(res)
2986    }
2987}
2988impl fmt::Display for CreateGatewayRouteError {
2989    #[allow(unused_variables)]
2990    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2991        match *self {
2992            CreateGatewayRouteError::BadRequest(ref cause) => write!(f, "{}", cause),
2993            CreateGatewayRouteError::Conflict(ref cause) => write!(f, "{}", cause),
2994            CreateGatewayRouteError::Forbidden(ref cause) => write!(f, "{}", cause),
2995            CreateGatewayRouteError::InternalServerError(ref cause) => write!(f, "{}", cause),
2996            CreateGatewayRouteError::LimitExceeded(ref cause) => write!(f, "{}", cause),
2997            CreateGatewayRouteError::NotFound(ref cause) => write!(f, "{}", cause),
2998            CreateGatewayRouteError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
2999            CreateGatewayRouteError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3000        }
3001    }
3002}
3003impl Error for CreateGatewayRouteError {}
3004/// Errors returned by CreateMesh
3005#[derive(Debug, PartialEq)]
3006pub enum CreateMeshError {
3007    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
3008    BadRequest(String),
3009    /// <p>The request contains a client token that was used for a previous update resource call
3010    /// with different specifications. Try the request again with a new client token.</p>
3011    Conflict(String),
3012    /// <p>You don't have permissions to perform this action.</p>
3013    Forbidden(String),
3014    /// <p>The request processing has failed because of an unknown error, exception, or
3015    /// failure.</p>
3016    InternalServerError(String),
3017    /// <p>You have exceeded a service limit for your account. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/service-quotas.html">Service
3018    /// Limits</a> in the <i>AWS App Mesh User Guide</i>.</p>
3019    LimitExceeded(String),
3020    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
3021    NotFound(String),
3022    /// <p>The request has failed due to a temporary failure of the service.</p>
3023    ServiceUnavailable(String),
3024    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
3025    /// account. For best results, use an increasing or variable sleep interval between
3026    /// requests.</p>
3027    TooManyRequests(String),
3028}
3029
3030impl CreateMeshError {
3031    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateMeshError> {
3032        if let Some(err) = proto::json::Error::parse_rest(&res) {
3033            match err.typ.as_str() {
3034                "BadRequestException" => {
3035                    return RusotoError::Service(CreateMeshError::BadRequest(err.msg))
3036                }
3037                "ConflictException" => {
3038                    return RusotoError::Service(CreateMeshError::Conflict(err.msg))
3039                }
3040                "ForbiddenException" => {
3041                    return RusotoError::Service(CreateMeshError::Forbidden(err.msg))
3042                }
3043                "InternalServerErrorException" => {
3044                    return RusotoError::Service(CreateMeshError::InternalServerError(err.msg))
3045                }
3046                "LimitExceededException" => {
3047                    return RusotoError::Service(CreateMeshError::LimitExceeded(err.msg))
3048                }
3049                "NotFoundException" => {
3050                    return RusotoError::Service(CreateMeshError::NotFound(err.msg))
3051                }
3052                "ServiceUnavailableException" => {
3053                    return RusotoError::Service(CreateMeshError::ServiceUnavailable(err.msg))
3054                }
3055                "TooManyRequestsException" => {
3056                    return RusotoError::Service(CreateMeshError::TooManyRequests(err.msg))
3057                }
3058                "ValidationException" => return RusotoError::Validation(err.msg),
3059                _ => {}
3060            }
3061        }
3062        RusotoError::Unknown(res)
3063    }
3064}
3065impl fmt::Display for CreateMeshError {
3066    #[allow(unused_variables)]
3067    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3068        match *self {
3069            CreateMeshError::BadRequest(ref cause) => write!(f, "{}", cause),
3070            CreateMeshError::Conflict(ref cause) => write!(f, "{}", cause),
3071            CreateMeshError::Forbidden(ref cause) => write!(f, "{}", cause),
3072            CreateMeshError::InternalServerError(ref cause) => write!(f, "{}", cause),
3073            CreateMeshError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3074            CreateMeshError::NotFound(ref cause) => write!(f, "{}", cause),
3075            CreateMeshError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3076            CreateMeshError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3077        }
3078    }
3079}
3080impl Error for CreateMeshError {}
3081/// Errors returned by CreateRoute
3082#[derive(Debug, PartialEq)]
3083pub enum CreateRouteError {
3084    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
3085    BadRequest(String),
3086    /// <p>The request contains a client token that was used for a previous update resource call
3087    /// with different specifications. Try the request again with a new client token.</p>
3088    Conflict(String),
3089    /// <p>You don't have permissions to perform this action.</p>
3090    Forbidden(String),
3091    /// <p>The request processing has failed because of an unknown error, exception, or
3092    /// failure.</p>
3093    InternalServerError(String),
3094    /// <p>You have exceeded a service limit for your account. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/service-quotas.html">Service
3095    /// Limits</a> in the <i>AWS App Mesh User Guide</i>.</p>
3096    LimitExceeded(String),
3097    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
3098    NotFound(String),
3099    /// <p>The request has failed due to a temporary failure of the service.</p>
3100    ServiceUnavailable(String),
3101    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
3102    /// account. For best results, use an increasing or variable sleep interval between
3103    /// requests.</p>
3104    TooManyRequests(String),
3105}
3106
3107impl CreateRouteError {
3108    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateRouteError> {
3109        if let Some(err) = proto::json::Error::parse_rest(&res) {
3110            match err.typ.as_str() {
3111                "BadRequestException" => {
3112                    return RusotoError::Service(CreateRouteError::BadRequest(err.msg))
3113                }
3114                "ConflictException" => {
3115                    return RusotoError::Service(CreateRouteError::Conflict(err.msg))
3116                }
3117                "ForbiddenException" => {
3118                    return RusotoError::Service(CreateRouteError::Forbidden(err.msg))
3119                }
3120                "InternalServerErrorException" => {
3121                    return RusotoError::Service(CreateRouteError::InternalServerError(err.msg))
3122                }
3123                "LimitExceededException" => {
3124                    return RusotoError::Service(CreateRouteError::LimitExceeded(err.msg))
3125                }
3126                "NotFoundException" => {
3127                    return RusotoError::Service(CreateRouteError::NotFound(err.msg))
3128                }
3129                "ServiceUnavailableException" => {
3130                    return RusotoError::Service(CreateRouteError::ServiceUnavailable(err.msg))
3131                }
3132                "TooManyRequestsException" => {
3133                    return RusotoError::Service(CreateRouteError::TooManyRequests(err.msg))
3134                }
3135                "ValidationException" => return RusotoError::Validation(err.msg),
3136                _ => {}
3137            }
3138        }
3139        RusotoError::Unknown(res)
3140    }
3141}
3142impl fmt::Display for CreateRouteError {
3143    #[allow(unused_variables)]
3144    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3145        match *self {
3146            CreateRouteError::BadRequest(ref cause) => write!(f, "{}", cause),
3147            CreateRouteError::Conflict(ref cause) => write!(f, "{}", cause),
3148            CreateRouteError::Forbidden(ref cause) => write!(f, "{}", cause),
3149            CreateRouteError::InternalServerError(ref cause) => write!(f, "{}", cause),
3150            CreateRouteError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3151            CreateRouteError::NotFound(ref cause) => write!(f, "{}", cause),
3152            CreateRouteError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3153            CreateRouteError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3154        }
3155    }
3156}
3157impl Error for CreateRouteError {}
3158/// Errors returned by CreateVirtualGateway
3159#[derive(Debug, PartialEq)]
3160pub enum CreateVirtualGatewayError {
3161    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
3162    BadRequest(String),
3163    /// <p>The request contains a client token that was used for a previous update resource call
3164    /// with different specifications. Try the request again with a new client token.</p>
3165    Conflict(String),
3166    /// <p>You don't have permissions to perform this action.</p>
3167    Forbidden(String),
3168    /// <p>The request processing has failed because of an unknown error, exception, or
3169    /// failure.</p>
3170    InternalServerError(String),
3171    /// <p>You have exceeded a service limit for your account. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/service-quotas.html">Service
3172    /// Limits</a> in the <i>AWS App Mesh User Guide</i>.</p>
3173    LimitExceeded(String),
3174    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
3175    NotFound(String),
3176    /// <p>The request has failed due to a temporary failure of the service.</p>
3177    ServiceUnavailable(String),
3178    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
3179    /// account. For best results, use an increasing or variable sleep interval between
3180    /// requests.</p>
3181    TooManyRequests(String),
3182}
3183
3184impl CreateVirtualGatewayError {
3185    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateVirtualGatewayError> {
3186        if let Some(err) = proto::json::Error::parse_rest(&res) {
3187            match err.typ.as_str() {
3188                "BadRequestException" => {
3189                    return RusotoError::Service(CreateVirtualGatewayError::BadRequest(err.msg))
3190                }
3191                "ConflictException" => {
3192                    return RusotoError::Service(CreateVirtualGatewayError::Conflict(err.msg))
3193                }
3194                "ForbiddenException" => {
3195                    return RusotoError::Service(CreateVirtualGatewayError::Forbidden(err.msg))
3196                }
3197                "InternalServerErrorException" => {
3198                    return RusotoError::Service(CreateVirtualGatewayError::InternalServerError(
3199                        err.msg,
3200                    ))
3201                }
3202                "LimitExceededException" => {
3203                    return RusotoError::Service(CreateVirtualGatewayError::LimitExceeded(err.msg))
3204                }
3205                "NotFoundException" => {
3206                    return RusotoError::Service(CreateVirtualGatewayError::NotFound(err.msg))
3207                }
3208                "ServiceUnavailableException" => {
3209                    return RusotoError::Service(CreateVirtualGatewayError::ServiceUnavailable(
3210                        err.msg,
3211                    ))
3212                }
3213                "TooManyRequestsException" => {
3214                    return RusotoError::Service(CreateVirtualGatewayError::TooManyRequests(
3215                        err.msg,
3216                    ))
3217                }
3218                "ValidationException" => return RusotoError::Validation(err.msg),
3219                _ => {}
3220            }
3221        }
3222        RusotoError::Unknown(res)
3223    }
3224}
3225impl fmt::Display for CreateVirtualGatewayError {
3226    #[allow(unused_variables)]
3227    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3228        match *self {
3229            CreateVirtualGatewayError::BadRequest(ref cause) => write!(f, "{}", cause),
3230            CreateVirtualGatewayError::Conflict(ref cause) => write!(f, "{}", cause),
3231            CreateVirtualGatewayError::Forbidden(ref cause) => write!(f, "{}", cause),
3232            CreateVirtualGatewayError::InternalServerError(ref cause) => write!(f, "{}", cause),
3233            CreateVirtualGatewayError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3234            CreateVirtualGatewayError::NotFound(ref cause) => write!(f, "{}", cause),
3235            CreateVirtualGatewayError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3236            CreateVirtualGatewayError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3237        }
3238    }
3239}
3240impl Error for CreateVirtualGatewayError {}
3241/// Errors returned by CreateVirtualNode
3242#[derive(Debug, PartialEq)]
3243pub enum CreateVirtualNodeError {
3244    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
3245    BadRequest(String),
3246    /// <p>The request contains a client token that was used for a previous update resource call
3247    /// with different specifications. Try the request again with a new client token.</p>
3248    Conflict(String),
3249    /// <p>You don't have permissions to perform this action.</p>
3250    Forbidden(String),
3251    /// <p>The request processing has failed because of an unknown error, exception, or
3252    /// failure.</p>
3253    InternalServerError(String),
3254    /// <p>You have exceeded a service limit for your account. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/service-quotas.html">Service
3255    /// Limits</a> in the <i>AWS App Mesh User Guide</i>.</p>
3256    LimitExceeded(String),
3257    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
3258    NotFound(String),
3259    /// <p>The request has failed due to a temporary failure of the service.</p>
3260    ServiceUnavailable(String),
3261    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
3262    /// account. For best results, use an increasing or variable sleep interval between
3263    /// requests.</p>
3264    TooManyRequests(String),
3265}
3266
3267impl CreateVirtualNodeError {
3268    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateVirtualNodeError> {
3269        if let Some(err) = proto::json::Error::parse_rest(&res) {
3270            match err.typ.as_str() {
3271                "BadRequestException" => {
3272                    return RusotoError::Service(CreateVirtualNodeError::BadRequest(err.msg))
3273                }
3274                "ConflictException" => {
3275                    return RusotoError::Service(CreateVirtualNodeError::Conflict(err.msg))
3276                }
3277                "ForbiddenException" => {
3278                    return RusotoError::Service(CreateVirtualNodeError::Forbidden(err.msg))
3279                }
3280                "InternalServerErrorException" => {
3281                    return RusotoError::Service(CreateVirtualNodeError::InternalServerError(
3282                        err.msg,
3283                    ))
3284                }
3285                "LimitExceededException" => {
3286                    return RusotoError::Service(CreateVirtualNodeError::LimitExceeded(err.msg))
3287                }
3288                "NotFoundException" => {
3289                    return RusotoError::Service(CreateVirtualNodeError::NotFound(err.msg))
3290                }
3291                "ServiceUnavailableException" => {
3292                    return RusotoError::Service(CreateVirtualNodeError::ServiceUnavailable(
3293                        err.msg,
3294                    ))
3295                }
3296                "TooManyRequestsException" => {
3297                    return RusotoError::Service(CreateVirtualNodeError::TooManyRequests(err.msg))
3298                }
3299                "ValidationException" => return RusotoError::Validation(err.msg),
3300                _ => {}
3301            }
3302        }
3303        RusotoError::Unknown(res)
3304    }
3305}
3306impl fmt::Display for CreateVirtualNodeError {
3307    #[allow(unused_variables)]
3308    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3309        match *self {
3310            CreateVirtualNodeError::BadRequest(ref cause) => write!(f, "{}", cause),
3311            CreateVirtualNodeError::Conflict(ref cause) => write!(f, "{}", cause),
3312            CreateVirtualNodeError::Forbidden(ref cause) => write!(f, "{}", cause),
3313            CreateVirtualNodeError::InternalServerError(ref cause) => write!(f, "{}", cause),
3314            CreateVirtualNodeError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3315            CreateVirtualNodeError::NotFound(ref cause) => write!(f, "{}", cause),
3316            CreateVirtualNodeError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3317            CreateVirtualNodeError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3318        }
3319    }
3320}
3321impl Error for CreateVirtualNodeError {}
3322/// Errors returned by CreateVirtualRouter
3323#[derive(Debug, PartialEq)]
3324pub enum CreateVirtualRouterError {
3325    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
3326    BadRequest(String),
3327    /// <p>The request contains a client token that was used for a previous update resource call
3328    /// with different specifications. Try the request again with a new client token.</p>
3329    Conflict(String),
3330    /// <p>You don't have permissions to perform this action.</p>
3331    Forbidden(String),
3332    /// <p>The request processing has failed because of an unknown error, exception, or
3333    /// failure.</p>
3334    InternalServerError(String),
3335    /// <p>You have exceeded a service limit for your account. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/service-quotas.html">Service
3336    /// Limits</a> in the <i>AWS App Mesh User Guide</i>.</p>
3337    LimitExceeded(String),
3338    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
3339    NotFound(String),
3340    /// <p>The request has failed due to a temporary failure of the service.</p>
3341    ServiceUnavailable(String),
3342    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
3343    /// account. For best results, use an increasing or variable sleep interval between
3344    /// requests.</p>
3345    TooManyRequests(String),
3346}
3347
3348impl CreateVirtualRouterError {
3349    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateVirtualRouterError> {
3350        if let Some(err) = proto::json::Error::parse_rest(&res) {
3351            match err.typ.as_str() {
3352                "BadRequestException" => {
3353                    return RusotoError::Service(CreateVirtualRouterError::BadRequest(err.msg))
3354                }
3355                "ConflictException" => {
3356                    return RusotoError::Service(CreateVirtualRouterError::Conflict(err.msg))
3357                }
3358                "ForbiddenException" => {
3359                    return RusotoError::Service(CreateVirtualRouterError::Forbidden(err.msg))
3360                }
3361                "InternalServerErrorException" => {
3362                    return RusotoError::Service(CreateVirtualRouterError::InternalServerError(
3363                        err.msg,
3364                    ))
3365                }
3366                "LimitExceededException" => {
3367                    return RusotoError::Service(CreateVirtualRouterError::LimitExceeded(err.msg))
3368                }
3369                "NotFoundException" => {
3370                    return RusotoError::Service(CreateVirtualRouterError::NotFound(err.msg))
3371                }
3372                "ServiceUnavailableException" => {
3373                    return RusotoError::Service(CreateVirtualRouterError::ServiceUnavailable(
3374                        err.msg,
3375                    ))
3376                }
3377                "TooManyRequestsException" => {
3378                    return RusotoError::Service(CreateVirtualRouterError::TooManyRequests(err.msg))
3379                }
3380                "ValidationException" => return RusotoError::Validation(err.msg),
3381                _ => {}
3382            }
3383        }
3384        RusotoError::Unknown(res)
3385    }
3386}
3387impl fmt::Display for CreateVirtualRouterError {
3388    #[allow(unused_variables)]
3389    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3390        match *self {
3391            CreateVirtualRouterError::BadRequest(ref cause) => write!(f, "{}", cause),
3392            CreateVirtualRouterError::Conflict(ref cause) => write!(f, "{}", cause),
3393            CreateVirtualRouterError::Forbidden(ref cause) => write!(f, "{}", cause),
3394            CreateVirtualRouterError::InternalServerError(ref cause) => write!(f, "{}", cause),
3395            CreateVirtualRouterError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3396            CreateVirtualRouterError::NotFound(ref cause) => write!(f, "{}", cause),
3397            CreateVirtualRouterError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3398            CreateVirtualRouterError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3399        }
3400    }
3401}
3402impl Error for CreateVirtualRouterError {}
3403/// Errors returned by CreateVirtualService
3404#[derive(Debug, PartialEq)]
3405pub enum CreateVirtualServiceError {
3406    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
3407    BadRequest(String),
3408    /// <p>The request contains a client token that was used for a previous update resource call
3409    /// with different specifications. Try the request again with a new client token.</p>
3410    Conflict(String),
3411    /// <p>You don't have permissions to perform this action.</p>
3412    Forbidden(String),
3413    /// <p>The request processing has failed because of an unknown error, exception, or
3414    /// failure.</p>
3415    InternalServerError(String),
3416    /// <p>You have exceeded a service limit for your account. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/service-quotas.html">Service
3417    /// Limits</a> in the <i>AWS App Mesh User Guide</i>.</p>
3418    LimitExceeded(String),
3419    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
3420    NotFound(String),
3421    /// <p>The request has failed due to a temporary failure of the service.</p>
3422    ServiceUnavailable(String),
3423    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
3424    /// account. For best results, use an increasing or variable sleep interval between
3425    /// requests.</p>
3426    TooManyRequests(String),
3427}
3428
3429impl CreateVirtualServiceError {
3430    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateVirtualServiceError> {
3431        if let Some(err) = proto::json::Error::parse_rest(&res) {
3432            match err.typ.as_str() {
3433                "BadRequestException" => {
3434                    return RusotoError::Service(CreateVirtualServiceError::BadRequest(err.msg))
3435                }
3436                "ConflictException" => {
3437                    return RusotoError::Service(CreateVirtualServiceError::Conflict(err.msg))
3438                }
3439                "ForbiddenException" => {
3440                    return RusotoError::Service(CreateVirtualServiceError::Forbidden(err.msg))
3441                }
3442                "InternalServerErrorException" => {
3443                    return RusotoError::Service(CreateVirtualServiceError::InternalServerError(
3444                        err.msg,
3445                    ))
3446                }
3447                "LimitExceededException" => {
3448                    return RusotoError::Service(CreateVirtualServiceError::LimitExceeded(err.msg))
3449                }
3450                "NotFoundException" => {
3451                    return RusotoError::Service(CreateVirtualServiceError::NotFound(err.msg))
3452                }
3453                "ServiceUnavailableException" => {
3454                    return RusotoError::Service(CreateVirtualServiceError::ServiceUnavailable(
3455                        err.msg,
3456                    ))
3457                }
3458                "TooManyRequestsException" => {
3459                    return RusotoError::Service(CreateVirtualServiceError::TooManyRequests(
3460                        err.msg,
3461                    ))
3462                }
3463                "ValidationException" => return RusotoError::Validation(err.msg),
3464                _ => {}
3465            }
3466        }
3467        RusotoError::Unknown(res)
3468    }
3469}
3470impl fmt::Display for CreateVirtualServiceError {
3471    #[allow(unused_variables)]
3472    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3473        match *self {
3474            CreateVirtualServiceError::BadRequest(ref cause) => write!(f, "{}", cause),
3475            CreateVirtualServiceError::Conflict(ref cause) => write!(f, "{}", cause),
3476            CreateVirtualServiceError::Forbidden(ref cause) => write!(f, "{}", cause),
3477            CreateVirtualServiceError::InternalServerError(ref cause) => write!(f, "{}", cause),
3478            CreateVirtualServiceError::LimitExceeded(ref cause) => write!(f, "{}", cause),
3479            CreateVirtualServiceError::NotFound(ref cause) => write!(f, "{}", cause),
3480            CreateVirtualServiceError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3481            CreateVirtualServiceError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3482        }
3483    }
3484}
3485impl Error for CreateVirtualServiceError {}
3486/// Errors returned by DeleteGatewayRoute
3487#[derive(Debug, PartialEq)]
3488pub enum DeleteGatewayRouteError {
3489    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
3490    BadRequest(String),
3491    /// <p>You don't have permissions to perform this action.</p>
3492    Forbidden(String),
3493    /// <p>The request processing has failed because of an unknown error, exception, or
3494    /// failure.</p>
3495    InternalServerError(String),
3496    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
3497    NotFound(String),
3498    /// <p>You can't delete the specified resource because it's in use or required by another
3499    /// resource.</p>
3500    ResourceInUse(String),
3501    /// <p>The request has failed due to a temporary failure of the service.</p>
3502    ServiceUnavailable(String),
3503    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
3504    /// account. For best results, use an increasing or variable sleep interval between
3505    /// requests.</p>
3506    TooManyRequests(String),
3507}
3508
3509impl DeleteGatewayRouteError {
3510    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteGatewayRouteError> {
3511        if let Some(err) = proto::json::Error::parse_rest(&res) {
3512            match err.typ.as_str() {
3513                "BadRequestException" => {
3514                    return RusotoError::Service(DeleteGatewayRouteError::BadRequest(err.msg))
3515                }
3516                "ForbiddenException" => {
3517                    return RusotoError::Service(DeleteGatewayRouteError::Forbidden(err.msg))
3518                }
3519                "InternalServerErrorException" => {
3520                    return RusotoError::Service(DeleteGatewayRouteError::InternalServerError(
3521                        err.msg,
3522                    ))
3523                }
3524                "NotFoundException" => {
3525                    return RusotoError::Service(DeleteGatewayRouteError::NotFound(err.msg))
3526                }
3527                "ResourceInUseException" => {
3528                    return RusotoError::Service(DeleteGatewayRouteError::ResourceInUse(err.msg))
3529                }
3530                "ServiceUnavailableException" => {
3531                    return RusotoError::Service(DeleteGatewayRouteError::ServiceUnavailable(
3532                        err.msg,
3533                    ))
3534                }
3535                "TooManyRequestsException" => {
3536                    return RusotoError::Service(DeleteGatewayRouteError::TooManyRequests(err.msg))
3537                }
3538                "ValidationException" => return RusotoError::Validation(err.msg),
3539                _ => {}
3540            }
3541        }
3542        RusotoError::Unknown(res)
3543    }
3544}
3545impl fmt::Display for DeleteGatewayRouteError {
3546    #[allow(unused_variables)]
3547    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3548        match *self {
3549            DeleteGatewayRouteError::BadRequest(ref cause) => write!(f, "{}", cause),
3550            DeleteGatewayRouteError::Forbidden(ref cause) => write!(f, "{}", cause),
3551            DeleteGatewayRouteError::InternalServerError(ref cause) => write!(f, "{}", cause),
3552            DeleteGatewayRouteError::NotFound(ref cause) => write!(f, "{}", cause),
3553            DeleteGatewayRouteError::ResourceInUse(ref cause) => write!(f, "{}", cause),
3554            DeleteGatewayRouteError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3555            DeleteGatewayRouteError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3556        }
3557    }
3558}
3559impl Error for DeleteGatewayRouteError {}
3560/// Errors returned by DeleteMesh
3561#[derive(Debug, PartialEq)]
3562pub enum DeleteMeshError {
3563    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
3564    BadRequest(String),
3565    /// <p>You don't have permissions to perform this action.</p>
3566    Forbidden(String),
3567    /// <p>The request processing has failed because of an unknown error, exception, or
3568    /// failure.</p>
3569    InternalServerError(String),
3570    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
3571    NotFound(String),
3572    /// <p>You can't delete the specified resource because it's in use or required by another
3573    /// resource.</p>
3574    ResourceInUse(String),
3575    /// <p>The request has failed due to a temporary failure of the service.</p>
3576    ServiceUnavailable(String),
3577    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
3578    /// account. For best results, use an increasing or variable sleep interval between
3579    /// requests.</p>
3580    TooManyRequests(String),
3581}
3582
3583impl DeleteMeshError {
3584    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteMeshError> {
3585        if let Some(err) = proto::json::Error::parse_rest(&res) {
3586            match err.typ.as_str() {
3587                "BadRequestException" => {
3588                    return RusotoError::Service(DeleteMeshError::BadRequest(err.msg))
3589                }
3590                "ForbiddenException" => {
3591                    return RusotoError::Service(DeleteMeshError::Forbidden(err.msg))
3592                }
3593                "InternalServerErrorException" => {
3594                    return RusotoError::Service(DeleteMeshError::InternalServerError(err.msg))
3595                }
3596                "NotFoundException" => {
3597                    return RusotoError::Service(DeleteMeshError::NotFound(err.msg))
3598                }
3599                "ResourceInUseException" => {
3600                    return RusotoError::Service(DeleteMeshError::ResourceInUse(err.msg))
3601                }
3602                "ServiceUnavailableException" => {
3603                    return RusotoError::Service(DeleteMeshError::ServiceUnavailable(err.msg))
3604                }
3605                "TooManyRequestsException" => {
3606                    return RusotoError::Service(DeleteMeshError::TooManyRequests(err.msg))
3607                }
3608                "ValidationException" => return RusotoError::Validation(err.msg),
3609                _ => {}
3610            }
3611        }
3612        RusotoError::Unknown(res)
3613    }
3614}
3615impl fmt::Display for DeleteMeshError {
3616    #[allow(unused_variables)]
3617    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3618        match *self {
3619            DeleteMeshError::BadRequest(ref cause) => write!(f, "{}", cause),
3620            DeleteMeshError::Forbidden(ref cause) => write!(f, "{}", cause),
3621            DeleteMeshError::InternalServerError(ref cause) => write!(f, "{}", cause),
3622            DeleteMeshError::NotFound(ref cause) => write!(f, "{}", cause),
3623            DeleteMeshError::ResourceInUse(ref cause) => write!(f, "{}", cause),
3624            DeleteMeshError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3625            DeleteMeshError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3626        }
3627    }
3628}
3629impl Error for DeleteMeshError {}
3630/// Errors returned by DeleteRoute
3631#[derive(Debug, PartialEq)]
3632pub enum DeleteRouteError {
3633    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
3634    BadRequest(String),
3635    /// <p>You don't have permissions to perform this action.</p>
3636    Forbidden(String),
3637    /// <p>The request processing has failed because of an unknown error, exception, or
3638    /// failure.</p>
3639    InternalServerError(String),
3640    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
3641    NotFound(String),
3642    /// <p>You can't delete the specified resource because it's in use or required by another
3643    /// resource.</p>
3644    ResourceInUse(String),
3645    /// <p>The request has failed due to a temporary failure of the service.</p>
3646    ServiceUnavailable(String),
3647    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
3648    /// account. For best results, use an increasing or variable sleep interval between
3649    /// requests.</p>
3650    TooManyRequests(String),
3651}
3652
3653impl DeleteRouteError {
3654    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteRouteError> {
3655        if let Some(err) = proto::json::Error::parse_rest(&res) {
3656            match err.typ.as_str() {
3657                "BadRequestException" => {
3658                    return RusotoError::Service(DeleteRouteError::BadRequest(err.msg))
3659                }
3660                "ForbiddenException" => {
3661                    return RusotoError::Service(DeleteRouteError::Forbidden(err.msg))
3662                }
3663                "InternalServerErrorException" => {
3664                    return RusotoError::Service(DeleteRouteError::InternalServerError(err.msg))
3665                }
3666                "NotFoundException" => {
3667                    return RusotoError::Service(DeleteRouteError::NotFound(err.msg))
3668                }
3669                "ResourceInUseException" => {
3670                    return RusotoError::Service(DeleteRouteError::ResourceInUse(err.msg))
3671                }
3672                "ServiceUnavailableException" => {
3673                    return RusotoError::Service(DeleteRouteError::ServiceUnavailable(err.msg))
3674                }
3675                "TooManyRequestsException" => {
3676                    return RusotoError::Service(DeleteRouteError::TooManyRequests(err.msg))
3677                }
3678                "ValidationException" => return RusotoError::Validation(err.msg),
3679                _ => {}
3680            }
3681        }
3682        RusotoError::Unknown(res)
3683    }
3684}
3685impl fmt::Display for DeleteRouteError {
3686    #[allow(unused_variables)]
3687    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3688        match *self {
3689            DeleteRouteError::BadRequest(ref cause) => write!(f, "{}", cause),
3690            DeleteRouteError::Forbidden(ref cause) => write!(f, "{}", cause),
3691            DeleteRouteError::InternalServerError(ref cause) => write!(f, "{}", cause),
3692            DeleteRouteError::NotFound(ref cause) => write!(f, "{}", cause),
3693            DeleteRouteError::ResourceInUse(ref cause) => write!(f, "{}", cause),
3694            DeleteRouteError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3695            DeleteRouteError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3696        }
3697    }
3698}
3699impl Error for DeleteRouteError {}
3700/// Errors returned by DeleteVirtualGateway
3701#[derive(Debug, PartialEq)]
3702pub enum DeleteVirtualGatewayError {
3703    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
3704    BadRequest(String),
3705    /// <p>You don't have permissions to perform this action.</p>
3706    Forbidden(String),
3707    /// <p>The request processing has failed because of an unknown error, exception, or
3708    /// failure.</p>
3709    InternalServerError(String),
3710    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
3711    NotFound(String),
3712    /// <p>You can't delete the specified resource because it's in use or required by another
3713    /// resource.</p>
3714    ResourceInUse(String),
3715    /// <p>The request has failed due to a temporary failure of the service.</p>
3716    ServiceUnavailable(String),
3717    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
3718    /// account. For best results, use an increasing or variable sleep interval between
3719    /// requests.</p>
3720    TooManyRequests(String),
3721}
3722
3723impl DeleteVirtualGatewayError {
3724    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteVirtualGatewayError> {
3725        if let Some(err) = proto::json::Error::parse_rest(&res) {
3726            match err.typ.as_str() {
3727                "BadRequestException" => {
3728                    return RusotoError::Service(DeleteVirtualGatewayError::BadRequest(err.msg))
3729                }
3730                "ForbiddenException" => {
3731                    return RusotoError::Service(DeleteVirtualGatewayError::Forbidden(err.msg))
3732                }
3733                "InternalServerErrorException" => {
3734                    return RusotoError::Service(DeleteVirtualGatewayError::InternalServerError(
3735                        err.msg,
3736                    ))
3737                }
3738                "NotFoundException" => {
3739                    return RusotoError::Service(DeleteVirtualGatewayError::NotFound(err.msg))
3740                }
3741                "ResourceInUseException" => {
3742                    return RusotoError::Service(DeleteVirtualGatewayError::ResourceInUse(err.msg))
3743                }
3744                "ServiceUnavailableException" => {
3745                    return RusotoError::Service(DeleteVirtualGatewayError::ServiceUnavailable(
3746                        err.msg,
3747                    ))
3748                }
3749                "TooManyRequestsException" => {
3750                    return RusotoError::Service(DeleteVirtualGatewayError::TooManyRequests(
3751                        err.msg,
3752                    ))
3753                }
3754                "ValidationException" => return RusotoError::Validation(err.msg),
3755                _ => {}
3756            }
3757        }
3758        RusotoError::Unknown(res)
3759    }
3760}
3761impl fmt::Display for DeleteVirtualGatewayError {
3762    #[allow(unused_variables)]
3763    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3764        match *self {
3765            DeleteVirtualGatewayError::BadRequest(ref cause) => write!(f, "{}", cause),
3766            DeleteVirtualGatewayError::Forbidden(ref cause) => write!(f, "{}", cause),
3767            DeleteVirtualGatewayError::InternalServerError(ref cause) => write!(f, "{}", cause),
3768            DeleteVirtualGatewayError::NotFound(ref cause) => write!(f, "{}", cause),
3769            DeleteVirtualGatewayError::ResourceInUse(ref cause) => write!(f, "{}", cause),
3770            DeleteVirtualGatewayError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3771            DeleteVirtualGatewayError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3772        }
3773    }
3774}
3775impl Error for DeleteVirtualGatewayError {}
3776/// Errors returned by DeleteVirtualNode
3777#[derive(Debug, PartialEq)]
3778pub enum DeleteVirtualNodeError {
3779    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
3780    BadRequest(String),
3781    /// <p>You don't have permissions to perform this action.</p>
3782    Forbidden(String),
3783    /// <p>The request processing has failed because of an unknown error, exception, or
3784    /// failure.</p>
3785    InternalServerError(String),
3786    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
3787    NotFound(String),
3788    /// <p>You can't delete the specified resource because it's in use or required by another
3789    /// resource.</p>
3790    ResourceInUse(String),
3791    /// <p>The request has failed due to a temporary failure of the service.</p>
3792    ServiceUnavailable(String),
3793    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
3794    /// account. For best results, use an increasing or variable sleep interval between
3795    /// requests.</p>
3796    TooManyRequests(String),
3797}
3798
3799impl DeleteVirtualNodeError {
3800    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteVirtualNodeError> {
3801        if let Some(err) = proto::json::Error::parse_rest(&res) {
3802            match err.typ.as_str() {
3803                "BadRequestException" => {
3804                    return RusotoError::Service(DeleteVirtualNodeError::BadRequest(err.msg))
3805                }
3806                "ForbiddenException" => {
3807                    return RusotoError::Service(DeleteVirtualNodeError::Forbidden(err.msg))
3808                }
3809                "InternalServerErrorException" => {
3810                    return RusotoError::Service(DeleteVirtualNodeError::InternalServerError(
3811                        err.msg,
3812                    ))
3813                }
3814                "NotFoundException" => {
3815                    return RusotoError::Service(DeleteVirtualNodeError::NotFound(err.msg))
3816                }
3817                "ResourceInUseException" => {
3818                    return RusotoError::Service(DeleteVirtualNodeError::ResourceInUse(err.msg))
3819                }
3820                "ServiceUnavailableException" => {
3821                    return RusotoError::Service(DeleteVirtualNodeError::ServiceUnavailable(
3822                        err.msg,
3823                    ))
3824                }
3825                "TooManyRequestsException" => {
3826                    return RusotoError::Service(DeleteVirtualNodeError::TooManyRequests(err.msg))
3827                }
3828                "ValidationException" => return RusotoError::Validation(err.msg),
3829                _ => {}
3830            }
3831        }
3832        RusotoError::Unknown(res)
3833    }
3834}
3835impl fmt::Display for DeleteVirtualNodeError {
3836    #[allow(unused_variables)]
3837    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3838        match *self {
3839            DeleteVirtualNodeError::BadRequest(ref cause) => write!(f, "{}", cause),
3840            DeleteVirtualNodeError::Forbidden(ref cause) => write!(f, "{}", cause),
3841            DeleteVirtualNodeError::InternalServerError(ref cause) => write!(f, "{}", cause),
3842            DeleteVirtualNodeError::NotFound(ref cause) => write!(f, "{}", cause),
3843            DeleteVirtualNodeError::ResourceInUse(ref cause) => write!(f, "{}", cause),
3844            DeleteVirtualNodeError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3845            DeleteVirtualNodeError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3846        }
3847    }
3848}
3849impl Error for DeleteVirtualNodeError {}
3850/// Errors returned by DeleteVirtualRouter
3851#[derive(Debug, PartialEq)]
3852pub enum DeleteVirtualRouterError {
3853    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
3854    BadRequest(String),
3855    /// <p>You don't have permissions to perform this action.</p>
3856    Forbidden(String),
3857    /// <p>The request processing has failed because of an unknown error, exception, or
3858    /// failure.</p>
3859    InternalServerError(String),
3860    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
3861    NotFound(String),
3862    /// <p>You can't delete the specified resource because it's in use or required by another
3863    /// resource.</p>
3864    ResourceInUse(String),
3865    /// <p>The request has failed due to a temporary failure of the service.</p>
3866    ServiceUnavailable(String),
3867    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
3868    /// account. For best results, use an increasing or variable sleep interval between
3869    /// requests.</p>
3870    TooManyRequests(String),
3871}
3872
3873impl DeleteVirtualRouterError {
3874    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteVirtualRouterError> {
3875        if let Some(err) = proto::json::Error::parse_rest(&res) {
3876            match err.typ.as_str() {
3877                "BadRequestException" => {
3878                    return RusotoError::Service(DeleteVirtualRouterError::BadRequest(err.msg))
3879                }
3880                "ForbiddenException" => {
3881                    return RusotoError::Service(DeleteVirtualRouterError::Forbidden(err.msg))
3882                }
3883                "InternalServerErrorException" => {
3884                    return RusotoError::Service(DeleteVirtualRouterError::InternalServerError(
3885                        err.msg,
3886                    ))
3887                }
3888                "NotFoundException" => {
3889                    return RusotoError::Service(DeleteVirtualRouterError::NotFound(err.msg))
3890                }
3891                "ResourceInUseException" => {
3892                    return RusotoError::Service(DeleteVirtualRouterError::ResourceInUse(err.msg))
3893                }
3894                "ServiceUnavailableException" => {
3895                    return RusotoError::Service(DeleteVirtualRouterError::ServiceUnavailable(
3896                        err.msg,
3897                    ))
3898                }
3899                "TooManyRequestsException" => {
3900                    return RusotoError::Service(DeleteVirtualRouterError::TooManyRequests(err.msg))
3901                }
3902                "ValidationException" => return RusotoError::Validation(err.msg),
3903                _ => {}
3904            }
3905        }
3906        RusotoError::Unknown(res)
3907    }
3908}
3909impl fmt::Display for DeleteVirtualRouterError {
3910    #[allow(unused_variables)]
3911    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3912        match *self {
3913            DeleteVirtualRouterError::BadRequest(ref cause) => write!(f, "{}", cause),
3914            DeleteVirtualRouterError::Forbidden(ref cause) => write!(f, "{}", cause),
3915            DeleteVirtualRouterError::InternalServerError(ref cause) => write!(f, "{}", cause),
3916            DeleteVirtualRouterError::NotFound(ref cause) => write!(f, "{}", cause),
3917            DeleteVirtualRouterError::ResourceInUse(ref cause) => write!(f, "{}", cause),
3918            DeleteVirtualRouterError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3919            DeleteVirtualRouterError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3920        }
3921    }
3922}
3923impl Error for DeleteVirtualRouterError {}
3924/// Errors returned by DeleteVirtualService
3925#[derive(Debug, PartialEq)]
3926pub enum DeleteVirtualServiceError {
3927    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
3928    BadRequest(String),
3929    /// <p>You don't have permissions to perform this action.</p>
3930    Forbidden(String),
3931    /// <p>The request processing has failed because of an unknown error, exception, or
3932    /// failure.</p>
3933    InternalServerError(String),
3934    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
3935    NotFound(String),
3936    /// <p>You can't delete the specified resource because it's in use or required by another
3937    /// resource.</p>
3938    ResourceInUse(String),
3939    /// <p>The request has failed due to a temporary failure of the service.</p>
3940    ServiceUnavailable(String),
3941    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
3942    /// account. For best results, use an increasing or variable sleep interval between
3943    /// requests.</p>
3944    TooManyRequests(String),
3945}
3946
3947impl DeleteVirtualServiceError {
3948    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteVirtualServiceError> {
3949        if let Some(err) = proto::json::Error::parse_rest(&res) {
3950            match err.typ.as_str() {
3951                "BadRequestException" => {
3952                    return RusotoError::Service(DeleteVirtualServiceError::BadRequest(err.msg))
3953                }
3954                "ForbiddenException" => {
3955                    return RusotoError::Service(DeleteVirtualServiceError::Forbidden(err.msg))
3956                }
3957                "InternalServerErrorException" => {
3958                    return RusotoError::Service(DeleteVirtualServiceError::InternalServerError(
3959                        err.msg,
3960                    ))
3961                }
3962                "NotFoundException" => {
3963                    return RusotoError::Service(DeleteVirtualServiceError::NotFound(err.msg))
3964                }
3965                "ResourceInUseException" => {
3966                    return RusotoError::Service(DeleteVirtualServiceError::ResourceInUse(err.msg))
3967                }
3968                "ServiceUnavailableException" => {
3969                    return RusotoError::Service(DeleteVirtualServiceError::ServiceUnavailable(
3970                        err.msg,
3971                    ))
3972                }
3973                "TooManyRequestsException" => {
3974                    return RusotoError::Service(DeleteVirtualServiceError::TooManyRequests(
3975                        err.msg,
3976                    ))
3977                }
3978                "ValidationException" => return RusotoError::Validation(err.msg),
3979                _ => {}
3980            }
3981        }
3982        RusotoError::Unknown(res)
3983    }
3984}
3985impl fmt::Display for DeleteVirtualServiceError {
3986    #[allow(unused_variables)]
3987    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3988        match *self {
3989            DeleteVirtualServiceError::BadRequest(ref cause) => write!(f, "{}", cause),
3990            DeleteVirtualServiceError::Forbidden(ref cause) => write!(f, "{}", cause),
3991            DeleteVirtualServiceError::InternalServerError(ref cause) => write!(f, "{}", cause),
3992            DeleteVirtualServiceError::NotFound(ref cause) => write!(f, "{}", cause),
3993            DeleteVirtualServiceError::ResourceInUse(ref cause) => write!(f, "{}", cause),
3994            DeleteVirtualServiceError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3995            DeleteVirtualServiceError::TooManyRequests(ref cause) => write!(f, "{}", cause),
3996        }
3997    }
3998}
3999impl Error for DeleteVirtualServiceError {}
4000/// Errors returned by DescribeGatewayRoute
4001#[derive(Debug, PartialEq)]
4002pub enum DescribeGatewayRouteError {
4003    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4004    BadRequest(String),
4005    /// <p>You don't have permissions to perform this action.</p>
4006    Forbidden(String),
4007    /// <p>The request processing has failed because of an unknown error, exception, or
4008    /// failure.</p>
4009    InternalServerError(String),
4010    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4011    NotFound(String),
4012    /// <p>The request has failed due to a temporary failure of the service.</p>
4013    ServiceUnavailable(String),
4014    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4015    /// account. For best results, use an increasing or variable sleep interval between
4016    /// requests.</p>
4017    TooManyRequests(String),
4018}
4019
4020impl DescribeGatewayRouteError {
4021    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeGatewayRouteError> {
4022        if let Some(err) = proto::json::Error::parse_rest(&res) {
4023            match err.typ.as_str() {
4024                "BadRequestException" => {
4025                    return RusotoError::Service(DescribeGatewayRouteError::BadRequest(err.msg))
4026                }
4027                "ForbiddenException" => {
4028                    return RusotoError::Service(DescribeGatewayRouteError::Forbidden(err.msg))
4029                }
4030                "InternalServerErrorException" => {
4031                    return RusotoError::Service(DescribeGatewayRouteError::InternalServerError(
4032                        err.msg,
4033                    ))
4034                }
4035                "NotFoundException" => {
4036                    return RusotoError::Service(DescribeGatewayRouteError::NotFound(err.msg))
4037                }
4038                "ServiceUnavailableException" => {
4039                    return RusotoError::Service(DescribeGatewayRouteError::ServiceUnavailable(
4040                        err.msg,
4041                    ))
4042                }
4043                "TooManyRequestsException" => {
4044                    return RusotoError::Service(DescribeGatewayRouteError::TooManyRequests(
4045                        err.msg,
4046                    ))
4047                }
4048                "ValidationException" => return RusotoError::Validation(err.msg),
4049                _ => {}
4050            }
4051        }
4052        RusotoError::Unknown(res)
4053    }
4054}
4055impl fmt::Display for DescribeGatewayRouteError {
4056    #[allow(unused_variables)]
4057    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4058        match *self {
4059            DescribeGatewayRouteError::BadRequest(ref cause) => write!(f, "{}", cause),
4060            DescribeGatewayRouteError::Forbidden(ref cause) => write!(f, "{}", cause),
4061            DescribeGatewayRouteError::InternalServerError(ref cause) => write!(f, "{}", cause),
4062            DescribeGatewayRouteError::NotFound(ref cause) => write!(f, "{}", cause),
4063            DescribeGatewayRouteError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4064            DescribeGatewayRouteError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4065        }
4066    }
4067}
4068impl Error for DescribeGatewayRouteError {}
4069/// Errors returned by DescribeMesh
4070#[derive(Debug, PartialEq)]
4071pub enum DescribeMeshError {
4072    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4073    BadRequest(String),
4074    /// <p>You don't have permissions to perform this action.</p>
4075    Forbidden(String),
4076    /// <p>The request processing has failed because of an unknown error, exception, or
4077    /// failure.</p>
4078    InternalServerError(String),
4079    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4080    NotFound(String),
4081    /// <p>The request has failed due to a temporary failure of the service.</p>
4082    ServiceUnavailable(String),
4083    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4084    /// account. For best results, use an increasing or variable sleep interval between
4085    /// requests.</p>
4086    TooManyRequests(String),
4087}
4088
4089impl DescribeMeshError {
4090    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeMeshError> {
4091        if let Some(err) = proto::json::Error::parse_rest(&res) {
4092            match err.typ.as_str() {
4093                "BadRequestException" => {
4094                    return RusotoError::Service(DescribeMeshError::BadRequest(err.msg))
4095                }
4096                "ForbiddenException" => {
4097                    return RusotoError::Service(DescribeMeshError::Forbidden(err.msg))
4098                }
4099                "InternalServerErrorException" => {
4100                    return RusotoError::Service(DescribeMeshError::InternalServerError(err.msg))
4101                }
4102                "NotFoundException" => {
4103                    return RusotoError::Service(DescribeMeshError::NotFound(err.msg))
4104                }
4105                "ServiceUnavailableException" => {
4106                    return RusotoError::Service(DescribeMeshError::ServiceUnavailable(err.msg))
4107                }
4108                "TooManyRequestsException" => {
4109                    return RusotoError::Service(DescribeMeshError::TooManyRequests(err.msg))
4110                }
4111                "ValidationException" => return RusotoError::Validation(err.msg),
4112                _ => {}
4113            }
4114        }
4115        RusotoError::Unknown(res)
4116    }
4117}
4118impl fmt::Display for DescribeMeshError {
4119    #[allow(unused_variables)]
4120    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4121        match *self {
4122            DescribeMeshError::BadRequest(ref cause) => write!(f, "{}", cause),
4123            DescribeMeshError::Forbidden(ref cause) => write!(f, "{}", cause),
4124            DescribeMeshError::InternalServerError(ref cause) => write!(f, "{}", cause),
4125            DescribeMeshError::NotFound(ref cause) => write!(f, "{}", cause),
4126            DescribeMeshError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4127            DescribeMeshError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4128        }
4129    }
4130}
4131impl Error for DescribeMeshError {}
4132/// Errors returned by DescribeRoute
4133#[derive(Debug, PartialEq)]
4134pub enum DescribeRouteError {
4135    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4136    BadRequest(String),
4137    /// <p>You don't have permissions to perform this action.</p>
4138    Forbidden(String),
4139    /// <p>The request processing has failed because of an unknown error, exception, or
4140    /// failure.</p>
4141    InternalServerError(String),
4142    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4143    NotFound(String),
4144    /// <p>The request has failed due to a temporary failure of the service.</p>
4145    ServiceUnavailable(String),
4146    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4147    /// account. For best results, use an increasing or variable sleep interval between
4148    /// requests.</p>
4149    TooManyRequests(String),
4150}
4151
4152impl DescribeRouteError {
4153    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeRouteError> {
4154        if let Some(err) = proto::json::Error::parse_rest(&res) {
4155            match err.typ.as_str() {
4156                "BadRequestException" => {
4157                    return RusotoError::Service(DescribeRouteError::BadRequest(err.msg))
4158                }
4159                "ForbiddenException" => {
4160                    return RusotoError::Service(DescribeRouteError::Forbidden(err.msg))
4161                }
4162                "InternalServerErrorException" => {
4163                    return RusotoError::Service(DescribeRouteError::InternalServerError(err.msg))
4164                }
4165                "NotFoundException" => {
4166                    return RusotoError::Service(DescribeRouteError::NotFound(err.msg))
4167                }
4168                "ServiceUnavailableException" => {
4169                    return RusotoError::Service(DescribeRouteError::ServiceUnavailable(err.msg))
4170                }
4171                "TooManyRequestsException" => {
4172                    return RusotoError::Service(DescribeRouteError::TooManyRequests(err.msg))
4173                }
4174                "ValidationException" => return RusotoError::Validation(err.msg),
4175                _ => {}
4176            }
4177        }
4178        RusotoError::Unknown(res)
4179    }
4180}
4181impl fmt::Display for DescribeRouteError {
4182    #[allow(unused_variables)]
4183    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4184        match *self {
4185            DescribeRouteError::BadRequest(ref cause) => write!(f, "{}", cause),
4186            DescribeRouteError::Forbidden(ref cause) => write!(f, "{}", cause),
4187            DescribeRouteError::InternalServerError(ref cause) => write!(f, "{}", cause),
4188            DescribeRouteError::NotFound(ref cause) => write!(f, "{}", cause),
4189            DescribeRouteError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4190            DescribeRouteError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4191        }
4192    }
4193}
4194impl Error for DescribeRouteError {}
4195/// Errors returned by DescribeVirtualGateway
4196#[derive(Debug, PartialEq)]
4197pub enum DescribeVirtualGatewayError {
4198    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4199    BadRequest(String),
4200    /// <p>You don't have permissions to perform this action.</p>
4201    Forbidden(String),
4202    /// <p>The request processing has failed because of an unknown error, exception, or
4203    /// failure.</p>
4204    InternalServerError(String),
4205    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4206    NotFound(String),
4207    /// <p>The request has failed due to a temporary failure of the service.</p>
4208    ServiceUnavailable(String),
4209    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4210    /// account. For best results, use an increasing or variable sleep interval between
4211    /// requests.</p>
4212    TooManyRequests(String),
4213}
4214
4215impl DescribeVirtualGatewayError {
4216    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeVirtualGatewayError> {
4217        if let Some(err) = proto::json::Error::parse_rest(&res) {
4218            match err.typ.as_str() {
4219                "BadRequestException" => {
4220                    return RusotoError::Service(DescribeVirtualGatewayError::BadRequest(err.msg))
4221                }
4222                "ForbiddenException" => {
4223                    return RusotoError::Service(DescribeVirtualGatewayError::Forbidden(err.msg))
4224                }
4225                "InternalServerErrorException" => {
4226                    return RusotoError::Service(DescribeVirtualGatewayError::InternalServerError(
4227                        err.msg,
4228                    ))
4229                }
4230                "NotFoundException" => {
4231                    return RusotoError::Service(DescribeVirtualGatewayError::NotFound(err.msg))
4232                }
4233                "ServiceUnavailableException" => {
4234                    return RusotoError::Service(DescribeVirtualGatewayError::ServiceUnavailable(
4235                        err.msg,
4236                    ))
4237                }
4238                "TooManyRequestsException" => {
4239                    return RusotoError::Service(DescribeVirtualGatewayError::TooManyRequests(
4240                        err.msg,
4241                    ))
4242                }
4243                "ValidationException" => return RusotoError::Validation(err.msg),
4244                _ => {}
4245            }
4246        }
4247        RusotoError::Unknown(res)
4248    }
4249}
4250impl fmt::Display for DescribeVirtualGatewayError {
4251    #[allow(unused_variables)]
4252    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4253        match *self {
4254            DescribeVirtualGatewayError::BadRequest(ref cause) => write!(f, "{}", cause),
4255            DescribeVirtualGatewayError::Forbidden(ref cause) => write!(f, "{}", cause),
4256            DescribeVirtualGatewayError::InternalServerError(ref cause) => write!(f, "{}", cause),
4257            DescribeVirtualGatewayError::NotFound(ref cause) => write!(f, "{}", cause),
4258            DescribeVirtualGatewayError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4259            DescribeVirtualGatewayError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4260        }
4261    }
4262}
4263impl Error for DescribeVirtualGatewayError {}
4264/// Errors returned by DescribeVirtualNode
4265#[derive(Debug, PartialEq)]
4266pub enum DescribeVirtualNodeError {
4267    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4268    BadRequest(String),
4269    /// <p>You don't have permissions to perform this action.</p>
4270    Forbidden(String),
4271    /// <p>The request processing has failed because of an unknown error, exception, or
4272    /// failure.</p>
4273    InternalServerError(String),
4274    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4275    NotFound(String),
4276    /// <p>The request has failed due to a temporary failure of the service.</p>
4277    ServiceUnavailable(String),
4278    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4279    /// account. For best results, use an increasing or variable sleep interval between
4280    /// requests.</p>
4281    TooManyRequests(String),
4282}
4283
4284impl DescribeVirtualNodeError {
4285    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeVirtualNodeError> {
4286        if let Some(err) = proto::json::Error::parse_rest(&res) {
4287            match err.typ.as_str() {
4288                "BadRequestException" => {
4289                    return RusotoError::Service(DescribeVirtualNodeError::BadRequest(err.msg))
4290                }
4291                "ForbiddenException" => {
4292                    return RusotoError::Service(DescribeVirtualNodeError::Forbidden(err.msg))
4293                }
4294                "InternalServerErrorException" => {
4295                    return RusotoError::Service(DescribeVirtualNodeError::InternalServerError(
4296                        err.msg,
4297                    ))
4298                }
4299                "NotFoundException" => {
4300                    return RusotoError::Service(DescribeVirtualNodeError::NotFound(err.msg))
4301                }
4302                "ServiceUnavailableException" => {
4303                    return RusotoError::Service(DescribeVirtualNodeError::ServiceUnavailable(
4304                        err.msg,
4305                    ))
4306                }
4307                "TooManyRequestsException" => {
4308                    return RusotoError::Service(DescribeVirtualNodeError::TooManyRequests(err.msg))
4309                }
4310                "ValidationException" => return RusotoError::Validation(err.msg),
4311                _ => {}
4312            }
4313        }
4314        RusotoError::Unknown(res)
4315    }
4316}
4317impl fmt::Display for DescribeVirtualNodeError {
4318    #[allow(unused_variables)]
4319    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4320        match *self {
4321            DescribeVirtualNodeError::BadRequest(ref cause) => write!(f, "{}", cause),
4322            DescribeVirtualNodeError::Forbidden(ref cause) => write!(f, "{}", cause),
4323            DescribeVirtualNodeError::InternalServerError(ref cause) => write!(f, "{}", cause),
4324            DescribeVirtualNodeError::NotFound(ref cause) => write!(f, "{}", cause),
4325            DescribeVirtualNodeError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4326            DescribeVirtualNodeError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4327        }
4328    }
4329}
4330impl Error for DescribeVirtualNodeError {}
4331/// Errors returned by DescribeVirtualRouter
4332#[derive(Debug, PartialEq)]
4333pub enum DescribeVirtualRouterError {
4334    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4335    BadRequest(String),
4336    /// <p>You don't have permissions to perform this action.</p>
4337    Forbidden(String),
4338    /// <p>The request processing has failed because of an unknown error, exception, or
4339    /// failure.</p>
4340    InternalServerError(String),
4341    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4342    NotFound(String),
4343    /// <p>The request has failed due to a temporary failure of the service.</p>
4344    ServiceUnavailable(String),
4345    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4346    /// account. For best results, use an increasing or variable sleep interval between
4347    /// requests.</p>
4348    TooManyRequests(String),
4349}
4350
4351impl DescribeVirtualRouterError {
4352    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeVirtualRouterError> {
4353        if let Some(err) = proto::json::Error::parse_rest(&res) {
4354            match err.typ.as_str() {
4355                "BadRequestException" => {
4356                    return RusotoError::Service(DescribeVirtualRouterError::BadRequest(err.msg))
4357                }
4358                "ForbiddenException" => {
4359                    return RusotoError::Service(DescribeVirtualRouterError::Forbidden(err.msg))
4360                }
4361                "InternalServerErrorException" => {
4362                    return RusotoError::Service(DescribeVirtualRouterError::InternalServerError(
4363                        err.msg,
4364                    ))
4365                }
4366                "NotFoundException" => {
4367                    return RusotoError::Service(DescribeVirtualRouterError::NotFound(err.msg))
4368                }
4369                "ServiceUnavailableException" => {
4370                    return RusotoError::Service(DescribeVirtualRouterError::ServiceUnavailable(
4371                        err.msg,
4372                    ))
4373                }
4374                "TooManyRequestsException" => {
4375                    return RusotoError::Service(DescribeVirtualRouterError::TooManyRequests(
4376                        err.msg,
4377                    ))
4378                }
4379                "ValidationException" => return RusotoError::Validation(err.msg),
4380                _ => {}
4381            }
4382        }
4383        RusotoError::Unknown(res)
4384    }
4385}
4386impl fmt::Display for DescribeVirtualRouterError {
4387    #[allow(unused_variables)]
4388    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4389        match *self {
4390            DescribeVirtualRouterError::BadRequest(ref cause) => write!(f, "{}", cause),
4391            DescribeVirtualRouterError::Forbidden(ref cause) => write!(f, "{}", cause),
4392            DescribeVirtualRouterError::InternalServerError(ref cause) => write!(f, "{}", cause),
4393            DescribeVirtualRouterError::NotFound(ref cause) => write!(f, "{}", cause),
4394            DescribeVirtualRouterError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4395            DescribeVirtualRouterError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4396        }
4397    }
4398}
4399impl Error for DescribeVirtualRouterError {}
4400/// Errors returned by DescribeVirtualService
4401#[derive(Debug, PartialEq)]
4402pub enum DescribeVirtualServiceError {
4403    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4404    BadRequest(String),
4405    /// <p>You don't have permissions to perform this action.</p>
4406    Forbidden(String),
4407    /// <p>The request processing has failed because of an unknown error, exception, or
4408    /// failure.</p>
4409    InternalServerError(String),
4410    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4411    NotFound(String),
4412    /// <p>The request has failed due to a temporary failure of the service.</p>
4413    ServiceUnavailable(String),
4414    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4415    /// account. For best results, use an increasing or variable sleep interval between
4416    /// requests.</p>
4417    TooManyRequests(String),
4418}
4419
4420impl DescribeVirtualServiceError {
4421    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeVirtualServiceError> {
4422        if let Some(err) = proto::json::Error::parse_rest(&res) {
4423            match err.typ.as_str() {
4424                "BadRequestException" => {
4425                    return RusotoError::Service(DescribeVirtualServiceError::BadRequest(err.msg))
4426                }
4427                "ForbiddenException" => {
4428                    return RusotoError::Service(DescribeVirtualServiceError::Forbidden(err.msg))
4429                }
4430                "InternalServerErrorException" => {
4431                    return RusotoError::Service(DescribeVirtualServiceError::InternalServerError(
4432                        err.msg,
4433                    ))
4434                }
4435                "NotFoundException" => {
4436                    return RusotoError::Service(DescribeVirtualServiceError::NotFound(err.msg))
4437                }
4438                "ServiceUnavailableException" => {
4439                    return RusotoError::Service(DescribeVirtualServiceError::ServiceUnavailable(
4440                        err.msg,
4441                    ))
4442                }
4443                "TooManyRequestsException" => {
4444                    return RusotoError::Service(DescribeVirtualServiceError::TooManyRequests(
4445                        err.msg,
4446                    ))
4447                }
4448                "ValidationException" => return RusotoError::Validation(err.msg),
4449                _ => {}
4450            }
4451        }
4452        RusotoError::Unknown(res)
4453    }
4454}
4455impl fmt::Display for DescribeVirtualServiceError {
4456    #[allow(unused_variables)]
4457    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4458        match *self {
4459            DescribeVirtualServiceError::BadRequest(ref cause) => write!(f, "{}", cause),
4460            DescribeVirtualServiceError::Forbidden(ref cause) => write!(f, "{}", cause),
4461            DescribeVirtualServiceError::InternalServerError(ref cause) => write!(f, "{}", cause),
4462            DescribeVirtualServiceError::NotFound(ref cause) => write!(f, "{}", cause),
4463            DescribeVirtualServiceError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4464            DescribeVirtualServiceError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4465        }
4466    }
4467}
4468impl Error for DescribeVirtualServiceError {}
4469/// Errors returned by ListGatewayRoutes
4470#[derive(Debug, PartialEq)]
4471pub enum ListGatewayRoutesError {
4472    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4473    BadRequest(String),
4474    /// <p>You don't have permissions to perform this action.</p>
4475    Forbidden(String),
4476    /// <p>The request processing has failed because of an unknown error, exception, or
4477    /// failure.</p>
4478    InternalServerError(String),
4479    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4480    NotFound(String),
4481    /// <p>The request has failed due to a temporary failure of the service.</p>
4482    ServiceUnavailable(String),
4483    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4484    /// account. For best results, use an increasing or variable sleep interval between
4485    /// requests.</p>
4486    TooManyRequests(String),
4487}
4488
4489impl ListGatewayRoutesError {
4490    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListGatewayRoutesError> {
4491        if let Some(err) = proto::json::Error::parse_rest(&res) {
4492            match err.typ.as_str() {
4493                "BadRequestException" => {
4494                    return RusotoError::Service(ListGatewayRoutesError::BadRequest(err.msg))
4495                }
4496                "ForbiddenException" => {
4497                    return RusotoError::Service(ListGatewayRoutesError::Forbidden(err.msg))
4498                }
4499                "InternalServerErrorException" => {
4500                    return RusotoError::Service(ListGatewayRoutesError::InternalServerError(
4501                        err.msg,
4502                    ))
4503                }
4504                "NotFoundException" => {
4505                    return RusotoError::Service(ListGatewayRoutesError::NotFound(err.msg))
4506                }
4507                "ServiceUnavailableException" => {
4508                    return RusotoError::Service(ListGatewayRoutesError::ServiceUnavailable(
4509                        err.msg,
4510                    ))
4511                }
4512                "TooManyRequestsException" => {
4513                    return RusotoError::Service(ListGatewayRoutesError::TooManyRequests(err.msg))
4514                }
4515                "ValidationException" => return RusotoError::Validation(err.msg),
4516                _ => {}
4517            }
4518        }
4519        RusotoError::Unknown(res)
4520    }
4521}
4522impl fmt::Display for ListGatewayRoutesError {
4523    #[allow(unused_variables)]
4524    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4525        match *self {
4526            ListGatewayRoutesError::BadRequest(ref cause) => write!(f, "{}", cause),
4527            ListGatewayRoutesError::Forbidden(ref cause) => write!(f, "{}", cause),
4528            ListGatewayRoutesError::InternalServerError(ref cause) => write!(f, "{}", cause),
4529            ListGatewayRoutesError::NotFound(ref cause) => write!(f, "{}", cause),
4530            ListGatewayRoutesError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4531            ListGatewayRoutesError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4532        }
4533    }
4534}
4535impl Error for ListGatewayRoutesError {}
4536/// Errors returned by ListMeshes
4537#[derive(Debug, PartialEq)]
4538pub enum ListMeshesError {
4539    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4540    BadRequest(String),
4541    /// <p>You don't have permissions to perform this action.</p>
4542    Forbidden(String),
4543    /// <p>The request processing has failed because of an unknown error, exception, or
4544    /// failure.</p>
4545    InternalServerError(String),
4546    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4547    NotFound(String),
4548    /// <p>The request has failed due to a temporary failure of the service.</p>
4549    ServiceUnavailable(String),
4550    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4551    /// account. For best results, use an increasing or variable sleep interval between
4552    /// requests.</p>
4553    TooManyRequests(String),
4554}
4555
4556impl ListMeshesError {
4557    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListMeshesError> {
4558        if let Some(err) = proto::json::Error::parse_rest(&res) {
4559            match err.typ.as_str() {
4560                "BadRequestException" => {
4561                    return RusotoError::Service(ListMeshesError::BadRequest(err.msg))
4562                }
4563                "ForbiddenException" => {
4564                    return RusotoError::Service(ListMeshesError::Forbidden(err.msg))
4565                }
4566                "InternalServerErrorException" => {
4567                    return RusotoError::Service(ListMeshesError::InternalServerError(err.msg))
4568                }
4569                "NotFoundException" => {
4570                    return RusotoError::Service(ListMeshesError::NotFound(err.msg))
4571                }
4572                "ServiceUnavailableException" => {
4573                    return RusotoError::Service(ListMeshesError::ServiceUnavailable(err.msg))
4574                }
4575                "TooManyRequestsException" => {
4576                    return RusotoError::Service(ListMeshesError::TooManyRequests(err.msg))
4577                }
4578                "ValidationException" => return RusotoError::Validation(err.msg),
4579                _ => {}
4580            }
4581        }
4582        RusotoError::Unknown(res)
4583    }
4584}
4585impl fmt::Display for ListMeshesError {
4586    #[allow(unused_variables)]
4587    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4588        match *self {
4589            ListMeshesError::BadRequest(ref cause) => write!(f, "{}", cause),
4590            ListMeshesError::Forbidden(ref cause) => write!(f, "{}", cause),
4591            ListMeshesError::InternalServerError(ref cause) => write!(f, "{}", cause),
4592            ListMeshesError::NotFound(ref cause) => write!(f, "{}", cause),
4593            ListMeshesError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4594            ListMeshesError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4595        }
4596    }
4597}
4598impl Error for ListMeshesError {}
4599/// Errors returned by ListRoutes
4600#[derive(Debug, PartialEq)]
4601pub enum ListRoutesError {
4602    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4603    BadRequest(String),
4604    /// <p>You don't have permissions to perform this action.</p>
4605    Forbidden(String),
4606    /// <p>The request processing has failed because of an unknown error, exception, or
4607    /// failure.</p>
4608    InternalServerError(String),
4609    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4610    NotFound(String),
4611    /// <p>The request has failed due to a temporary failure of the service.</p>
4612    ServiceUnavailable(String),
4613    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4614    /// account. For best results, use an increasing or variable sleep interval between
4615    /// requests.</p>
4616    TooManyRequests(String),
4617}
4618
4619impl ListRoutesError {
4620    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListRoutesError> {
4621        if let Some(err) = proto::json::Error::parse_rest(&res) {
4622            match err.typ.as_str() {
4623                "BadRequestException" => {
4624                    return RusotoError::Service(ListRoutesError::BadRequest(err.msg))
4625                }
4626                "ForbiddenException" => {
4627                    return RusotoError::Service(ListRoutesError::Forbidden(err.msg))
4628                }
4629                "InternalServerErrorException" => {
4630                    return RusotoError::Service(ListRoutesError::InternalServerError(err.msg))
4631                }
4632                "NotFoundException" => {
4633                    return RusotoError::Service(ListRoutesError::NotFound(err.msg))
4634                }
4635                "ServiceUnavailableException" => {
4636                    return RusotoError::Service(ListRoutesError::ServiceUnavailable(err.msg))
4637                }
4638                "TooManyRequestsException" => {
4639                    return RusotoError::Service(ListRoutesError::TooManyRequests(err.msg))
4640                }
4641                "ValidationException" => return RusotoError::Validation(err.msg),
4642                _ => {}
4643            }
4644        }
4645        RusotoError::Unknown(res)
4646    }
4647}
4648impl fmt::Display for ListRoutesError {
4649    #[allow(unused_variables)]
4650    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4651        match *self {
4652            ListRoutesError::BadRequest(ref cause) => write!(f, "{}", cause),
4653            ListRoutesError::Forbidden(ref cause) => write!(f, "{}", cause),
4654            ListRoutesError::InternalServerError(ref cause) => write!(f, "{}", cause),
4655            ListRoutesError::NotFound(ref cause) => write!(f, "{}", cause),
4656            ListRoutesError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4657            ListRoutesError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4658        }
4659    }
4660}
4661impl Error for ListRoutesError {}
4662/// Errors returned by ListTagsForResource
4663#[derive(Debug, PartialEq)]
4664pub enum ListTagsForResourceError {
4665    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4666    BadRequest(String),
4667    /// <p>You don't have permissions to perform this action.</p>
4668    Forbidden(String),
4669    /// <p>The request processing has failed because of an unknown error, exception, or
4670    /// failure.</p>
4671    InternalServerError(String),
4672    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4673    NotFound(String),
4674    /// <p>The request has failed due to a temporary failure of the service.</p>
4675    ServiceUnavailable(String),
4676    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4677    /// account. For best results, use an increasing or variable sleep interval between
4678    /// requests.</p>
4679    TooManyRequests(String),
4680}
4681
4682impl ListTagsForResourceError {
4683    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListTagsForResourceError> {
4684        if let Some(err) = proto::json::Error::parse_rest(&res) {
4685            match err.typ.as_str() {
4686                "BadRequestException" => {
4687                    return RusotoError::Service(ListTagsForResourceError::BadRequest(err.msg))
4688                }
4689                "ForbiddenException" => {
4690                    return RusotoError::Service(ListTagsForResourceError::Forbidden(err.msg))
4691                }
4692                "InternalServerErrorException" => {
4693                    return RusotoError::Service(ListTagsForResourceError::InternalServerError(
4694                        err.msg,
4695                    ))
4696                }
4697                "NotFoundException" => {
4698                    return RusotoError::Service(ListTagsForResourceError::NotFound(err.msg))
4699                }
4700                "ServiceUnavailableException" => {
4701                    return RusotoError::Service(ListTagsForResourceError::ServiceUnavailable(
4702                        err.msg,
4703                    ))
4704                }
4705                "TooManyRequestsException" => {
4706                    return RusotoError::Service(ListTagsForResourceError::TooManyRequests(err.msg))
4707                }
4708                "ValidationException" => return RusotoError::Validation(err.msg),
4709                _ => {}
4710            }
4711        }
4712        RusotoError::Unknown(res)
4713    }
4714}
4715impl fmt::Display for ListTagsForResourceError {
4716    #[allow(unused_variables)]
4717    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4718        match *self {
4719            ListTagsForResourceError::BadRequest(ref cause) => write!(f, "{}", cause),
4720            ListTagsForResourceError::Forbidden(ref cause) => write!(f, "{}", cause),
4721            ListTagsForResourceError::InternalServerError(ref cause) => write!(f, "{}", cause),
4722            ListTagsForResourceError::NotFound(ref cause) => write!(f, "{}", cause),
4723            ListTagsForResourceError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4724            ListTagsForResourceError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4725        }
4726    }
4727}
4728impl Error for ListTagsForResourceError {}
4729/// Errors returned by ListVirtualGateways
4730#[derive(Debug, PartialEq)]
4731pub enum ListVirtualGatewaysError {
4732    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4733    BadRequest(String),
4734    /// <p>You don't have permissions to perform this action.</p>
4735    Forbidden(String),
4736    /// <p>The request processing has failed because of an unknown error, exception, or
4737    /// failure.</p>
4738    InternalServerError(String),
4739    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4740    NotFound(String),
4741    /// <p>The request has failed due to a temporary failure of the service.</p>
4742    ServiceUnavailable(String),
4743    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4744    /// account. For best results, use an increasing or variable sleep interval between
4745    /// requests.</p>
4746    TooManyRequests(String),
4747}
4748
4749impl ListVirtualGatewaysError {
4750    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListVirtualGatewaysError> {
4751        if let Some(err) = proto::json::Error::parse_rest(&res) {
4752            match err.typ.as_str() {
4753                "BadRequestException" => {
4754                    return RusotoError::Service(ListVirtualGatewaysError::BadRequest(err.msg))
4755                }
4756                "ForbiddenException" => {
4757                    return RusotoError::Service(ListVirtualGatewaysError::Forbidden(err.msg))
4758                }
4759                "InternalServerErrorException" => {
4760                    return RusotoError::Service(ListVirtualGatewaysError::InternalServerError(
4761                        err.msg,
4762                    ))
4763                }
4764                "NotFoundException" => {
4765                    return RusotoError::Service(ListVirtualGatewaysError::NotFound(err.msg))
4766                }
4767                "ServiceUnavailableException" => {
4768                    return RusotoError::Service(ListVirtualGatewaysError::ServiceUnavailable(
4769                        err.msg,
4770                    ))
4771                }
4772                "TooManyRequestsException" => {
4773                    return RusotoError::Service(ListVirtualGatewaysError::TooManyRequests(err.msg))
4774                }
4775                "ValidationException" => return RusotoError::Validation(err.msg),
4776                _ => {}
4777            }
4778        }
4779        RusotoError::Unknown(res)
4780    }
4781}
4782impl fmt::Display for ListVirtualGatewaysError {
4783    #[allow(unused_variables)]
4784    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4785        match *self {
4786            ListVirtualGatewaysError::BadRequest(ref cause) => write!(f, "{}", cause),
4787            ListVirtualGatewaysError::Forbidden(ref cause) => write!(f, "{}", cause),
4788            ListVirtualGatewaysError::InternalServerError(ref cause) => write!(f, "{}", cause),
4789            ListVirtualGatewaysError::NotFound(ref cause) => write!(f, "{}", cause),
4790            ListVirtualGatewaysError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4791            ListVirtualGatewaysError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4792        }
4793    }
4794}
4795impl Error for ListVirtualGatewaysError {}
4796/// Errors returned by ListVirtualNodes
4797#[derive(Debug, PartialEq)]
4798pub enum ListVirtualNodesError {
4799    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4800    BadRequest(String),
4801    /// <p>You don't have permissions to perform this action.</p>
4802    Forbidden(String),
4803    /// <p>The request processing has failed because of an unknown error, exception, or
4804    /// failure.</p>
4805    InternalServerError(String),
4806    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4807    NotFound(String),
4808    /// <p>The request has failed due to a temporary failure of the service.</p>
4809    ServiceUnavailable(String),
4810    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4811    /// account. For best results, use an increasing or variable sleep interval between
4812    /// requests.</p>
4813    TooManyRequests(String),
4814}
4815
4816impl ListVirtualNodesError {
4817    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListVirtualNodesError> {
4818        if let Some(err) = proto::json::Error::parse_rest(&res) {
4819            match err.typ.as_str() {
4820                "BadRequestException" => {
4821                    return RusotoError::Service(ListVirtualNodesError::BadRequest(err.msg))
4822                }
4823                "ForbiddenException" => {
4824                    return RusotoError::Service(ListVirtualNodesError::Forbidden(err.msg))
4825                }
4826                "InternalServerErrorException" => {
4827                    return RusotoError::Service(ListVirtualNodesError::InternalServerError(
4828                        err.msg,
4829                    ))
4830                }
4831                "NotFoundException" => {
4832                    return RusotoError::Service(ListVirtualNodesError::NotFound(err.msg))
4833                }
4834                "ServiceUnavailableException" => {
4835                    return RusotoError::Service(ListVirtualNodesError::ServiceUnavailable(err.msg))
4836                }
4837                "TooManyRequestsException" => {
4838                    return RusotoError::Service(ListVirtualNodesError::TooManyRequests(err.msg))
4839                }
4840                "ValidationException" => return RusotoError::Validation(err.msg),
4841                _ => {}
4842            }
4843        }
4844        RusotoError::Unknown(res)
4845    }
4846}
4847impl fmt::Display for ListVirtualNodesError {
4848    #[allow(unused_variables)]
4849    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4850        match *self {
4851            ListVirtualNodesError::BadRequest(ref cause) => write!(f, "{}", cause),
4852            ListVirtualNodesError::Forbidden(ref cause) => write!(f, "{}", cause),
4853            ListVirtualNodesError::InternalServerError(ref cause) => write!(f, "{}", cause),
4854            ListVirtualNodesError::NotFound(ref cause) => write!(f, "{}", cause),
4855            ListVirtualNodesError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4856            ListVirtualNodesError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4857        }
4858    }
4859}
4860impl Error for ListVirtualNodesError {}
4861/// Errors returned by ListVirtualRouters
4862#[derive(Debug, PartialEq)]
4863pub enum ListVirtualRoutersError {
4864    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4865    BadRequest(String),
4866    /// <p>You don't have permissions to perform this action.</p>
4867    Forbidden(String),
4868    /// <p>The request processing has failed because of an unknown error, exception, or
4869    /// failure.</p>
4870    InternalServerError(String),
4871    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4872    NotFound(String),
4873    /// <p>The request has failed due to a temporary failure of the service.</p>
4874    ServiceUnavailable(String),
4875    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4876    /// account. For best results, use an increasing or variable sleep interval between
4877    /// requests.</p>
4878    TooManyRequests(String),
4879}
4880
4881impl ListVirtualRoutersError {
4882    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListVirtualRoutersError> {
4883        if let Some(err) = proto::json::Error::parse_rest(&res) {
4884            match err.typ.as_str() {
4885                "BadRequestException" => {
4886                    return RusotoError::Service(ListVirtualRoutersError::BadRequest(err.msg))
4887                }
4888                "ForbiddenException" => {
4889                    return RusotoError::Service(ListVirtualRoutersError::Forbidden(err.msg))
4890                }
4891                "InternalServerErrorException" => {
4892                    return RusotoError::Service(ListVirtualRoutersError::InternalServerError(
4893                        err.msg,
4894                    ))
4895                }
4896                "NotFoundException" => {
4897                    return RusotoError::Service(ListVirtualRoutersError::NotFound(err.msg))
4898                }
4899                "ServiceUnavailableException" => {
4900                    return RusotoError::Service(ListVirtualRoutersError::ServiceUnavailable(
4901                        err.msg,
4902                    ))
4903                }
4904                "TooManyRequestsException" => {
4905                    return RusotoError::Service(ListVirtualRoutersError::TooManyRequests(err.msg))
4906                }
4907                "ValidationException" => return RusotoError::Validation(err.msg),
4908                _ => {}
4909            }
4910        }
4911        RusotoError::Unknown(res)
4912    }
4913}
4914impl fmt::Display for ListVirtualRoutersError {
4915    #[allow(unused_variables)]
4916    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4917        match *self {
4918            ListVirtualRoutersError::BadRequest(ref cause) => write!(f, "{}", cause),
4919            ListVirtualRoutersError::Forbidden(ref cause) => write!(f, "{}", cause),
4920            ListVirtualRoutersError::InternalServerError(ref cause) => write!(f, "{}", cause),
4921            ListVirtualRoutersError::NotFound(ref cause) => write!(f, "{}", cause),
4922            ListVirtualRoutersError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4923            ListVirtualRoutersError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4924        }
4925    }
4926}
4927impl Error for ListVirtualRoutersError {}
4928/// Errors returned by ListVirtualServices
4929#[derive(Debug, PartialEq)]
4930pub enum ListVirtualServicesError {
4931    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4932    BadRequest(String),
4933    /// <p>You don't have permissions to perform this action.</p>
4934    Forbidden(String),
4935    /// <p>The request processing has failed because of an unknown error, exception, or
4936    /// failure.</p>
4937    InternalServerError(String),
4938    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
4939    NotFound(String),
4940    /// <p>The request has failed due to a temporary failure of the service.</p>
4941    ServiceUnavailable(String),
4942    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
4943    /// account. For best results, use an increasing or variable sleep interval between
4944    /// requests.</p>
4945    TooManyRequests(String),
4946}
4947
4948impl ListVirtualServicesError {
4949    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListVirtualServicesError> {
4950        if let Some(err) = proto::json::Error::parse_rest(&res) {
4951            match err.typ.as_str() {
4952                "BadRequestException" => {
4953                    return RusotoError::Service(ListVirtualServicesError::BadRequest(err.msg))
4954                }
4955                "ForbiddenException" => {
4956                    return RusotoError::Service(ListVirtualServicesError::Forbidden(err.msg))
4957                }
4958                "InternalServerErrorException" => {
4959                    return RusotoError::Service(ListVirtualServicesError::InternalServerError(
4960                        err.msg,
4961                    ))
4962                }
4963                "NotFoundException" => {
4964                    return RusotoError::Service(ListVirtualServicesError::NotFound(err.msg))
4965                }
4966                "ServiceUnavailableException" => {
4967                    return RusotoError::Service(ListVirtualServicesError::ServiceUnavailable(
4968                        err.msg,
4969                    ))
4970                }
4971                "TooManyRequestsException" => {
4972                    return RusotoError::Service(ListVirtualServicesError::TooManyRequests(err.msg))
4973                }
4974                "ValidationException" => return RusotoError::Validation(err.msg),
4975                _ => {}
4976            }
4977        }
4978        RusotoError::Unknown(res)
4979    }
4980}
4981impl fmt::Display for ListVirtualServicesError {
4982    #[allow(unused_variables)]
4983    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4984        match *self {
4985            ListVirtualServicesError::BadRequest(ref cause) => write!(f, "{}", cause),
4986            ListVirtualServicesError::Forbidden(ref cause) => write!(f, "{}", cause),
4987            ListVirtualServicesError::InternalServerError(ref cause) => write!(f, "{}", cause),
4988            ListVirtualServicesError::NotFound(ref cause) => write!(f, "{}", cause),
4989            ListVirtualServicesError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
4990            ListVirtualServicesError::TooManyRequests(ref cause) => write!(f, "{}", cause),
4991        }
4992    }
4993}
4994impl Error for ListVirtualServicesError {}
4995/// Errors returned by TagResource
4996#[derive(Debug, PartialEq)]
4997pub enum TagResourceError {
4998    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
4999    BadRequest(String),
5000    /// <p>You don't have permissions to perform this action.</p>
5001    Forbidden(String),
5002    /// <p>The request processing has failed because of an unknown error, exception, or
5003    /// failure.</p>
5004    InternalServerError(String),
5005    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
5006    NotFound(String),
5007    /// <p>The request has failed due to a temporary failure of the service.</p>
5008    ServiceUnavailable(String),
5009    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
5010    /// account. For best results, use an increasing or variable sleep interval between
5011    /// requests.</p>
5012    TooManyRequests(String),
5013    /// <p>The request exceeds the maximum allowed number of tags allowed per resource. The current
5014    /// limit is 50 user tags per resource. You must reduce the number of tags in the request. None
5015    /// of the tags in this request were applied.</p>
5016    TooManyTags(String),
5017}
5018
5019impl TagResourceError {
5020    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<TagResourceError> {
5021        if let Some(err) = proto::json::Error::parse_rest(&res) {
5022            match err.typ.as_str() {
5023                "BadRequestException" => {
5024                    return RusotoError::Service(TagResourceError::BadRequest(err.msg))
5025                }
5026                "ForbiddenException" => {
5027                    return RusotoError::Service(TagResourceError::Forbidden(err.msg))
5028                }
5029                "InternalServerErrorException" => {
5030                    return RusotoError::Service(TagResourceError::InternalServerError(err.msg))
5031                }
5032                "NotFoundException" => {
5033                    return RusotoError::Service(TagResourceError::NotFound(err.msg))
5034                }
5035                "ServiceUnavailableException" => {
5036                    return RusotoError::Service(TagResourceError::ServiceUnavailable(err.msg))
5037                }
5038                "TooManyRequestsException" => {
5039                    return RusotoError::Service(TagResourceError::TooManyRequests(err.msg))
5040                }
5041                "TooManyTagsException" => {
5042                    return RusotoError::Service(TagResourceError::TooManyTags(err.msg))
5043                }
5044                "ValidationException" => return RusotoError::Validation(err.msg),
5045                _ => {}
5046            }
5047        }
5048        RusotoError::Unknown(res)
5049    }
5050}
5051impl fmt::Display for TagResourceError {
5052    #[allow(unused_variables)]
5053    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5054        match *self {
5055            TagResourceError::BadRequest(ref cause) => write!(f, "{}", cause),
5056            TagResourceError::Forbidden(ref cause) => write!(f, "{}", cause),
5057            TagResourceError::InternalServerError(ref cause) => write!(f, "{}", cause),
5058            TagResourceError::NotFound(ref cause) => write!(f, "{}", cause),
5059            TagResourceError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
5060            TagResourceError::TooManyRequests(ref cause) => write!(f, "{}", cause),
5061            TagResourceError::TooManyTags(ref cause) => write!(f, "{}", cause),
5062        }
5063    }
5064}
5065impl Error for TagResourceError {}
5066/// Errors returned by UntagResource
5067#[derive(Debug, PartialEq)]
5068pub enum UntagResourceError {
5069    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
5070    BadRequest(String),
5071    /// <p>You don't have permissions to perform this action.</p>
5072    Forbidden(String),
5073    /// <p>The request processing has failed because of an unknown error, exception, or
5074    /// failure.</p>
5075    InternalServerError(String),
5076    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
5077    NotFound(String),
5078    /// <p>The request has failed due to a temporary failure of the service.</p>
5079    ServiceUnavailable(String),
5080    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
5081    /// account. For best results, use an increasing or variable sleep interval between
5082    /// requests.</p>
5083    TooManyRequests(String),
5084}
5085
5086impl UntagResourceError {
5087    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UntagResourceError> {
5088        if let Some(err) = proto::json::Error::parse_rest(&res) {
5089            match err.typ.as_str() {
5090                "BadRequestException" => {
5091                    return RusotoError::Service(UntagResourceError::BadRequest(err.msg))
5092                }
5093                "ForbiddenException" => {
5094                    return RusotoError::Service(UntagResourceError::Forbidden(err.msg))
5095                }
5096                "InternalServerErrorException" => {
5097                    return RusotoError::Service(UntagResourceError::InternalServerError(err.msg))
5098                }
5099                "NotFoundException" => {
5100                    return RusotoError::Service(UntagResourceError::NotFound(err.msg))
5101                }
5102                "ServiceUnavailableException" => {
5103                    return RusotoError::Service(UntagResourceError::ServiceUnavailable(err.msg))
5104                }
5105                "TooManyRequestsException" => {
5106                    return RusotoError::Service(UntagResourceError::TooManyRequests(err.msg))
5107                }
5108                "ValidationException" => return RusotoError::Validation(err.msg),
5109                _ => {}
5110            }
5111        }
5112        RusotoError::Unknown(res)
5113    }
5114}
5115impl fmt::Display for UntagResourceError {
5116    #[allow(unused_variables)]
5117    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5118        match *self {
5119            UntagResourceError::BadRequest(ref cause) => write!(f, "{}", cause),
5120            UntagResourceError::Forbidden(ref cause) => write!(f, "{}", cause),
5121            UntagResourceError::InternalServerError(ref cause) => write!(f, "{}", cause),
5122            UntagResourceError::NotFound(ref cause) => write!(f, "{}", cause),
5123            UntagResourceError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
5124            UntagResourceError::TooManyRequests(ref cause) => write!(f, "{}", cause),
5125        }
5126    }
5127}
5128impl Error for UntagResourceError {}
5129/// Errors returned by UpdateGatewayRoute
5130#[derive(Debug, PartialEq)]
5131pub enum UpdateGatewayRouteError {
5132    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
5133    BadRequest(String),
5134    /// <p>The request contains a client token that was used for a previous update resource call
5135    /// with different specifications. Try the request again with a new client token.</p>
5136    Conflict(String),
5137    /// <p>You don't have permissions to perform this action.</p>
5138    Forbidden(String),
5139    /// <p>The request processing has failed because of an unknown error, exception, or
5140    /// failure.</p>
5141    InternalServerError(String),
5142    /// <p>You have exceeded a service limit for your account. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/service-quotas.html">Service
5143    /// Limits</a> in the <i>AWS App Mesh User Guide</i>.</p>
5144    LimitExceeded(String),
5145    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
5146    NotFound(String),
5147    /// <p>The request has failed due to a temporary failure of the service.</p>
5148    ServiceUnavailable(String),
5149    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
5150    /// account. For best results, use an increasing or variable sleep interval between
5151    /// requests.</p>
5152    TooManyRequests(String),
5153}
5154
5155impl UpdateGatewayRouteError {
5156    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateGatewayRouteError> {
5157        if let Some(err) = proto::json::Error::parse_rest(&res) {
5158            match err.typ.as_str() {
5159                "BadRequestException" => {
5160                    return RusotoError::Service(UpdateGatewayRouteError::BadRequest(err.msg))
5161                }
5162                "ConflictException" => {
5163                    return RusotoError::Service(UpdateGatewayRouteError::Conflict(err.msg))
5164                }
5165                "ForbiddenException" => {
5166                    return RusotoError::Service(UpdateGatewayRouteError::Forbidden(err.msg))
5167                }
5168                "InternalServerErrorException" => {
5169                    return RusotoError::Service(UpdateGatewayRouteError::InternalServerError(
5170                        err.msg,
5171                    ))
5172                }
5173                "LimitExceededException" => {
5174                    return RusotoError::Service(UpdateGatewayRouteError::LimitExceeded(err.msg))
5175                }
5176                "NotFoundException" => {
5177                    return RusotoError::Service(UpdateGatewayRouteError::NotFound(err.msg))
5178                }
5179                "ServiceUnavailableException" => {
5180                    return RusotoError::Service(UpdateGatewayRouteError::ServiceUnavailable(
5181                        err.msg,
5182                    ))
5183                }
5184                "TooManyRequestsException" => {
5185                    return RusotoError::Service(UpdateGatewayRouteError::TooManyRequests(err.msg))
5186                }
5187                "ValidationException" => return RusotoError::Validation(err.msg),
5188                _ => {}
5189            }
5190        }
5191        RusotoError::Unknown(res)
5192    }
5193}
5194impl fmt::Display for UpdateGatewayRouteError {
5195    #[allow(unused_variables)]
5196    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5197        match *self {
5198            UpdateGatewayRouteError::BadRequest(ref cause) => write!(f, "{}", cause),
5199            UpdateGatewayRouteError::Conflict(ref cause) => write!(f, "{}", cause),
5200            UpdateGatewayRouteError::Forbidden(ref cause) => write!(f, "{}", cause),
5201            UpdateGatewayRouteError::InternalServerError(ref cause) => write!(f, "{}", cause),
5202            UpdateGatewayRouteError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5203            UpdateGatewayRouteError::NotFound(ref cause) => write!(f, "{}", cause),
5204            UpdateGatewayRouteError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
5205            UpdateGatewayRouteError::TooManyRequests(ref cause) => write!(f, "{}", cause),
5206        }
5207    }
5208}
5209impl Error for UpdateGatewayRouteError {}
5210/// Errors returned by UpdateMesh
5211#[derive(Debug, PartialEq)]
5212pub enum UpdateMeshError {
5213    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
5214    BadRequest(String),
5215    /// <p>The request contains a client token that was used for a previous update resource call
5216    /// with different specifications. Try the request again with a new client token.</p>
5217    Conflict(String),
5218    /// <p>You don't have permissions to perform this action.</p>
5219    Forbidden(String),
5220    /// <p>The request processing has failed because of an unknown error, exception, or
5221    /// failure.</p>
5222    InternalServerError(String),
5223    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
5224    NotFound(String),
5225    /// <p>The request has failed due to a temporary failure of the service.</p>
5226    ServiceUnavailable(String),
5227    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
5228    /// account. For best results, use an increasing or variable sleep interval between
5229    /// requests.</p>
5230    TooManyRequests(String),
5231}
5232
5233impl UpdateMeshError {
5234    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateMeshError> {
5235        if let Some(err) = proto::json::Error::parse_rest(&res) {
5236            match err.typ.as_str() {
5237                "BadRequestException" => {
5238                    return RusotoError::Service(UpdateMeshError::BadRequest(err.msg))
5239                }
5240                "ConflictException" => {
5241                    return RusotoError::Service(UpdateMeshError::Conflict(err.msg))
5242                }
5243                "ForbiddenException" => {
5244                    return RusotoError::Service(UpdateMeshError::Forbidden(err.msg))
5245                }
5246                "InternalServerErrorException" => {
5247                    return RusotoError::Service(UpdateMeshError::InternalServerError(err.msg))
5248                }
5249                "NotFoundException" => {
5250                    return RusotoError::Service(UpdateMeshError::NotFound(err.msg))
5251                }
5252                "ServiceUnavailableException" => {
5253                    return RusotoError::Service(UpdateMeshError::ServiceUnavailable(err.msg))
5254                }
5255                "TooManyRequestsException" => {
5256                    return RusotoError::Service(UpdateMeshError::TooManyRequests(err.msg))
5257                }
5258                "ValidationException" => return RusotoError::Validation(err.msg),
5259                _ => {}
5260            }
5261        }
5262        RusotoError::Unknown(res)
5263    }
5264}
5265impl fmt::Display for UpdateMeshError {
5266    #[allow(unused_variables)]
5267    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5268        match *self {
5269            UpdateMeshError::BadRequest(ref cause) => write!(f, "{}", cause),
5270            UpdateMeshError::Conflict(ref cause) => write!(f, "{}", cause),
5271            UpdateMeshError::Forbidden(ref cause) => write!(f, "{}", cause),
5272            UpdateMeshError::InternalServerError(ref cause) => write!(f, "{}", cause),
5273            UpdateMeshError::NotFound(ref cause) => write!(f, "{}", cause),
5274            UpdateMeshError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
5275            UpdateMeshError::TooManyRequests(ref cause) => write!(f, "{}", cause),
5276        }
5277    }
5278}
5279impl Error for UpdateMeshError {}
5280/// Errors returned by UpdateRoute
5281#[derive(Debug, PartialEq)]
5282pub enum UpdateRouteError {
5283    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
5284    BadRequest(String),
5285    /// <p>The request contains a client token that was used for a previous update resource call
5286    /// with different specifications. Try the request again with a new client token.</p>
5287    Conflict(String),
5288    /// <p>You don't have permissions to perform this action.</p>
5289    Forbidden(String),
5290    /// <p>The request processing has failed because of an unknown error, exception, or
5291    /// failure.</p>
5292    InternalServerError(String),
5293    /// <p>You have exceeded a service limit for your account. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/service-quotas.html">Service
5294    /// Limits</a> in the <i>AWS App Mesh User Guide</i>.</p>
5295    LimitExceeded(String),
5296    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
5297    NotFound(String),
5298    /// <p>The request has failed due to a temporary failure of the service.</p>
5299    ServiceUnavailable(String),
5300    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
5301    /// account. For best results, use an increasing or variable sleep interval between
5302    /// requests.</p>
5303    TooManyRequests(String),
5304}
5305
5306impl UpdateRouteError {
5307    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateRouteError> {
5308        if let Some(err) = proto::json::Error::parse_rest(&res) {
5309            match err.typ.as_str() {
5310                "BadRequestException" => {
5311                    return RusotoError::Service(UpdateRouteError::BadRequest(err.msg))
5312                }
5313                "ConflictException" => {
5314                    return RusotoError::Service(UpdateRouteError::Conflict(err.msg))
5315                }
5316                "ForbiddenException" => {
5317                    return RusotoError::Service(UpdateRouteError::Forbidden(err.msg))
5318                }
5319                "InternalServerErrorException" => {
5320                    return RusotoError::Service(UpdateRouteError::InternalServerError(err.msg))
5321                }
5322                "LimitExceededException" => {
5323                    return RusotoError::Service(UpdateRouteError::LimitExceeded(err.msg))
5324                }
5325                "NotFoundException" => {
5326                    return RusotoError::Service(UpdateRouteError::NotFound(err.msg))
5327                }
5328                "ServiceUnavailableException" => {
5329                    return RusotoError::Service(UpdateRouteError::ServiceUnavailable(err.msg))
5330                }
5331                "TooManyRequestsException" => {
5332                    return RusotoError::Service(UpdateRouteError::TooManyRequests(err.msg))
5333                }
5334                "ValidationException" => return RusotoError::Validation(err.msg),
5335                _ => {}
5336            }
5337        }
5338        RusotoError::Unknown(res)
5339    }
5340}
5341impl fmt::Display for UpdateRouteError {
5342    #[allow(unused_variables)]
5343    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5344        match *self {
5345            UpdateRouteError::BadRequest(ref cause) => write!(f, "{}", cause),
5346            UpdateRouteError::Conflict(ref cause) => write!(f, "{}", cause),
5347            UpdateRouteError::Forbidden(ref cause) => write!(f, "{}", cause),
5348            UpdateRouteError::InternalServerError(ref cause) => write!(f, "{}", cause),
5349            UpdateRouteError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5350            UpdateRouteError::NotFound(ref cause) => write!(f, "{}", cause),
5351            UpdateRouteError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
5352            UpdateRouteError::TooManyRequests(ref cause) => write!(f, "{}", cause),
5353        }
5354    }
5355}
5356impl Error for UpdateRouteError {}
5357/// Errors returned by UpdateVirtualGateway
5358#[derive(Debug, PartialEq)]
5359pub enum UpdateVirtualGatewayError {
5360    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
5361    BadRequest(String),
5362    /// <p>The request contains a client token that was used for a previous update resource call
5363    /// with different specifications. Try the request again with a new client token.</p>
5364    Conflict(String),
5365    /// <p>You don't have permissions to perform this action.</p>
5366    Forbidden(String),
5367    /// <p>The request processing has failed because of an unknown error, exception, or
5368    /// failure.</p>
5369    InternalServerError(String),
5370    /// <p>You have exceeded a service limit for your account. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/service-quotas.html">Service
5371    /// Limits</a> in the <i>AWS App Mesh User Guide</i>.</p>
5372    LimitExceeded(String),
5373    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
5374    NotFound(String),
5375    /// <p>The request has failed due to a temporary failure of the service.</p>
5376    ServiceUnavailable(String),
5377    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
5378    /// account. For best results, use an increasing or variable sleep interval between
5379    /// requests.</p>
5380    TooManyRequests(String),
5381}
5382
5383impl UpdateVirtualGatewayError {
5384    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateVirtualGatewayError> {
5385        if let Some(err) = proto::json::Error::parse_rest(&res) {
5386            match err.typ.as_str() {
5387                "BadRequestException" => {
5388                    return RusotoError::Service(UpdateVirtualGatewayError::BadRequest(err.msg))
5389                }
5390                "ConflictException" => {
5391                    return RusotoError::Service(UpdateVirtualGatewayError::Conflict(err.msg))
5392                }
5393                "ForbiddenException" => {
5394                    return RusotoError::Service(UpdateVirtualGatewayError::Forbidden(err.msg))
5395                }
5396                "InternalServerErrorException" => {
5397                    return RusotoError::Service(UpdateVirtualGatewayError::InternalServerError(
5398                        err.msg,
5399                    ))
5400                }
5401                "LimitExceededException" => {
5402                    return RusotoError::Service(UpdateVirtualGatewayError::LimitExceeded(err.msg))
5403                }
5404                "NotFoundException" => {
5405                    return RusotoError::Service(UpdateVirtualGatewayError::NotFound(err.msg))
5406                }
5407                "ServiceUnavailableException" => {
5408                    return RusotoError::Service(UpdateVirtualGatewayError::ServiceUnavailable(
5409                        err.msg,
5410                    ))
5411                }
5412                "TooManyRequestsException" => {
5413                    return RusotoError::Service(UpdateVirtualGatewayError::TooManyRequests(
5414                        err.msg,
5415                    ))
5416                }
5417                "ValidationException" => return RusotoError::Validation(err.msg),
5418                _ => {}
5419            }
5420        }
5421        RusotoError::Unknown(res)
5422    }
5423}
5424impl fmt::Display for UpdateVirtualGatewayError {
5425    #[allow(unused_variables)]
5426    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5427        match *self {
5428            UpdateVirtualGatewayError::BadRequest(ref cause) => write!(f, "{}", cause),
5429            UpdateVirtualGatewayError::Conflict(ref cause) => write!(f, "{}", cause),
5430            UpdateVirtualGatewayError::Forbidden(ref cause) => write!(f, "{}", cause),
5431            UpdateVirtualGatewayError::InternalServerError(ref cause) => write!(f, "{}", cause),
5432            UpdateVirtualGatewayError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5433            UpdateVirtualGatewayError::NotFound(ref cause) => write!(f, "{}", cause),
5434            UpdateVirtualGatewayError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
5435            UpdateVirtualGatewayError::TooManyRequests(ref cause) => write!(f, "{}", cause),
5436        }
5437    }
5438}
5439impl Error for UpdateVirtualGatewayError {}
5440/// Errors returned by UpdateVirtualNode
5441#[derive(Debug, PartialEq)]
5442pub enum UpdateVirtualNodeError {
5443    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
5444    BadRequest(String),
5445    /// <p>The request contains a client token that was used for a previous update resource call
5446    /// with different specifications. Try the request again with a new client token.</p>
5447    Conflict(String),
5448    /// <p>You don't have permissions to perform this action.</p>
5449    Forbidden(String),
5450    /// <p>The request processing has failed because of an unknown error, exception, or
5451    /// failure.</p>
5452    InternalServerError(String),
5453    /// <p>You have exceeded a service limit for your account. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/service-quotas.html">Service
5454    /// Limits</a> in the <i>AWS App Mesh User Guide</i>.</p>
5455    LimitExceeded(String),
5456    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
5457    NotFound(String),
5458    /// <p>The request has failed due to a temporary failure of the service.</p>
5459    ServiceUnavailable(String),
5460    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
5461    /// account. For best results, use an increasing or variable sleep interval between
5462    /// requests.</p>
5463    TooManyRequests(String),
5464}
5465
5466impl UpdateVirtualNodeError {
5467    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateVirtualNodeError> {
5468        if let Some(err) = proto::json::Error::parse_rest(&res) {
5469            match err.typ.as_str() {
5470                "BadRequestException" => {
5471                    return RusotoError::Service(UpdateVirtualNodeError::BadRequest(err.msg))
5472                }
5473                "ConflictException" => {
5474                    return RusotoError::Service(UpdateVirtualNodeError::Conflict(err.msg))
5475                }
5476                "ForbiddenException" => {
5477                    return RusotoError::Service(UpdateVirtualNodeError::Forbidden(err.msg))
5478                }
5479                "InternalServerErrorException" => {
5480                    return RusotoError::Service(UpdateVirtualNodeError::InternalServerError(
5481                        err.msg,
5482                    ))
5483                }
5484                "LimitExceededException" => {
5485                    return RusotoError::Service(UpdateVirtualNodeError::LimitExceeded(err.msg))
5486                }
5487                "NotFoundException" => {
5488                    return RusotoError::Service(UpdateVirtualNodeError::NotFound(err.msg))
5489                }
5490                "ServiceUnavailableException" => {
5491                    return RusotoError::Service(UpdateVirtualNodeError::ServiceUnavailable(
5492                        err.msg,
5493                    ))
5494                }
5495                "TooManyRequestsException" => {
5496                    return RusotoError::Service(UpdateVirtualNodeError::TooManyRequests(err.msg))
5497                }
5498                "ValidationException" => return RusotoError::Validation(err.msg),
5499                _ => {}
5500            }
5501        }
5502        RusotoError::Unknown(res)
5503    }
5504}
5505impl fmt::Display for UpdateVirtualNodeError {
5506    #[allow(unused_variables)]
5507    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5508        match *self {
5509            UpdateVirtualNodeError::BadRequest(ref cause) => write!(f, "{}", cause),
5510            UpdateVirtualNodeError::Conflict(ref cause) => write!(f, "{}", cause),
5511            UpdateVirtualNodeError::Forbidden(ref cause) => write!(f, "{}", cause),
5512            UpdateVirtualNodeError::InternalServerError(ref cause) => write!(f, "{}", cause),
5513            UpdateVirtualNodeError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5514            UpdateVirtualNodeError::NotFound(ref cause) => write!(f, "{}", cause),
5515            UpdateVirtualNodeError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
5516            UpdateVirtualNodeError::TooManyRequests(ref cause) => write!(f, "{}", cause),
5517        }
5518    }
5519}
5520impl Error for UpdateVirtualNodeError {}
5521/// Errors returned by UpdateVirtualRouter
5522#[derive(Debug, PartialEq)]
5523pub enum UpdateVirtualRouterError {
5524    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
5525    BadRequest(String),
5526    /// <p>The request contains a client token that was used for a previous update resource call
5527    /// with different specifications. Try the request again with a new client token.</p>
5528    Conflict(String),
5529    /// <p>You don't have permissions to perform this action.</p>
5530    Forbidden(String),
5531    /// <p>The request processing has failed because of an unknown error, exception, or
5532    /// failure.</p>
5533    InternalServerError(String),
5534    /// <p>You have exceeded a service limit for your account. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/service-quotas.html">Service
5535    /// Limits</a> in the <i>AWS App Mesh User Guide</i>.</p>
5536    LimitExceeded(String),
5537    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
5538    NotFound(String),
5539    /// <p>The request has failed due to a temporary failure of the service.</p>
5540    ServiceUnavailable(String),
5541    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
5542    /// account. For best results, use an increasing or variable sleep interval between
5543    /// requests.</p>
5544    TooManyRequests(String),
5545}
5546
5547impl UpdateVirtualRouterError {
5548    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateVirtualRouterError> {
5549        if let Some(err) = proto::json::Error::parse_rest(&res) {
5550            match err.typ.as_str() {
5551                "BadRequestException" => {
5552                    return RusotoError::Service(UpdateVirtualRouterError::BadRequest(err.msg))
5553                }
5554                "ConflictException" => {
5555                    return RusotoError::Service(UpdateVirtualRouterError::Conflict(err.msg))
5556                }
5557                "ForbiddenException" => {
5558                    return RusotoError::Service(UpdateVirtualRouterError::Forbidden(err.msg))
5559                }
5560                "InternalServerErrorException" => {
5561                    return RusotoError::Service(UpdateVirtualRouterError::InternalServerError(
5562                        err.msg,
5563                    ))
5564                }
5565                "LimitExceededException" => {
5566                    return RusotoError::Service(UpdateVirtualRouterError::LimitExceeded(err.msg))
5567                }
5568                "NotFoundException" => {
5569                    return RusotoError::Service(UpdateVirtualRouterError::NotFound(err.msg))
5570                }
5571                "ServiceUnavailableException" => {
5572                    return RusotoError::Service(UpdateVirtualRouterError::ServiceUnavailable(
5573                        err.msg,
5574                    ))
5575                }
5576                "TooManyRequestsException" => {
5577                    return RusotoError::Service(UpdateVirtualRouterError::TooManyRequests(err.msg))
5578                }
5579                "ValidationException" => return RusotoError::Validation(err.msg),
5580                _ => {}
5581            }
5582        }
5583        RusotoError::Unknown(res)
5584    }
5585}
5586impl fmt::Display for UpdateVirtualRouterError {
5587    #[allow(unused_variables)]
5588    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5589        match *self {
5590            UpdateVirtualRouterError::BadRequest(ref cause) => write!(f, "{}", cause),
5591            UpdateVirtualRouterError::Conflict(ref cause) => write!(f, "{}", cause),
5592            UpdateVirtualRouterError::Forbidden(ref cause) => write!(f, "{}", cause),
5593            UpdateVirtualRouterError::InternalServerError(ref cause) => write!(f, "{}", cause),
5594            UpdateVirtualRouterError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5595            UpdateVirtualRouterError::NotFound(ref cause) => write!(f, "{}", cause),
5596            UpdateVirtualRouterError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
5597            UpdateVirtualRouterError::TooManyRequests(ref cause) => write!(f, "{}", cause),
5598        }
5599    }
5600}
5601impl Error for UpdateVirtualRouterError {}
5602/// Errors returned by UpdateVirtualService
5603#[derive(Debug, PartialEq)]
5604pub enum UpdateVirtualServiceError {
5605    /// <p>The request syntax was malformed. Check your request syntax and try again.</p>
5606    BadRequest(String),
5607    /// <p>The request contains a client token that was used for a previous update resource call
5608    /// with different specifications. Try the request again with a new client token.</p>
5609    Conflict(String),
5610    /// <p>You don't have permissions to perform this action.</p>
5611    Forbidden(String),
5612    /// <p>The request processing has failed because of an unknown error, exception, or
5613    /// failure.</p>
5614    InternalServerError(String),
5615    /// <p>You have exceeded a service limit for your account. For more information, see <a href="https://docs.aws.amazon.com/app-mesh/latest/userguide/service-quotas.html">Service
5616    /// Limits</a> in the <i>AWS App Mesh User Guide</i>.</p>
5617    LimitExceeded(String),
5618    /// <p>The specified resource doesn't exist. Check your request syntax and try again.</p>
5619    NotFound(String),
5620    /// <p>The request has failed due to a temporary failure of the service.</p>
5621    ServiceUnavailable(String),
5622    /// <p>The maximum request rate permitted by the App Mesh APIs has been exceeded for your
5623    /// account. For best results, use an increasing or variable sleep interval between
5624    /// requests.</p>
5625    TooManyRequests(String),
5626}
5627
5628impl UpdateVirtualServiceError {
5629    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateVirtualServiceError> {
5630        if let Some(err) = proto::json::Error::parse_rest(&res) {
5631            match err.typ.as_str() {
5632                "BadRequestException" => {
5633                    return RusotoError::Service(UpdateVirtualServiceError::BadRequest(err.msg))
5634                }
5635                "ConflictException" => {
5636                    return RusotoError::Service(UpdateVirtualServiceError::Conflict(err.msg))
5637                }
5638                "ForbiddenException" => {
5639                    return RusotoError::Service(UpdateVirtualServiceError::Forbidden(err.msg))
5640                }
5641                "InternalServerErrorException" => {
5642                    return RusotoError::Service(UpdateVirtualServiceError::InternalServerError(
5643                        err.msg,
5644                    ))
5645                }
5646                "LimitExceededException" => {
5647                    return RusotoError::Service(UpdateVirtualServiceError::LimitExceeded(err.msg))
5648                }
5649                "NotFoundException" => {
5650                    return RusotoError::Service(UpdateVirtualServiceError::NotFound(err.msg))
5651                }
5652                "ServiceUnavailableException" => {
5653                    return RusotoError::Service(UpdateVirtualServiceError::ServiceUnavailable(
5654                        err.msg,
5655                    ))
5656                }
5657                "TooManyRequestsException" => {
5658                    return RusotoError::Service(UpdateVirtualServiceError::TooManyRequests(
5659                        err.msg,
5660                    ))
5661                }
5662                "ValidationException" => return RusotoError::Validation(err.msg),
5663                _ => {}
5664            }
5665        }
5666        RusotoError::Unknown(res)
5667    }
5668}
5669impl fmt::Display for UpdateVirtualServiceError {
5670    #[allow(unused_variables)]
5671    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5672        match *self {
5673            UpdateVirtualServiceError::BadRequest(ref cause) => write!(f, "{}", cause),
5674            UpdateVirtualServiceError::Conflict(ref cause) => write!(f, "{}", cause),
5675            UpdateVirtualServiceError::Forbidden(ref cause) => write!(f, "{}", cause),
5676            UpdateVirtualServiceError::InternalServerError(ref cause) => write!(f, "{}", cause),
5677            UpdateVirtualServiceError::LimitExceeded(ref cause) => write!(f, "{}", cause),
5678            UpdateVirtualServiceError::NotFound(ref cause) => write!(f, "{}", cause),
5679            UpdateVirtualServiceError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
5680            UpdateVirtualServiceError::TooManyRequests(ref cause) => write!(f, "{}", cause),
5681        }
5682    }
5683}
5684impl Error for UpdateVirtualServiceError {}
5685/// Trait representing the capabilities of the AWS App Mesh API. AWS App Mesh clients implement this trait.
5686#[async_trait]
5687pub trait AppMesh {
5688    /// <p>Creates a gateway route.</p>
5689    ///
5690    /// <pre><code>     &lt;p&gt;A gateway route is attached to a virtual gateway and routes traffic to an existing
5691    /// virtual service. If a route matches a request, it can distribute traffic to a target virtual service.&lt;/p&gt;
5692    /// &lt;p&gt;For more information about gateway routes, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/gateway-routes.html&quot;&gt;Gateway routes&lt;/a&gt;.&lt;/p&gt;
5693    /// </code></pre>
5694    async fn create_gateway_route(
5695        &self,
5696        input: CreateGatewayRouteInput,
5697    ) -> Result<CreateGatewayRouteOutput, RusotoError<CreateGatewayRouteError>>;
5698
5699    /// <p>Creates a service mesh.</p>
5700    ///
5701    /// <pre><code>     &lt;p&gt; A service mesh is a logical boundary for network traffic between services that are
5702    /// represented by resources within the mesh. After you create your service mesh, you can
5703    /// create virtual services, virtual nodes, virtual routers, and routes to distribute traffic
5704    /// between the applications in your mesh.&lt;/p&gt;
5705    /// &lt;p&gt;For more information about service meshes, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/meshes.html&quot;&gt;Service meshes&lt;/a&gt;.&lt;/p&gt;
5706    /// </code></pre>
5707    async fn create_mesh(
5708        &self,
5709        input: CreateMeshInput,
5710    ) -> Result<CreateMeshOutput, RusotoError<CreateMeshError>>;
5711
5712    /// <p>Creates a route that is associated with a virtual router.</p>
5713    ///
5714    /// <pre><code>     &lt;p&gt; You can route several different protocols and define a retry policy for a route.
5715    /// Traffic can be routed to one or more virtual nodes.&lt;/p&gt;
5716    /// &lt;p&gt;For more information about routes, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/routes.html&quot;&gt;Routes&lt;/a&gt;.&lt;/p&gt;
5717    /// </code></pre>
5718    async fn create_route(
5719        &self,
5720        input: CreateRouteInput,
5721    ) -> Result<CreateRouteOutput, RusotoError<CreateRouteError>>;
5722
5723    /// <p>Creates a virtual gateway.</p>
5724    ///
5725    /// <pre><code>     &lt;p&gt;A virtual gateway allows resources outside your mesh to communicate to resources that
5726    /// are inside your mesh. The virtual gateway represents an Envoy proxy running in an Amazon ECS
5727    /// task, in a Kubernetes service, or on an Amazon EC2 instance. Unlike a virtual node, which
5728    /// represents an Envoy running with an application, a virtual gateway represents Envoy deployed by itself.&lt;/p&gt;
5729    /// &lt;p&gt;For more information about virtual gateways, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/virtual_gateways.html&quot;&gt;Virtual gateways&lt;/a&gt;.&lt;/p&gt;
5730    /// </code></pre>
5731    async fn create_virtual_gateway(
5732        &self,
5733        input: CreateVirtualGatewayInput,
5734    ) -> Result<CreateVirtualGatewayOutput, RusotoError<CreateVirtualGatewayError>>;
5735
5736    /// <p>Creates a virtual node within a service mesh.</p>
5737    ///
5738    /// <pre><code>     &lt;p&gt; A virtual node acts as a logical pointer to a particular task group, such as an Amazon ECS
5739    /// service or a Kubernetes deployment. When you create a virtual node, you can specify the
5740    /// service discovery information for your task group, and whether the proxy running in a task
5741    /// group will communicate with other proxies using Transport Layer Security (TLS).&lt;/p&gt;
5742    /// &lt;p&gt;You define a &lt;code&gt;listener&lt;/code&gt; for any inbound traffic that your virtual node
5743    /// expects. Any virtual service that your virtual node expects to communicate to is specified
5744    /// as a &lt;code&gt;backend&lt;/code&gt;.&lt;/p&gt;
5745    /// &lt;p&gt;The response metadata for your new virtual node contains the &lt;code&gt;arn&lt;/code&gt; that is
5746    /// associated with the virtual node. Set this value (either the full ARN or the truncated
5747    /// resource name: for example, &lt;code&gt;mesh/default/virtualNode/simpleapp&lt;/code&gt;) as the
5748    /// &lt;code&gt;APPMESH_VIRTUAL_NODE_NAME&lt;/code&gt; environment variable for your task group&#39;s Envoy
5749    /// proxy container in your task definition or pod spec. This is then mapped to the
5750    /// &lt;code&gt;node.id&lt;/code&gt; and &lt;code&gt;node.cluster&lt;/code&gt; Envoy parameters.&lt;/p&gt;
5751    /// &lt;note&gt;
5752    /// &lt;p&gt;If you require your Envoy stats or tracing to use a different name, you can override
5753    /// the &lt;code&gt;node.cluster&lt;/code&gt; value that is set by
5754    /// &lt;code&gt;APPMESH_VIRTUAL_NODE_NAME&lt;/code&gt; with the
5755    /// &lt;code&gt;APPMESH_VIRTUAL_NODE_CLUSTER&lt;/code&gt; environment variable.&lt;/p&gt;
5756    /// &lt;/note&gt;
5757    /// &lt;p&gt;For more information about virtual nodes, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/virtual_nodes.html&quot;&gt;Virtual nodes&lt;/a&gt;.&lt;/p&gt;
5758    /// </code></pre>
5759    async fn create_virtual_node(
5760        &self,
5761        input: CreateVirtualNodeInput,
5762    ) -> Result<CreateVirtualNodeOutput, RusotoError<CreateVirtualNodeError>>;
5763
5764    /// <p>Creates a virtual router within a service mesh.</p>
5765    ///
5766    /// <pre><code>     &lt;p&gt;Specify a &lt;code&gt;listener&lt;/code&gt; for any inbound traffic that your virtual router
5767    /// receives. Create a virtual router for each protocol and port that you need to route.
5768    /// Virtual routers handle traffic for one or more virtual services within your mesh. After you
5769    /// create your virtual router, create and associate routes for your virtual router that direct
5770    /// incoming requests to different virtual nodes.&lt;/p&gt;
5771    /// &lt;p&gt;For more information about virtual routers, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/virtual_routers.html&quot;&gt;Virtual routers&lt;/a&gt;.&lt;/p&gt;
5772    /// </code></pre>
5773    async fn create_virtual_router(
5774        &self,
5775        input: CreateVirtualRouterInput,
5776    ) -> Result<CreateVirtualRouterOutput, RusotoError<CreateVirtualRouterError>>;
5777
5778    /// <p>Creates a virtual service within a service mesh.</p>
5779    ///
5780    /// <pre><code>     &lt;p&gt;A virtual service is an abstraction of a real service that is provided by a virtual node
5781    /// directly or indirectly by means of a virtual router. Dependent services call your virtual
5782    /// service by its &lt;code&gt;virtualServiceName&lt;/code&gt;, and those requests are routed to the
5783    /// virtual node or virtual router that is specified as the provider for the virtual
5784    /// service.&lt;/p&gt;
5785    /// &lt;p&gt;For more information about virtual services, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/virtual_services.html&quot;&gt;Virtual services&lt;/a&gt;.&lt;/p&gt;
5786    /// </code></pre>
5787    async fn create_virtual_service(
5788        &self,
5789        input: CreateVirtualServiceInput,
5790    ) -> Result<CreateVirtualServiceOutput, RusotoError<CreateVirtualServiceError>>;
5791
5792    /// <p>Deletes an existing gateway route.</p>
5793    async fn delete_gateway_route(
5794        &self,
5795        input: DeleteGatewayRouteInput,
5796    ) -> Result<DeleteGatewayRouteOutput, RusotoError<DeleteGatewayRouteError>>;
5797
5798    /// <p>Deletes an existing service mesh.</p>
5799    ///
5800    /// <pre><code>     &lt;p&gt;You must delete all resources (virtual services, routes, virtual routers, and virtual
5801    /// nodes) in the service mesh before you can delete the mesh itself.&lt;/p&gt;
5802    /// </code></pre>
5803    async fn delete_mesh(
5804        &self,
5805        input: DeleteMeshInput,
5806    ) -> Result<DeleteMeshOutput, RusotoError<DeleteMeshError>>;
5807
5808    /// <p>Deletes an existing route.</p>
5809    async fn delete_route(
5810        &self,
5811        input: DeleteRouteInput,
5812    ) -> Result<DeleteRouteOutput, RusotoError<DeleteRouteError>>;
5813
5814    /// <p>Deletes an existing virtual gateway. You cannot delete a virtual gateway if any gateway
5815    /// routes are associated to it.</p>
5816    async fn delete_virtual_gateway(
5817        &self,
5818        input: DeleteVirtualGatewayInput,
5819    ) -> Result<DeleteVirtualGatewayOutput, RusotoError<DeleteVirtualGatewayError>>;
5820
5821    /// <p>Deletes an existing virtual node.</p>
5822    ///
5823    /// <pre><code>     &lt;p&gt;You must delete any virtual services that list a virtual node as a service provider
5824    /// before you can delete the virtual node itself.&lt;/p&gt;
5825    /// </code></pre>
5826    async fn delete_virtual_node(
5827        &self,
5828        input: DeleteVirtualNodeInput,
5829    ) -> Result<DeleteVirtualNodeOutput, RusotoError<DeleteVirtualNodeError>>;
5830
5831    /// <p>Deletes an existing virtual router.</p>
5832    ///
5833    /// <pre><code>     &lt;p&gt;You must delete any routes associated with the virtual router before you can delete the
5834    /// router itself.&lt;/p&gt;
5835    /// </code></pre>
5836    async fn delete_virtual_router(
5837        &self,
5838        input: DeleteVirtualRouterInput,
5839    ) -> Result<DeleteVirtualRouterOutput, RusotoError<DeleteVirtualRouterError>>;
5840
5841    /// <p>Deletes an existing virtual service.</p>
5842    async fn delete_virtual_service(
5843        &self,
5844        input: DeleteVirtualServiceInput,
5845    ) -> Result<DeleteVirtualServiceOutput, RusotoError<DeleteVirtualServiceError>>;
5846
5847    /// <p>Describes an existing gateway route.</p>
5848    async fn describe_gateway_route(
5849        &self,
5850        input: DescribeGatewayRouteInput,
5851    ) -> Result<DescribeGatewayRouteOutput, RusotoError<DescribeGatewayRouteError>>;
5852
5853    /// <p>Describes an existing service mesh.</p>
5854    async fn describe_mesh(
5855        &self,
5856        input: DescribeMeshInput,
5857    ) -> Result<DescribeMeshOutput, RusotoError<DescribeMeshError>>;
5858
5859    /// <p>Describes an existing route.</p>
5860    async fn describe_route(
5861        &self,
5862        input: DescribeRouteInput,
5863    ) -> Result<DescribeRouteOutput, RusotoError<DescribeRouteError>>;
5864
5865    /// <p>Describes an existing virtual gateway.</p>
5866    async fn describe_virtual_gateway(
5867        &self,
5868        input: DescribeVirtualGatewayInput,
5869    ) -> Result<DescribeVirtualGatewayOutput, RusotoError<DescribeVirtualGatewayError>>;
5870
5871    /// <p>Describes an existing virtual node.</p>
5872    async fn describe_virtual_node(
5873        &self,
5874        input: DescribeVirtualNodeInput,
5875    ) -> Result<DescribeVirtualNodeOutput, RusotoError<DescribeVirtualNodeError>>;
5876
5877    /// <p>Describes an existing virtual router.</p>
5878    async fn describe_virtual_router(
5879        &self,
5880        input: DescribeVirtualRouterInput,
5881    ) -> Result<DescribeVirtualRouterOutput, RusotoError<DescribeVirtualRouterError>>;
5882
5883    /// <p>Describes an existing virtual service.</p>
5884    async fn describe_virtual_service(
5885        &self,
5886        input: DescribeVirtualServiceInput,
5887    ) -> Result<DescribeVirtualServiceOutput, RusotoError<DescribeVirtualServiceError>>;
5888
5889    /// <p>Returns a list of existing gateway routes that are associated to a virtual
5890    /// gateway.</p>
5891    async fn list_gateway_routes(
5892        &self,
5893        input: ListGatewayRoutesInput,
5894    ) -> Result<ListGatewayRoutesOutput, RusotoError<ListGatewayRoutesError>>;
5895
5896    /// <p>Returns a list of existing service meshes.</p>
5897    async fn list_meshes(
5898        &self,
5899        input: ListMeshesInput,
5900    ) -> Result<ListMeshesOutput, RusotoError<ListMeshesError>>;
5901
5902    /// <p>Returns a list of existing routes in a service mesh.</p>
5903    async fn list_routes(
5904        &self,
5905        input: ListRoutesInput,
5906    ) -> Result<ListRoutesOutput, RusotoError<ListRoutesError>>;
5907
5908    /// <p>List the tags for an App Mesh resource.</p>
5909    async fn list_tags_for_resource(
5910        &self,
5911        input: ListTagsForResourceInput,
5912    ) -> Result<ListTagsForResourceOutput, RusotoError<ListTagsForResourceError>>;
5913
5914    /// <p>Returns a list of existing virtual gateways in a service mesh.</p>
5915    async fn list_virtual_gateways(
5916        &self,
5917        input: ListVirtualGatewaysInput,
5918    ) -> Result<ListVirtualGatewaysOutput, RusotoError<ListVirtualGatewaysError>>;
5919
5920    /// <p>Returns a list of existing virtual nodes.</p>
5921    async fn list_virtual_nodes(
5922        &self,
5923        input: ListVirtualNodesInput,
5924    ) -> Result<ListVirtualNodesOutput, RusotoError<ListVirtualNodesError>>;
5925
5926    /// <p>Returns a list of existing virtual routers in a service mesh.</p>
5927    async fn list_virtual_routers(
5928        &self,
5929        input: ListVirtualRoutersInput,
5930    ) -> Result<ListVirtualRoutersOutput, RusotoError<ListVirtualRoutersError>>;
5931
5932    /// <p>Returns a list of existing virtual services in a service mesh.</p>
5933    async fn list_virtual_services(
5934        &self,
5935        input: ListVirtualServicesInput,
5936    ) -> Result<ListVirtualServicesOutput, RusotoError<ListVirtualServicesError>>;
5937
5938    /// <p>Associates the specified tags to a resource with the specified <code>resourceArn</code>.
5939    /// If existing tags on a resource aren't specified in the request parameters, they aren't
5940    /// changed. When a resource is deleted, the tags associated with that resource are also
5941    /// deleted.</p>
5942    async fn tag_resource(
5943        &self,
5944        input: TagResourceInput,
5945    ) -> Result<TagResourceOutput, RusotoError<TagResourceError>>;
5946
5947    /// <p>Deletes specified tags from a resource.</p>
5948    async fn untag_resource(
5949        &self,
5950        input: UntagResourceInput,
5951    ) -> Result<UntagResourceOutput, RusotoError<UntagResourceError>>;
5952
5953    /// <p>Updates an existing gateway route that is associated to a specified virtual gateway in a
5954    /// service mesh.</p>
5955    async fn update_gateway_route(
5956        &self,
5957        input: UpdateGatewayRouteInput,
5958    ) -> Result<UpdateGatewayRouteOutput, RusotoError<UpdateGatewayRouteError>>;
5959
5960    /// <p>Updates an existing service mesh.</p>
5961    async fn update_mesh(
5962        &self,
5963        input: UpdateMeshInput,
5964    ) -> Result<UpdateMeshOutput, RusotoError<UpdateMeshError>>;
5965
5966    /// <p>Updates an existing route for a specified service mesh and virtual router.</p>
5967    async fn update_route(
5968        &self,
5969        input: UpdateRouteInput,
5970    ) -> Result<UpdateRouteOutput, RusotoError<UpdateRouteError>>;
5971
5972    /// <p>Updates an existing virtual gateway in a specified service mesh.</p>
5973    async fn update_virtual_gateway(
5974        &self,
5975        input: UpdateVirtualGatewayInput,
5976    ) -> Result<UpdateVirtualGatewayOutput, RusotoError<UpdateVirtualGatewayError>>;
5977
5978    /// <p>Updates an existing virtual node in a specified service mesh.</p>
5979    async fn update_virtual_node(
5980        &self,
5981        input: UpdateVirtualNodeInput,
5982    ) -> Result<UpdateVirtualNodeOutput, RusotoError<UpdateVirtualNodeError>>;
5983
5984    /// <p>Updates an existing virtual router in a specified service mesh.</p>
5985    async fn update_virtual_router(
5986        &self,
5987        input: UpdateVirtualRouterInput,
5988    ) -> Result<UpdateVirtualRouterOutput, RusotoError<UpdateVirtualRouterError>>;
5989
5990    /// <p>Updates an existing virtual service in a specified service mesh.</p>
5991    async fn update_virtual_service(
5992        &self,
5993        input: UpdateVirtualServiceInput,
5994    ) -> Result<UpdateVirtualServiceOutput, RusotoError<UpdateVirtualServiceError>>;
5995}
5996/// A client for the AWS App Mesh API.
5997#[derive(Clone)]
5998pub struct AppMeshClient {
5999    client: Client,
6000    region: region::Region,
6001}
6002
6003impl AppMeshClient {
6004    /// Creates a client backed by the default tokio event loop.
6005    ///
6006    /// The client will use the default credentials provider and tls client.
6007    pub fn new(region: region::Region) -> AppMeshClient {
6008        AppMeshClient {
6009            client: Client::shared(),
6010            region,
6011        }
6012    }
6013
6014    pub fn new_with<P, D>(
6015        request_dispatcher: D,
6016        credentials_provider: P,
6017        region: region::Region,
6018    ) -> AppMeshClient
6019    where
6020        P: ProvideAwsCredentials + Send + Sync + 'static,
6021        D: DispatchSignedRequest + Send + Sync + 'static,
6022    {
6023        AppMeshClient {
6024            client: Client::new_with(credentials_provider, request_dispatcher),
6025            region,
6026        }
6027    }
6028
6029    pub fn new_with_client(client: Client, region: region::Region) -> AppMeshClient {
6030        AppMeshClient { client, region }
6031    }
6032}
6033
6034#[async_trait]
6035impl AppMesh for AppMeshClient {
6036    /// <p>Creates a gateway route.</p>
6037    ///
6038    /// <pre><code>     &lt;p&gt;A gateway route is attached to a virtual gateway and routes traffic to an existing
6039    /// virtual service. If a route matches a request, it can distribute traffic to a target virtual service.&lt;/p&gt;
6040    /// &lt;p&gt;For more information about gateway routes, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/gateway-routes.html&quot;&gt;Gateway routes&lt;/a&gt;.&lt;/p&gt;
6041    /// </code></pre>
6042    #[allow(unused_mut)]
6043    async fn create_gateway_route(
6044        &self,
6045        input: CreateGatewayRouteInput,
6046    ) -> Result<CreateGatewayRouteOutput, RusotoError<CreateGatewayRouteError>> {
6047        let request_uri = format!(
6048            "/v20190125/meshes/{mesh_name}/virtualGateway/{virtual_gateway_name}/gatewayRoutes",
6049            mesh_name = input.mesh_name,
6050            virtual_gateway_name = input.virtual_gateway_name
6051        );
6052
6053        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
6054        request.set_content_type("application/x-amz-json-1.1".to_owned());
6055
6056        let encoded = Some(serde_json::to_vec(&input).unwrap());
6057        request.set_payload(encoded);
6058
6059        let mut params = Params::new();
6060        if let Some(ref x) = input.mesh_owner {
6061            params.put("meshOwner", x);
6062        }
6063        request.set_params(params);
6064
6065        let mut response = self
6066            .client
6067            .sign_and_dispatch(request)
6068            .await
6069            .map_err(RusotoError::from)?;
6070        if response.status.as_u16() == 200 {
6071            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6072            let result = proto::json::ResponsePayload::new(&response)
6073                .deserialize::<CreateGatewayRouteOutput, _>()?;
6074
6075            Ok(result)
6076        } else {
6077            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6078            Err(CreateGatewayRouteError::from_response(response))
6079        }
6080    }
6081
6082    /// <p>Creates a service mesh.</p>
6083    ///
6084    /// <pre><code>     &lt;p&gt; A service mesh is a logical boundary for network traffic between services that are
6085    /// represented by resources within the mesh. After you create your service mesh, you can
6086    /// create virtual services, virtual nodes, virtual routers, and routes to distribute traffic
6087    /// between the applications in your mesh.&lt;/p&gt;
6088    /// &lt;p&gt;For more information about service meshes, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/meshes.html&quot;&gt;Service meshes&lt;/a&gt;.&lt;/p&gt;
6089    /// </code></pre>
6090    #[allow(unused_mut)]
6091    async fn create_mesh(
6092        &self,
6093        input: CreateMeshInput,
6094    ) -> Result<CreateMeshOutput, RusotoError<CreateMeshError>> {
6095        let request_uri = "/v20190125/meshes";
6096
6097        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
6098        request.set_content_type("application/x-amz-json-1.1".to_owned());
6099
6100        let encoded = Some(serde_json::to_vec(&input).unwrap());
6101        request.set_payload(encoded);
6102
6103        let mut response = self
6104            .client
6105            .sign_and_dispatch(request)
6106            .await
6107            .map_err(RusotoError::from)?;
6108        if response.status.as_u16() == 200 {
6109            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6110            let result = proto::json::ResponsePayload::new(&response)
6111                .deserialize::<CreateMeshOutput, _>()?;
6112
6113            Ok(result)
6114        } else {
6115            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6116            Err(CreateMeshError::from_response(response))
6117        }
6118    }
6119
6120    /// <p>Creates a route that is associated with a virtual router.</p>
6121    ///
6122    /// <pre><code>     &lt;p&gt; You can route several different protocols and define a retry policy for a route.
6123    /// Traffic can be routed to one or more virtual nodes.&lt;/p&gt;
6124    /// &lt;p&gt;For more information about routes, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/routes.html&quot;&gt;Routes&lt;/a&gt;.&lt;/p&gt;
6125    /// </code></pre>
6126    #[allow(unused_mut)]
6127    async fn create_route(
6128        &self,
6129        input: CreateRouteInput,
6130    ) -> Result<CreateRouteOutput, RusotoError<CreateRouteError>> {
6131        let request_uri = format!(
6132            "/v20190125/meshes/{mesh_name}/virtualRouter/{virtual_router_name}/routes",
6133            mesh_name = input.mesh_name,
6134            virtual_router_name = input.virtual_router_name
6135        );
6136
6137        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
6138        request.set_content_type("application/x-amz-json-1.1".to_owned());
6139
6140        let encoded = Some(serde_json::to_vec(&input).unwrap());
6141        request.set_payload(encoded);
6142
6143        let mut params = Params::new();
6144        if let Some(ref x) = input.mesh_owner {
6145            params.put("meshOwner", x);
6146        }
6147        request.set_params(params);
6148
6149        let mut response = self
6150            .client
6151            .sign_and_dispatch(request)
6152            .await
6153            .map_err(RusotoError::from)?;
6154        if response.status.as_u16() == 200 {
6155            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6156            let result = proto::json::ResponsePayload::new(&response)
6157                .deserialize::<CreateRouteOutput, _>()?;
6158
6159            Ok(result)
6160        } else {
6161            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6162            Err(CreateRouteError::from_response(response))
6163        }
6164    }
6165
6166    /// <p>Creates a virtual gateway.</p>
6167    ///
6168    /// <pre><code>     &lt;p&gt;A virtual gateway allows resources outside your mesh to communicate to resources that
6169    /// are inside your mesh. The virtual gateway represents an Envoy proxy running in an Amazon ECS
6170    /// task, in a Kubernetes service, or on an Amazon EC2 instance. Unlike a virtual node, which
6171    /// represents an Envoy running with an application, a virtual gateway represents Envoy deployed by itself.&lt;/p&gt;
6172    /// &lt;p&gt;For more information about virtual gateways, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/virtual_gateways.html&quot;&gt;Virtual gateways&lt;/a&gt;.&lt;/p&gt;
6173    /// </code></pre>
6174    #[allow(unused_mut)]
6175    async fn create_virtual_gateway(
6176        &self,
6177        input: CreateVirtualGatewayInput,
6178    ) -> Result<CreateVirtualGatewayOutput, RusotoError<CreateVirtualGatewayError>> {
6179        let request_uri = format!(
6180            "/v20190125/meshes/{mesh_name}/virtualGateways",
6181            mesh_name = input.mesh_name
6182        );
6183
6184        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
6185        request.set_content_type("application/x-amz-json-1.1".to_owned());
6186
6187        let encoded = Some(serde_json::to_vec(&input).unwrap());
6188        request.set_payload(encoded);
6189
6190        let mut params = Params::new();
6191        if let Some(ref x) = input.mesh_owner {
6192            params.put("meshOwner", x);
6193        }
6194        request.set_params(params);
6195
6196        let mut response = self
6197            .client
6198            .sign_and_dispatch(request)
6199            .await
6200            .map_err(RusotoError::from)?;
6201        if response.status.as_u16() == 200 {
6202            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6203            let result = proto::json::ResponsePayload::new(&response)
6204                .deserialize::<CreateVirtualGatewayOutput, _>()?;
6205
6206            Ok(result)
6207        } else {
6208            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6209            Err(CreateVirtualGatewayError::from_response(response))
6210        }
6211    }
6212
6213    /// <p>Creates a virtual node within a service mesh.</p>
6214    ///
6215    /// <pre><code>     &lt;p&gt; A virtual node acts as a logical pointer to a particular task group, such as an Amazon ECS
6216    /// service or a Kubernetes deployment. When you create a virtual node, you can specify the
6217    /// service discovery information for your task group, and whether the proxy running in a task
6218    /// group will communicate with other proxies using Transport Layer Security (TLS).&lt;/p&gt;
6219    /// &lt;p&gt;You define a &lt;code&gt;listener&lt;/code&gt; for any inbound traffic that your virtual node
6220    /// expects. Any virtual service that your virtual node expects to communicate to is specified
6221    /// as a &lt;code&gt;backend&lt;/code&gt;.&lt;/p&gt;
6222    /// &lt;p&gt;The response metadata for your new virtual node contains the &lt;code&gt;arn&lt;/code&gt; that is
6223    /// associated with the virtual node. Set this value (either the full ARN or the truncated
6224    /// resource name: for example, &lt;code&gt;mesh/default/virtualNode/simpleapp&lt;/code&gt;) as the
6225    /// &lt;code&gt;APPMESH_VIRTUAL_NODE_NAME&lt;/code&gt; environment variable for your task group&#39;s Envoy
6226    /// proxy container in your task definition or pod spec. This is then mapped to the
6227    /// &lt;code&gt;node.id&lt;/code&gt; and &lt;code&gt;node.cluster&lt;/code&gt; Envoy parameters.&lt;/p&gt;
6228    /// &lt;note&gt;
6229    /// &lt;p&gt;If you require your Envoy stats or tracing to use a different name, you can override
6230    /// the &lt;code&gt;node.cluster&lt;/code&gt; value that is set by
6231    /// &lt;code&gt;APPMESH_VIRTUAL_NODE_NAME&lt;/code&gt; with the
6232    /// &lt;code&gt;APPMESH_VIRTUAL_NODE_CLUSTER&lt;/code&gt; environment variable.&lt;/p&gt;
6233    /// &lt;/note&gt;
6234    /// &lt;p&gt;For more information about virtual nodes, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/virtual_nodes.html&quot;&gt;Virtual nodes&lt;/a&gt;.&lt;/p&gt;
6235    /// </code></pre>
6236    #[allow(unused_mut)]
6237    async fn create_virtual_node(
6238        &self,
6239        input: CreateVirtualNodeInput,
6240    ) -> Result<CreateVirtualNodeOutput, RusotoError<CreateVirtualNodeError>> {
6241        let request_uri = format!(
6242            "/v20190125/meshes/{mesh_name}/virtualNodes",
6243            mesh_name = input.mesh_name
6244        );
6245
6246        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
6247        request.set_content_type("application/x-amz-json-1.1".to_owned());
6248
6249        let encoded = Some(serde_json::to_vec(&input).unwrap());
6250        request.set_payload(encoded);
6251
6252        let mut params = Params::new();
6253        if let Some(ref x) = input.mesh_owner {
6254            params.put("meshOwner", x);
6255        }
6256        request.set_params(params);
6257
6258        let mut response = self
6259            .client
6260            .sign_and_dispatch(request)
6261            .await
6262            .map_err(RusotoError::from)?;
6263        if response.status.as_u16() == 200 {
6264            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6265            let result = proto::json::ResponsePayload::new(&response)
6266                .deserialize::<CreateVirtualNodeOutput, _>()?;
6267
6268            Ok(result)
6269        } else {
6270            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6271            Err(CreateVirtualNodeError::from_response(response))
6272        }
6273    }
6274
6275    /// <p>Creates a virtual router within a service mesh.</p>
6276    ///
6277    /// <pre><code>     &lt;p&gt;Specify a &lt;code&gt;listener&lt;/code&gt; for any inbound traffic that your virtual router
6278    /// receives. Create a virtual router for each protocol and port that you need to route.
6279    /// Virtual routers handle traffic for one or more virtual services within your mesh. After you
6280    /// create your virtual router, create and associate routes for your virtual router that direct
6281    /// incoming requests to different virtual nodes.&lt;/p&gt;
6282    /// &lt;p&gt;For more information about virtual routers, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/virtual_routers.html&quot;&gt;Virtual routers&lt;/a&gt;.&lt;/p&gt;
6283    /// </code></pre>
6284    #[allow(unused_mut)]
6285    async fn create_virtual_router(
6286        &self,
6287        input: CreateVirtualRouterInput,
6288    ) -> Result<CreateVirtualRouterOutput, RusotoError<CreateVirtualRouterError>> {
6289        let request_uri = format!(
6290            "/v20190125/meshes/{mesh_name}/virtualRouters",
6291            mesh_name = input.mesh_name
6292        );
6293
6294        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
6295        request.set_content_type("application/x-amz-json-1.1".to_owned());
6296
6297        let encoded = Some(serde_json::to_vec(&input).unwrap());
6298        request.set_payload(encoded);
6299
6300        let mut params = Params::new();
6301        if let Some(ref x) = input.mesh_owner {
6302            params.put("meshOwner", x);
6303        }
6304        request.set_params(params);
6305
6306        let mut response = self
6307            .client
6308            .sign_and_dispatch(request)
6309            .await
6310            .map_err(RusotoError::from)?;
6311        if response.status.as_u16() == 200 {
6312            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6313            let result = proto::json::ResponsePayload::new(&response)
6314                .deserialize::<CreateVirtualRouterOutput, _>()?;
6315
6316            Ok(result)
6317        } else {
6318            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6319            Err(CreateVirtualRouterError::from_response(response))
6320        }
6321    }
6322
6323    /// <p>Creates a virtual service within a service mesh.</p>
6324    ///
6325    /// <pre><code>     &lt;p&gt;A virtual service is an abstraction of a real service that is provided by a virtual node
6326    /// directly or indirectly by means of a virtual router. Dependent services call your virtual
6327    /// service by its &lt;code&gt;virtualServiceName&lt;/code&gt;, and those requests are routed to the
6328    /// virtual node or virtual router that is specified as the provider for the virtual
6329    /// service.&lt;/p&gt;
6330    /// &lt;p&gt;For more information about virtual services, see &lt;a href=&quot;https://docs.aws.amazon.com/app-mesh/latest/userguide/virtual_services.html&quot;&gt;Virtual services&lt;/a&gt;.&lt;/p&gt;
6331    /// </code></pre>
6332    #[allow(unused_mut)]
6333    async fn create_virtual_service(
6334        &self,
6335        input: CreateVirtualServiceInput,
6336    ) -> Result<CreateVirtualServiceOutput, RusotoError<CreateVirtualServiceError>> {
6337        let request_uri = format!(
6338            "/v20190125/meshes/{mesh_name}/virtualServices",
6339            mesh_name = input.mesh_name
6340        );
6341
6342        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
6343        request.set_content_type("application/x-amz-json-1.1".to_owned());
6344
6345        let encoded = Some(serde_json::to_vec(&input).unwrap());
6346        request.set_payload(encoded);
6347
6348        let mut params = Params::new();
6349        if let Some(ref x) = input.mesh_owner {
6350            params.put("meshOwner", x);
6351        }
6352        request.set_params(params);
6353
6354        let mut response = self
6355            .client
6356            .sign_and_dispatch(request)
6357            .await
6358            .map_err(RusotoError::from)?;
6359        if response.status.as_u16() == 200 {
6360            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6361            let result = proto::json::ResponsePayload::new(&response)
6362                .deserialize::<CreateVirtualServiceOutput, _>()?;
6363
6364            Ok(result)
6365        } else {
6366            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6367            Err(CreateVirtualServiceError::from_response(response))
6368        }
6369    }
6370
6371    /// <p>Deletes an existing gateway route.</p>
6372    #[allow(unused_mut)]
6373    async fn delete_gateway_route(
6374        &self,
6375        input: DeleteGatewayRouteInput,
6376    ) -> Result<DeleteGatewayRouteOutput, RusotoError<DeleteGatewayRouteError>> {
6377        let request_uri = format!("/v20190125/meshes/{mesh_name}/virtualGateway/{virtual_gateway_name}/gatewayRoutes/{gateway_route_name}", gateway_route_name = input.gateway_route_name, mesh_name = input.mesh_name, virtual_gateway_name = input.virtual_gateway_name);
6378
6379        let mut request = SignedRequest::new("DELETE", "appmesh", &self.region, &request_uri);
6380        request.set_content_type("application/x-amz-json-1.1".to_owned());
6381
6382        let mut params = Params::new();
6383        if let Some(ref x) = input.mesh_owner {
6384            params.put("meshOwner", x);
6385        }
6386        request.set_params(params);
6387
6388        let mut response = self
6389            .client
6390            .sign_and_dispatch(request)
6391            .await
6392            .map_err(RusotoError::from)?;
6393        if response.status.as_u16() == 200 {
6394            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6395            let result = proto::json::ResponsePayload::new(&response)
6396                .deserialize::<DeleteGatewayRouteOutput, _>()?;
6397
6398            Ok(result)
6399        } else {
6400            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6401            Err(DeleteGatewayRouteError::from_response(response))
6402        }
6403    }
6404
6405    /// <p>Deletes an existing service mesh.</p>
6406    ///
6407    /// <pre><code>     &lt;p&gt;You must delete all resources (virtual services, routes, virtual routers, and virtual
6408    /// nodes) in the service mesh before you can delete the mesh itself.&lt;/p&gt;
6409    /// </code></pre>
6410    #[allow(unused_mut)]
6411    async fn delete_mesh(
6412        &self,
6413        input: DeleteMeshInput,
6414    ) -> Result<DeleteMeshOutput, RusotoError<DeleteMeshError>> {
6415        let request_uri = format!("/v20190125/meshes/{mesh_name}", mesh_name = input.mesh_name);
6416
6417        let mut request = SignedRequest::new("DELETE", "appmesh", &self.region, &request_uri);
6418        request.set_content_type("application/x-amz-json-1.1".to_owned());
6419
6420        let mut response = self
6421            .client
6422            .sign_and_dispatch(request)
6423            .await
6424            .map_err(RusotoError::from)?;
6425        if response.status.as_u16() == 200 {
6426            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6427            let result = proto::json::ResponsePayload::new(&response)
6428                .deserialize::<DeleteMeshOutput, _>()?;
6429
6430            Ok(result)
6431        } else {
6432            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6433            Err(DeleteMeshError::from_response(response))
6434        }
6435    }
6436
6437    /// <p>Deletes an existing route.</p>
6438    #[allow(unused_mut)]
6439    async fn delete_route(
6440        &self,
6441        input: DeleteRouteInput,
6442    ) -> Result<DeleteRouteOutput, RusotoError<DeleteRouteError>> {
6443        let request_uri = format!(
6444            "/v20190125/meshes/{mesh_name}/virtualRouter/{virtual_router_name}/routes/{route_name}",
6445            mesh_name = input.mesh_name,
6446            route_name = input.route_name,
6447            virtual_router_name = input.virtual_router_name
6448        );
6449
6450        let mut request = SignedRequest::new("DELETE", "appmesh", &self.region, &request_uri);
6451        request.set_content_type("application/x-amz-json-1.1".to_owned());
6452
6453        let mut params = Params::new();
6454        if let Some(ref x) = input.mesh_owner {
6455            params.put("meshOwner", x);
6456        }
6457        request.set_params(params);
6458
6459        let mut response = self
6460            .client
6461            .sign_and_dispatch(request)
6462            .await
6463            .map_err(RusotoError::from)?;
6464        if response.status.as_u16() == 200 {
6465            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6466            let result = proto::json::ResponsePayload::new(&response)
6467                .deserialize::<DeleteRouteOutput, _>()?;
6468
6469            Ok(result)
6470        } else {
6471            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6472            Err(DeleteRouteError::from_response(response))
6473        }
6474    }
6475
6476    /// <p>Deletes an existing virtual gateway. You cannot delete a virtual gateway if any gateway
6477    /// routes are associated to it.</p>
6478    #[allow(unused_mut)]
6479    async fn delete_virtual_gateway(
6480        &self,
6481        input: DeleteVirtualGatewayInput,
6482    ) -> Result<DeleteVirtualGatewayOutput, RusotoError<DeleteVirtualGatewayError>> {
6483        let request_uri = format!(
6484            "/v20190125/meshes/{mesh_name}/virtualGateways/{virtual_gateway_name}",
6485            mesh_name = input.mesh_name,
6486            virtual_gateway_name = input.virtual_gateway_name
6487        );
6488
6489        let mut request = SignedRequest::new("DELETE", "appmesh", &self.region, &request_uri);
6490        request.set_content_type("application/x-amz-json-1.1".to_owned());
6491
6492        let mut params = Params::new();
6493        if let Some(ref x) = input.mesh_owner {
6494            params.put("meshOwner", x);
6495        }
6496        request.set_params(params);
6497
6498        let mut response = self
6499            .client
6500            .sign_and_dispatch(request)
6501            .await
6502            .map_err(RusotoError::from)?;
6503        if response.status.as_u16() == 200 {
6504            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6505            let result = proto::json::ResponsePayload::new(&response)
6506                .deserialize::<DeleteVirtualGatewayOutput, _>()?;
6507
6508            Ok(result)
6509        } else {
6510            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6511            Err(DeleteVirtualGatewayError::from_response(response))
6512        }
6513    }
6514
6515    /// <p>Deletes an existing virtual node.</p>
6516    ///
6517    /// <pre><code>     &lt;p&gt;You must delete any virtual services that list a virtual node as a service provider
6518    /// before you can delete the virtual node itself.&lt;/p&gt;
6519    /// </code></pre>
6520    #[allow(unused_mut)]
6521    async fn delete_virtual_node(
6522        &self,
6523        input: DeleteVirtualNodeInput,
6524    ) -> Result<DeleteVirtualNodeOutput, RusotoError<DeleteVirtualNodeError>> {
6525        let request_uri = format!(
6526            "/v20190125/meshes/{mesh_name}/virtualNodes/{virtual_node_name}",
6527            mesh_name = input.mesh_name,
6528            virtual_node_name = input.virtual_node_name
6529        );
6530
6531        let mut request = SignedRequest::new("DELETE", "appmesh", &self.region, &request_uri);
6532        request.set_content_type("application/x-amz-json-1.1".to_owned());
6533
6534        let mut params = Params::new();
6535        if let Some(ref x) = input.mesh_owner {
6536            params.put("meshOwner", x);
6537        }
6538        request.set_params(params);
6539
6540        let mut response = self
6541            .client
6542            .sign_and_dispatch(request)
6543            .await
6544            .map_err(RusotoError::from)?;
6545        if response.status.as_u16() == 200 {
6546            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6547            let result = proto::json::ResponsePayload::new(&response)
6548                .deserialize::<DeleteVirtualNodeOutput, _>()?;
6549
6550            Ok(result)
6551        } else {
6552            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6553            Err(DeleteVirtualNodeError::from_response(response))
6554        }
6555    }
6556
6557    /// <p>Deletes an existing virtual router.</p>
6558    ///
6559    /// <pre><code>     &lt;p&gt;You must delete any routes associated with the virtual router before you can delete the
6560    /// router itself.&lt;/p&gt;
6561    /// </code></pre>
6562    #[allow(unused_mut)]
6563    async fn delete_virtual_router(
6564        &self,
6565        input: DeleteVirtualRouterInput,
6566    ) -> Result<DeleteVirtualRouterOutput, RusotoError<DeleteVirtualRouterError>> {
6567        let request_uri = format!(
6568            "/v20190125/meshes/{mesh_name}/virtualRouters/{virtual_router_name}",
6569            mesh_name = input.mesh_name,
6570            virtual_router_name = input.virtual_router_name
6571        );
6572
6573        let mut request = SignedRequest::new("DELETE", "appmesh", &self.region, &request_uri);
6574        request.set_content_type("application/x-amz-json-1.1".to_owned());
6575
6576        let mut params = Params::new();
6577        if let Some(ref x) = input.mesh_owner {
6578            params.put("meshOwner", x);
6579        }
6580        request.set_params(params);
6581
6582        let mut response = self
6583            .client
6584            .sign_and_dispatch(request)
6585            .await
6586            .map_err(RusotoError::from)?;
6587        if response.status.as_u16() == 200 {
6588            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6589            let result = proto::json::ResponsePayload::new(&response)
6590                .deserialize::<DeleteVirtualRouterOutput, _>()?;
6591
6592            Ok(result)
6593        } else {
6594            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6595            Err(DeleteVirtualRouterError::from_response(response))
6596        }
6597    }
6598
6599    /// <p>Deletes an existing virtual service.</p>
6600    #[allow(unused_mut)]
6601    async fn delete_virtual_service(
6602        &self,
6603        input: DeleteVirtualServiceInput,
6604    ) -> Result<DeleteVirtualServiceOutput, RusotoError<DeleteVirtualServiceError>> {
6605        let request_uri = format!(
6606            "/v20190125/meshes/{mesh_name}/virtualServices/{virtual_service_name}",
6607            mesh_name = input.mesh_name,
6608            virtual_service_name = input.virtual_service_name
6609        );
6610
6611        let mut request = SignedRequest::new("DELETE", "appmesh", &self.region, &request_uri);
6612        request.set_content_type("application/x-amz-json-1.1".to_owned());
6613
6614        let mut params = Params::new();
6615        if let Some(ref x) = input.mesh_owner {
6616            params.put("meshOwner", x);
6617        }
6618        request.set_params(params);
6619
6620        let mut response = self
6621            .client
6622            .sign_and_dispatch(request)
6623            .await
6624            .map_err(RusotoError::from)?;
6625        if response.status.as_u16() == 200 {
6626            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6627            let result = proto::json::ResponsePayload::new(&response)
6628                .deserialize::<DeleteVirtualServiceOutput, _>()?;
6629
6630            Ok(result)
6631        } else {
6632            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6633            Err(DeleteVirtualServiceError::from_response(response))
6634        }
6635    }
6636
6637    /// <p>Describes an existing gateway route.</p>
6638    #[allow(unused_mut)]
6639    async fn describe_gateway_route(
6640        &self,
6641        input: DescribeGatewayRouteInput,
6642    ) -> Result<DescribeGatewayRouteOutput, RusotoError<DescribeGatewayRouteError>> {
6643        let request_uri = format!("/v20190125/meshes/{mesh_name}/virtualGateway/{virtual_gateway_name}/gatewayRoutes/{gateway_route_name}", gateway_route_name = input.gateway_route_name, mesh_name = input.mesh_name, virtual_gateway_name = input.virtual_gateway_name);
6644
6645        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
6646        request.set_content_type("application/x-amz-json-1.1".to_owned());
6647
6648        let mut params = Params::new();
6649        if let Some(ref x) = input.mesh_owner {
6650            params.put("meshOwner", x);
6651        }
6652        request.set_params(params);
6653
6654        let mut response = self
6655            .client
6656            .sign_and_dispatch(request)
6657            .await
6658            .map_err(RusotoError::from)?;
6659        if response.status.as_u16() == 200 {
6660            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6661            let result = proto::json::ResponsePayload::new(&response)
6662                .deserialize::<DescribeGatewayRouteOutput, _>()?;
6663
6664            Ok(result)
6665        } else {
6666            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6667            Err(DescribeGatewayRouteError::from_response(response))
6668        }
6669    }
6670
6671    /// <p>Describes an existing service mesh.</p>
6672    #[allow(unused_mut)]
6673    async fn describe_mesh(
6674        &self,
6675        input: DescribeMeshInput,
6676    ) -> Result<DescribeMeshOutput, RusotoError<DescribeMeshError>> {
6677        let request_uri = format!("/v20190125/meshes/{mesh_name}", mesh_name = input.mesh_name);
6678
6679        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
6680        request.set_content_type("application/x-amz-json-1.1".to_owned());
6681
6682        let mut params = Params::new();
6683        if let Some(ref x) = input.mesh_owner {
6684            params.put("meshOwner", x);
6685        }
6686        request.set_params(params);
6687
6688        let mut response = self
6689            .client
6690            .sign_and_dispatch(request)
6691            .await
6692            .map_err(RusotoError::from)?;
6693        if response.status.as_u16() == 200 {
6694            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6695            let result = proto::json::ResponsePayload::new(&response)
6696                .deserialize::<DescribeMeshOutput, _>()?;
6697
6698            Ok(result)
6699        } else {
6700            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6701            Err(DescribeMeshError::from_response(response))
6702        }
6703    }
6704
6705    /// <p>Describes an existing route.</p>
6706    #[allow(unused_mut)]
6707    async fn describe_route(
6708        &self,
6709        input: DescribeRouteInput,
6710    ) -> Result<DescribeRouteOutput, RusotoError<DescribeRouteError>> {
6711        let request_uri = format!(
6712            "/v20190125/meshes/{mesh_name}/virtualRouter/{virtual_router_name}/routes/{route_name}",
6713            mesh_name = input.mesh_name,
6714            route_name = input.route_name,
6715            virtual_router_name = input.virtual_router_name
6716        );
6717
6718        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
6719        request.set_content_type("application/x-amz-json-1.1".to_owned());
6720
6721        let mut params = Params::new();
6722        if let Some(ref x) = input.mesh_owner {
6723            params.put("meshOwner", x);
6724        }
6725        request.set_params(params);
6726
6727        let mut response = self
6728            .client
6729            .sign_and_dispatch(request)
6730            .await
6731            .map_err(RusotoError::from)?;
6732        if response.status.as_u16() == 200 {
6733            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6734            let result = proto::json::ResponsePayload::new(&response)
6735                .deserialize::<DescribeRouteOutput, _>()?;
6736
6737            Ok(result)
6738        } else {
6739            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6740            Err(DescribeRouteError::from_response(response))
6741        }
6742    }
6743
6744    /// <p>Describes an existing virtual gateway.</p>
6745    #[allow(unused_mut)]
6746    async fn describe_virtual_gateway(
6747        &self,
6748        input: DescribeVirtualGatewayInput,
6749    ) -> Result<DescribeVirtualGatewayOutput, RusotoError<DescribeVirtualGatewayError>> {
6750        let request_uri = format!(
6751            "/v20190125/meshes/{mesh_name}/virtualGateways/{virtual_gateway_name}",
6752            mesh_name = input.mesh_name,
6753            virtual_gateway_name = input.virtual_gateway_name
6754        );
6755
6756        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
6757        request.set_content_type("application/x-amz-json-1.1".to_owned());
6758
6759        let mut params = Params::new();
6760        if let Some(ref x) = input.mesh_owner {
6761            params.put("meshOwner", x);
6762        }
6763        request.set_params(params);
6764
6765        let mut response = self
6766            .client
6767            .sign_and_dispatch(request)
6768            .await
6769            .map_err(RusotoError::from)?;
6770        if response.status.as_u16() == 200 {
6771            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6772            let result = proto::json::ResponsePayload::new(&response)
6773                .deserialize::<DescribeVirtualGatewayOutput, _>()?;
6774
6775            Ok(result)
6776        } else {
6777            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6778            Err(DescribeVirtualGatewayError::from_response(response))
6779        }
6780    }
6781
6782    /// <p>Describes an existing virtual node.</p>
6783    #[allow(unused_mut)]
6784    async fn describe_virtual_node(
6785        &self,
6786        input: DescribeVirtualNodeInput,
6787    ) -> Result<DescribeVirtualNodeOutput, RusotoError<DescribeVirtualNodeError>> {
6788        let request_uri = format!(
6789            "/v20190125/meshes/{mesh_name}/virtualNodes/{virtual_node_name}",
6790            mesh_name = input.mesh_name,
6791            virtual_node_name = input.virtual_node_name
6792        );
6793
6794        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
6795        request.set_content_type("application/x-amz-json-1.1".to_owned());
6796
6797        let mut params = Params::new();
6798        if let Some(ref x) = input.mesh_owner {
6799            params.put("meshOwner", x);
6800        }
6801        request.set_params(params);
6802
6803        let mut response = self
6804            .client
6805            .sign_and_dispatch(request)
6806            .await
6807            .map_err(RusotoError::from)?;
6808        if response.status.as_u16() == 200 {
6809            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6810            let result = proto::json::ResponsePayload::new(&response)
6811                .deserialize::<DescribeVirtualNodeOutput, _>()?;
6812
6813            Ok(result)
6814        } else {
6815            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6816            Err(DescribeVirtualNodeError::from_response(response))
6817        }
6818    }
6819
6820    /// <p>Describes an existing virtual router.</p>
6821    #[allow(unused_mut)]
6822    async fn describe_virtual_router(
6823        &self,
6824        input: DescribeVirtualRouterInput,
6825    ) -> Result<DescribeVirtualRouterOutput, RusotoError<DescribeVirtualRouterError>> {
6826        let request_uri = format!(
6827            "/v20190125/meshes/{mesh_name}/virtualRouters/{virtual_router_name}",
6828            mesh_name = input.mesh_name,
6829            virtual_router_name = input.virtual_router_name
6830        );
6831
6832        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
6833        request.set_content_type("application/x-amz-json-1.1".to_owned());
6834
6835        let mut params = Params::new();
6836        if let Some(ref x) = input.mesh_owner {
6837            params.put("meshOwner", x);
6838        }
6839        request.set_params(params);
6840
6841        let mut response = self
6842            .client
6843            .sign_and_dispatch(request)
6844            .await
6845            .map_err(RusotoError::from)?;
6846        if response.status.as_u16() == 200 {
6847            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6848            let result = proto::json::ResponsePayload::new(&response)
6849                .deserialize::<DescribeVirtualRouterOutput, _>()?;
6850
6851            Ok(result)
6852        } else {
6853            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6854            Err(DescribeVirtualRouterError::from_response(response))
6855        }
6856    }
6857
6858    /// <p>Describes an existing virtual service.</p>
6859    #[allow(unused_mut)]
6860    async fn describe_virtual_service(
6861        &self,
6862        input: DescribeVirtualServiceInput,
6863    ) -> Result<DescribeVirtualServiceOutput, RusotoError<DescribeVirtualServiceError>> {
6864        let request_uri = format!(
6865            "/v20190125/meshes/{mesh_name}/virtualServices/{virtual_service_name}",
6866            mesh_name = input.mesh_name,
6867            virtual_service_name = input.virtual_service_name
6868        );
6869
6870        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
6871        request.set_content_type("application/x-amz-json-1.1".to_owned());
6872
6873        let mut params = Params::new();
6874        if let Some(ref x) = input.mesh_owner {
6875            params.put("meshOwner", x);
6876        }
6877        request.set_params(params);
6878
6879        let mut response = self
6880            .client
6881            .sign_and_dispatch(request)
6882            .await
6883            .map_err(RusotoError::from)?;
6884        if response.status.as_u16() == 200 {
6885            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6886            let result = proto::json::ResponsePayload::new(&response)
6887                .deserialize::<DescribeVirtualServiceOutput, _>()?;
6888
6889            Ok(result)
6890        } else {
6891            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6892            Err(DescribeVirtualServiceError::from_response(response))
6893        }
6894    }
6895
6896    /// <p>Returns a list of existing gateway routes that are associated to a virtual
6897    /// gateway.</p>
6898    #[allow(unused_mut)]
6899    async fn list_gateway_routes(
6900        &self,
6901        input: ListGatewayRoutesInput,
6902    ) -> Result<ListGatewayRoutesOutput, RusotoError<ListGatewayRoutesError>> {
6903        let request_uri = format!(
6904            "/v20190125/meshes/{mesh_name}/virtualGateway/{virtual_gateway_name}/gatewayRoutes",
6905            mesh_name = input.mesh_name,
6906            virtual_gateway_name = input.virtual_gateway_name
6907        );
6908
6909        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
6910        request.set_content_type("application/x-amz-json-1.1".to_owned());
6911
6912        let mut params = Params::new();
6913        if let Some(ref x) = input.limit {
6914            params.put("limit", x);
6915        }
6916        if let Some(ref x) = input.mesh_owner {
6917            params.put("meshOwner", x);
6918        }
6919        if let Some(ref x) = input.next_token {
6920            params.put("nextToken", x);
6921        }
6922        request.set_params(params);
6923
6924        let mut response = self
6925            .client
6926            .sign_and_dispatch(request)
6927            .await
6928            .map_err(RusotoError::from)?;
6929        if response.status.as_u16() == 200 {
6930            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6931            let result = proto::json::ResponsePayload::new(&response)
6932                .deserialize::<ListGatewayRoutesOutput, _>()?;
6933
6934            Ok(result)
6935        } else {
6936            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6937            Err(ListGatewayRoutesError::from_response(response))
6938        }
6939    }
6940
6941    /// <p>Returns a list of existing service meshes.</p>
6942    #[allow(unused_mut)]
6943    async fn list_meshes(
6944        &self,
6945        input: ListMeshesInput,
6946    ) -> Result<ListMeshesOutput, RusotoError<ListMeshesError>> {
6947        let request_uri = "/v20190125/meshes";
6948
6949        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
6950        request.set_content_type("application/x-amz-json-1.1".to_owned());
6951
6952        let mut params = Params::new();
6953        if let Some(ref x) = input.limit {
6954            params.put("limit", x);
6955        }
6956        if let Some(ref x) = input.next_token {
6957            params.put("nextToken", x);
6958        }
6959        request.set_params(params);
6960
6961        let mut response = self
6962            .client
6963            .sign_and_dispatch(request)
6964            .await
6965            .map_err(RusotoError::from)?;
6966        if response.status.as_u16() == 200 {
6967            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6968            let result = proto::json::ResponsePayload::new(&response)
6969                .deserialize::<ListMeshesOutput, _>()?;
6970
6971            Ok(result)
6972        } else {
6973            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
6974            Err(ListMeshesError::from_response(response))
6975        }
6976    }
6977
6978    /// <p>Returns a list of existing routes in a service mesh.</p>
6979    #[allow(unused_mut)]
6980    async fn list_routes(
6981        &self,
6982        input: ListRoutesInput,
6983    ) -> Result<ListRoutesOutput, RusotoError<ListRoutesError>> {
6984        let request_uri = format!(
6985            "/v20190125/meshes/{mesh_name}/virtualRouter/{virtual_router_name}/routes",
6986            mesh_name = input.mesh_name,
6987            virtual_router_name = input.virtual_router_name
6988        );
6989
6990        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
6991        request.set_content_type("application/x-amz-json-1.1".to_owned());
6992
6993        let mut params = Params::new();
6994        if let Some(ref x) = input.limit {
6995            params.put("limit", x);
6996        }
6997        if let Some(ref x) = input.mesh_owner {
6998            params.put("meshOwner", x);
6999        }
7000        if let Some(ref x) = input.next_token {
7001            params.put("nextToken", x);
7002        }
7003        request.set_params(params);
7004
7005        let mut response = self
7006            .client
7007            .sign_and_dispatch(request)
7008            .await
7009            .map_err(RusotoError::from)?;
7010        if response.status.as_u16() == 200 {
7011            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7012            let result = proto::json::ResponsePayload::new(&response)
7013                .deserialize::<ListRoutesOutput, _>()?;
7014
7015            Ok(result)
7016        } else {
7017            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7018            Err(ListRoutesError::from_response(response))
7019        }
7020    }
7021
7022    /// <p>List the tags for an App Mesh resource.</p>
7023    #[allow(unused_mut)]
7024    async fn list_tags_for_resource(
7025        &self,
7026        input: ListTagsForResourceInput,
7027    ) -> Result<ListTagsForResourceOutput, RusotoError<ListTagsForResourceError>> {
7028        let request_uri = "/v20190125/tags";
7029
7030        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
7031        request.set_content_type("application/x-amz-json-1.1".to_owned());
7032
7033        let mut params = Params::new();
7034        if let Some(ref x) = input.limit {
7035            params.put("limit", x);
7036        }
7037        if let Some(ref x) = input.next_token {
7038            params.put("nextToken", x);
7039        }
7040        params.put("resourceArn", &input.resource_arn);
7041        request.set_params(params);
7042
7043        let mut response = self
7044            .client
7045            .sign_and_dispatch(request)
7046            .await
7047            .map_err(RusotoError::from)?;
7048        if response.status.as_u16() == 200 {
7049            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7050            let result = proto::json::ResponsePayload::new(&response)
7051                .deserialize::<ListTagsForResourceOutput, _>()?;
7052
7053            Ok(result)
7054        } else {
7055            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7056            Err(ListTagsForResourceError::from_response(response))
7057        }
7058    }
7059
7060    /// <p>Returns a list of existing virtual gateways in a service mesh.</p>
7061    #[allow(unused_mut)]
7062    async fn list_virtual_gateways(
7063        &self,
7064        input: ListVirtualGatewaysInput,
7065    ) -> Result<ListVirtualGatewaysOutput, RusotoError<ListVirtualGatewaysError>> {
7066        let request_uri = format!(
7067            "/v20190125/meshes/{mesh_name}/virtualGateways",
7068            mesh_name = input.mesh_name
7069        );
7070
7071        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
7072        request.set_content_type("application/x-amz-json-1.1".to_owned());
7073
7074        let mut params = Params::new();
7075        if let Some(ref x) = input.limit {
7076            params.put("limit", x);
7077        }
7078        if let Some(ref x) = input.mesh_owner {
7079            params.put("meshOwner", x);
7080        }
7081        if let Some(ref x) = input.next_token {
7082            params.put("nextToken", x);
7083        }
7084        request.set_params(params);
7085
7086        let mut response = self
7087            .client
7088            .sign_and_dispatch(request)
7089            .await
7090            .map_err(RusotoError::from)?;
7091        if response.status.as_u16() == 200 {
7092            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7093            let result = proto::json::ResponsePayload::new(&response)
7094                .deserialize::<ListVirtualGatewaysOutput, _>()?;
7095
7096            Ok(result)
7097        } else {
7098            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7099            Err(ListVirtualGatewaysError::from_response(response))
7100        }
7101    }
7102
7103    /// <p>Returns a list of existing virtual nodes.</p>
7104    #[allow(unused_mut)]
7105    async fn list_virtual_nodes(
7106        &self,
7107        input: ListVirtualNodesInput,
7108    ) -> Result<ListVirtualNodesOutput, RusotoError<ListVirtualNodesError>> {
7109        let request_uri = format!(
7110            "/v20190125/meshes/{mesh_name}/virtualNodes",
7111            mesh_name = input.mesh_name
7112        );
7113
7114        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
7115        request.set_content_type("application/x-amz-json-1.1".to_owned());
7116
7117        let mut params = Params::new();
7118        if let Some(ref x) = input.limit {
7119            params.put("limit", x);
7120        }
7121        if let Some(ref x) = input.mesh_owner {
7122            params.put("meshOwner", x);
7123        }
7124        if let Some(ref x) = input.next_token {
7125            params.put("nextToken", x);
7126        }
7127        request.set_params(params);
7128
7129        let mut response = self
7130            .client
7131            .sign_and_dispatch(request)
7132            .await
7133            .map_err(RusotoError::from)?;
7134        if response.status.as_u16() == 200 {
7135            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7136            let result = proto::json::ResponsePayload::new(&response)
7137                .deserialize::<ListVirtualNodesOutput, _>()?;
7138
7139            Ok(result)
7140        } else {
7141            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7142            Err(ListVirtualNodesError::from_response(response))
7143        }
7144    }
7145
7146    /// <p>Returns a list of existing virtual routers in a service mesh.</p>
7147    #[allow(unused_mut)]
7148    async fn list_virtual_routers(
7149        &self,
7150        input: ListVirtualRoutersInput,
7151    ) -> Result<ListVirtualRoutersOutput, RusotoError<ListVirtualRoutersError>> {
7152        let request_uri = format!(
7153            "/v20190125/meshes/{mesh_name}/virtualRouters",
7154            mesh_name = input.mesh_name
7155        );
7156
7157        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
7158        request.set_content_type("application/x-amz-json-1.1".to_owned());
7159
7160        let mut params = Params::new();
7161        if let Some(ref x) = input.limit {
7162            params.put("limit", x);
7163        }
7164        if let Some(ref x) = input.mesh_owner {
7165            params.put("meshOwner", x);
7166        }
7167        if let Some(ref x) = input.next_token {
7168            params.put("nextToken", x);
7169        }
7170        request.set_params(params);
7171
7172        let mut response = self
7173            .client
7174            .sign_and_dispatch(request)
7175            .await
7176            .map_err(RusotoError::from)?;
7177        if response.status.as_u16() == 200 {
7178            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7179            let result = proto::json::ResponsePayload::new(&response)
7180                .deserialize::<ListVirtualRoutersOutput, _>()?;
7181
7182            Ok(result)
7183        } else {
7184            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7185            Err(ListVirtualRoutersError::from_response(response))
7186        }
7187    }
7188
7189    /// <p>Returns a list of existing virtual services in a service mesh.</p>
7190    #[allow(unused_mut)]
7191    async fn list_virtual_services(
7192        &self,
7193        input: ListVirtualServicesInput,
7194    ) -> Result<ListVirtualServicesOutput, RusotoError<ListVirtualServicesError>> {
7195        let request_uri = format!(
7196            "/v20190125/meshes/{mesh_name}/virtualServices",
7197            mesh_name = input.mesh_name
7198        );
7199
7200        let mut request = SignedRequest::new("GET", "appmesh", &self.region, &request_uri);
7201        request.set_content_type("application/x-amz-json-1.1".to_owned());
7202
7203        let mut params = Params::new();
7204        if let Some(ref x) = input.limit {
7205            params.put("limit", x);
7206        }
7207        if let Some(ref x) = input.mesh_owner {
7208            params.put("meshOwner", x);
7209        }
7210        if let Some(ref x) = input.next_token {
7211            params.put("nextToken", x);
7212        }
7213        request.set_params(params);
7214
7215        let mut response = self
7216            .client
7217            .sign_and_dispatch(request)
7218            .await
7219            .map_err(RusotoError::from)?;
7220        if response.status.as_u16() == 200 {
7221            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7222            let result = proto::json::ResponsePayload::new(&response)
7223                .deserialize::<ListVirtualServicesOutput, _>()?;
7224
7225            Ok(result)
7226        } else {
7227            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7228            Err(ListVirtualServicesError::from_response(response))
7229        }
7230    }
7231
7232    /// <p>Associates the specified tags to a resource with the specified <code>resourceArn</code>.
7233    /// If existing tags on a resource aren't specified in the request parameters, they aren't
7234    /// changed. When a resource is deleted, the tags associated with that resource are also
7235    /// deleted.</p>
7236    #[allow(unused_mut)]
7237    async fn tag_resource(
7238        &self,
7239        input: TagResourceInput,
7240    ) -> Result<TagResourceOutput, RusotoError<TagResourceError>> {
7241        let request_uri = "/v20190125/tag";
7242
7243        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
7244        request.set_content_type("application/x-amz-json-1.1".to_owned());
7245
7246        let encoded = Some(serde_json::to_vec(&input).unwrap());
7247        request.set_payload(encoded);
7248
7249        let mut params = Params::new();
7250        params.put("resourceArn", &input.resource_arn);
7251        request.set_params(params);
7252
7253        let mut response = self
7254            .client
7255            .sign_and_dispatch(request)
7256            .await
7257            .map_err(RusotoError::from)?;
7258        if response.status.as_u16() == 200 {
7259            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7260            let result = proto::json::ResponsePayload::new(&response)
7261                .deserialize::<TagResourceOutput, _>()?;
7262
7263            Ok(result)
7264        } else {
7265            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7266            Err(TagResourceError::from_response(response))
7267        }
7268    }
7269
7270    /// <p>Deletes specified tags from a resource.</p>
7271    #[allow(unused_mut)]
7272    async fn untag_resource(
7273        &self,
7274        input: UntagResourceInput,
7275    ) -> Result<UntagResourceOutput, RusotoError<UntagResourceError>> {
7276        let request_uri = "/v20190125/untag";
7277
7278        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
7279        request.set_content_type("application/x-amz-json-1.1".to_owned());
7280
7281        let encoded = Some(serde_json::to_vec(&input).unwrap());
7282        request.set_payload(encoded);
7283
7284        let mut params = Params::new();
7285        params.put("resourceArn", &input.resource_arn);
7286        request.set_params(params);
7287
7288        let mut response = self
7289            .client
7290            .sign_and_dispatch(request)
7291            .await
7292            .map_err(RusotoError::from)?;
7293        if response.status.as_u16() == 200 {
7294            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7295            let result = proto::json::ResponsePayload::new(&response)
7296                .deserialize::<UntagResourceOutput, _>()?;
7297
7298            Ok(result)
7299        } else {
7300            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7301            Err(UntagResourceError::from_response(response))
7302        }
7303    }
7304
7305    /// <p>Updates an existing gateway route that is associated to a specified virtual gateway in a
7306    /// service mesh.</p>
7307    #[allow(unused_mut)]
7308    async fn update_gateway_route(
7309        &self,
7310        input: UpdateGatewayRouteInput,
7311    ) -> Result<UpdateGatewayRouteOutput, RusotoError<UpdateGatewayRouteError>> {
7312        let request_uri = format!("/v20190125/meshes/{mesh_name}/virtualGateway/{virtual_gateway_name}/gatewayRoutes/{gateway_route_name}", gateway_route_name = input.gateway_route_name, mesh_name = input.mesh_name, virtual_gateway_name = input.virtual_gateway_name);
7313
7314        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
7315        request.set_content_type("application/x-amz-json-1.1".to_owned());
7316
7317        let encoded = Some(serde_json::to_vec(&input).unwrap());
7318        request.set_payload(encoded);
7319
7320        let mut params = Params::new();
7321        if let Some(ref x) = input.mesh_owner {
7322            params.put("meshOwner", x);
7323        }
7324        request.set_params(params);
7325
7326        let mut response = self
7327            .client
7328            .sign_and_dispatch(request)
7329            .await
7330            .map_err(RusotoError::from)?;
7331        if response.status.as_u16() == 200 {
7332            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7333            let result = proto::json::ResponsePayload::new(&response)
7334                .deserialize::<UpdateGatewayRouteOutput, _>()?;
7335
7336            Ok(result)
7337        } else {
7338            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7339            Err(UpdateGatewayRouteError::from_response(response))
7340        }
7341    }
7342
7343    /// <p>Updates an existing service mesh.</p>
7344    #[allow(unused_mut)]
7345    async fn update_mesh(
7346        &self,
7347        input: UpdateMeshInput,
7348    ) -> Result<UpdateMeshOutput, RusotoError<UpdateMeshError>> {
7349        let request_uri = format!("/v20190125/meshes/{mesh_name}", mesh_name = input.mesh_name);
7350
7351        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
7352        request.set_content_type("application/x-amz-json-1.1".to_owned());
7353
7354        let encoded = Some(serde_json::to_vec(&input).unwrap());
7355        request.set_payload(encoded);
7356
7357        let mut response = self
7358            .client
7359            .sign_and_dispatch(request)
7360            .await
7361            .map_err(RusotoError::from)?;
7362        if response.status.as_u16() == 200 {
7363            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7364            let result = proto::json::ResponsePayload::new(&response)
7365                .deserialize::<UpdateMeshOutput, _>()?;
7366
7367            Ok(result)
7368        } else {
7369            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7370            Err(UpdateMeshError::from_response(response))
7371        }
7372    }
7373
7374    /// <p>Updates an existing route for a specified service mesh and virtual router.</p>
7375    #[allow(unused_mut)]
7376    async fn update_route(
7377        &self,
7378        input: UpdateRouteInput,
7379    ) -> Result<UpdateRouteOutput, RusotoError<UpdateRouteError>> {
7380        let request_uri = format!(
7381            "/v20190125/meshes/{mesh_name}/virtualRouter/{virtual_router_name}/routes/{route_name}",
7382            mesh_name = input.mesh_name,
7383            route_name = input.route_name,
7384            virtual_router_name = input.virtual_router_name
7385        );
7386
7387        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
7388        request.set_content_type("application/x-amz-json-1.1".to_owned());
7389
7390        let encoded = Some(serde_json::to_vec(&input).unwrap());
7391        request.set_payload(encoded);
7392
7393        let mut params = Params::new();
7394        if let Some(ref x) = input.mesh_owner {
7395            params.put("meshOwner", x);
7396        }
7397        request.set_params(params);
7398
7399        let mut response = self
7400            .client
7401            .sign_and_dispatch(request)
7402            .await
7403            .map_err(RusotoError::from)?;
7404        if response.status.as_u16() == 200 {
7405            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7406            let result = proto::json::ResponsePayload::new(&response)
7407                .deserialize::<UpdateRouteOutput, _>()?;
7408
7409            Ok(result)
7410        } else {
7411            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7412            Err(UpdateRouteError::from_response(response))
7413        }
7414    }
7415
7416    /// <p>Updates an existing virtual gateway in a specified service mesh.</p>
7417    #[allow(unused_mut)]
7418    async fn update_virtual_gateway(
7419        &self,
7420        input: UpdateVirtualGatewayInput,
7421    ) -> Result<UpdateVirtualGatewayOutput, RusotoError<UpdateVirtualGatewayError>> {
7422        let request_uri = format!(
7423            "/v20190125/meshes/{mesh_name}/virtualGateways/{virtual_gateway_name}",
7424            mesh_name = input.mesh_name,
7425            virtual_gateway_name = input.virtual_gateway_name
7426        );
7427
7428        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
7429        request.set_content_type("application/x-amz-json-1.1".to_owned());
7430
7431        let encoded = Some(serde_json::to_vec(&input).unwrap());
7432        request.set_payload(encoded);
7433
7434        let mut params = Params::new();
7435        if let Some(ref x) = input.mesh_owner {
7436            params.put("meshOwner", x);
7437        }
7438        request.set_params(params);
7439
7440        let mut response = self
7441            .client
7442            .sign_and_dispatch(request)
7443            .await
7444            .map_err(RusotoError::from)?;
7445        if response.status.as_u16() == 200 {
7446            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7447            let result = proto::json::ResponsePayload::new(&response)
7448                .deserialize::<UpdateVirtualGatewayOutput, _>()?;
7449
7450            Ok(result)
7451        } else {
7452            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7453            Err(UpdateVirtualGatewayError::from_response(response))
7454        }
7455    }
7456
7457    /// <p>Updates an existing virtual node in a specified service mesh.</p>
7458    #[allow(unused_mut)]
7459    async fn update_virtual_node(
7460        &self,
7461        input: UpdateVirtualNodeInput,
7462    ) -> Result<UpdateVirtualNodeOutput, RusotoError<UpdateVirtualNodeError>> {
7463        let request_uri = format!(
7464            "/v20190125/meshes/{mesh_name}/virtualNodes/{virtual_node_name}",
7465            mesh_name = input.mesh_name,
7466            virtual_node_name = input.virtual_node_name
7467        );
7468
7469        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
7470        request.set_content_type("application/x-amz-json-1.1".to_owned());
7471
7472        let encoded = Some(serde_json::to_vec(&input).unwrap());
7473        request.set_payload(encoded);
7474
7475        let mut params = Params::new();
7476        if let Some(ref x) = input.mesh_owner {
7477            params.put("meshOwner", x);
7478        }
7479        request.set_params(params);
7480
7481        let mut response = self
7482            .client
7483            .sign_and_dispatch(request)
7484            .await
7485            .map_err(RusotoError::from)?;
7486        if response.status.as_u16() == 200 {
7487            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7488            let result = proto::json::ResponsePayload::new(&response)
7489                .deserialize::<UpdateVirtualNodeOutput, _>()?;
7490
7491            Ok(result)
7492        } else {
7493            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7494            Err(UpdateVirtualNodeError::from_response(response))
7495        }
7496    }
7497
7498    /// <p>Updates an existing virtual router in a specified service mesh.</p>
7499    #[allow(unused_mut)]
7500    async fn update_virtual_router(
7501        &self,
7502        input: UpdateVirtualRouterInput,
7503    ) -> Result<UpdateVirtualRouterOutput, RusotoError<UpdateVirtualRouterError>> {
7504        let request_uri = format!(
7505            "/v20190125/meshes/{mesh_name}/virtualRouters/{virtual_router_name}",
7506            mesh_name = input.mesh_name,
7507            virtual_router_name = input.virtual_router_name
7508        );
7509
7510        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
7511        request.set_content_type("application/x-amz-json-1.1".to_owned());
7512
7513        let encoded = Some(serde_json::to_vec(&input).unwrap());
7514        request.set_payload(encoded);
7515
7516        let mut params = Params::new();
7517        if let Some(ref x) = input.mesh_owner {
7518            params.put("meshOwner", x);
7519        }
7520        request.set_params(params);
7521
7522        let mut response = self
7523            .client
7524            .sign_and_dispatch(request)
7525            .await
7526            .map_err(RusotoError::from)?;
7527        if response.status.as_u16() == 200 {
7528            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7529            let result = proto::json::ResponsePayload::new(&response)
7530                .deserialize::<UpdateVirtualRouterOutput, _>()?;
7531
7532            Ok(result)
7533        } else {
7534            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7535            Err(UpdateVirtualRouterError::from_response(response))
7536        }
7537    }
7538
7539    /// <p>Updates an existing virtual service in a specified service mesh.</p>
7540    #[allow(unused_mut)]
7541    async fn update_virtual_service(
7542        &self,
7543        input: UpdateVirtualServiceInput,
7544    ) -> Result<UpdateVirtualServiceOutput, RusotoError<UpdateVirtualServiceError>> {
7545        let request_uri = format!(
7546            "/v20190125/meshes/{mesh_name}/virtualServices/{virtual_service_name}",
7547            mesh_name = input.mesh_name,
7548            virtual_service_name = input.virtual_service_name
7549        );
7550
7551        let mut request = SignedRequest::new("PUT", "appmesh", &self.region, &request_uri);
7552        request.set_content_type("application/x-amz-json-1.1".to_owned());
7553
7554        let encoded = Some(serde_json::to_vec(&input).unwrap());
7555        request.set_payload(encoded);
7556
7557        let mut params = Params::new();
7558        if let Some(ref x) = input.mesh_owner {
7559            params.put("meshOwner", x);
7560        }
7561        request.set_params(params);
7562
7563        let mut response = self
7564            .client
7565            .sign_and_dispatch(request)
7566            .await
7567            .map_err(RusotoError::from)?;
7568        if response.status.as_u16() == 200 {
7569            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7570            let result = proto::json::ResponsePayload::new(&response)
7571                .deserialize::<UpdateVirtualServiceOutput, _>()?;
7572
7573            Ok(result)
7574        } else {
7575            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
7576            Err(UpdateVirtualServiceError::from_response(response))
7577        }
7578    }
7579}